// 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  S1537C5_nt  {
  int s1537c5f0[2];
  void  mf1537c5(); // _ZN10S1537C5_nt8mf1537c5Ev
};
//SIG(-1 S1537C5_nt) C1{ m Fi[2]}


void  S1537C5_nt ::mf1537c5(){}

//skip512 S1537C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1537C4_nt  {
  int s1537c4f0;
  __tsi64 s1537c4f1;
  void *s1537c4f2[4];
  int s1537c4f3[2];
  void *s1537c4f4;
  ::S1537C5_nt s1537c4f5;
  void *s1537c4f6[2];
  virtual  ~S1537C4_nt(); // _ZN10S1537C4_ntD1Ev
  virtual void  v7(); // _ZN10S1537C4_nt2v7Ev
  virtual void  v8(); // _ZN10S1537C4_nt2v8Ev
  virtual void  v9(); // _ZN10S1537C4_nt2v9Ev
  virtual void  v10(); // _ZN10S1537C4_nt3v10Ev
  virtual void  v11(); // _ZN10S1537C4_nt3v11Ev
  virtual void  v12(); // _ZN10S1537C4_nt3v12Ev
  virtual void  v13(); // _ZN10S1537C4_nt3v13Ev
  virtual void  v14(); // _ZN10S1537C4_nt3v14Ev
  virtual void  v15(); // _ZN10S1537C4_nt3v15Ev
  virtual void  v16(); // _ZN10S1537C4_nt3v16Ev
  virtual void  v17(); // _ZN10S1537C4_nt3v17Ev
  virtual void  v18(); // _ZN10S1537C4_nt3v18Ev
  virtual void  v19(); // _ZN10S1537C4_nt3v19Ev
  virtual void  v20(); // _ZN10S1537C4_nt3v20Ev
  virtual void  v21(); // _ZN10S1537C4_nt3v21Ev
  virtual void  v22(); // _ZN10S1537C4_nt3v22Ev
  virtual void  v23(); // _ZN10S1537C4_nt3v23Ev
  virtual void  v24(); // _ZN10S1537C4_nt3v24Ev
  virtual void  v25(); // _ZN10S1537C4_nt3v25Ev
  virtual void  v26(); // _ZN10S1537C4_nt3v26Ev
  virtual void  v27(); // _ZN10S1537C4_nt3v27Ev
  virtual void  v28(); // _ZN10S1537C4_nt3v28Ev
  virtual void  v29(); // _ZN10S1537C4_nt3v29Ev
  virtual void  v30(); // _ZN10S1537C4_nt3v30Ev
  virtual void  v31(); // _ZN10S1537C4_nt3v31Ev
  virtual void  v32(); // _ZN10S1537C4_nt3v32Ev
  virtual void  v33(); // _ZN10S1537C4_nt3v33Ev
  virtual void  v34(); // _ZN10S1537C4_nt3v34Ev
  virtual void  v35(); // _ZN10S1537C4_nt3v35Ev
  virtual void  v36(); // _ZN10S1537C4_nt3v36Ev
  virtual void  v37(); // _ZN10S1537C4_nt3v37Ev
  virtual void  v38(); // _ZN10S1537C4_nt3v38Ev
  virtual void  v39(); // _ZN10S1537C4_nt3v39Ev
  virtual void  v40(); // _ZN10S1537C4_nt3v40Ev
  virtual void  v41(); // _ZN10S1537C4_nt3v41Ev
  virtual void  v42(); // _ZN10S1537C4_nt3v42Ev
  virtual void  v43(); // _ZN10S1537C4_nt3v43Ev
  virtual void  v44(); // _ZN10S1537C4_nt3v44Ev
  virtual void  v45(); // _ZN10S1537C4_nt3v45Ev
  virtual void  v46(); // _ZN10S1537C4_nt3v46Ev
  virtual void  v47(); // _ZN10S1537C4_nt3v47Ev
  virtual void  v48(); // _ZN10S1537C4_nt3v48Ev
  virtual void  v49(); // _ZN10S1537C4_nt3v49Ev
  virtual void  v50(); // _ZN10S1537C4_nt3v50Ev
  virtual void  v51(); // _ZN10S1537C4_nt3v51Ev
  virtual void  v52(); // _ZN10S1537C4_nt3v52Ev
  virtual void  v53(); // _ZN10S1537C4_nt3v53Ev
  virtual void  v54(); // _ZN10S1537C4_nt3v54Ev
  virtual void  v55(); // _ZN10S1537C4_nt3v55Ev
  virtual void  v56(); // _ZN10S1537C4_nt3v56Ev
  virtual void  v57(); // _ZN10S1537C4_nt3v57Ev
  virtual void  v58(); // _ZN10S1537C4_nt3v58Ev
  virtual void  v59(); // _ZN10S1537C4_nt3v59Ev
  virtual void  v60(); // _ZN10S1537C4_nt3v60Ev
  virtual void  v61(); // _ZN10S1537C4_nt3v61Ev
  virtual void  v62(); // _ZN10S1537C4_nt3v62Ev
  virtual void  v63(); // _ZN10S1537C4_nt3v63Ev
  virtual void  v64(); // _ZN10S1537C4_nt3v64Ev
  virtual void  v65(); // _ZN10S1537C4_nt3v65Ev
  virtual void  v66(); // _ZN10S1537C4_nt3v66Ev
  virtual void  v67(); // _ZN10S1537C4_nt3v67Ev
  virtual void  v68(); // _ZN10S1537C4_nt3v68Ev
  virtual void  v69(); // _ZN10S1537C4_nt3v69Ev
  virtual void  v70(); // _ZN10S1537C4_nt3v70Ev
  S1537C4_nt(); // tgen
};
//SIG(-1 S1537C4_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]}


 S1537C4_nt ::~S1537C4_nt(){ note_dtor("S1537C4_nt", this);}
void  S1537C4_nt ::v7(){vfunc_called(this, "_ZN10S1537C4_nt2v7Ev");}
void  S1537C4_nt ::v8(){vfunc_called(this, "_ZN10S1537C4_nt2v8Ev");}
void  S1537C4_nt ::v9(){vfunc_called(this, "_ZN10S1537C4_nt2v9Ev");}
void  S1537C4_nt ::v10(){vfunc_called(this, "_ZN10S1537C4_nt3v10Ev");}
void  S1537C4_nt ::v11(){vfunc_called(this, "_ZN10S1537C4_nt3v11Ev");}
void  S1537C4_nt ::v12(){vfunc_called(this, "_ZN10S1537C4_nt3v12Ev");}
void  S1537C4_nt ::v13(){vfunc_called(this, "_ZN10S1537C4_nt3v13Ev");}
void  S1537C4_nt ::v14(){vfunc_called(this, "_ZN10S1537C4_nt3v14Ev");}
void  S1537C4_nt ::v15(){vfunc_called(this, "_ZN10S1537C4_nt3v15Ev");}
void  S1537C4_nt ::v16(){vfunc_called(this, "_ZN10S1537C4_nt3v16Ev");}
void  S1537C4_nt ::v17(){vfunc_called(this, "_ZN10S1537C4_nt3v17Ev");}
void  S1537C4_nt ::v18(){vfunc_called(this, "_ZN10S1537C4_nt3v18Ev");}
void  S1537C4_nt ::v19(){vfunc_called(this, "_ZN10S1537C4_nt3v19Ev");}
void  S1537C4_nt ::v20(){vfunc_called(this, "_ZN10S1537C4_nt3v20Ev");}
void  S1537C4_nt ::v21(){vfunc_called(this, "_ZN10S1537C4_nt3v21Ev");}
void  S1537C4_nt ::v22(){vfunc_called(this, "_ZN10S1537C4_nt3v22Ev");}
void  S1537C4_nt ::v23(){vfunc_called(this, "_ZN10S1537C4_nt3v23Ev");}
void  S1537C4_nt ::v24(){vfunc_called(this, "_ZN10S1537C4_nt3v24Ev");}
void  S1537C4_nt ::v25(){vfunc_called(this, "_ZN10S1537C4_nt3v25Ev");}
void  S1537C4_nt ::v26(){vfunc_called(this, "_ZN10S1537C4_nt3v26Ev");}
void  S1537C4_nt ::v27(){vfunc_called(this, "_ZN10S1537C4_nt3v27Ev");}
void  S1537C4_nt ::v28(){vfunc_called(this, "_ZN10S1537C4_nt3v28Ev");}
void  S1537C4_nt ::v29(){vfunc_called(this, "_ZN10S1537C4_nt3v29Ev");}
void  S1537C4_nt ::v30(){vfunc_called(this, "_ZN10S1537C4_nt3v30Ev");}
void  S1537C4_nt ::v31(){vfunc_called(this, "_ZN10S1537C4_nt3v31Ev");}
void  S1537C4_nt ::v32(){vfunc_called(this, "_ZN10S1537C4_nt3v32Ev");}
void  S1537C4_nt ::v33(){vfunc_called(this, "_ZN10S1537C4_nt3v33Ev");}
void  S1537C4_nt ::v34(){vfunc_called(this, "_ZN10S1537C4_nt3v34Ev");}
void  S1537C4_nt ::v35(){vfunc_called(this, "_ZN10S1537C4_nt3v35Ev");}
void  S1537C4_nt ::v36(){vfunc_called(this, "_ZN10S1537C4_nt3v36Ev");}
void  S1537C4_nt ::v37(){vfunc_called(this, "_ZN10S1537C4_nt3v37Ev");}
void  S1537C4_nt ::v38(){vfunc_called(this, "_ZN10S1537C4_nt3v38Ev");}
void  S1537C4_nt ::v39(){vfunc_called(this, "_ZN10S1537C4_nt3v39Ev");}
void  S1537C4_nt ::v40(){vfunc_called(this, "_ZN10S1537C4_nt3v40Ev");}
void  S1537C4_nt ::v41(){vfunc_called(this, "_ZN10S1537C4_nt3v41Ev");}
void  S1537C4_nt ::v42(){vfunc_called(this, "_ZN10S1537C4_nt3v42Ev");}
void  S1537C4_nt ::v43(){vfunc_called(this, "_ZN10S1537C4_nt3v43Ev");}
void  S1537C4_nt ::v44(){vfunc_called(this, "_ZN10S1537C4_nt3v44Ev");}
void  S1537C4_nt ::v45(){vfunc_called(this, "_ZN10S1537C4_nt3v45Ev");}
void  S1537C4_nt ::v46(){vfunc_called(this, "_ZN10S1537C4_nt3v46Ev");}
void  S1537C4_nt ::v47(){vfunc_called(this, "_ZN10S1537C4_nt3v47Ev");}
void  S1537C4_nt ::v48(){vfunc_called(this, "_ZN10S1537C4_nt3v48Ev");}
void  S1537C4_nt ::v49(){vfunc_called(this, "_ZN10S1537C4_nt3v49Ev");}
void  S1537C4_nt ::v50(){vfunc_called(this, "_ZN10S1537C4_nt3v50Ev");}
void  S1537C4_nt ::v51(){vfunc_called(this, "_ZN10S1537C4_nt3v51Ev");}
void  S1537C4_nt ::v52(){vfunc_called(this, "_ZN10S1537C4_nt3v52Ev");}
void  S1537C4_nt ::v53(){vfunc_called(this, "_ZN10S1537C4_nt3v53Ev");}
void  S1537C4_nt ::v54(){vfunc_called(this, "_ZN10S1537C4_nt3v54Ev");}
void  S1537C4_nt ::v55(){vfunc_called(this, "_ZN10S1537C4_nt3v55Ev");}
void  S1537C4_nt ::v56(){vfunc_called(this, "_ZN10S1537C4_nt3v56Ev");}
void  S1537C4_nt ::v57(){vfunc_called(this, "_ZN10S1537C4_nt3v57Ev");}
void  S1537C4_nt ::v58(){vfunc_called(this, "_ZN10S1537C4_nt3v58Ev");}
void  S1537C4_nt ::v59(){vfunc_called(this, "_ZN10S1537C4_nt3v59Ev");}
void  S1537C4_nt ::v60(){vfunc_called(this, "_ZN10S1537C4_nt3v60Ev");}
void  S1537C4_nt ::v61(){vfunc_called(this, "_ZN10S1537C4_nt3v61Ev");}
void  S1537C4_nt ::v62(){vfunc_called(this, "_ZN10S1537C4_nt3v62Ev");}
void  S1537C4_nt ::v63(){vfunc_called(this, "_ZN10S1537C4_nt3v63Ev");}
void  S1537C4_nt ::v64(){vfunc_called(this, "_ZN10S1537C4_nt3v64Ev");}
void  S1537C4_nt ::v65(){vfunc_called(this, "_ZN10S1537C4_nt3v65Ev");}
void  S1537C4_nt ::v66(){vfunc_called(this, "_ZN10S1537C4_nt3v66Ev");}
void  S1537C4_nt ::v67(){vfunc_called(this, "_ZN10S1537C4_nt3v67Ev");}
void  S1537C4_nt ::v68(){vfunc_called(this, "_ZN10S1537C4_nt3v68Ev");}
void  S1537C4_nt ::v69(){vfunc_called(this, "_ZN10S1537C4_nt3v69Ev");}
void  S1537C4_nt ::v70(){vfunc_called(this, "_ZN10S1537C4_nt3v70Ev");}
S1537C4_nt ::S1537C4_nt(){ note_ctor("S1537C4_nt", this);} // tgen

//skip512 S1537C4_nt

#else // __cplusplus

extern void _ZN10S1537C4_ntC1Ev();
extern void _ZN10S1537C4_ntD1Ev();
Name_Map name_map_S1537C4_nt[] = {
  NSPAIR(_ZN10S1537C4_ntC1Ev),
  NSPAIR(_ZN10S1537C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1537C4_nt[];
extern void _ZN10S1537C4_ntD1Ev();
extern void _ZN10S1537C4_ntD0Ev();
extern void _ZN10S1537C4_nt2v7Ev();
extern void _ZN10S1537C4_nt2v8Ev();
extern void _ZN10S1537C4_nt2v9Ev();
extern void _ZN10S1537C4_nt3v10Ev();
extern void _ZN10S1537C4_nt3v11Ev();
extern void _ZN10S1537C4_nt3v12Ev();
extern void _ZN10S1537C4_nt3v13Ev();
extern void _ZN10S1537C4_nt3v14Ev();
extern void _ZN10S1537C4_nt3v15Ev();
extern void _ZN10S1537C4_nt3v16Ev();
extern void _ZN10S1537C4_nt3v17Ev();
extern void _ZN10S1537C4_nt3v18Ev();
extern void _ZN10S1537C4_nt3v19Ev();
extern void _ZN10S1537C4_nt3v20Ev();
extern void _ZN10S1537C4_nt3v21Ev();
extern void _ZN10S1537C4_nt3v22Ev();
extern void _ZN10S1537C4_nt3v23Ev();
extern void _ZN10S1537C4_nt3v24Ev();
extern void _ZN10S1537C4_nt3v25Ev();
extern void _ZN10S1537C4_nt3v26Ev();
extern void _ZN10S1537C4_nt3v27Ev();
extern void _ZN10S1537C4_nt3v28Ev();
extern void _ZN10S1537C4_nt3v29Ev();
extern void _ZN10S1537C4_nt3v30Ev();
extern void _ZN10S1537C4_nt3v31Ev();
extern void _ZN10S1537C4_nt3v32Ev();
extern void _ZN10S1537C4_nt3v33Ev();
extern void _ZN10S1537C4_nt3v34Ev();
extern void _ZN10S1537C4_nt3v35Ev();
extern void _ZN10S1537C4_nt3v36Ev();
extern void _ZN10S1537C4_nt3v37Ev();
extern void _ZN10S1537C4_nt3v38Ev();
extern void _ZN10S1537C4_nt3v39Ev();
extern void _ZN10S1537C4_nt3v40Ev();
extern void _ZN10S1537C4_nt3v41Ev();
extern void _ZN10S1537C4_nt3v42Ev();
extern void _ZN10S1537C4_nt3v43Ev();
extern void _ZN10S1537C4_nt3v44Ev();
extern void _ZN10S1537C4_nt3v45Ev();
extern void _ZN10S1537C4_nt3v46Ev();
extern void _ZN10S1537C4_nt3v47Ev();
extern void _ZN10S1537C4_nt3v48Ev();
extern void _ZN10S1537C4_nt3v49Ev();
extern void _ZN10S1537C4_nt3v50Ev();
extern void _ZN10S1537C4_nt3v51Ev();
extern void _ZN10S1537C4_nt3v52Ev();
extern void _ZN10S1537C4_nt3v53Ev();
extern void _ZN10S1537C4_nt3v54Ev();
extern void _ZN10S1537C4_nt3v55Ev();
extern void _ZN10S1537C4_nt3v56Ev();
extern void _ZN10S1537C4_nt3v57Ev();
extern void _ZN10S1537C4_nt3v58Ev();
extern void _ZN10S1537C4_nt3v59Ev();
extern void _ZN10S1537C4_nt3v60Ev();
extern void _ZN10S1537C4_nt3v61Ev();
extern void _ZN10S1537C4_nt3v62Ev();
extern void _ZN10S1537C4_nt3v63Ev();
extern void _ZN10S1537C4_nt3v64Ev();
extern void _ZN10S1537C4_nt3v65Ev();
extern void _ZN10S1537C4_nt3v66Ev();
extern void _ZN10S1537C4_nt3v67Ev();
extern void _ZN10S1537C4_nt3v68Ev();
extern void _ZN10S1537C4_nt3v69Ev();
extern void _ZN10S1537C4_nt3v70Ev();
static  VTBL_ENTRY vtc_S1537C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1537C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S1537C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v70Ev,
};
extern VTBL_ENTRY _ZTI10S1537C4_nt[];
VTBL_ENTRY *P__ZTI10S1537C4_nt = _ZTI10S1537C4_nt; 
extern  VTBL_ENTRY _ZTV10S1537C4_nt[];
Class_Descriptor cd_S1537C4_nt = {  "S1537C4_nt", // class name
  0,0,//no base classes
  &(vtc_S1537C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI10S1537C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1537C4_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  S1537C8_nt  {
  void *s1537c8f0;
  int s1537c8f1[2];
  void  mf1537c8(); // _ZN10S1537C8_nt8mf1537c8Ev
};
//SIG(-1 S1537C8_nt) C1{ m Fp Fi[2]}


void  S1537C8_nt ::mf1537c8(){}

//skip512 S1537C8_nt

#else // __cplusplus

Class_Descriptor cd_S1537C8_nt = {  "S1537C8_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  S1537C7_nt  : S1537C8_nt {
};
//SIG(-1 S1537C7_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S1537C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
static Base_Class bases_S1537C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1537C7_nt = {  "S1537C7_nt", // class name
  bases_S1537C7_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  S1537C6_nt  : S1537C7_nt {
};
//SIG(-1 S1537C6_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S1537C6_nt

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
extern Class_Descriptor cd_S1537C7_nt;
static Base_Class bases_S1537C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1537C7_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  S1537C9_nt  {
  int s1537c9f0;
  void  mf1537c9(); // _ZN10S1537C9_nt8mf1537c9Ev
};
//SIG(-1 S1537C9_nt) C1{ m Fi}


void  S1537C9_nt ::mf1537c9(){}

//skip512 S1537C9_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S1537C9_nt[];
VTBL_ENTRY *P__ZTI10S1537C9_nt = _ZTI10S1537C9_nt; 
Class_Descriptor cd_S1537C9_nt = {  "S1537C9_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI10S1537C9_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  S1537C13  : S1537C8_nt {
};
//SIG(-1 S1537C13) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1537C13()
{
  extern Class_Descriptor cd_S1537C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1537C13, buf);
    S1537C13 &lv = *(new (buf) S1537C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1537C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1537C13)");
    check_base_class_offset(lv, (S1537C8_nt*), 0, "S1537C13");
    test_class_info(&lv, &cd_S1537C13);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1537C13(Test_S1537C13, "S1537C13", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
static Base_Class bases_S1537C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1537C13 = {  "S1537C13", // class name
  bases_S1537C13, 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  S1537C12  : S1537C13 {
};
//SIG(-1 S1537C12) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1537C12()
{
  extern Class_Descriptor cd_S1537C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1537C12, buf);
    S1537C12 &lv = *(new (buf) S1537C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1537C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1537C12)");
    check_base_class_offset(lv, (S1537C8_nt*)(S1537C13*), 0, "S1537C12");
    check_base_class_offset(lv, (S1537C13*), 0, "S1537C12");
    test_class_info(&lv, &cd_S1537C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1537C12(Test_S1537C12, "S1537C12", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
extern Class_Descriptor cd_S1537C13;
static Base_Class bases_S1537C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1537C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1537C12 = {  "S1537C12", // class name
  bases_S1537C12, 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  S1537C14_nt  {
  int s1537c14f0[3];
  void  mf1537c14(); // _ZN11S1537C14_nt9mf1537c14Ev
};
//SIG(-1 S1537C14_nt) C1{ m Fi[3]}


void  S1537C14_nt ::mf1537c14(){}

//skip512 S1537C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1537C19  : S1537C8_nt {
};
//SIG(-1 S1537C19) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1537C19()
{
  extern Class_Descriptor cd_S1537C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1537C19, buf);
    S1537C19 &lv = *(new (buf) S1537C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1537C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1537C19)");
    check_base_class_offset(lv, (S1537C8_nt*), 0, "S1537C19");
    test_class_info(&lv, &cd_S1537C19);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1537C19(Test_S1537C19, "S1537C19", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
static Base_Class bases_S1537C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1537C19 = {  "S1537C19", // class name
  bases_S1537C19, 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  S1537C18  : S1537C19 {
};
//SIG(-1 S1537C18) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1537C18()
{
  extern Class_Descriptor cd_S1537C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1537C18, buf);
    S1537C18 &lv = *(new (buf) S1537C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1537C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1537C18)");
    check_base_class_offset(lv, (S1537C8_nt*)(S1537C19*), 0, "S1537C18");
    check_base_class_offset(lv, (S1537C19*), 0, "S1537C18");
    test_class_info(&lv, &cd_S1537C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1537C18(Test_S1537C18, "S1537C18", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
extern Class_Descriptor cd_S1537C19;
static Base_Class bases_S1537C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1537C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1537C18 = {  "S1537C18", // class name
  bases_S1537C18, 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  S1537C3_nt  : S1537C4_nt {
  ::S1537C6_nt s1537c3f0;
  ::S1537C6_nt s1537c3f1;
  ::S1537C9_nt s1537c3f2;
  int s1537c3f3;
  char s1537c3f4[4];
  void *s1537c3f5[2];
  ::S1537C6_nt s1537c3f6;
  unsigned int s1537c3f7:1;
  unsigned int s1537c3f8:1;
  unsigned int s1537c3f9:1;
  unsigned int s1537c3f10:1;
  unsigned int s1537c3f11:1;
  unsigned int s1537c3f12:1;
  unsigned int s1537c3f13:1;
  unsigned int s1537c3f14:1;
  unsigned int s1537c3f15:1;
  unsigned int s1537c3f16:1;
  unsigned int s1537c3f17:1;
  unsigned int s1537c3f18:1;
  unsigned int s1537c3f19:1;
  unsigned int s1537c3f20:1;
  unsigned int s1537c3f21:1;
  unsigned int s1537c3f22:1;
  unsigned int s1537c3f23:1;
  unsigned int s1537c3f24:1;
  unsigned int s1537c3f25:1;
  unsigned int s1537c3f26:1;
  unsigned int s1537c3f27:1;
  unsigned int s1537c3f28:1;
  unsigned int s1537c3f29:1;
  unsigned int s1537c3f30:1;
  unsigned int s1537c3f31:1;
  unsigned int s1537c3f32:1;
  unsigned int s1537c3f33:1;
  unsigned int s1537c3f34:1;
  unsigned int s1537c3f35:1;
  unsigned int s1537c3f36:1;
  unsigned int s1537c3f37:1;
  unsigned int s1537c3f38:1;
  unsigned int s1537c3f39:1;
  unsigned int s1537c3f40:1;
  unsigned int s1537c3f41:1;
  unsigned int s1537c3f42:1;
  unsigned int s1537c3f43:1;
  unsigned int s1537c3f44:1;
  unsigned int s1537c3f45:1;
  unsigned int s1537c3f46:1;
  unsigned int s1537c3f47:1;
  unsigned int s1537c3f48:1;
  unsigned int s1537c3f49:1;
  unsigned int s1537c3f50:1;
  unsigned int s1537c3f51:1;
  unsigned int s1537c3f52:1;
  unsigned int s1537c3f53:1;
  unsigned int s1537c3f54:1;
  unsigned int s1537c3f55:1;
  unsigned int s1537c3f56:1;
  unsigned int s1537c3f57:1;
  unsigned int s1537c3f58:1;
  unsigned int s1537c3f59:1;
  unsigned int s1537c3f60:1;
  unsigned int s1537c3f61:1;
  unsigned int s1537c3f62:1;
  unsigned int s1537c3f63:1;
  unsigned int s1537c3f64:1;
  unsigned int s1537c3f65:1;
  unsigned int s1537c3f66:1;
  unsigned int s1537c3f67:1;
  unsigned int s1537c3f68:1;
  unsigned int s1537c3f69:1;
  unsigned int s1537c3f70:1;
  unsigned int s1537c3f71:1;
  unsigned int s1537c3f72:1;
  unsigned int s1537c3f73:1;
  unsigned int s1537c3f74:1;
  unsigned int s1537c3f75:1;
  unsigned int s1537c3f76:1;
  unsigned int s1537c3f77:1;
  unsigned int s1537c3f78:1;
  unsigned int s1537c3f79:1;
  unsigned int s1537c3f80:1;
  unsigned int s1537c3f81:1;
  unsigned int s1537c3f82:1;
  unsigned int s1537c3f83:1;
  int s1537c3f84[5];
  void *s1537c3f85[2];
  int s1537c3f86[3];
  ::S1537C5_nt s1537c3f87;
  ::S1537C5_nt s1537c3f88;
  ::S1537C5_nt s1537c3f89;
  ::S1537C12 s1537c3f90;
  ::S1537C12 s1537c3f91;
  int s1537c3f92;
  void *s1537c3f93[2];
  ::S1537C14_nt s1537c3f94;
  ::S1537C14_nt s1537c3f95;
  ::S1537C14_nt s1537c3f96;
  ::S1537C14_nt s1537c3f97;
  void *s1537c3f98;
  ::S1537C5_nt s1537c3f99;
  ::S1537C12 s1537c3f100;
  ::S1537C14_nt s1537c3f101;
  ::S1537C14_nt s1537c3f102;
  int s1537c3f103;
  ::S1537C14_nt s1537c3f104;
  ::S1537C14_nt s1537c3f105;
  void *s1537c3f106;
  int s1537c3f107;
  char s1537c3f108;
  ::S1537C14_nt s1537c3f109;
  ::S1537C14_nt s1537c3f110;
  void *s1537c3f111;
  int s1537c3f112;
  void *s1537c3f113;
  ::S1537C12 s1537c3f114;
  ::S1537C18 s1537c3f115;
  ::S1537C18 s1537c3f116;
  virtual  ~S1537C3_nt(); // _ZN10S1537C3_ntD1Ev
  virtual void  v71(); // _ZN10S1537C3_nt3v71Ev
  virtual void  v72(); // _ZN10S1537C3_nt3v72Ev
  virtual void  v73(); // _ZN10S1537C3_nt3v73Ev
  virtual void  v74(); // _ZN10S1537C3_nt3v74Ev
  virtual void  v75(); // _ZN10S1537C3_nt3v75Ev
  virtual void  v76(); // _ZN10S1537C3_nt3v76Ev
  virtual void  v77(); // _ZN10S1537C3_nt3v77Ev
  virtual void  v78(); // _ZN10S1537C3_nt3v78Ev
  virtual void  v79(); // _ZN10S1537C3_nt3v79Ev
  virtual void  v80(); // _ZN10S1537C3_nt3v80Ev
  virtual void  v81(); // _ZN10S1537C3_nt3v81Ev
  virtual void  v82(); // _ZN10S1537C3_nt3v82Ev
  virtual void  v83(); // _ZN10S1537C3_nt3v83Ev
  virtual void  v84(); // _ZN10S1537C3_nt3v84Ev
  virtual void  v85(); // _ZN10S1537C3_nt3v85Ev
  virtual void  v86(); // _ZN10S1537C3_nt3v86Ev
  virtual void  v87(); // _ZN10S1537C3_nt3v87Ev
  virtual void  v88(); // _ZN10S1537C3_nt3v88Ev
  virtual void  v89(); // _ZN10S1537C3_nt3v89Ev
  virtual void  v90(); // _ZN10S1537C3_nt3v90Ev
  virtual void  v91(); // _ZN10S1537C3_nt3v91Ev
  virtual void  v92(); // _ZN10S1537C3_nt3v92Ev
  virtual void  v93(); // _ZN10S1537C3_nt3v93Ev
  virtual void  v94(); // _ZN10S1537C3_nt3v94Ev
  virtual void  v95(); // _ZN10S1537C3_nt3v95Ev
  virtual void  v96(); // _ZN10S1537C3_nt3v96Ev
  virtual void  v97(); // _ZN10S1537C3_nt3v97Ev
  virtual void  v98(); // _ZN10S1537C3_nt3v98Ev
  virtual void  v99(); // _ZN10S1537C3_nt3v99Ev
  virtual void  v100(); // _ZN10S1537C3_nt4v100Ev
  virtual void  v101(); // _ZN10S1537C3_nt4v101Ev
  virtual void  v102(); // _ZN10S1537C3_nt4v102Ev
  virtual void  v103(); // _ZN10S1537C3_nt4v103Ev
  virtual void  v104(); // _ZN10S1537C3_nt4v104Ev
  virtual void  v105(); // _ZN10S1537C3_nt4v105Ev
  virtual void  v106(); // _ZN10S1537C3_nt4v106Ev
  virtual void  v107(); // _ZN10S1537C3_nt4v107Ev
  virtual void  v108(); // _ZN10S1537C3_nt4v108Ev
  virtual void  v109(); // _ZN10S1537C3_nt4v109Ev
  virtual void  v110(); // _ZN10S1537C3_nt4v110Ev
  virtual void  v111(); // _ZN10S1537C3_nt4v111Ev
  virtual void  v112(); // _ZN10S1537C3_nt4v112Ev
  virtual void  v113(); // _ZN10S1537C3_nt4v113Ev
  virtual void  v114(); // _ZN10S1537C3_nt4v114Ev
  virtual void  v115(); // _ZN10S1537C3_nt4v115Ev
  virtual void  v116(); // _ZN10S1537C3_nt4v116Ev
  virtual void  v117(); // _ZN10S1537C3_nt4v117Ev
  virtual void  v118(); // _ZN10S1537C3_nt4v118Ev
  virtual void  v119(); // _ZN10S1537C3_nt4v119Ev
  virtual void  v120(); // _ZN10S1537C3_nt4v120Ev
  virtual void  v121(); // _ZN10S1537C3_nt4v121Ev
  virtual void  v122(); // _ZN10S1537C3_nt4v122Ev
  virtual void  v123(); // _ZN10S1537C3_nt4v123Ev
  virtual void  v124(); // _ZN10S1537C3_nt4v124Ev
  virtual void  v125(); // _ZN10S1537C3_nt4v125Ev
  virtual void  v126(); // _ZN10S1537C3_nt4v126Ev
  virtual void  v127(); // _ZN10S1537C3_nt4v127Ev
  virtual void  v128(); // _ZN10S1537C3_nt4v128Ev
  virtual void  v129(); // _ZN10S1537C3_nt4v129Ev
  virtual void  v130(); // _ZN10S1537C3_nt4v130Ev
  virtual void  v131(); // _ZN10S1537C3_nt4v131Ev
  virtual void  v132(); // _ZN10S1537C3_nt4v132Ev
  virtual void  v133(); // _ZN10S1537C3_nt4v133Ev
  virtual void  v134(); // _ZN10S1537C3_nt4v134Ev
  virtual void  v135(); // _ZN10S1537C3_nt4v135Ev
  virtual void  v136(); // _ZN10S1537C3_nt4v136Ev
  virtual void  v137(); // _ZN10S1537C3_nt4v137Ev
  virtual void  v138(); // _ZN10S1537C3_nt4v138Ev
  virtual void  v139(); // _ZN10S1537C3_nt4v139Ev
  virtual void  v140(); // _ZN10S1537C3_nt4v140Ev
  virtual void  v141(); // _ZN10S1537C3_nt4v141Ev
  virtual void  v142(); // _ZN10S1537C3_nt4v142Ev
  virtual void  v143(); // _ZN10S1537C3_nt4v143Ev
  virtual void  v144(); // _ZN10S1537C3_nt4v144Ev
  virtual void  v145(); // _ZN10S1537C3_nt4v145Ev
  virtual void  v146(); // _ZN10S1537C3_nt4v146Ev
  virtual void  v147(); // _ZN10S1537C3_nt4v147Ev
  virtual void  v148(); // _ZN10S1537C3_nt4v148Ev
  virtual void  v149(); // _ZN10S1537C3_nt4v149Ev
  virtual void  v150(); // _ZN10S1537C3_nt4v150Ev
  virtual void  v151(); // _ZN10S1537C3_nt4v151Ev
  virtual void  v152(); // _ZN10S1537C3_nt4v152Ev
  virtual void  v153(); // _ZN10S1537C3_nt4v153Ev
  virtual void  v154(); // _ZN10S1537C3_nt4v154Ev
  virtual void  v155(); // _ZN10S1537C3_nt4v155Ev
  virtual void  v156(); // _ZN10S1537C3_nt4v156Ev
  virtual void  v157(); // _ZN10S1537C3_nt4v157Ev
  virtual void  v158(); // _ZN10S1537C3_nt4v158Ev
  virtual void  v159(); // _ZN10S1537C3_nt4v159Ev
  virtual void  v160(); // _ZN10S1537C3_nt4v160Ev
  virtual void  v161(); // _ZN10S1537C3_nt4v161Ev
  virtual void  v162(); // _ZN10S1537C3_nt4v162Ev
  virtual void  v163(); // _ZN10S1537C3_nt4v163Ev
  virtual void  v164(); // _ZN10S1537C3_nt4v164Ev
  virtual void  v165(); // _ZN10S1537C3_nt4v165Ev
  virtual void  v166(); // _ZN10S1537C3_nt4v166Ev
  virtual void  v167(); // _ZN10S1537C3_nt4v167Ev
  virtual void  v168(); // _ZN10S1537C3_nt4v168Ev
  virtual void  v169(); // _ZN10S1537C3_nt4v169Ev
  virtual void  v170(); // _ZN10S1537C3_nt4v170Ev
  virtual void  v171(); // _ZN10S1537C3_nt4v171Ev
  virtual void  v172(); // _ZN10S1537C3_nt4v172Ev
  virtual void  v173(); // _ZN10S1537C3_nt4v173Ev
  virtual void  v174(); // _ZN10S1537C3_nt4v174Ev
  virtual void  v175(); // _ZN10S1537C3_nt4v175Ev
  virtual void  v176(); // _ZN10S1537C3_nt4v176Ev
  virtual void  v177(); // _ZN10S1537C3_nt4v177Ev
  virtual void  v178(); // _ZN10S1537C3_nt4v178Ev
  virtual void  v179(); // _ZN10S1537C3_nt4v179Ev
  virtual void  v180(); // _ZN10S1537C3_nt4v180Ev
  virtual void  v181(); // _ZN10S1537C3_nt4v181Ev
  virtual void  v182(); // _ZN10S1537C3_nt4v182Ev
  virtual void  v183(); // _ZN10S1537C3_nt4v183Ev
  virtual void  v184(); // _ZN10S1537C3_nt4v184Ev
  virtual void  v185(); // _ZN10S1537C3_nt4v185Ev
  virtual void  v186(); // _ZN10S1537C3_nt4v186Ev
  virtual void  v187(); // _ZN10S1537C3_nt4v187Ev
  virtual void  v188(); // _ZN10S1537C3_nt4v188Ev
  virtual void  v189(); // _ZN10S1537C3_nt4v189Ev
  virtual void  v190(); // _ZN10S1537C3_nt4v190Ev
  virtual void  v191(); // _ZN10S1537C3_nt4v191Ev
  virtual void  v192(); // _ZN10S1537C3_nt4v192Ev
  virtual void  v193(); // _ZN10S1537C3_nt4v193Ev
  virtual void  v194(); // _ZN10S1537C3_nt4v194Ev
  virtual void  v195(); // _ZN10S1537C3_nt4v195Ev
  virtual void  v196(); // _ZN10S1537C3_nt4v196Ev
  virtual void  v197(); // _ZN10S1537C3_nt4v197Ev
  virtual void  v198(); // _ZN10S1537C3_nt4v198Ev
  virtual void  v199(); // _ZN10S1537C3_nt4v199Ev
  virtual void  v200(); // _ZN10S1537C3_nt4v200Ev
  virtual void  v201(); // _ZN10S1537C3_nt4v201Ev
  virtual void  v202(); // _ZN10S1537C3_nt4v202Ev
  virtual void  v203(); // _ZN10S1537C3_nt4v203Ev
  virtual void  v204(); // _ZN10S1537C3_nt4v204Ev
  virtual void  v205(); // _ZN10S1537C3_nt4v205Ev
  virtual void  v206(); // _ZN10S1537C3_nt4v206Ev
  virtual void  v207(); // _ZN10S1537C3_nt4v207Ev
  virtual void  v208(); // _ZN10S1537C3_nt4v208Ev
  virtual void  v209(); // _ZN10S1537C3_nt4v209Ev
  virtual void  v210(); // _ZN10S1537C3_nt4v210Ev
  virtual void  v211(); // _ZN10S1537C3_nt4v211Ev
  virtual void  v212(); // _ZN10S1537C3_nt4v212Ev
  virtual void  v213(); // _ZN10S1537C3_nt4v213Ev
  S1537C3_nt(); // tgen
};
//SIG(-1 S1537C3_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}


 S1537C3_nt ::~S1537C3_nt(){ note_dtor("S1537C3_nt", this);}
void  S1537C3_nt ::v71(){vfunc_called(this, "_ZN10S1537C3_nt3v71Ev");}
void  S1537C3_nt ::v72(){vfunc_called(this, "_ZN10S1537C3_nt3v72Ev");}
void  S1537C3_nt ::v73(){vfunc_called(this, "_ZN10S1537C3_nt3v73Ev");}
void  S1537C3_nt ::v74(){vfunc_called(this, "_ZN10S1537C3_nt3v74Ev");}
void  S1537C3_nt ::v75(){vfunc_called(this, "_ZN10S1537C3_nt3v75Ev");}
void  S1537C3_nt ::v76(){vfunc_called(this, "_ZN10S1537C3_nt3v76Ev");}
void  S1537C3_nt ::v77(){vfunc_called(this, "_ZN10S1537C3_nt3v77Ev");}
void  S1537C3_nt ::v78(){vfunc_called(this, "_ZN10S1537C3_nt3v78Ev");}
void  S1537C3_nt ::v79(){vfunc_called(this, "_ZN10S1537C3_nt3v79Ev");}
void  S1537C3_nt ::v80(){vfunc_called(this, "_ZN10S1537C3_nt3v80Ev");}
void  S1537C3_nt ::v81(){vfunc_called(this, "_ZN10S1537C3_nt3v81Ev");}
void  S1537C3_nt ::v82(){vfunc_called(this, "_ZN10S1537C3_nt3v82Ev");}
void  S1537C3_nt ::v83(){vfunc_called(this, "_ZN10S1537C3_nt3v83Ev");}
void  S1537C3_nt ::v84(){vfunc_called(this, "_ZN10S1537C3_nt3v84Ev");}
void  S1537C3_nt ::v85(){vfunc_called(this, "_ZN10S1537C3_nt3v85Ev");}
void  S1537C3_nt ::v86(){vfunc_called(this, "_ZN10S1537C3_nt3v86Ev");}
void  S1537C3_nt ::v87(){vfunc_called(this, "_ZN10S1537C3_nt3v87Ev");}
void  S1537C3_nt ::v88(){vfunc_called(this, "_ZN10S1537C3_nt3v88Ev");}
void  S1537C3_nt ::v89(){vfunc_called(this, "_ZN10S1537C3_nt3v89Ev");}
void  S1537C3_nt ::v90(){vfunc_called(this, "_ZN10S1537C3_nt3v90Ev");}
void  S1537C3_nt ::v91(){vfunc_called(this, "_ZN10S1537C3_nt3v91Ev");}
void  S1537C3_nt ::v92(){vfunc_called(this, "_ZN10S1537C3_nt3v92Ev");}
void  S1537C3_nt ::v93(){vfunc_called(this, "_ZN10S1537C3_nt3v93Ev");}
void  S1537C3_nt ::v94(){vfunc_called(this, "_ZN10S1537C3_nt3v94Ev");}
void  S1537C3_nt ::v95(){vfunc_called(this, "_ZN10S1537C3_nt3v95Ev");}
void  S1537C3_nt ::v96(){vfunc_called(this, "_ZN10S1537C3_nt3v96Ev");}
void  S1537C3_nt ::v97(){vfunc_called(this, "_ZN10S1537C3_nt3v97Ev");}
void  S1537C3_nt ::v98(){vfunc_called(this, "_ZN10S1537C3_nt3v98Ev");}
void  S1537C3_nt ::v99(){vfunc_called(this, "_ZN10S1537C3_nt3v99Ev");}
void  S1537C3_nt ::v100(){vfunc_called(this, "_ZN10S1537C3_nt4v100Ev");}
void  S1537C3_nt ::v101(){vfunc_called(this, "_ZN10S1537C3_nt4v101Ev");}
void  S1537C3_nt ::v102(){vfunc_called(this, "_ZN10S1537C3_nt4v102Ev");}
void  S1537C3_nt ::v103(){vfunc_called(this, "_ZN10S1537C3_nt4v103Ev");}
void  S1537C3_nt ::v104(){vfunc_called(this, "_ZN10S1537C3_nt4v104Ev");}
void  S1537C3_nt ::v105(){vfunc_called(this, "_ZN10S1537C3_nt4v105Ev");}
void  S1537C3_nt ::v106(){vfunc_called(this, "_ZN10S1537C3_nt4v106Ev");}
void  S1537C3_nt ::v107(){vfunc_called(this, "_ZN10S1537C3_nt4v107Ev");}
void  S1537C3_nt ::v108(){vfunc_called(this, "_ZN10S1537C3_nt4v108Ev");}
void  S1537C3_nt ::v109(){vfunc_called(this, "_ZN10S1537C3_nt4v109Ev");}
void  S1537C3_nt ::v110(){vfunc_called(this, "_ZN10S1537C3_nt4v110Ev");}
void  S1537C3_nt ::v111(){vfunc_called(this, "_ZN10S1537C3_nt4v111Ev");}
void  S1537C3_nt ::v112(){vfunc_called(this, "_ZN10S1537C3_nt4v112Ev");}
void  S1537C3_nt ::v113(){vfunc_called(this, "_ZN10S1537C3_nt4v113Ev");}
void  S1537C3_nt ::v114(){vfunc_called(this, "_ZN10S1537C3_nt4v114Ev");}
void  S1537C3_nt ::v115(){vfunc_called(this, "_ZN10S1537C3_nt4v115Ev");}
void  S1537C3_nt ::v116(){vfunc_called(this, "_ZN10S1537C3_nt4v116Ev");}
void  S1537C3_nt ::v117(){vfunc_called(this, "_ZN10S1537C3_nt4v117Ev");}
void  S1537C3_nt ::v118(){vfunc_called(this, "_ZN10S1537C3_nt4v118Ev");}
void  S1537C3_nt ::v119(){vfunc_called(this, "_ZN10S1537C3_nt4v119Ev");}
void  S1537C3_nt ::v120(){vfunc_called(this, "_ZN10S1537C3_nt4v120Ev");}
void  S1537C3_nt ::v121(){vfunc_called(this, "_ZN10S1537C3_nt4v121Ev");}
void  S1537C3_nt ::v122(){vfunc_called(this, "_ZN10S1537C3_nt4v122Ev");}
void  S1537C3_nt ::v123(){vfunc_called(this, "_ZN10S1537C3_nt4v123Ev");}
void  S1537C3_nt ::v124(){vfunc_called(this, "_ZN10S1537C3_nt4v124Ev");}
void  S1537C3_nt ::v125(){vfunc_called(this, "_ZN10S1537C3_nt4v125Ev");}
void  S1537C3_nt ::v126(){vfunc_called(this, "_ZN10S1537C3_nt4v126Ev");}
void  S1537C3_nt ::v127(){vfunc_called(this, "_ZN10S1537C3_nt4v127Ev");}
void  S1537C3_nt ::v128(){vfunc_called(this, "_ZN10S1537C3_nt4v128Ev");}
void  S1537C3_nt ::v129(){vfunc_called(this, "_ZN10S1537C3_nt4v129Ev");}
void  S1537C3_nt ::v130(){vfunc_called(this, "_ZN10S1537C3_nt4v130Ev");}
void  S1537C3_nt ::v131(){vfunc_called(this, "_ZN10S1537C3_nt4v131Ev");}
void  S1537C3_nt ::v132(){vfunc_called(this, "_ZN10S1537C3_nt4v132Ev");}
void  S1537C3_nt ::v133(){vfunc_called(this, "_ZN10S1537C3_nt4v133Ev");}
void  S1537C3_nt ::v134(){vfunc_called(this, "_ZN10S1537C3_nt4v134Ev");}
void  S1537C3_nt ::v135(){vfunc_called(this, "_ZN10S1537C3_nt4v135Ev");}
void  S1537C3_nt ::v136(){vfunc_called(this, "_ZN10S1537C3_nt4v136Ev");}
void  S1537C3_nt ::v137(){vfunc_called(this, "_ZN10S1537C3_nt4v137Ev");}
void  S1537C3_nt ::v138(){vfunc_called(this, "_ZN10S1537C3_nt4v138Ev");}
void  S1537C3_nt ::v139(){vfunc_called(this, "_ZN10S1537C3_nt4v139Ev");}
void  S1537C3_nt ::v140(){vfunc_called(this, "_ZN10S1537C3_nt4v140Ev");}
void  S1537C3_nt ::v141(){vfunc_called(this, "_ZN10S1537C3_nt4v141Ev");}
void  S1537C3_nt ::v142(){vfunc_called(this, "_ZN10S1537C3_nt4v142Ev");}
void  S1537C3_nt ::v143(){vfunc_called(this, "_ZN10S1537C3_nt4v143Ev");}
void  S1537C3_nt ::v144(){vfunc_called(this, "_ZN10S1537C3_nt4v144Ev");}
void  S1537C3_nt ::v145(){vfunc_called(this, "_ZN10S1537C3_nt4v145Ev");}
void  S1537C3_nt ::v146(){vfunc_called(this, "_ZN10S1537C3_nt4v146Ev");}
void  S1537C3_nt ::v147(){vfunc_called(this, "_ZN10S1537C3_nt4v147Ev");}
void  S1537C3_nt ::v148(){vfunc_called(this, "_ZN10S1537C3_nt4v148Ev");}
void  S1537C3_nt ::v149(){vfunc_called(this, "_ZN10S1537C3_nt4v149Ev");}
void  S1537C3_nt ::v150(){vfunc_called(this, "_ZN10S1537C3_nt4v150Ev");}
void  S1537C3_nt ::v151(){vfunc_called(this, "_ZN10S1537C3_nt4v151Ev");}
void  S1537C3_nt ::v152(){vfunc_called(this, "_ZN10S1537C3_nt4v152Ev");}
void  S1537C3_nt ::v153(){vfunc_called(this, "_ZN10S1537C3_nt4v153Ev");}
void  S1537C3_nt ::v154(){vfunc_called(this, "_ZN10S1537C3_nt4v154Ev");}
void  S1537C3_nt ::v155(){vfunc_called(this, "_ZN10S1537C3_nt4v155Ev");}
void  S1537C3_nt ::v156(){vfunc_called(this, "_ZN10S1537C3_nt4v156Ev");}
void  S1537C3_nt ::v157(){vfunc_called(this, "_ZN10S1537C3_nt4v157Ev");}
void  S1537C3_nt ::v158(){vfunc_called(this, "_ZN10S1537C3_nt4v158Ev");}
void  S1537C3_nt ::v159(){vfunc_called(this, "_ZN10S1537C3_nt4v159Ev");}
void  S1537C3_nt ::v160(){vfunc_called(this, "_ZN10S1537C3_nt4v160Ev");}
void  S1537C3_nt ::v161(){vfunc_called(this, "_ZN10S1537C3_nt4v161Ev");}
void  S1537C3_nt ::v162(){vfunc_called(this, "_ZN10S1537C3_nt4v162Ev");}
void  S1537C3_nt ::v163(){vfunc_called(this, "_ZN10S1537C3_nt4v163Ev");}
void  S1537C3_nt ::v164(){vfunc_called(this, "_ZN10S1537C3_nt4v164Ev");}
void  S1537C3_nt ::v165(){vfunc_called(this, "_ZN10S1537C3_nt4v165Ev");}
void  S1537C3_nt ::v166(){vfunc_called(this, "_ZN10S1537C3_nt4v166Ev");}
void  S1537C3_nt ::v167(){vfunc_called(this, "_ZN10S1537C3_nt4v167Ev");}
void  S1537C3_nt ::v168(){vfunc_called(this, "_ZN10S1537C3_nt4v168Ev");}
void  S1537C3_nt ::v169(){vfunc_called(this, "_ZN10S1537C3_nt4v169Ev");}
void  S1537C3_nt ::v170(){vfunc_called(this, "_ZN10S1537C3_nt4v170Ev");}
void  S1537C3_nt ::v171(){vfunc_called(this, "_ZN10S1537C3_nt4v171Ev");}
void  S1537C3_nt ::v172(){vfunc_called(this, "_ZN10S1537C3_nt4v172Ev");}
void  S1537C3_nt ::v173(){vfunc_called(this, "_ZN10S1537C3_nt4v173Ev");}
void  S1537C3_nt ::v174(){vfunc_called(this, "_ZN10S1537C3_nt4v174Ev");}
void  S1537C3_nt ::v175(){vfunc_called(this, "_ZN10S1537C3_nt4v175Ev");}
void  S1537C3_nt ::v176(){vfunc_called(this, "_ZN10S1537C3_nt4v176Ev");}
void  S1537C3_nt ::v177(){vfunc_called(this, "_ZN10S1537C3_nt4v177Ev");}
void  S1537C3_nt ::v178(){vfunc_called(this, "_ZN10S1537C3_nt4v178Ev");}
void  S1537C3_nt ::v179(){vfunc_called(this, "_ZN10S1537C3_nt4v179Ev");}
void  S1537C3_nt ::v180(){vfunc_called(this, "_ZN10S1537C3_nt4v180Ev");}
void  S1537C3_nt ::v181(){vfunc_called(this, "_ZN10S1537C3_nt4v181Ev");}
void  S1537C3_nt ::v182(){vfunc_called(this, "_ZN10S1537C3_nt4v182Ev");}
void  S1537C3_nt ::v183(){vfunc_called(this, "_ZN10S1537C3_nt4v183Ev");}
void  S1537C3_nt ::v184(){vfunc_called(this, "_ZN10S1537C3_nt4v184Ev");}
void  S1537C3_nt ::v185(){vfunc_called(this, "_ZN10S1537C3_nt4v185Ev");}
void  S1537C3_nt ::v186(){vfunc_called(this, "_ZN10S1537C3_nt4v186Ev");}
void  S1537C3_nt ::v187(){vfunc_called(this, "_ZN10S1537C3_nt4v187Ev");}
void  S1537C3_nt ::v188(){vfunc_called(this, "_ZN10S1537C3_nt4v188Ev");}
void  S1537C3_nt ::v189(){vfunc_called(this, "_ZN10S1537C3_nt4v189Ev");}
void  S1537C3_nt ::v190(){vfunc_called(this, "_ZN10S1537C3_nt4v190Ev");}
void  S1537C3_nt ::v191(){vfunc_called(this, "_ZN10S1537C3_nt4v191Ev");}
void  S1537C3_nt ::v192(){vfunc_called(this, "_ZN10S1537C3_nt4v192Ev");}
void  S1537C3_nt ::v193(){vfunc_called(this, "_ZN10S1537C3_nt4v193Ev");}
void  S1537C3_nt ::v194(){vfunc_called(this, "_ZN10S1537C3_nt4v194Ev");}
void  S1537C3_nt ::v195(){vfunc_called(this, "_ZN10S1537C3_nt4v195Ev");}
void  S1537C3_nt ::v196(){vfunc_called(this, "_ZN10S1537C3_nt4v196Ev");}
void  S1537C3_nt ::v197(){vfunc_called(this, "_ZN10S1537C3_nt4v197Ev");}
void  S1537C3_nt ::v198(){vfunc_called(this, "_ZN10S1537C3_nt4v198Ev");}
void  S1537C3_nt ::v199(){vfunc_called(this, "_ZN10S1537C3_nt4v199Ev");}
void  S1537C3_nt ::v200(){vfunc_called(this, "_ZN10S1537C3_nt4v200Ev");}
void  S1537C3_nt ::v201(){vfunc_called(this, "_ZN10S1537C3_nt4v201Ev");}
void  S1537C3_nt ::v202(){vfunc_called(this, "_ZN10S1537C3_nt4v202Ev");}
void  S1537C3_nt ::v203(){vfunc_called(this, "_ZN10S1537C3_nt4v203Ev");}
void  S1537C3_nt ::v204(){vfunc_called(this, "_ZN10S1537C3_nt4v204Ev");}
void  S1537C3_nt ::v205(){vfunc_called(this, "_ZN10S1537C3_nt4v205Ev");}
void  S1537C3_nt ::v206(){vfunc_called(this, "_ZN10S1537C3_nt4v206Ev");}
void  S1537C3_nt ::v207(){vfunc_called(this, "_ZN10S1537C3_nt4v207Ev");}
void  S1537C3_nt ::v208(){vfunc_called(this, "_ZN10S1537C3_nt4v208Ev");}
void  S1537C3_nt ::v209(){vfunc_called(this, "_ZN10S1537C3_nt4v209Ev");}
void  S1537C3_nt ::v210(){vfunc_called(this, "_ZN10S1537C3_nt4v210Ev");}
void  S1537C3_nt ::v211(){vfunc_called(this, "_ZN10S1537C3_nt4v211Ev");}
void  S1537C3_nt ::v212(){vfunc_called(this, "_ZN10S1537C3_nt4v212Ev");}
void  S1537C3_nt ::v213(){vfunc_called(this, "_ZN10S1537C3_nt4v213Ev");}
S1537C3_nt ::S1537C3_nt(){ note_ctor("S1537C3_nt", this);} // tgen

//skip512 S1537C3_nt

#else // __cplusplus

extern void _ZN10S1537C3_ntC1Ev();
extern void _ZN10S1537C3_ntD1Ev();
Name_Map name_map_S1537C3_nt[] = {
  NSPAIR(_ZN10S1537C3_ntC1Ev),
  NSPAIR(_ZN10S1537C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1537C4_nt;
extern VTBL_ENTRY _ZTI10S1537C4_nt[];
extern  VTBL_ENTRY _ZTV10S1537C4_nt[];
static Base_Class bases_S1537C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C4_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 _ZTI10S1537C3_nt[];
extern void _ZN10S1537C3_ntD1Ev();
extern void _ZN10S1537C3_ntD0Ev();
extern void _ZN10S1537C4_nt2v7Ev();
extern void _ZN10S1537C4_nt2v8Ev();
extern void _ZN10S1537C4_nt2v9Ev();
extern void _ZN10S1537C4_nt3v10Ev();
extern void _ZN10S1537C4_nt3v11Ev();
extern void _ZN10S1537C4_nt3v12Ev();
extern void _ZN10S1537C4_nt3v13Ev();
extern void _ZN10S1537C4_nt3v14Ev();
extern void _ZN10S1537C4_nt3v15Ev();
extern void _ZN10S1537C4_nt3v16Ev();
extern void _ZN10S1537C4_nt3v17Ev();
extern void _ZN10S1537C4_nt3v18Ev();
extern void _ZN10S1537C4_nt3v19Ev();
extern void _ZN10S1537C4_nt3v20Ev();
extern void _ZN10S1537C4_nt3v21Ev();
extern void _ZN10S1537C4_nt3v22Ev();
extern void _ZN10S1537C4_nt3v23Ev();
extern void _ZN10S1537C4_nt3v24Ev();
extern void _ZN10S1537C4_nt3v25Ev();
extern void _ZN10S1537C4_nt3v26Ev();
extern void _ZN10S1537C4_nt3v27Ev();
extern void _ZN10S1537C4_nt3v28Ev();
extern void _ZN10S1537C4_nt3v29Ev();
extern void _ZN10S1537C4_nt3v30Ev();
extern void _ZN10S1537C4_nt3v31Ev();
extern void _ZN10S1537C4_nt3v32Ev();
extern void _ZN10S1537C4_nt3v33Ev();
extern void _ZN10S1537C4_nt3v34Ev();
extern void _ZN10S1537C4_nt3v35Ev();
extern void _ZN10S1537C4_nt3v36Ev();
extern void _ZN10S1537C4_nt3v37Ev();
extern void _ZN10S1537C4_nt3v38Ev();
extern void _ZN10S1537C4_nt3v39Ev();
extern void _ZN10S1537C4_nt3v40Ev();
extern void _ZN10S1537C4_nt3v41Ev();
extern void _ZN10S1537C4_nt3v42Ev();
extern void _ZN10S1537C4_nt3v43Ev();
extern void _ZN10S1537C4_nt3v44Ev();
extern void _ZN10S1537C4_nt3v45Ev();
extern void _ZN10S1537C4_nt3v46Ev();
extern void _ZN10S1537C4_nt3v47Ev();
extern void _ZN10S1537C4_nt3v48Ev();
extern void _ZN10S1537C4_nt3v49Ev();
extern void _ZN10S1537C4_nt3v50Ev();
extern void _ZN10S1537C4_nt3v51Ev();
extern void _ZN10S1537C4_nt3v52Ev();
extern void _ZN10S1537C4_nt3v53Ev();
extern void _ZN10S1537C4_nt3v54Ev();
extern void _ZN10S1537C4_nt3v55Ev();
extern void _ZN10S1537C4_nt3v56Ev();
extern void _ZN10S1537C4_nt3v57Ev();
extern void _ZN10S1537C4_nt3v58Ev();
extern void _ZN10S1537C4_nt3v59Ev();
extern void _ZN10S1537C4_nt3v60Ev();
extern void _ZN10S1537C4_nt3v61Ev();
extern void _ZN10S1537C4_nt3v62Ev();
extern void _ZN10S1537C4_nt3v63Ev();
extern void _ZN10S1537C4_nt3v64Ev();
extern void _ZN10S1537C4_nt3v65Ev();
extern void _ZN10S1537C4_nt3v66Ev();
extern void _ZN10S1537C4_nt3v67Ev();
extern void _ZN10S1537C4_nt3v68Ev();
extern void _ZN10S1537C4_nt3v69Ev();
extern void _ZN10S1537C4_nt3v70Ev();
extern void _ZN10S1537C3_nt3v71Ev();
extern void _ZN10S1537C3_nt3v72Ev();
extern void _ZN10S1537C3_nt3v73Ev();
extern void _ZN10S1537C3_nt3v74Ev();
extern void _ZN10S1537C3_nt3v75Ev();
extern void _ZN10S1537C3_nt3v76Ev();
extern void _ZN10S1537C3_nt3v77Ev();
extern void _ZN10S1537C3_nt3v78Ev();
extern void _ZN10S1537C3_nt3v79Ev();
extern void _ZN10S1537C3_nt3v80Ev();
extern void _ZN10S1537C3_nt3v81Ev();
extern void _ZN10S1537C3_nt3v82Ev();
extern void _ZN10S1537C3_nt3v83Ev();
extern void _ZN10S1537C3_nt3v84Ev();
extern void _ZN10S1537C3_nt3v85Ev();
extern void _ZN10S1537C3_nt3v86Ev();
extern void _ZN10S1537C3_nt3v87Ev();
extern void _ZN10S1537C3_nt3v88Ev();
extern void _ZN10S1537C3_nt3v89Ev();
extern void _ZN10S1537C3_nt3v90Ev();
extern void _ZN10S1537C3_nt3v91Ev();
extern void _ZN10S1537C3_nt3v92Ev();
extern void _ZN10S1537C3_nt3v93Ev();
extern void _ZN10S1537C3_nt3v94Ev();
extern void _ZN10S1537C3_nt3v95Ev();
extern void _ZN10S1537C3_nt3v96Ev();
extern void _ZN10S1537C3_nt3v97Ev();
extern void _ZN10S1537C3_nt3v98Ev();
extern void _ZN10S1537C3_nt3v99Ev();
extern void _ZN10S1537C3_nt4v100Ev();
extern void _ZN10S1537C3_nt4v101Ev();
extern void _ZN10S1537C3_nt4v102Ev();
extern void _ZN10S1537C3_nt4v103Ev();
extern void _ZN10S1537C3_nt4v104Ev();
extern void _ZN10S1537C3_nt4v105Ev();
extern void _ZN10S1537C3_nt4v106Ev();
extern void _ZN10S1537C3_nt4v107Ev();
extern void _ZN10S1537C3_nt4v108Ev();
extern void _ZN10S1537C3_nt4v109Ev();
extern void _ZN10S1537C3_nt4v110Ev();
extern void _ZN10S1537C3_nt4v111Ev();
extern void _ZN10S1537C3_nt4v112Ev();
extern void _ZN10S1537C3_nt4v113Ev();
extern void _ZN10S1537C3_nt4v114Ev();
extern void _ZN10S1537C3_nt4v115Ev();
extern void _ZN10S1537C3_nt4v116Ev();
extern void _ZN10S1537C3_nt4v117Ev();
extern void _ZN10S1537C3_nt4v118Ev();
extern void _ZN10S1537C3_nt4v119Ev();
extern void _ZN10S1537C3_nt4v120Ev();
extern void _ZN10S1537C3_nt4v121Ev();
extern void _ZN10S1537C3_nt4v122Ev();
extern void _ZN10S1537C3_nt4v123Ev();
extern void _ZN10S1537C3_nt4v124Ev();
extern void _ZN10S1537C3_nt4v125Ev();
extern void _ZN10S1537C3_nt4v126Ev();
extern void _ZN10S1537C3_nt4v127Ev();
extern void _ZN10S1537C3_nt4v128Ev();
extern void _ZN10S1537C3_nt4v129Ev();
extern void _ZN10S1537C3_nt4v130Ev();
extern void _ZN10S1537C3_nt4v131Ev();
extern void _ZN10S1537C3_nt4v132Ev();
extern void _ZN10S1537C3_nt4v133Ev();
extern void _ZN10S1537C3_nt4v134Ev();
extern void _ZN10S1537C3_nt4v135Ev();
extern void _ZN10S1537C3_nt4v136Ev();
extern void _ZN10S1537C3_nt4v137Ev();
extern void _ZN10S1537C3_nt4v138Ev();
extern void _ZN10S1537C3_nt4v139Ev();
extern void _ZN10S1537C3_nt4v140Ev();
extern void _ZN10S1537C3_nt4v141Ev();
extern void _ZN10S1537C3_nt4v142Ev();
extern void _ZN10S1537C3_nt4v143Ev();
extern void _ZN10S1537C3_nt4v144Ev();
extern void _ZN10S1537C3_nt4v145Ev();
extern void _ZN10S1537C3_nt4v146Ev();
extern void _ZN10S1537C3_nt4v147Ev();
extern void _ZN10S1537C3_nt4v148Ev();
extern void _ZN10S1537C3_nt4v149Ev();
extern void _ZN10S1537C3_nt4v150Ev();
extern void _ZN10S1537C3_nt4v151Ev();
extern void _ZN10S1537C3_nt4v152Ev();
extern void _ZN10S1537C3_nt4v153Ev();
extern void _ZN10S1537C3_nt4v154Ev();
extern void _ZN10S1537C3_nt4v155Ev();
extern void _ZN10S1537C3_nt4v156Ev();
extern void _ZN10S1537C3_nt4v157Ev();
extern void _ZN10S1537C3_nt4v158Ev();
extern void _ZN10S1537C3_nt4v159Ev();
extern void _ZN10S1537C3_nt4v160Ev();
extern void _ZN10S1537C3_nt4v161Ev();
extern void _ZN10S1537C3_nt4v162Ev();
extern void _ZN10S1537C3_nt4v163Ev();
extern void _ZN10S1537C3_nt4v164Ev();
extern void _ZN10S1537C3_nt4v165Ev();
extern void _ZN10S1537C3_nt4v166Ev();
extern void _ZN10S1537C3_nt4v167Ev();
extern void _ZN10S1537C3_nt4v168Ev();
extern void _ZN10S1537C3_nt4v169Ev();
extern void _ZN10S1537C3_nt4v170Ev();
extern void _ZN10S1537C3_nt4v171Ev();
extern void _ZN10S1537C3_nt4v172Ev();
extern void _ZN10S1537C3_nt4v173Ev();
extern void _ZN10S1537C3_nt4v174Ev();
extern void _ZN10S1537C3_nt4v175Ev();
extern void _ZN10S1537C3_nt4v176Ev();
extern void _ZN10S1537C3_nt4v177Ev();
extern void _ZN10S1537C3_nt4v178Ev();
extern void _ZN10S1537C3_nt4v179Ev();
extern void _ZN10S1537C3_nt4v180Ev();
extern void _ZN10S1537C3_nt4v181Ev();
extern void _ZN10S1537C3_nt4v182Ev();
extern void _ZN10S1537C3_nt4v183Ev();
extern void _ZN10S1537C3_nt4v184Ev();
extern void _ZN10S1537C3_nt4v185Ev();
extern void _ZN10S1537C3_nt4v186Ev();
extern void _ZN10S1537C3_nt4v187Ev();
extern void _ZN10S1537C3_nt4v188Ev();
extern void _ZN10S1537C3_nt4v189Ev();
extern void _ZN10S1537C3_nt4v190Ev();
extern void _ZN10S1537C3_nt4v191Ev();
extern void _ZN10S1537C3_nt4v192Ev();
extern void _ZN10S1537C3_nt4v193Ev();
extern void _ZN10S1537C3_nt4v194Ev();
extern void _ZN10S1537C3_nt4v195Ev();
extern void _ZN10S1537C3_nt4v196Ev();
extern void _ZN10S1537C3_nt4v197Ev();
extern void _ZN10S1537C3_nt4v198Ev();
extern void _ZN10S1537C3_nt4v199Ev();
extern void _ZN10S1537C3_nt4v200Ev();
extern void _ZN10S1537C3_nt4v201Ev();
extern void _ZN10S1537C3_nt4v202Ev();
extern void _ZN10S1537C3_nt4v203Ev();
extern void _ZN10S1537C3_nt4v204Ev();
extern void _ZN10S1537C3_nt4v205Ev();
extern void _ZN10S1537C3_nt4v206Ev();
extern void _ZN10S1537C3_nt4v207Ev();
extern void _ZN10S1537C3_nt4v208Ev();
extern void _ZN10S1537C3_nt4v209Ev();
extern void _ZN10S1537C3_nt4v210Ev();
extern void _ZN10S1537C3_nt4v211Ev();
extern void _ZN10S1537C3_nt4v212Ev();
extern void _ZN10S1537C3_nt4v213Ev();
static  VTBL_ENTRY vtc_S1537C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1537C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1537C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v211Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v212Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v213Ev,
};
extern VTBL_ENTRY _ZTI10S1537C3_nt[];
VTBL_ENTRY *P__ZTI10S1537C3_nt = _ZTI10S1537C3_nt; 
extern  VTBL_ENTRY _ZTV10S1537C3_nt[];
Class_Descriptor cd_S1537C3_nt = {  "S1537C3_nt", // class name
  bases_S1537C3_nt, 1,
  &(vtc_S1537C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,436), // object size
  NSPAIRA(_ZTI10S1537C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1537C3_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  S1537C23  : S1537C8_nt {
};
//SIG(-1 S1537C23) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1537C23()
{
  extern Class_Descriptor cd_S1537C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1537C23, buf);
    S1537C23 &lv = *(new (buf) S1537C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1537C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1537C23)");
    check_base_class_offset(lv, (S1537C8_nt*), 0, "S1537C23");
    test_class_info(&lv, &cd_S1537C23);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1537C23(Test_S1537C23, "S1537C23", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
static Base_Class bases_S1537C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1537C23 = {  "S1537C23", // class name
  bases_S1537C23, 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  S1537C22  : S1537C23 {
};
//SIG(-1 S1537C22) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1537C22()
{
  extern Class_Descriptor cd_S1537C22;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1537C22, buf);
    S1537C22 &lv = *(new (buf) S1537C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1537C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1537C22)");
    check_base_class_offset(lv, (S1537C8_nt*)(S1537C23*), 0, "S1537C22");
    check_base_class_offset(lv, (S1537C23*), 0, "S1537C22");
    test_class_info(&lv, &cd_S1537C22);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1537C22(Test_S1537C22, "S1537C22", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
extern Class_Descriptor cd_S1537C23;
static Base_Class bases_S1537C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1537C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1537C22 = {  "S1537C22", // class name
  bases_S1537C22, 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  S1537C26  {
  ::S1537C14_nt s1537c26f0;
  ::S1537C14_nt s1537c26f1;
  void *s1537c26f2;
  unsigned int s1537c26f3:1;
};
//SIG(1 S1537C26) C1{ FC2{ m Fi[3]} FC2 Fp Fi:1}



static void Test_S1537C26()
{
  {
    init_simple_test("S1537C26");
    static S1537C26 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S1537C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1537C26)");
    check_field_offset(lv, s1537c26f0, 0, "S1537C26.s1537c26f0");
    check_field_offset(lv, s1537c26f1, 12, "S1537C26.s1537c26f1");
    check_field_offset(lv, s1537c26f2, 24, "S1537C26.s1537c26f2");
    set_bf_and_test(lv, s1537c26f3, ABISELECT(32,28), 0, 1, 1, "S1537C26");
  }
}
static Arrange_To_Call_Me vS1537C26(Test_S1537C26, "S1537C26", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1537C2  : S1537C3_nt {
  void *s1537c2f0[4];
  ::S1537C5_nt s1537c2f1[3];
  char s1537c2f2[6];
  void *s1537c2f3[3];
  int s1537c2f4[3];
  ::S1537C22 s1537c2f5;
  int s1537c2f6[3];
  void *s1537c2f7;
  int s1537c2f8[6];
  ::S1537C5_nt s1537c2f9[3];
  ::S1537C5_nt s1537c2f10[3];
  ::S1537C5_nt s1537c2f11;
  void *s1537c2f12;
  unsigned int s1537c2f13:1;
  unsigned int s1537c2f14:1;
  ::S1537C14_nt s1537c2f15[3];
  ::S1537C22 s1537c2f16;
  void *s1537c2f17[3];
  int s1537c2f18[3];
  ::S1537C14_nt s1537c2f19[3];
  int s1537c2f20[3];
  ::S1537C5_nt s1537c2f21[3];
  void *s1537c2f22[3];
  int s1537c2f23[2];
  ::S1537C26 s1537c2f24[3];
  ::S1537C14_nt s1537c2f25[3];
  void *s1537c2f26;
  int s1537c2f27;
  virtual  ~S1537C2(); // _ZN7S1537C2D1Ev
  virtual void  v214(); // _ZN7S1537C24v214Ev
  virtual void  v215(); // _ZN7S1537C24v215Ev
  virtual void  v216(); // _ZN7S1537C24v216Ev
  virtual void  v217(); // _ZN7S1537C24v217Ev
  virtual void  v218(); // _ZN7S1537C24v218Ev
  virtual void  v219(); // _ZN7S1537C24v219Ev
  virtual void  v220(); // _ZN7S1537C24v220Ev
  virtual void  v221(); // _ZN7S1537C24v221Ev
  virtual void  v222(); // _ZN7S1537C24v222Ev
  virtual void  v223(); // _ZN7S1537C24v223Ev
  S1537C2(); // tgen
};
//SIG(-1 S1537C2) C1{ BC2{ BC3{ vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 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 v213 v214 v215 v216 v217 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 Fp[4] FC4[3] Fc[6] Fp[3] Fi[3] FC14{ BC15{ BC7}} Fi[3] Fp Fi[6] FC4[3] FC4[3] FC4 Fp Fi:1 Fi:1 FC11[3] FC14 Fp[3] Fi[3] FC11[3] Fi[3] FC4[3] Fp[3] Fi[2] FC16{ FC11 FC11 Fp Fi:1}[3] FC11[3] Fp Fi}


 S1537C2 ::~S1537C2(){ note_dtor("S1537C2", this);}
void  S1537C2 ::v214(){vfunc_called(this, "_ZN7S1537C24v214Ev");}
void  S1537C2 ::v215(){vfunc_called(this, "_ZN7S1537C24v215Ev");}
void  S1537C2 ::v216(){vfunc_called(this, "_ZN7S1537C24v216Ev");}
void  S1537C2 ::v217(){vfunc_called(this, "_ZN7S1537C24v217Ev");}
void  S1537C2 ::v218(){vfunc_called(this, "_ZN7S1537C24v218Ev");}
void  S1537C2 ::v219(){vfunc_called(this, "_ZN7S1537C24v219Ev");}
void  S1537C2 ::v220(){vfunc_called(this, "_ZN7S1537C24v220Ev");}
void  S1537C2 ::v221(){vfunc_called(this, "_ZN7S1537C24v221Ev");}
void  S1537C2 ::v222(){vfunc_called(this, "_ZN7S1537C24v222Ev");}
void  S1537C2 ::v223(){vfunc_called(this, "_ZN7S1537C24v223Ev");}
S1537C2 ::S1537C2(){ note_ctor("S1537C2", this);} // tgen

static void Test_S1537C2()
{
  extern Class_Descriptor cd_S1537C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(148,233)];
    init_test(&cd_S1537C2, buf);
    S1537C2 *dp, &lv = *(dp=new (buf) S1537C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1176,928), "sizeof(S1537C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1537C2)");
    check_base_class_offset(lv, (S1537C4_nt*)(S1537C3_nt*), 0, "S1537C2");
    check_base_class_offset(lv, (S1537C3_nt*), 0, "S1537C2");
    check_field_offset(lv, s1537c2f0, ABISELECT(568,436), "S1537C2.s1537c2f0");
    check_field_offset(lv, s1537c2f1, ABISELECT(600,452), "S1537C2.s1537c2f1");
    check_field_offset(lv, s1537c2f2, ABISELECT(624,476), "S1537C2.s1537c2f2");
    check_field_offset(lv, s1537c2f3, ABISELECT(632,484), "S1537C2.s1537c2f3");
    check_field_offset(lv, s1537c2f4, ABISELECT(656,496), "S1537C2.s1537c2f4");
    check_field_offset(lv, s1537c2f5, ABISELECT(672,508), "S1537C2.s1537c2f5");
    check_field_offset(lv, s1537c2f6, ABISELECT(688,520), "S1537C2.s1537c2f6");
    check_field_offset(lv, s1537c2f7, ABISELECT(704,532), "S1537C2.s1537c2f7");
    check_field_offset(lv, s1537c2f8, ABISELECT(712,536), "S1537C2.s1537c2f8");
    check_field_offset(lv, s1537c2f9, ABISELECT(736,560), "S1537C2.s1537c2f9");
    check_field_offset(lv, s1537c2f10, ABISELECT(760,584), "S1537C2.s1537c2f10");
    check_field_offset(lv, s1537c2f11, ABISELECT(784,608), "S1537C2.s1537c2f11");
    check_field_offset(lv, s1537c2f12, ABISELECT(792,616), "S1537C2.s1537c2f12");
    set_bf_and_test(lv, s1537c2f13, ABISELECT(800,620), 0, 1, 1, "S1537C2");
    set_bf_and_test(lv, s1537c2f14, ABISELECT(800,620), 1, 1, 1, "S1537C2");
    check_field_offset(lv, s1537c2f15, ABISELECT(804,624), "S1537C2.s1537c2f15");
    check_field_offset(lv, s1537c2f16, ABISELECT(840,660), "S1537C2.s1537c2f16");
    check_field_offset(lv, s1537c2f17, ABISELECT(856,672), "S1537C2.s1537c2f17");
    check_field_offset(lv, s1537c2f18, ABISELECT(880,684), "S1537C2.s1537c2f18");
    check_field_offset(lv, s1537c2f19, ABISELECT(892,696), "S1537C2.s1537c2f19");
    check_field_offset(lv, s1537c2f20, ABISELECT(928,732), "S1537C2.s1537c2f20");
    check_field_offset(lv, s1537c2f21, ABISELECT(940,744), "S1537C2.s1537c2f21");
    check_field_offset(lv, s1537c2f22, ABISELECT(968,768), "S1537C2.s1537c2f22");
    check_field_offset(lv, s1537c2f23, ABISELECT(992,780), "S1537C2.s1537c2f23");
    check_field_offset(lv, s1537c2f24, ABISELECT(1000,788), "S1537C2.s1537c2f24");
    check_field_offset(lv, s1537c2f25, ABISELECT(1120,884), "S1537C2.s1537c2f25");
    check_field_offset(lv, s1537c2f26, ABISELECT(1160,920), "S1537C2.s1537c2f26");
    check_field_offset(lv, s1537c2f27, ABISELECT(1168,924), "S1537C2.s1537c2f27");
    test_class_info(&lv, &cd_S1537C2);
    dp->~S1537C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1537C2(Test_S1537C2, "S1537C2", ABISELECT(1176,928));

#else // __cplusplus

extern void _ZN7S1537C2C1Ev();
extern void _ZN7S1537C2D1Ev();
Name_Map name_map_S1537C2[] = {
  NSPAIR(_ZN7S1537C2C1Ev),
  NSPAIR(_ZN7S1537C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1537C4_nt;
extern VTBL_ENTRY _ZTI10S1537C4_nt[];
extern  VTBL_ENTRY _ZTV10S1537C4_nt[];
extern Class_Descriptor cd_S1537C3_nt;
extern VTBL_ENTRY _ZTI10S1537C3_nt[];
extern  VTBL_ENTRY _ZTV10S1537C3_nt[];
static Base_Class bases_S1537C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C4_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_S1537C3_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 _ZTI7S1537C2[];
extern void _ZN7S1537C2D1Ev();
extern void _ZN7S1537C2D0Ev();
extern void _ZN10S1537C4_nt2v7Ev();
extern void _ZN10S1537C4_nt2v8Ev();
extern void _ZN10S1537C4_nt2v9Ev();
extern void _ZN10S1537C4_nt3v10Ev();
extern void _ZN10S1537C4_nt3v11Ev();
extern void _ZN10S1537C4_nt3v12Ev();
extern void _ZN10S1537C4_nt3v13Ev();
extern void _ZN10S1537C4_nt3v14Ev();
extern void _ZN10S1537C4_nt3v15Ev();
extern void _ZN10S1537C4_nt3v16Ev();
extern void _ZN10S1537C4_nt3v17Ev();
extern void _ZN10S1537C4_nt3v18Ev();
extern void _ZN10S1537C4_nt3v19Ev();
extern void _ZN10S1537C4_nt3v20Ev();
extern void _ZN10S1537C4_nt3v21Ev();
extern void _ZN10S1537C4_nt3v22Ev();
extern void _ZN10S1537C4_nt3v23Ev();
extern void _ZN10S1537C4_nt3v24Ev();
extern void _ZN10S1537C4_nt3v25Ev();
extern void _ZN10S1537C4_nt3v26Ev();
extern void _ZN10S1537C4_nt3v27Ev();
extern void _ZN10S1537C4_nt3v28Ev();
extern void _ZN10S1537C4_nt3v29Ev();
extern void _ZN10S1537C4_nt3v30Ev();
extern void _ZN10S1537C4_nt3v31Ev();
extern void _ZN10S1537C4_nt3v32Ev();
extern void _ZN10S1537C4_nt3v33Ev();
extern void _ZN10S1537C4_nt3v34Ev();
extern void _ZN10S1537C4_nt3v35Ev();
extern void _ZN10S1537C4_nt3v36Ev();
extern void _ZN10S1537C4_nt3v37Ev();
extern void _ZN10S1537C4_nt3v38Ev();
extern void _ZN10S1537C4_nt3v39Ev();
extern void _ZN10S1537C4_nt3v40Ev();
extern void _ZN10S1537C4_nt3v41Ev();
extern void _ZN10S1537C4_nt3v42Ev();
extern void _ZN10S1537C4_nt3v43Ev();
extern void _ZN10S1537C4_nt3v44Ev();
extern void _ZN10S1537C4_nt3v45Ev();
extern void _ZN10S1537C4_nt3v46Ev();
extern void _ZN10S1537C4_nt3v47Ev();
extern void _ZN10S1537C4_nt3v48Ev();
extern void _ZN10S1537C4_nt3v49Ev();
extern void _ZN10S1537C4_nt3v50Ev();
extern void _ZN10S1537C4_nt3v51Ev();
extern void _ZN10S1537C4_nt3v52Ev();
extern void _ZN10S1537C4_nt3v53Ev();
extern void _ZN10S1537C4_nt3v54Ev();
extern void _ZN10S1537C4_nt3v55Ev();
extern void _ZN10S1537C4_nt3v56Ev();
extern void _ZN10S1537C4_nt3v57Ev();
extern void _ZN10S1537C4_nt3v58Ev();
extern void _ZN10S1537C4_nt3v59Ev();
extern void _ZN10S1537C4_nt3v60Ev();
extern void _ZN10S1537C4_nt3v61Ev();
extern void _ZN10S1537C4_nt3v62Ev();
extern void _ZN10S1537C4_nt3v63Ev();
extern void _ZN10S1537C4_nt3v64Ev();
extern void _ZN10S1537C4_nt3v65Ev();
extern void _ZN10S1537C4_nt3v66Ev();
extern void _ZN10S1537C4_nt3v67Ev();
extern void _ZN10S1537C4_nt3v68Ev();
extern void _ZN10S1537C4_nt3v69Ev();
extern void _ZN10S1537C4_nt3v70Ev();
extern void _ZN10S1537C3_nt3v71Ev();
extern void _ZN10S1537C3_nt3v72Ev();
extern void _ZN10S1537C3_nt3v73Ev();
extern void _ZN10S1537C3_nt3v74Ev();
extern void _ZN10S1537C3_nt3v75Ev();
extern void _ZN10S1537C3_nt3v76Ev();
extern void _ZN10S1537C3_nt3v77Ev();
extern void _ZN10S1537C3_nt3v78Ev();
extern void _ZN10S1537C3_nt3v79Ev();
extern void _ZN10S1537C3_nt3v80Ev();
extern void _ZN10S1537C3_nt3v81Ev();
extern void _ZN10S1537C3_nt3v82Ev();
extern void _ZN10S1537C3_nt3v83Ev();
extern void _ZN10S1537C3_nt3v84Ev();
extern void _ZN10S1537C3_nt3v85Ev();
extern void _ZN10S1537C3_nt3v86Ev();
extern void _ZN10S1537C3_nt3v87Ev();
extern void _ZN10S1537C3_nt3v88Ev();
extern void _ZN10S1537C3_nt3v89Ev();
extern void _ZN10S1537C3_nt3v90Ev();
extern void _ZN10S1537C3_nt3v91Ev();
extern void _ZN10S1537C3_nt3v92Ev();
extern void _ZN10S1537C3_nt3v93Ev();
extern void _ZN10S1537C3_nt3v94Ev();
extern void _ZN10S1537C3_nt3v95Ev();
extern void _ZN10S1537C3_nt3v96Ev();
extern void _ZN10S1537C3_nt3v97Ev();
extern void _ZN10S1537C3_nt3v98Ev();
extern void _ZN10S1537C3_nt3v99Ev();
extern void _ZN10S1537C3_nt4v100Ev();
extern void _ZN10S1537C3_nt4v101Ev();
extern void _ZN10S1537C3_nt4v102Ev();
extern void _ZN10S1537C3_nt4v103Ev();
extern void _ZN10S1537C3_nt4v104Ev();
extern void _ZN10S1537C3_nt4v105Ev();
extern void _ZN10S1537C3_nt4v106Ev();
extern void _ZN10S1537C3_nt4v107Ev();
extern void _ZN10S1537C3_nt4v108Ev();
extern void _ZN10S1537C3_nt4v109Ev();
extern void _ZN10S1537C3_nt4v110Ev();
extern void _ZN10S1537C3_nt4v111Ev();
extern void _ZN10S1537C3_nt4v112Ev();
extern void _ZN10S1537C3_nt4v113Ev();
extern void _ZN10S1537C3_nt4v114Ev();
extern void _ZN10S1537C3_nt4v115Ev();
extern void _ZN10S1537C3_nt4v116Ev();
extern void _ZN10S1537C3_nt4v117Ev();
extern void _ZN10S1537C3_nt4v118Ev();
extern void _ZN10S1537C3_nt4v119Ev();
extern void _ZN10S1537C3_nt4v120Ev();
extern void _ZN10S1537C3_nt4v121Ev();
extern void _ZN10S1537C3_nt4v122Ev();
extern void _ZN10S1537C3_nt4v123Ev();
extern void _ZN10S1537C3_nt4v124Ev();
extern void _ZN10S1537C3_nt4v125Ev();
extern void _ZN10S1537C3_nt4v126Ev();
extern void _ZN10S1537C3_nt4v127Ev();
extern void _ZN10S1537C3_nt4v128Ev();
extern void _ZN10S1537C3_nt4v129Ev();
extern void _ZN10S1537C3_nt4v130Ev();
extern void _ZN10S1537C3_nt4v131Ev();
extern void _ZN10S1537C3_nt4v132Ev();
extern void _ZN10S1537C3_nt4v133Ev();
extern void _ZN10S1537C3_nt4v134Ev();
extern void _ZN10S1537C3_nt4v135Ev();
extern void _ZN10S1537C3_nt4v136Ev();
extern void _ZN10S1537C3_nt4v137Ev();
extern void _ZN10S1537C3_nt4v138Ev();
extern void _ZN10S1537C3_nt4v139Ev();
extern void _ZN10S1537C3_nt4v140Ev();
extern void _ZN10S1537C3_nt4v141Ev();
extern void _ZN10S1537C3_nt4v142Ev();
extern void _ZN10S1537C3_nt4v143Ev();
extern void _ZN10S1537C3_nt4v144Ev();
extern void _ZN10S1537C3_nt4v145Ev();
extern void _ZN10S1537C3_nt4v146Ev();
extern void _ZN10S1537C3_nt4v147Ev();
extern void _ZN10S1537C3_nt4v148Ev();
extern void _ZN10S1537C3_nt4v149Ev();
extern void _ZN10S1537C3_nt4v150Ev();
extern void _ZN10S1537C3_nt4v151Ev();
extern void _ZN10S1537C3_nt4v152Ev();
extern void _ZN10S1537C3_nt4v153Ev();
extern void _ZN10S1537C3_nt4v154Ev();
extern void _ZN10S1537C3_nt4v155Ev();
extern void _ZN10S1537C3_nt4v156Ev();
extern void _ZN10S1537C3_nt4v157Ev();
extern void _ZN10S1537C3_nt4v158Ev();
extern void _ZN10S1537C3_nt4v159Ev();
extern void _ZN10S1537C3_nt4v160Ev();
extern void _ZN10S1537C3_nt4v161Ev();
extern void _ZN10S1537C3_nt4v162Ev();
extern void _ZN10S1537C3_nt4v163Ev();
extern void _ZN10S1537C3_nt4v164Ev();
extern void _ZN10S1537C3_nt4v165Ev();
extern void _ZN10S1537C3_nt4v166Ev();
extern void _ZN10S1537C3_nt4v167Ev();
extern void _ZN10S1537C3_nt4v168Ev();
extern void _ZN10S1537C3_nt4v169Ev();
extern void _ZN10S1537C3_nt4v170Ev();
extern void _ZN10S1537C3_nt4v171Ev();
extern void _ZN10S1537C3_nt4v172Ev();
extern void _ZN10S1537C3_nt4v173Ev();
extern void _ZN10S1537C3_nt4v174Ev();
extern void _ZN10S1537C3_nt4v175Ev();
extern void _ZN10S1537C3_nt4v176Ev();
extern void _ZN10S1537C3_nt4v177Ev();
extern void _ZN10S1537C3_nt4v178Ev();
extern void _ZN10S1537C3_nt4v179Ev();
extern void _ZN10S1537C3_nt4v180Ev();
extern void _ZN10S1537C3_nt4v181Ev();
extern void _ZN10S1537C3_nt4v182Ev();
extern void _ZN10S1537C3_nt4v183Ev();
extern void _ZN10S1537C3_nt4v184Ev();
extern void _ZN10S1537C3_nt4v185Ev();
extern void _ZN10S1537C3_nt4v186Ev();
extern void _ZN10S1537C3_nt4v187Ev();
extern void _ZN10S1537C3_nt4v188Ev();
extern void _ZN10S1537C3_nt4v189Ev();
extern void _ZN10S1537C3_nt4v190Ev();
extern void _ZN10S1537C3_nt4v191Ev();
extern void _ZN10S1537C3_nt4v192Ev();
extern void _ZN10S1537C3_nt4v193Ev();
extern void _ZN10S1537C3_nt4v194Ev();
extern void _ZN10S1537C3_nt4v195Ev();
extern void _ZN10S1537C3_nt4v196Ev();
extern void _ZN10S1537C3_nt4v197Ev();
extern void _ZN10S1537C3_nt4v198Ev();
extern void _ZN10S1537C3_nt4v199Ev();
extern void _ZN10S1537C3_nt4v200Ev();
extern void _ZN10S1537C3_nt4v201Ev();
extern void _ZN10S1537C3_nt4v202Ev();
extern void _ZN10S1537C3_nt4v203Ev();
extern void _ZN10S1537C3_nt4v204Ev();
extern void _ZN10S1537C3_nt4v205Ev();
extern void _ZN10S1537C3_nt4v206Ev();
extern void _ZN10S1537C3_nt4v207Ev();
extern void _ZN10S1537C3_nt4v208Ev();
extern void _ZN10S1537C3_nt4v209Ev();
extern void _ZN10S1537C3_nt4v210Ev();
extern void _ZN10S1537C3_nt4v211Ev();
extern void _ZN10S1537C3_nt4v212Ev();
extern void _ZN10S1537C3_nt4v213Ev();
extern void _ZN7S1537C24v214Ev();
extern void _ZN7S1537C24v215Ev();
extern void _ZN7S1537C24v216Ev();
extern void _ZN7S1537C24v217Ev();
extern void _ZN7S1537C24v218Ev();
extern void _ZN7S1537C24v219Ev();
extern void _ZN7S1537C24v220Ev();
extern void _ZN7S1537C24v221Ev();
extern void _ZN7S1537C24v222Ev();
extern void _ZN7S1537C24v223Ev();
static  VTBL_ENTRY vtc_S1537C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1537C2[0]),
  (VTBL_ENTRY)&_ZN7S1537C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1537C2D0Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v211Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v212Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v213Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v214Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v215Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v216Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v217Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v218Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v219Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v220Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v221Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v222Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v223Ev,
};
extern VTBL_ENTRY _ZTI7S1537C2[];
extern  VTBL_ENTRY _ZTV7S1537C2[];
Class_Descriptor cd_S1537C2 = {  "S1537C2", // class name
  bases_S1537C2, 2,
  &(vtc_S1537C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1176,928), // object size
  NSPAIRA(_ZTI7S1537C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1537C2),221, //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  S1537C1  : S1537C2 {
  unsigned int s1537c1f0:1;
  unsigned int s1537c1f1:1;
  ::S1537C5_nt s1537c1f2[3];
  void *s1537c1f3[10];
  ::S1537C5_nt s1537c1f4[3];
  ::S1537C5_nt s1537c1f5;
  int s1537c1f6;
  ::S1537C14_nt s1537c1f7;
  ::S1537C14_nt s1537c1f8[3];
  ::S1537C14_nt s1537c1f9;
  ::S1537C14_nt s1537c1f10;
  int s1537c1f11[2];
  ::S1537C5_nt s1537c1f12;
  ::S1537C5_nt s1537c1f13;
  virtual  ~S1537C1(); // _ZN7S1537C1D1Ev
  virtual void  v1(); // _ZN7S1537C12v1Ev
  virtual void  v2(); // _ZN7S1537C12v2Ev
  virtual void  v3(); // _ZN7S1537C12v3Ev
  virtual void  v4(); // _ZN7S1537C12v4Ev
  virtual void  v5(); // _ZN7S1537C12v5Ev
  virtual void  v6(); // _ZN7S1537C12v6Ev
  S1537C1(); // tgen
};
//SIG(1 S1537C1) C1{ BC2{ BC3{ BC4{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 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 v213 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 v214 v215 v216 v217 v218 v219 v220 v221 v222 v223 Fp[4] FC5[3] Fc[6] Fp[3] Fi[3] FC15{ BC16{ BC8}} Fi[3] Fp Fi[6] FC5[3] FC5[3] FC5 Fp Fi:1 Fi:1 FC12[3] FC15 Fp[3] Fi[3] FC12[3] Fi[3] FC5[3] Fp[3] Fi[2] FC17{ FC12 FC12 Fp Fi:1}[3] FC12[3] Fp Fi} vd v1 v2 v3 v4 v5 v6 Fi:1 Fi:1 FC5[3] Fp[10] FC5[3] FC5 Fi FC12 FC12[3] FC12 FC12 Fi[2] FC5 FC5}


 S1537C1 ::~S1537C1(){ note_dtor("S1537C1", this);}
void  S1537C1 ::v1(){vfunc_called(this, "_ZN7S1537C12v1Ev");}
void  S1537C1 ::v2(){vfunc_called(this, "_ZN7S1537C12v2Ev");}
void  S1537C1 ::v3(){vfunc_called(this, "_ZN7S1537C12v3Ev");}
void  S1537C1 ::v4(){vfunc_called(this, "_ZN7S1537C12v4Ev");}
void  S1537C1 ::v5(){vfunc_called(this, "_ZN7S1537C12v5Ev");}
void  S1537C1 ::v6(){vfunc_called(this, "_ZN7S1537C12v6Ev");}
S1537C1 ::S1537C1(){ note_ctor("S1537C1", this);} // tgen

static void Test_S1537C1()
{
  extern Class_Descriptor cd_S1537C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(178,283)];
    init_test(&cd_S1537C1, buf);
    S1537C1 *dp, &lv = *(dp=new (buf) S1537C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1416,1128), "sizeof(S1537C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1537C1)");
    check_base_class_offset(lv, (S1537C4_nt*)(S1537C3_nt*)(S1537C2*), 0, "S1537C1");
    check_base_class_offset(lv, (S1537C3_nt*)(S1537C2*), 0, "S1537C1");
    check_base_class_offset(lv, (S1537C2*), 0, "S1537C1");
    set_bf_and_test(lv, s1537c1f0, ABISELECT(1172,928), 0, 1, 1, "S1537C1");
    set_bf_and_test(lv, s1537c1f1, ABISELECT(1172,928), 1, 1, 1, "S1537C1");
    check_field_offset(lv, s1537c1f2, ABISELECT(1176,932), "S1537C1.s1537c1f2");
    check_field_offset(lv, s1537c1f3, ABISELECT(1200,956), "S1537C1.s1537c1f3");
    check_field_offset(lv, s1537c1f4, ABISELECT(1280,996), "S1537C1.s1537c1f4");
    check_field_offset(lv, s1537c1f5, ABISELECT(1304,1020), "S1537C1.s1537c1f5");
    check_field_offset(lv, s1537c1f6, ABISELECT(1312,1028), "S1537C1.s1537c1f6");
    check_field_offset(lv, s1537c1f7, ABISELECT(1316,1032), "S1537C1.s1537c1f7");
    check_field_offset(lv, s1537c1f8, ABISELECT(1328,1044), "S1537C1.s1537c1f8");
    check_field_offset(lv, s1537c1f9, ABISELECT(1364,1080), "S1537C1.s1537c1f9");
    check_field_offset(lv, s1537c1f10, ABISELECT(1376,1092), "S1537C1.s1537c1f10");
    check_field_offset(lv, s1537c1f11, ABISELECT(1388,1104), "S1537C1.s1537c1f11");
    check_field_offset(lv, s1537c1f12, ABISELECT(1396,1112), "S1537C1.s1537c1f12");
    check_field_offset(lv, s1537c1f13, ABISELECT(1404,1120), "S1537C1.s1537c1f13");
    test_class_info(&lv, &cd_S1537C1);
    dp->~S1537C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1537C1(Test_S1537C1, "S1537C1", ABISELECT(1416,1128));

#else // __cplusplus

extern void _ZN7S1537C1C1Ev();
extern void _ZN7S1537C1D1Ev();
Name_Map name_map_S1537C1[] = {
  NSPAIR(_ZN7S1537C1C1Ev),
  NSPAIR(_ZN7S1537C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1537C4_nt;
extern VTBL_ENTRY _ZTI10S1537C4_nt[];
extern  VTBL_ENTRY _ZTV10S1537C4_nt[];
extern Class_Descriptor cd_S1537C3_nt;
extern VTBL_ENTRY _ZTI10S1537C3_nt[];
extern  VTBL_ENTRY _ZTV10S1537C3_nt[];
extern Class_Descriptor cd_S1537C2;
extern VTBL_ENTRY _ZTI7S1537C2[];
extern  VTBL_ENTRY _ZTV7S1537C2[];
static Base_Class bases_S1537C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C4_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_S1537C3_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_S1537C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1537C1[];
extern void _ZN7S1537C1D1Ev();
extern void _ZN7S1537C1D0Ev();
extern void _ZN10S1537C4_nt2v7Ev();
extern void _ZN10S1537C4_nt2v8Ev();
extern void _ZN10S1537C4_nt2v9Ev();
extern void _ZN10S1537C4_nt3v10Ev();
extern void _ZN10S1537C4_nt3v11Ev();
extern void _ZN10S1537C4_nt3v12Ev();
extern void _ZN10S1537C4_nt3v13Ev();
extern void _ZN10S1537C4_nt3v14Ev();
extern void _ZN10S1537C4_nt3v15Ev();
extern void _ZN10S1537C4_nt3v16Ev();
extern void _ZN10S1537C4_nt3v17Ev();
extern void _ZN10S1537C4_nt3v18Ev();
extern void _ZN10S1537C4_nt3v19Ev();
extern void _ZN10S1537C4_nt3v20Ev();
extern void _ZN10S1537C4_nt3v21Ev();
extern void _ZN10S1537C4_nt3v22Ev();
extern void _ZN10S1537C4_nt3v23Ev();
extern void _ZN10S1537C4_nt3v24Ev();
extern void _ZN10S1537C4_nt3v25Ev();
extern void _ZN10S1537C4_nt3v26Ev();
extern void _ZN10S1537C4_nt3v27Ev();
extern void _ZN10S1537C4_nt3v28Ev();
extern void _ZN10S1537C4_nt3v29Ev();
extern void _ZN10S1537C4_nt3v30Ev();
extern void _ZN10S1537C4_nt3v31Ev();
extern void _ZN10S1537C4_nt3v32Ev();
extern void _ZN10S1537C4_nt3v33Ev();
extern void _ZN10S1537C4_nt3v34Ev();
extern void _ZN10S1537C4_nt3v35Ev();
extern void _ZN10S1537C4_nt3v36Ev();
extern void _ZN10S1537C4_nt3v37Ev();
extern void _ZN10S1537C4_nt3v38Ev();
extern void _ZN10S1537C4_nt3v39Ev();
extern void _ZN10S1537C4_nt3v40Ev();
extern void _ZN10S1537C4_nt3v41Ev();
extern void _ZN10S1537C4_nt3v42Ev();
extern void _ZN10S1537C4_nt3v43Ev();
extern void _ZN10S1537C4_nt3v44Ev();
extern void _ZN10S1537C4_nt3v45Ev();
extern void _ZN10S1537C4_nt3v46Ev();
extern void _ZN10S1537C4_nt3v47Ev();
extern void _ZN10S1537C4_nt3v48Ev();
extern void _ZN10S1537C4_nt3v49Ev();
extern void _ZN10S1537C4_nt3v50Ev();
extern void _ZN10S1537C4_nt3v51Ev();
extern void _ZN10S1537C4_nt3v52Ev();
extern void _ZN10S1537C4_nt3v53Ev();
extern void _ZN10S1537C4_nt3v54Ev();
extern void _ZN10S1537C4_nt3v55Ev();
extern void _ZN10S1537C4_nt3v56Ev();
extern void _ZN10S1537C4_nt3v57Ev();
extern void _ZN10S1537C4_nt3v58Ev();
extern void _ZN10S1537C4_nt3v59Ev();
extern void _ZN10S1537C4_nt3v60Ev();
extern void _ZN10S1537C4_nt3v61Ev();
extern void _ZN10S1537C4_nt3v62Ev();
extern void _ZN10S1537C4_nt3v63Ev();
extern void _ZN10S1537C4_nt3v64Ev();
extern void _ZN10S1537C4_nt3v65Ev();
extern void _ZN10S1537C4_nt3v66Ev();
extern void _ZN10S1537C4_nt3v67Ev();
extern void _ZN10S1537C4_nt3v68Ev();
extern void _ZN10S1537C4_nt3v69Ev();
extern void _ZN10S1537C4_nt3v70Ev();
extern void _ZN10S1537C3_nt3v71Ev();
extern void _ZN10S1537C3_nt3v72Ev();
extern void _ZN10S1537C3_nt3v73Ev();
extern void _ZN10S1537C3_nt3v74Ev();
extern void _ZN10S1537C3_nt3v75Ev();
extern void _ZN10S1537C3_nt3v76Ev();
extern void _ZN10S1537C3_nt3v77Ev();
extern void _ZN10S1537C3_nt3v78Ev();
extern void _ZN10S1537C3_nt3v79Ev();
extern void _ZN10S1537C3_nt3v80Ev();
extern void _ZN10S1537C3_nt3v81Ev();
extern void _ZN10S1537C3_nt3v82Ev();
extern void _ZN10S1537C3_nt3v83Ev();
extern void _ZN10S1537C3_nt3v84Ev();
extern void _ZN10S1537C3_nt3v85Ev();
extern void _ZN10S1537C3_nt3v86Ev();
extern void _ZN10S1537C3_nt3v87Ev();
extern void _ZN10S1537C3_nt3v88Ev();
extern void _ZN10S1537C3_nt3v89Ev();
extern void _ZN10S1537C3_nt3v90Ev();
extern void _ZN10S1537C3_nt3v91Ev();
extern void _ZN10S1537C3_nt3v92Ev();
extern void _ZN10S1537C3_nt3v93Ev();
extern void _ZN10S1537C3_nt3v94Ev();
extern void _ZN10S1537C3_nt3v95Ev();
extern void _ZN10S1537C3_nt3v96Ev();
extern void _ZN10S1537C3_nt3v97Ev();
extern void _ZN10S1537C3_nt3v98Ev();
extern void _ZN10S1537C3_nt3v99Ev();
extern void _ZN10S1537C3_nt4v100Ev();
extern void _ZN10S1537C3_nt4v101Ev();
extern void _ZN10S1537C3_nt4v102Ev();
extern void _ZN10S1537C3_nt4v103Ev();
extern void _ZN10S1537C3_nt4v104Ev();
extern void _ZN10S1537C3_nt4v105Ev();
extern void _ZN10S1537C3_nt4v106Ev();
extern void _ZN10S1537C3_nt4v107Ev();
extern void _ZN10S1537C3_nt4v108Ev();
extern void _ZN10S1537C3_nt4v109Ev();
extern void _ZN10S1537C3_nt4v110Ev();
extern void _ZN10S1537C3_nt4v111Ev();
extern void _ZN10S1537C3_nt4v112Ev();
extern void _ZN10S1537C3_nt4v113Ev();
extern void _ZN10S1537C3_nt4v114Ev();
extern void _ZN10S1537C3_nt4v115Ev();
extern void _ZN10S1537C3_nt4v116Ev();
extern void _ZN10S1537C3_nt4v117Ev();
extern void _ZN10S1537C3_nt4v118Ev();
extern void _ZN10S1537C3_nt4v119Ev();
extern void _ZN10S1537C3_nt4v120Ev();
extern void _ZN10S1537C3_nt4v121Ev();
extern void _ZN10S1537C3_nt4v122Ev();
extern void _ZN10S1537C3_nt4v123Ev();
extern void _ZN10S1537C3_nt4v124Ev();
extern void _ZN10S1537C3_nt4v125Ev();
extern void _ZN10S1537C3_nt4v126Ev();
extern void _ZN10S1537C3_nt4v127Ev();
extern void _ZN10S1537C3_nt4v128Ev();
extern void _ZN10S1537C3_nt4v129Ev();
extern void _ZN10S1537C3_nt4v130Ev();
extern void _ZN10S1537C3_nt4v131Ev();
extern void _ZN10S1537C3_nt4v132Ev();
extern void _ZN10S1537C3_nt4v133Ev();
extern void _ZN10S1537C3_nt4v134Ev();
extern void _ZN10S1537C3_nt4v135Ev();
extern void _ZN10S1537C3_nt4v136Ev();
extern void _ZN10S1537C3_nt4v137Ev();
extern void _ZN10S1537C3_nt4v138Ev();
extern void _ZN10S1537C3_nt4v139Ev();
extern void _ZN10S1537C3_nt4v140Ev();
extern void _ZN10S1537C3_nt4v141Ev();
extern void _ZN10S1537C3_nt4v142Ev();
extern void _ZN10S1537C3_nt4v143Ev();
extern void _ZN10S1537C3_nt4v144Ev();
extern void _ZN10S1537C3_nt4v145Ev();
extern void _ZN10S1537C3_nt4v146Ev();
extern void _ZN10S1537C3_nt4v147Ev();
extern void _ZN10S1537C3_nt4v148Ev();
extern void _ZN10S1537C3_nt4v149Ev();
extern void _ZN10S1537C3_nt4v150Ev();
extern void _ZN10S1537C3_nt4v151Ev();
extern void _ZN10S1537C3_nt4v152Ev();
extern void _ZN10S1537C3_nt4v153Ev();
extern void _ZN10S1537C3_nt4v154Ev();
extern void _ZN10S1537C3_nt4v155Ev();
extern void _ZN10S1537C3_nt4v156Ev();
extern void _ZN10S1537C3_nt4v157Ev();
extern void _ZN10S1537C3_nt4v158Ev();
extern void _ZN10S1537C3_nt4v159Ev();
extern void _ZN10S1537C3_nt4v160Ev();
extern void _ZN10S1537C3_nt4v161Ev();
extern void _ZN10S1537C3_nt4v162Ev();
extern void _ZN10S1537C3_nt4v163Ev();
extern void _ZN10S1537C3_nt4v164Ev();
extern void _ZN10S1537C3_nt4v165Ev();
extern void _ZN10S1537C3_nt4v166Ev();
extern void _ZN10S1537C3_nt4v167Ev();
extern void _ZN10S1537C3_nt4v168Ev();
extern void _ZN10S1537C3_nt4v169Ev();
extern void _ZN10S1537C3_nt4v170Ev();
extern void _ZN10S1537C3_nt4v171Ev();
extern void _ZN10S1537C3_nt4v172Ev();
extern void _ZN10S1537C3_nt4v173Ev();
extern void _ZN10S1537C3_nt4v174Ev();
extern void _ZN10S1537C3_nt4v175Ev();
extern void _ZN10S1537C3_nt4v176Ev();
extern void _ZN10S1537C3_nt4v177Ev();
extern void _ZN10S1537C3_nt4v178Ev();
extern void _ZN10S1537C3_nt4v179Ev();
extern void _ZN10S1537C3_nt4v180Ev();
extern void _ZN10S1537C3_nt4v181Ev();
extern void _ZN10S1537C3_nt4v182Ev();
extern void _ZN10S1537C3_nt4v183Ev();
extern void _ZN10S1537C3_nt4v184Ev();
extern void _ZN10S1537C3_nt4v185Ev();
extern void _ZN10S1537C3_nt4v186Ev();
extern void _ZN10S1537C3_nt4v187Ev();
extern void _ZN10S1537C3_nt4v188Ev();
extern void _ZN10S1537C3_nt4v189Ev();
extern void _ZN10S1537C3_nt4v190Ev();
extern void _ZN10S1537C3_nt4v191Ev();
extern void _ZN10S1537C3_nt4v192Ev();
extern void _ZN10S1537C3_nt4v193Ev();
extern void _ZN10S1537C3_nt4v194Ev();
extern void _ZN10S1537C3_nt4v195Ev();
extern void _ZN10S1537C3_nt4v196Ev();
extern void _ZN10S1537C3_nt4v197Ev();
extern void _ZN10S1537C3_nt4v198Ev();
extern void _ZN10S1537C3_nt4v199Ev();
extern void _ZN10S1537C3_nt4v200Ev();
extern void _ZN10S1537C3_nt4v201Ev();
extern void _ZN10S1537C3_nt4v202Ev();
extern void _ZN10S1537C3_nt4v203Ev();
extern void _ZN10S1537C3_nt4v204Ev();
extern void _ZN10S1537C3_nt4v205Ev();
extern void _ZN10S1537C3_nt4v206Ev();
extern void _ZN10S1537C3_nt4v207Ev();
extern void _ZN10S1537C3_nt4v208Ev();
extern void _ZN10S1537C3_nt4v209Ev();
extern void _ZN10S1537C3_nt4v210Ev();
extern void _ZN10S1537C3_nt4v211Ev();
extern void _ZN10S1537C3_nt4v212Ev();
extern void _ZN10S1537C3_nt4v213Ev();
extern void _ZN7S1537C24v214Ev();
extern void _ZN7S1537C24v215Ev();
extern void _ZN7S1537C24v216Ev();
extern void _ZN7S1537C24v217Ev();
extern void _ZN7S1537C24v218Ev();
extern void _ZN7S1537C24v219Ev();
extern void _ZN7S1537C24v220Ev();
extern void _ZN7S1537C24v221Ev();
extern void _ZN7S1537C24v222Ev();
extern void _ZN7S1537C24v223Ev();
extern void _ZN7S1537C12v1Ev();
extern void _ZN7S1537C12v2Ev();
extern void _ZN7S1537C12v3Ev();
extern void _ZN7S1537C12v4Ev();
extern void _ZN7S1537C12v5Ev();
extern void _ZN7S1537C12v6Ev();
static  VTBL_ENTRY vtc_S1537C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1537C1[0]),
  (VTBL_ENTRY)&_ZN7S1537C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1537C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1537C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v211Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v212Ev,
  (VTBL_ENTRY)&_ZN10S1537C3_nt4v213Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v214Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v215Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v216Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v217Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v218Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v219Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v220Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v221Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v222Ev,
  (VTBL_ENTRY)&_ZN7S1537C24v223Ev,
  (VTBL_ENTRY)&_ZN7S1537C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1537C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1537C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1537C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1537C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1537C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S1537C1[];
extern  VTBL_ENTRY _ZTV7S1537C1[];
Class_Descriptor cd_S1537C1 = {  "S1537C1", // class name
  bases_S1537C1, 3,
  &(vtc_S1537C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1416,1128), // object size
  NSPAIRA(_ZTI7S1537C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1537C1),227, //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  S1325C4  {
  int s1325c4f0;
  __tsi64 s1325c4f1;
  void *s1325c4f2[4];
  int s1325c4f3[2];
  void *s1325c4f4;
  ::S1537C5_nt s1325c4f5;
  void *s1325c4f6[2];
  virtual  ~S1325C4(); // _ZN7S1325C4D1Ev
  virtual void  v18(); // _ZN7S1325C43v18Ev
  virtual void  v19(); // _ZN7S1325C43v19Ev
  virtual void  v20(); // _ZN7S1325C43v20Ev
  virtual void  v21(); // _ZN7S1325C43v21Ev
  virtual void  v22(); // _ZN7S1325C43v22Ev
  virtual void  v23(); // _ZN7S1325C43v23Ev
  virtual void  v24(); // _ZN7S1325C43v24Ev
  virtual void  v25(); // _ZN7S1325C43v25Ev
  virtual void  v26(); // _ZN7S1325C43v26Ev
  virtual void  v27(); // _ZN7S1325C43v27Ev
  virtual void  v28(); // _ZN7S1325C43v28Ev
  virtual void  v29(); // _ZN7S1325C43v29Ev
  virtual void  v30(); // _ZN7S1325C43v30Ev
  virtual void  v31(); // _ZN7S1325C43v31Ev
  virtual void  v32(); // _ZN7S1325C43v32Ev
  virtual void  v33(); // _ZN7S1325C43v33Ev
  virtual void  v34(); // _ZN7S1325C43v34Ev
  virtual void  v35(); // _ZN7S1325C43v35Ev
  virtual void  v36(); // _ZN7S1325C43v36Ev
  virtual void  v37(); // _ZN7S1325C43v37Ev
  virtual void  v38(); // _ZN7S1325C43v38Ev
  virtual void  v39(); // _ZN7S1325C43v39Ev
  virtual void  v40(); // _ZN7S1325C43v40Ev
  virtual void  v41(); // _ZN7S1325C43v41Ev
  virtual void  v42(); // _ZN7S1325C43v42Ev
  virtual void  v43(); // _ZN7S1325C43v43Ev
  virtual void  v44(); // _ZN7S1325C43v44Ev
  virtual void  v45(); // _ZN7S1325C43v45Ev
  virtual void  v46(); // _ZN7S1325C43v46Ev
  virtual void  v47(); // _ZN7S1325C43v47Ev
  virtual void  v48(); // _ZN7S1325C43v48Ev
  virtual void  v49(); // _ZN7S1325C43v49Ev
  virtual void  v50(); // _ZN7S1325C43v50Ev
  virtual void  v51(); // _ZN7S1325C43v51Ev
  virtual void  v52(); // _ZN7S1325C43v52Ev
  virtual void  v53(); // _ZN7S1325C43v53Ev
  virtual void  v54(); // _ZN7S1325C43v54Ev
  virtual void  v55(); // _ZN7S1325C43v55Ev
  virtual void  v56(); // _ZN7S1325C43v56Ev
  virtual void  v57(); // _ZN7S1325C43v57Ev
  virtual void  v58(); // _ZN7S1325C43v58Ev
  virtual void  v59(); // _ZN7S1325C43v59Ev
  virtual void  v60(); // _ZN7S1325C43v60Ev
  virtual void  v61(); // _ZN7S1325C43v61Ev
  virtual void  v62(); // _ZN7S1325C43v62Ev
  virtual void  v63(); // _ZN7S1325C43v63Ev
  virtual void  v64(); // _ZN7S1325C43v64Ev
  virtual void  v65(); // _ZN7S1325C43v65Ev
  virtual void  v66(); // _ZN7S1325C43v66Ev
  virtual void  v67(); // _ZN7S1325C43v67Ev
  virtual void  v68(); // _ZN7S1325C43v68Ev
  virtual void  v69(); // _ZN7S1325C43v69Ev
  virtual void  v70(); // _ZN7S1325C43v70Ev
  virtual void  v71(); // _ZN7S1325C43v71Ev
  virtual void  v72(); // _ZN7S1325C43v72Ev
  virtual void  v73(); // _ZN7S1325C43v73Ev
  virtual void  v74(); // _ZN7S1325C43v74Ev
  virtual void  v75(); // _ZN7S1325C43v75Ev
  virtual void  v76(); // _ZN7S1325C43v76Ev
  virtual void  v77(); // _ZN7S1325C43v77Ev
  virtual void  v78(); // _ZN7S1325C43v78Ev
  virtual void  v79(); // _ZN7S1325C43v79Ev
  virtual void  v80(); // _ZN7S1325C43v80Ev
  virtual void  v81(); // _ZN7S1325C43v81Ev
  S1325C4(); // tgen
};
//SIG(-1 S1325C4) 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]}


 S1325C4 ::~S1325C4(){ note_dtor("S1325C4", this);}
void  S1325C4 ::v18(){vfunc_called(this, "_ZN7S1325C43v18Ev");}
void  S1325C4 ::v19(){vfunc_called(this, "_ZN7S1325C43v19Ev");}
void  S1325C4 ::v20(){vfunc_called(this, "_ZN7S1325C43v20Ev");}
void  S1325C4 ::v21(){vfunc_called(this, "_ZN7S1325C43v21Ev");}
void  S1325C4 ::v22(){vfunc_called(this, "_ZN7S1325C43v22Ev");}
void  S1325C4 ::v23(){vfunc_called(this, "_ZN7S1325C43v23Ev");}
void  S1325C4 ::v24(){vfunc_called(this, "_ZN7S1325C43v24Ev");}
void  S1325C4 ::v25(){vfunc_called(this, "_ZN7S1325C43v25Ev");}
void  S1325C4 ::v26(){vfunc_called(this, "_ZN7S1325C43v26Ev");}
void  S1325C4 ::v27(){vfunc_called(this, "_ZN7S1325C43v27Ev");}
void  S1325C4 ::v28(){vfunc_called(this, "_ZN7S1325C43v28Ev");}
void  S1325C4 ::v29(){vfunc_called(this, "_ZN7S1325C43v29Ev");}
void  S1325C4 ::v30(){vfunc_called(this, "_ZN7S1325C43v30Ev");}
void  S1325C4 ::v31(){vfunc_called(this, "_ZN7S1325C43v31Ev");}
void  S1325C4 ::v32(){vfunc_called(this, "_ZN7S1325C43v32Ev");}
void  S1325C4 ::v33(){vfunc_called(this, "_ZN7S1325C43v33Ev");}
void  S1325C4 ::v34(){vfunc_called(this, "_ZN7S1325C43v34Ev");}
void  S1325C4 ::v35(){vfunc_called(this, "_ZN7S1325C43v35Ev");}
void  S1325C4 ::v36(){vfunc_called(this, "_ZN7S1325C43v36Ev");}
void  S1325C4 ::v37(){vfunc_called(this, "_ZN7S1325C43v37Ev");}
void  S1325C4 ::v38(){vfunc_called(this, "_ZN7S1325C43v38Ev");}
void  S1325C4 ::v39(){vfunc_called(this, "_ZN7S1325C43v39Ev");}
void  S1325C4 ::v40(){vfunc_called(this, "_ZN7S1325C43v40Ev");}
void  S1325C4 ::v41(){vfunc_called(this, "_ZN7S1325C43v41Ev");}
void  S1325C4 ::v42(){vfunc_called(this, "_ZN7S1325C43v42Ev");}
void  S1325C4 ::v43(){vfunc_called(this, "_ZN7S1325C43v43Ev");}
void  S1325C4 ::v44(){vfunc_called(this, "_ZN7S1325C43v44Ev");}
void  S1325C4 ::v45(){vfunc_called(this, "_ZN7S1325C43v45Ev");}
void  S1325C4 ::v46(){vfunc_called(this, "_ZN7S1325C43v46Ev");}
void  S1325C4 ::v47(){vfunc_called(this, "_ZN7S1325C43v47Ev");}
void  S1325C4 ::v48(){vfunc_called(this, "_ZN7S1325C43v48Ev");}
void  S1325C4 ::v49(){vfunc_called(this, "_ZN7S1325C43v49Ev");}
void  S1325C4 ::v50(){vfunc_called(this, "_ZN7S1325C43v50Ev");}
void  S1325C4 ::v51(){vfunc_called(this, "_ZN7S1325C43v51Ev");}
void  S1325C4 ::v52(){vfunc_called(this, "_ZN7S1325C43v52Ev");}
void  S1325C4 ::v53(){vfunc_called(this, "_ZN7S1325C43v53Ev");}
void  S1325C4 ::v54(){vfunc_called(this, "_ZN7S1325C43v54Ev");}
void  S1325C4 ::v55(){vfunc_called(this, "_ZN7S1325C43v55Ev");}
void  S1325C4 ::v56(){vfunc_called(this, "_ZN7S1325C43v56Ev");}
void  S1325C4 ::v57(){vfunc_called(this, "_ZN7S1325C43v57Ev");}
void  S1325C4 ::v58(){vfunc_called(this, "_ZN7S1325C43v58Ev");}
void  S1325C4 ::v59(){vfunc_called(this, "_ZN7S1325C43v59Ev");}
void  S1325C4 ::v60(){vfunc_called(this, "_ZN7S1325C43v60Ev");}
void  S1325C4 ::v61(){vfunc_called(this, "_ZN7S1325C43v61Ev");}
void  S1325C4 ::v62(){vfunc_called(this, "_ZN7S1325C43v62Ev");}
void  S1325C4 ::v63(){vfunc_called(this, "_ZN7S1325C43v63Ev");}
void  S1325C4 ::v64(){vfunc_called(this, "_ZN7S1325C43v64Ev");}
void  S1325C4 ::v65(){vfunc_called(this, "_ZN7S1325C43v65Ev");}
void  S1325C4 ::v66(){vfunc_called(this, "_ZN7S1325C43v66Ev");}
void  S1325C4 ::v67(){vfunc_called(this, "_ZN7S1325C43v67Ev");}
void  S1325C4 ::v68(){vfunc_called(this, "_ZN7S1325C43v68Ev");}
void  S1325C4 ::v69(){vfunc_called(this, "_ZN7S1325C43v69Ev");}
void  S1325C4 ::v70(){vfunc_called(this, "_ZN7S1325C43v70Ev");}
void  S1325C4 ::v71(){vfunc_called(this, "_ZN7S1325C43v71Ev");}
void  S1325C4 ::v72(){vfunc_called(this, "_ZN7S1325C43v72Ev");}
void  S1325C4 ::v73(){vfunc_called(this, "_ZN7S1325C43v73Ev");}
void  S1325C4 ::v74(){vfunc_called(this, "_ZN7S1325C43v74Ev");}
void  S1325C4 ::v75(){vfunc_called(this, "_ZN7S1325C43v75Ev");}
void  S1325C4 ::v76(){vfunc_called(this, "_ZN7S1325C43v76Ev");}
void  S1325C4 ::v77(){vfunc_called(this, "_ZN7S1325C43v77Ev");}
void  S1325C4 ::v78(){vfunc_called(this, "_ZN7S1325C43v78Ev");}
void  S1325C4 ::v79(){vfunc_called(this, "_ZN7S1325C43v79Ev");}
void  S1325C4 ::v80(){vfunc_called(this, "_ZN7S1325C43v80Ev");}
void  S1325C4 ::v81(){vfunc_called(this, "_ZN7S1325C43v81Ev");}
S1325C4 ::S1325C4(){ note_ctor("S1325C4", this);} // tgen

static void Test_S1325C4()
{
  extern Class_Descriptor cd_S1325C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1325C4, buf);
    S1325C4 *dp, &lv = *(dp=new (buf) S1325C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1325C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1325C4)");
    check_field_offset(lv, s1325c4f0, ABISELECT(8,4), "S1325C4.s1325c4f0");
    check_field_offset(lv, s1325c4f1, ABISELECT(16,8), "S1325C4.s1325c4f1");
    check_field_offset(lv, s1325c4f2, ABISELECT(24,16), "S1325C4.s1325c4f2");
    check_field_offset(lv, s1325c4f3, ABISELECT(56,32), "S1325C4.s1325c4f3");
    check_field_offset(lv, s1325c4f4, ABISELECT(64,40), "S1325C4.s1325c4f4");
    check_field_offset(lv, s1325c4f5, ABISELECT(72,44), "S1325C4.s1325c4f5");
    check_field_offset(lv, s1325c4f6, ABISELECT(80,52), "S1325C4.s1325c4f6");
    test_class_info(&lv, &cd_S1325C4);
    dp->~S1325C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1325C4(Test_S1325C4, "S1325C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1325C4C1Ev();
extern void _ZN7S1325C4D1Ev();
Name_Map name_map_S1325C4[] = {
  NSPAIR(_ZN7S1325C4C1Ev),
  NSPAIR(_ZN7S1325C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1325C4[];
extern void _ZN7S1325C4D1Ev();
extern void _ZN7S1325C4D0Ev();
extern void _ZN7S1325C43v18Ev();
extern void _ZN7S1325C43v19Ev();
extern void _ZN7S1325C43v20Ev();
extern void _ZN7S1325C43v21Ev();
extern void _ZN7S1325C43v22Ev();
extern void _ZN7S1325C43v23Ev();
extern void _ZN7S1325C43v24Ev();
extern void _ZN7S1325C43v25Ev();
extern void _ZN7S1325C43v26Ev();
extern void _ZN7S1325C43v27Ev();
extern void _ZN7S1325C43v28Ev();
extern void _ZN7S1325C43v29Ev();
extern void _ZN7S1325C43v30Ev();
extern void _ZN7S1325C43v31Ev();
extern void _ZN7S1325C43v32Ev();
extern void _ZN7S1325C43v33Ev();
extern void _ZN7S1325C43v34Ev();
extern void _ZN7S1325C43v35Ev();
extern void _ZN7S1325C43v36Ev();
extern void _ZN7S1325C43v37Ev();
extern void _ZN7S1325C43v38Ev();
extern void _ZN7S1325C43v39Ev();
extern void _ZN7S1325C43v40Ev();
extern void _ZN7S1325C43v41Ev();
extern void _ZN7S1325C43v42Ev();
extern void _ZN7S1325C43v43Ev();
extern void _ZN7S1325C43v44Ev();
extern void _ZN7S1325C43v45Ev();
extern void _ZN7S1325C43v46Ev();
extern void _ZN7S1325C43v47Ev();
extern void _ZN7S1325C43v48Ev();
extern void _ZN7S1325C43v49Ev();
extern void _ZN7S1325C43v50Ev();
extern void _ZN7S1325C43v51Ev();
extern void _ZN7S1325C43v52Ev();
extern void _ZN7S1325C43v53Ev();
extern void _ZN7S1325C43v54Ev();
extern void _ZN7S1325C43v55Ev();
extern void _ZN7S1325C43v56Ev();
extern void _ZN7S1325C43v57Ev();
extern void _ZN7S1325C43v58Ev();
extern void _ZN7S1325C43v59Ev();
extern void _ZN7S1325C43v60Ev();
extern void _ZN7S1325C43v61Ev();
extern void _ZN7S1325C43v62Ev();
extern void _ZN7S1325C43v63Ev();
extern void _ZN7S1325C43v64Ev();
extern void _ZN7S1325C43v65Ev();
extern void _ZN7S1325C43v66Ev();
extern void _ZN7S1325C43v67Ev();
extern void _ZN7S1325C43v68Ev();
extern void _ZN7S1325C43v69Ev();
extern void _ZN7S1325C43v70Ev();
extern void _ZN7S1325C43v71Ev();
extern void _ZN7S1325C43v72Ev();
extern void _ZN7S1325C43v73Ev();
extern void _ZN7S1325C43v74Ev();
extern void _ZN7S1325C43v75Ev();
extern void _ZN7S1325C43v76Ev();
extern void _ZN7S1325C43v77Ev();
extern void _ZN7S1325C43v78Ev();
extern void _ZN7S1325C43v79Ev();
extern void _ZN7S1325C43v80Ev();
extern void _ZN7S1325C43v81Ev();
static  VTBL_ENTRY vtc_S1325C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1325C4[0]),
  (VTBL_ENTRY)&_ZN7S1325C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1325C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v79Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v80Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v81Ev,
};
extern VTBL_ENTRY _ZTI7S1325C4[];
extern  VTBL_ENTRY _ZTV7S1325C4[];
Class_Descriptor cd_S1325C4 = {  "S1325C4", // class name
  0,0,//no base classes
  &(vtc_S1325C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1325C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1325C4),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  S1325C6  {
  virtual void  v82(); // _ZN7S1325C63v82Ev
  ~S1325C6(); // tgen
  S1325C6(); // tgen
};
//SIG(-1 S1325C6) C1{ v1}


void  S1325C6 ::v82(){vfunc_called(this, "_ZN7S1325C63v82Ev");}
S1325C6 ::~S1325C6(){ note_dtor("S1325C6", this);} // tgen
S1325C6 ::S1325C6(){ note_ctor("S1325C6", this);} // tgen

static void Test_S1325C6()
{
  extern Class_Descriptor cd_S1325C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1325C6, buf);
    S1325C6 *dp, &lv = *(dp=new (buf) S1325C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1325C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1325C6)");
    test_class_info(&lv, &cd_S1325C6);
    dp->~S1325C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1325C6(Test_S1325C6, "S1325C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1325C6C1Ev();
extern void _ZN7S1325C6D1Ev();
Name_Map name_map_S1325C6[] = {
  NSPAIR(_ZN7S1325C6C1Ev),
  NSPAIR(_ZN7S1325C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1325C6[];
extern void _ZN7S1325C63v82Ev();
static  VTBL_ENTRY vtc_S1325C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1325C6[0]),
  (VTBL_ENTRY)&_ZN7S1325C63v82Ev,
};
extern VTBL_ENTRY _ZTI7S1325C6[];
extern  VTBL_ENTRY _ZTV7S1325C6[];
Class_Descriptor cd_S1325C6 = {  "S1325C6", // class name
  0,0,//no base classes
  &(vtc_S1325C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1325C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1325C6),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  S1325C3  : S1325C4 , S1325C6 {
  virtual  ~S1325C3(); // _ZN7S1325C3D1Ev
  virtual void  v83(); // _ZN7S1325C33v83Ev
  virtual void  v84(); // _ZN7S1325C33v84Ev
  virtual void  v85(); // _ZN7S1325C33v85Ev
  virtual void  v86(); // _ZN7S1325C33v86Ev
  S1325C3(); // tgen
};
//SIG(-1 S1325C3) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} BC4{ v69} vd v1 v2 v3 v4}


 S1325C3 ::~S1325C3(){ note_dtor("S1325C3", this);}
void  S1325C3 ::v83(){vfunc_called(this, "_ZN7S1325C33v83Ev");}
void  S1325C3 ::v84(){vfunc_called(this, "_ZN7S1325C33v84Ev");}
void  S1325C3 ::v85(){vfunc_called(this, "_ZN7S1325C33v85Ev");}
void  S1325C3 ::v86(){vfunc_called(this, "_ZN7S1325C33v86Ev");}
S1325C3 ::S1325C3(){ note_ctor("S1325C3", this);} // tgen

static void Test_S1325C3()
{
  extern Class_Descriptor cd_S1325C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1325C3, buf);
    S1325C3 *dp, &lv = *(dp=new (buf) S1325C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1325C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1325C3)");
    check_base_class_offset(lv, (S1325C4*), 0, "S1325C3");
    check_base_class_offset(lv, (S1325C6*), ABISELECT(96,60), "S1325C3");
    test_class_info(&lv, &cd_S1325C3);
    dp->~S1325C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1325C3(Test_S1325C3, "S1325C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1325C3C1Ev();
extern void _ZN7S1325C3D1Ev();
Name_Map name_map_S1325C3[] = {
  NSPAIR(_ZN7S1325C3C1Ev),
  NSPAIR(_ZN7S1325C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1325C4;
extern VTBL_ENTRY _ZTI7S1325C4[];
extern  VTBL_ENTRY _ZTV7S1325C4[];
extern Class_Descriptor cd_S1325C6;
extern VTBL_ENTRY _ZTI7S1325C6[];
extern  VTBL_ENTRY _ZTV7S1325C6[];
static Base_Class bases_S1325C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1325C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S1325C6,    ABISELECT(96,60), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1325C3[];
extern void _ZN7S1325C3D1Ev();
extern void _ZN7S1325C3D0Ev();
extern void _ZN7S1325C43v18Ev();
extern void _ZN7S1325C43v19Ev();
extern void _ZN7S1325C43v20Ev();
extern void _ZN7S1325C43v21Ev();
extern void _ZN7S1325C43v22Ev();
extern void _ZN7S1325C43v23Ev();
extern void _ZN7S1325C43v24Ev();
extern void _ZN7S1325C43v25Ev();
extern void _ZN7S1325C43v26Ev();
extern void _ZN7S1325C43v27Ev();
extern void _ZN7S1325C43v28Ev();
extern void _ZN7S1325C43v29Ev();
extern void _ZN7S1325C43v30Ev();
extern void _ZN7S1325C43v31Ev();
extern void _ZN7S1325C43v32Ev();
extern void _ZN7S1325C43v33Ev();
extern void _ZN7S1325C43v34Ev();
extern void _ZN7S1325C43v35Ev();
extern void _ZN7S1325C43v36Ev();
extern void _ZN7S1325C43v37Ev();
extern void _ZN7S1325C43v38Ev();
extern void _ZN7S1325C43v39Ev();
extern void _ZN7S1325C43v40Ev();
extern void _ZN7S1325C43v41Ev();
extern void _ZN7S1325C43v42Ev();
extern void _ZN7S1325C43v43Ev();
extern void _ZN7S1325C43v44Ev();
extern void _ZN7S1325C43v45Ev();
extern void _ZN7S1325C43v46Ev();
extern void _ZN7S1325C43v47Ev();
extern void _ZN7S1325C43v48Ev();
extern void _ZN7S1325C43v49Ev();
extern void _ZN7S1325C43v50Ev();
extern void _ZN7S1325C43v51Ev();
extern void _ZN7S1325C43v52Ev();
extern void _ZN7S1325C43v53Ev();
extern void _ZN7S1325C43v54Ev();
extern void _ZN7S1325C43v55Ev();
extern void _ZN7S1325C43v56Ev();
extern void _ZN7S1325C43v57Ev();
extern void _ZN7S1325C43v58Ev();
extern void _ZN7S1325C43v59Ev();
extern void _ZN7S1325C43v60Ev();
extern void _ZN7S1325C43v61Ev();
extern void _ZN7S1325C43v62Ev();
extern void _ZN7S1325C43v63Ev();
extern void _ZN7S1325C43v64Ev();
extern void _ZN7S1325C43v65Ev();
extern void _ZN7S1325C43v66Ev();
extern void _ZN7S1325C43v67Ev();
extern void _ZN7S1325C43v68Ev();
extern void _ZN7S1325C43v69Ev();
extern void _ZN7S1325C43v70Ev();
extern void _ZN7S1325C43v71Ev();
extern void _ZN7S1325C43v72Ev();
extern void _ZN7S1325C43v73Ev();
extern void _ZN7S1325C43v74Ev();
extern void _ZN7S1325C43v75Ev();
extern void _ZN7S1325C43v76Ev();
extern void _ZN7S1325C43v77Ev();
extern void _ZN7S1325C43v78Ev();
extern void _ZN7S1325C43v79Ev();
extern void _ZN7S1325C43v80Ev();
extern void _ZN7S1325C43v81Ev();
extern void _ZN7S1325C33v83Ev();
extern void _ZN7S1325C33v84Ev();
extern void _ZN7S1325C33v85Ev();
extern void _ZN7S1325C33v86Ev();
extern void _ZN7S1325C63v82Ev();
static  VTBL_ENTRY vtc_S1325C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1325C3[0]),
  (VTBL_ENTRY)&_ZN7S1325C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1325C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v79Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v80Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v81Ev,
  (VTBL_ENTRY)&_ZN7S1325C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1325C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1325C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1325C33v86Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1325C3[0]),
  (VTBL_ENTRY)&_ZN7S1325C63v82Ev,
};
extern VTBL_ENTRY _ZTI7S1325C3[];
extern  VTBL_ENTRY _ZTV7S1325C3[];
Class_Descriptor cd_S1325C3 = {  "S1325C3", // class name
  bases_S1325C3, 2,
  &(vtc_S1325C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1325C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1325C3),75, //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  S1325C9  : S1537C8_nt {
};
//SIG(-1 S1325C9) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1325C9()
{
  extern Class_Descriptor cd_S1325C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1325C9, buf);
    S1325C9 &lv = *(new (buf) S1325C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1325C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1325C9)");
    check_base_class_offset(lv, (S1537C8_nt*), 0, "S1325C9");
    test_class_info(&lv, &cd_S1325C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1325C9(Test_S1325C9, "S1325C9", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
static Base_Class bases_S1325C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1325C9 = {  "S1325C9", // class name
  bases_S1325C9, 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  S1325C8  : S1325C9 {
};
//SIG(-1 S1325C8) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1325C8()
{
  extern Class_Descriptor cd_S1325C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1325C8, buf);
    S1325C8 &lv = *(new (buf) S1325C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1325C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1325C8)");
    check_base_class_offset(lv, (S1537C8_nt*)(S1325C9*), 0, "S1325C8");
    check_base_class_offset(lv, (S1325C9*), 0, "S1325C8");
    test_class_info(&lv, &cd_S1325C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1325C8(Test_S1325C8, "S1325C8", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
extern Class_Descriptor cd_S1325C9;
static Base_Class bases_S1325C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1325C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1325C8 = {  "S1325C8", // class name
  bases_S1325C8, 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  S1325C7_nt  : S1325C8 {
};
//SIG(-1 S1325C7_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S1325C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
extern Class_Descriptor cd_S1325C9;
extern Class_Descriptor cd_S1325C8;
static Base_Class bases_S1325C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1325C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1325C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S1325C14  : S1537C8_nt {
};
//SIG(-1 S1325C14) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1325C14()
{
  extern Class_Descriptor cd_S1325C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1325C14, buf);
    S1325C14 &lv = *(new (buf) S1325C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1325C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1325C14)");
    check_base_class_offset(lv, (S1537C8_nt*), 0, "S1325C14");
    test_class_info(&lv, &cd_S1325C14);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1325C14(Test_S1325C14, "S1325C14", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
static Base_Class bases_S1325C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1325C14 = {  "S1325C14", // class name
  bases_S1325C14, 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  S1325C18_nt  {
  void  mf1325c18(); // _ZN11S1325C18_nt9mf1325c18Ev
};
//SIG(-1 S1325C18_nt) C1{ m}


void  S1325C18_nt ::mf1325c18(){}

//skip512 S1325C18_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1325C2  : S1325C3 {
  void *s1325c2f0;
  ::S1325C7_nt s1325c2f1;
  void *s1325c2f2;
  ::S1325C7_nt s1325c2f3;
  void *s1325c2f4;
  ::S1325C7_nt s1325c2f5;
  void *s1325c2f6;
  ::S1325C7_nt s1325c2f7;
  ::S1537C22 s1325c2f8;
  ::S1537C18 s1325c2f9;
  void *s1325c2f10;
  ::S1325C7_nt s1325c2f11;
  void *s1325c2f12;
  ::S1325C7_nt s1325c2f13;
  void *s1325c2f14;
  ::S1325C7_nt s1325c2f15;
  void *s1325c2f16;
  ::S1325C7_nt s1325c2f17;
  void *s1325c2f18;
  ::S1325C7_nt s1325c2f19;
  void *s1325c2f20;
  ::S1325C7_nt s1325c2f21;
  void *s1325c2f22;
  ::S1325C7_nt s1325c2f23;
  void *s1325c2f24;
  ::S1325C7_nt s1325c2f25;
  void *s1325c2f26;
  ::S1325C7_nt s1325c2f27;
  void *s1325c2f28;
  ::S1325C7_nt s1325c2f29;
  void *s1325c2f30;
  ::S1325C7_nt s1325c2f31;
  void *s1325c2f32;
  ::S1325C7_nt s1325c2f33;
  void *s1325c2f34;
  ::S1325C7_nt s1325c2f35;
  void *s1325c2f36;
  ::S1325C7_nt s1325c2f37;
  ::S1537C12 s1325c2f38;
  ::S1537C12 s1325c2f39;
  unsigned int s1325c2f40:1;
  unsigned int s1325c2f41:1;
  unsigned int s1325c2f42:1;
  unsigned int s1325c2f43:1;
  unsigned int s1325c2f44:1;
  unsigned int s1325c2f45:1;
  unsigned int s1325c2f46:1;
  unsigned int s1325c2f47:1;
  unsigned int s1325c2f48:1;
  unsigned int s1325c2f49:1;
  unsigned int s1325c2f50:1;
  unsigned int s1325c2f51:1;
  unsigned int s1325c2f52:1;
  unsigned int s1325c2f53:1;
  unsigned int s1325c2f54:1;
  unsigned int s1325c2f55:1;
  unsigned int s1325c2f56:1;
  unsigned int s1325c2f57:1;
  unsigned int s1325c2f58:1;
  int s1325c2f59[6];
  void *s1325c2f60;
  ::S1325C7_nt s1325c2f61;
  void *s1325c2f62;
  ::S1325C7_nt s1325c2f63;
  void *s1325c2f64;
  ::S1325C7_nt s1325c2f65;
  int s1325c2f66[3];
  void *s1325c2f67;
  ::S1325C7_nt s1325c2f68;
  void *s1325c2f69;
  ::S1325C7_nt s1325c2f70;
  void *s1325c2f71;
  ::S1325C7_nt s1325c2f72;
  void *s1325c2f73;
  ::S1325C7_nt s1325c2f74;
  void *s1325c2f75;
  ::S1325C7_nt s1325c2f76;
  void *s1325c2f77;
  ::S1325C7_nt s1325c2f78;
  void *s1325c2f79;
  ::S1325C7_nt s1325c2f80;
  void *s1325c2f81;
  ::S1325C7_nt s1325c2f82;
  void *s1325c2f83;
  ::S1325C7_nt s1325c2f84;
  void *s1325c2f85;
  ::S1325C7_nt s1325c2f86;
  int s1325c2f87;
  void *s1325c2f88;
  ::S1537C23 s1325c2f89;
  void *s1325c2f90;
  ::S1325C14 s1325c2f91;
  int s1325c2f92[3];
  void *s1325c2f93[2];
  ::S1325C18_nt s1325c2f94;
  ::S1325C18_nt s1325c2f95;
  ::S1325C18_nt s1325c2f96;
  ::S1325C18_nt s1325c2f97;
  ::S1325C18_nt s1325c2f98;
  ::S1325C18_nt s1325c2f99;
  ::S1325C18_nt s1325c2f100;
  ::S1325C18_nt s1325c2f101;
  ::S1325C18_nt s1325c2f102;
  ::S1325C18_nt s1325c2f103;
  ::S1325C18_nt s1325c2f104;
  ::S1325C18_nt s1325c2f105;
  int s1325c2f106;
  ::S1325C7_nt s1325c2f107;
  char s1325c2f108;
  ::S1325C7_nt s1325c2f109;
  ::S1325C7_nt s1325c2f110;
  int s1325c2f111[12];
  void *s1325c2f112;
  ::S1325C7_nt s1325c2f113;
  int s1325c2f114;
  ::S1537C6_nt s1325c2f115;
  ::S1325C7_nt s1325c2f116;
  int s1325c2f117;
  virtual  ~S1325C2(); // _ZN7S1325C2D1Ev
  virtual void  v87(); // _ZN7S1325C23v87Ev
  virtual void  v88(); // _ZN7S1325C23v88Ev
  virtual void  v89(); // _ZN7S1325C23v89Ev
  virtual void  v90(); // _ZN7S1325C23v90Ev
  virtual void  v91(); // _ZN7S1325C23v91Ev
  virtual void  v92(); // _ZN7S1325C23v92Ev
  virtual void  v93(); // _ZN7S1325C23v93Ev
  virtual void  v94(); // _ZN7S1325C23v94Ev
  virtual void  v95(); // _ZN7S1325C23v95Ev
  virtual void  v96(); // _ZN7S1325C23v96Ev
  virtual void  v97(); // _ZN7S1325C23v97Ev
  virtual void  v98(); // _ZN7S1325C23v98Ev
  virtual void  v99(); // _ZN7S1325C23v99Ev
  virtual void  v100(); // _ZN7S1325C24v100Ev
  virtual void  v101(); // _ZN7S1325C24v101Ev
  virtual void  v102(); // _ZN7S1325C24v102Ev
  virtual void  v103(); // _ZN7S1325C24v103Ev
  virtual void  v104(); // _ZN7S1325C24v104Ev
  virtual void  v105(); // _ZN7S1325C24v105Ev
  virtual void  v106(); // _ZN7S1325C24v106Ev
  virtual void  v107(); // _ZN7S1325C24v107Ev
  virtual void  v108(); // _ZN7S1325C24v108Ev
  virtual void  v109(); // _ZN7S1325C24v109Ev
  virtual void  v110(); // _ZN7S1325C24v110Ev
  virtual void  v111(); // _ZN7S1325C24v111Ev
  virtual void  v112(); // _ZN7S1325C24v112Ev
  virtual void  v113(); // _ZN7S1325C24v113Ev
  virtual void  v114(); // _ZN7S1325C24v114Ev
  virtual void  v115(); // _ZN7S1325C24v115Ev
  virtual void  v116(); // _ZN7S1325C24v116Ev
  virtual void  v117(); // _ZN7S1325C24v117Ev
  virtual void  v118(); // _ZN7S1325C24v118Ev
  virtual void  v119(); // _ZN7S1325C24v119Ev
  virtual void  v120(); // _ZN7S1325C24v120Ev
  S1325C2(); // tgen
};
//SIG(-1 S1325C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v99} vd v100 v101 v102 v103} 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 Fp FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} Fp FC6 Fp FC6 Fp FC6 FC10{ BC11{ BC9}} FC12{ BC13{ BC9}} Fp FC6 Fp FC6 Fp FC6 Fp FC6 Fp FC6 Fp FC6 Fp FC6 Fp FC6 Fp FC6 Fp FC6 Fp FC6 Fp FC6 Fp FC6 Fp FC6 FC14{ BC15{ BC9}} FC14 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[6] Fp FC6 Fp FC6 Fp FC6 Fi[3] Fp FC6 Fp FC6 Fp FC6 Fp FC6 Fp FC6 Fp FC6 Fp FC6 Fp FC6 Fp FC6 Fp FC6 Fi Fp FC11 Fp FC16{ BC9} Fi[3] Fp[2] FC17{ m} FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 Fi FC6 Fc FC6 FC6 Fi[12] Fp FC6 Fi FC18{ BC19{ BC9}} FC6 Fi}


 S1325C2 ::~S1325C2(){ note_dtor("S1325C2", this);}
void  S1325C2 ::v87(){vfunc_called(this, "_ZN7S1325C23v87Ev");}
void  S1325C2 ::v88(){vfunc_called(this, "_ZN7S1325C23v88Ev");}
void  S1325C2 ::v89(){vfunc_called(this, "_ZN7S1325C23v89Ev");}
void  S1325C2 ::v90(){vfunc_called(this, "_ZN7S1325C23v90Ev");}
void  S1325C2 ::v91(){vfunc_called(this, "_ZN7S1325C23v91Ev");}
void  S1325C2 ::v92(){vfunc_called(this, "_ZN7S1325C23v92Ev");}
void  S1325C2 ::v93(){vfunc_called(this, "_ZN7S1325C23v93Ev");}
void  S1325C2 ::v94(){vfunc_called(this, "_ZN7S1325C23v94Ev");}
void  S1325C2 ::v95(){vfunc_called(this, "_ZN7S1325C23v95Ev");}
void  S1325C2 ::v96(){vfunc_called(this, "_ZN7S1325C23v96Ev");}
void  S1325C2 ::v97(){vfunc_called(this, "_ZN7S1325C23v97Ev");}
void  S1325C2 ::v98(){vfunc_called(this, "_ZN7S1325C23v98Ev");}
void  S1325C2 ::v99(){vfunc_called(this, "_ZN7S1325C23v99Ev");}
void  S1325C2 ::v100(){vfunc_called(this, "_ZN7S1325C24v100Ev");}
void  S1325C2 ::v101(){vfunc_called(this, "_ZN7S1325C24v101Ev");}
void  S1325C2 ::v102(){vfunc_called(this, "_ZN7S1325C24v102Ev");}
void  S1325C2 ::v103(){vfunc_called(this, "_ZN7S1325C24v103Ev");}
void  S1325C2 ::v104(){vfunc_called(this, "_ZN7S1325C24v104Ev");}
void  S1325C2 ::v105(){vfunc_called(this, "_ZN7S1325C24v105Ev");}
void  S1325C2 ::v106(){vfunc_called(this, "_ZN7S1325C24v106Ev");}
void  S1325C2 ::v107(){vfunc_called(this, "_ZN7S1325C24v107Ev");}
void  S1325C2 ::v108(){vfunc_called(this, "_ZN7S1325C24v108Ev");}
void  S1325C2 ::v109(){vfunc_called(this, "_ZN7S1325C24v109Ev");}
void  S1325C2 ::v110(){vfunc_called(this, "_ZN7S1325C24v110Ev");}
void  S1325C2 ::v111(){vfunc_called(this, "_ZN7S1325C24v111Ev");}
void  S1325C2 ::v112(){vfunc_called(this, "_ZN7S1325C24v112Ev");}
void  S1325C2 ::v113(){vfunc_called(this, "_ZN7S1325C24v113Ev");}
void  S1325C2 ::v114(){vfunc_called(this, "_ZN7S1325C24v114Ev");}
void  S1325C2 ::v115(){vfunc_called(this, "_ZN7S1325C24v115Ev");}
void  S1325C2 ::v116(){vfunc_called(this, "_ZN7S1325C24v116Ev");}
void  S1325C2 ::v117(){vfunc_called(this, "_ZN7S1325C24v117Ev");}
void  S1325C2 ::v118(){vfunc_called(this, "_ZN7S1325C24v118Ev");}
void  S1325C2 ::v119(){vfunc_called(this, "_ZN7S1325C24v119Ev");}
void  S1325C2 ::v120(){vfunc_called(this, "_ZN7S1325C24v120Ev");}
S1325C2 ::S1325C2(){ note_ctor("S1325C2", this);} // tgen

static void Test_S1325C2()
{
  extern Class_Descriptor cd_S1325C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(156,215)];
    init_test(&cd_S1325C2, buf);
    S1325C2 *dp, &lv = *(dp=new (buf) S1325C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1240,856), "sizeof(S1325C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1325C2)");
    check_base_class_offset(lv, (S1325C4*)(S1325C3*), 0, "S1325C2");
    check_base_class_offset(lv, (S1325C6*)(S1325C3*), ABISELECT(96,60), "S1325C2");
    check_base_class_offset(lv, (S1325C3*), 0, "S1325C2");
    check_field_offset(lv, s1325c2f0, ABISELECT(104,64), "S1325C2.s1325c2f0");
    check_field_offset(lv, s1325c2f1, ABISELECT(112,68), "S1325C2.s1325c2f1");
    check_field_offset(lv, s1325c2f2, ABISELECT(128,80), "S1325C2.s1325c2f2");
    check_field_offset(lv, s1325c2f3, ABISELECT(136,84), "S1325C2.s1325c2f3");
    check_field_offset(lv, s1325c2f4, ABISELECT(152,96), "S1325C2.s1325c2f4");
    check_field_offset(lv, s1325c2f5, ABISELECT(160,100), "S1325C2.s1325c2f5");
    check_field_offset(lv, s1325c2f6, ABISELECT(176,112), "S1325C2.s1325c2f6");
    check_field_offset(lv, s1325c2f7, ABISELECT(184,116), "S1325C2.s1325c2f7");
    check_field_offset(lv, s1325c2f8, ABISELECT(200,128), "S1325C2.s1325c2f8");
    check_field_offset(lv, s1325c2f9, ABISELECT(216,140), "S1325C2.s1325c2f9");
    check_field_offset(lv, s1325c2f10, ABISELECT(232,152), "S1325C2.s1325c2f10");
    check_field_offset(lv, s1325c2f11, ABISELECT(240,156), "S1325C2.s1325c2f11");
    check_field_offset(lv, s1325c2f12, ABISELECT(256,168), "S1325C2.s1325c2f12");
    check_field_offset(lv, s1325c2f13, ABISELECT(264,172), "S1325C2.s1325c2f13");
    check_field_offset(lv, s1325c2f14, ABISELECT(280,184), "S1325C2.s1325c2f14");
    check_field_offset(lv, s1325c2f15, ABISELECT(288,188), "S1325C2.s1325c2f15");
    check_field_offset(lv, s1325c2f16, ABISELECT(304,200), "S1325C2.s1325c2f16");
    check_field_offset(lv, s1325c2f17, ABISELECT(312,204), "S1325C2.s1325c2f17");
    check_field_offset(lv, s1325c2f18, ABISELECT(328,216), "S1325C2.s1325c2f18");
    check_field_offset(lv, s1325c2f19, ABISELECT(336,220), "S1325C2.s1325c2f19");
    check_field_offset(lv, s1325c2f20, ABISELECT(352,232), "S1325C2.s1325c2f20");
    check_field_offset(lv, s1325c2f21, ABISELECT(360,236), "S1325C2.s1325c2f21");
    check_field_offset(lv, s1325c2f22, ABISELECT(376,248), "S1325C2.s1325c2f22");
    check_field_offset(lv, s1325c2f23, ABISELECT(384,252), "S1325C2.s1325c2f23");
    check_field_offset(lv, s1325c2f24, ABISELECT(400,264), "S1325C2.s1325c2f24");
    check_field_offset(lv, s1325c2f25, ABISELECT(408,268), "S1325C2.s1325c2f25");
    check_field_offset(lv, s1325c2f26, ABISELECT(424,280), "S1325C2.s1325c2f26");
    check_field_offset(lv, s1325c2f27, ABISELECT(432,284), "S1325C2.s1325c2f27");
    check_field_offset(lv, s1325c2f28, ABISELECT(448,296), "S1325C2.s1325c2f28");
    check_field_offset(lv, s1325c2f29, ABISELECT(456,300), "S1325C2.s1325c2f29");
    check_field_offset(lv, s1325c2f30, ABISELECT(472,312), "S1325C2.s1325c2f30");
    check_field_offset(lv, s1325c2f31, ABISELECT(480,316), "S1325C2.s1325c2f31");
    check_field_offset(lv, s1325c2f32, ABISELECT(496,328), "S1325C2.s1325c2f32");
    check_field_offset(lv, s1325c2f33, ABISELECT(504,332), "S1325C2.s1325c2f33");
    check_field_offset(lv, s1325c2f34, ABISELECT(520,344), "S1325C2.s1325c2f34");
    check_field_offset(lv, s1325c2f35, ABISELECT(528,348), "S1325C2.s1325c2f35");
    check_field_offset(lv, s1325c2f36, ABISELECT(544,360), "S1325C2.s1325c2f36");
    check_field_offset(lv, s1325c2f37, ABISELECT(552,364), "S1325C2.s1325c2f37");
    check_field_offset(lv, s1325c2f38, ABISELECT(568,376), "S1325C2.s1325c2f38");
    check_field_offset(lv, s1325c2f39, ABISELECT(584,388), "S1325C2.s1325c2f39");
    set_bf_and_test(lv, s1325c2f40, ABISELECT(600,400), 0, 1, 1, "S1325C2");
    set_bf_and_test(lv, s1325c2f41, ABISELECT(600,400), 1, 1, 1, "S1325C2");
    set_bf_and_test(lv, s1325c2f42, ABISELECT(600,400), 2, 1, 1, "S1325C2");
    set_bf_and_test(lv, s1325c2f43, ABISELECT(600,400), 3, 1, 1, "S1325C2");
    set_bf_and_test(lv, s1325c2f44, ABISELECT(600,400), 4, 1, 1, "S1325C2");
    set_bf_and_test(lv, s1325c2f45, ABISELECT(600,400), 5, 1, 1, "S1325C2");
    set_bf_and_test(lv, s1325c2f46, ABISELECT(600,400), 6, 1, 1, "S1325C2");
    set_bf_and_test(lv, s1325c2f47, ABISELECT(600,400), 7, 1, 1, "S1325C2");
    set_bf_and_test(lv, s1325c2f48, ABISELECT(601,401), 0, 1, 1, "S1325C2");
    set_bf_and_test(lv, s1325c2f49, ABISELECT(601,401), 1, 1, 1, "S1325C2");
    set_bf_and_test(lv, s1325c2f50, ABISELECT(601,401), 2, 1, 1, "S1325C2");
    set_bf_and_test(lv, s1325c2f51, ABISELECT(601,401), 3, 1, 1, "S1325C2");
    set_bf_and_test(lv, s1325c2f52, ABISELECT(601,401), 4, 1, 1, "S1325C2");
    set_bf_and_test(lv, s1325c2f53, ABISELECT(601,401), 5, 1, 1, "S1325C2");
    set_bf_and_test(lv, s1325c2f54, ABISELECT(601,401), 6, 1, 1, "S1325C2");
    set_bf_and_test(lv, s1325c2f55, ABISELECT(601,401), 7, 1, 1, "S1325C2");
    set_bf_and_test(lv, s1325c2f56, ABISELECT(602,402), 0, 1, 1, "S1325C2");
    set_bf_and_test(lv, s1325c2f57, ABISELECT(602,402), 1, 1, 1, "S1325C2");
    set_bf_and_test(lv, s1325c2f58, ABISELECT(602,402), 2, 1, 1, "S1325C2");
    check_field_offset(lv, s1325c2f59, ABISELECT(604,404), "S1325C2.s1325c2f59");
    check_field_offset(lv, s1325c2f60, ABISELECT(632,428), "S1325C2.s1325c2f60");
    check_field_offset(lv, s1325c2f61, ABISELECT(640,432), "S1325C2.s1325c2f61");
    check_field_offset(lv, s1325c2f62, ABISELECT(656,444), "S1325C2.s1325c2f62");
    check_field_offset(lv, s1325c2f63, ABISELECT(664,448), "S1325C2.s1325c2f63");
    check_field_offset(lv, s1325c2f64, ABISELECT(680,460), "S1325C2.s1325c2f64");
    check_field_offset(lv, s1325c2f65, ABISELECT(688,464), "S1325C2.s1325c2f65");
    check_field_offset(lv, s1325c2f66, ABISELECT(704,476), "S1325C2.s1325c2f66");
    check_field_offset(lv, s1325c2f67, ABISELECT(720,488), "S1325C2.s1325c2f67");
    check_field_offset(lv, s1325c2f68, ABISELECT(728,492), "S1325C2.s1325c2f68");
    check_field_offset(lv, s1325c2f69, ABISELECT(744,504), "S1325C2.s1325c2f69");
    check_field_offset(lv, s1325c2f70, ABISELECT(752,508), "S1325C2.s1325c2f70");
    check_field_offset(lv, s1325c2f71, ABISELECT(768,520), "S1325C2.s1325c2f71");
    check_field_offset(lv, s1325c2f72, ABISELECT(776,524), "S1325C2.s1325c2f72");
    check_field_offset(lv, s1325c2f73, ABISELECT(792,536), "S1325C2.s1325c2f73");
    check_field_offset(lv, s1325c2f74, ABISELECT(800,540), "S1325C2.s1325c2f74");
    check_field_offset(lv, s1325c2f75, ABISELECT(816,552), "S1325C2.s1325c2f75");
    check_field_offset(lv, s1325c2f76, ABISELECT(824,556), "S1325C2.s1325c2f76");
    check_field_offset(lv, s1325c2f77, ABISELECT(840,568), "S1325C2.s1325c2f77");
    check_field_offset(lv, s1325c2f78, ABISELECT(848,572), "S1325C2.s1325c2f78");
    check_field_offset(lv, s1325c2f79, ABISELECT(864,584), "S1325C2.s1325c2f79");
    check_field_offset(lv, s1325c2f80, ABISELECT(872,588), "S1325C2.s1325c2f80");
    check_field_offset(lv, s1325c2f81, ABISELECT(888,600), "S1325C2.s1325c2f81");
    check_field_offset(lv, s1325c2f82, ABISELECT(896,604), "S1325C2.s1325c2f82");
    check_field_offset(lv, s1325c2f83, ABISELECT(912,616), "S1325C2.s1325c2f83");
    check_field_offset(lv, s1325c2f84, ABISELECT(920,620), "S1325C2.s1325c2f84");
    check_field_offset(lv, s1325c2f85, ABISELECT(936,632), "S1325C2.s1325c2f85");
    check_field_offset(lv, s1325c2f86, ABISELECT(944,636), "S1325C2.s1325c2f86");
    check_field_offset(lv, s1325c2f87, ABISELECT(960,648), "S1325C2.s1325c2f87");
    check_field_offset(lv, s1325c2f88, ABISELECT(968,652), "S1325C2.s1325c2f88");
    check_field_offset(lv, s1325c2f89, ABISELECT(976,656), "S1325C2.s1325c2f89");
    check_field_offset(lv, s1325c2f90, ABISELECT(992,668), "S1325C2.s1325c2f90");
    check_field_offset(lv, s1325c2f91, ABISELECT(1000,672), "S1325C2.s1325c2f91");
    check_field_offset(lv, s1325c2f92, ABISELECT(1016,684), "S1325C2.s1325c2f92");
    check_field_offset(lv, s1325c2f93, ABISELECT(1032,696), "S1325C2.s1325c2f93");
    check_field_offset(lv, s1325c2f94, ABISELECT(1048,704), "S1325C2.s1325c2f94");
    check_field_offset(lv, s1325c2f95, ABISELECT(1049,705), "S1325C2.s1325c2f95");
    check_field_offset(lv, s1325c2f96, ABISELECT(1050,706), "S1325C2.s1325c2f96");
    check_field_offset(lv, s1325c2f97, ABISELECT(1051,707), "S1325C2.s1325c2f97");
    check_field_offset(lv, s1325c2f98, ABISELECT(1052,708), "S1325C2.s1325c2f98");
    check_field_offset(lv, s1325c2f99, ABISELECT(1053,709), "S1325C2.s1325c2f99");
    check_field_offset(lv, s1325c2f100, ABISELECT(1054,710), "S1325C2.s1325c2f100");
    check_field_offset(lv, s1325c2f101, ABISELECT(1055,711), "S1325C2.s1325c2f101");
    check_field_offset(lv, s1325c2f102, ABISELECT(1056,712), "S1325C2.s1325c2f102");
    check_field_offset(lv, s1325c2f103, ABISELECT(1057,713), "S1325C2.s1325c2f103");
    check_field_offset(lv, s1325c2f104, ABISELECT(1058,714), "S1325C2.s1325c2f104");
    check_field_offset(lv, s1325c2f105, ABISELECT(1059,715), "S1325C2.s1325c2f105");
    check_field_offset(lv, s1325c2f106, ABISELECT(1060,716), "S1325C2.s1325c2f106");
    check_field_offset(lv, s1325c2f107, ABISELECT(1064,720), "S1325C2.s1325c2f107");
    check_field_offset(lv, s1325c2f108, ABISELECT(1080,732), "S1325C2.s1325c2f108");
    check_field_offset(lv, s1325c2f109, ABISELECT(1088,736), "S1325C2.s1325c2f109");
    check_field_offset(lv, s1325c2f110, ABISELECT(1104,748), "S1325C2.s1325c2f110");
    check_field_offset(lv, s1325c2f111, ABISELECT(1120,760), "S1325C2.s1325c2f111");
    check_field_offset(lv, s1325c2f112, ABISELECT(1168,808), "S1325C2.s1325c2f112");
    check_field_offset(lv, s1325c2f113, ABISELECT(1176,812), "S1325C2.s1325c2f113");
    check_field_offset(lv, s1325c2f114, ABISELECT(1192,824), "S1325C2.s1325c2f114");
    check_field_offset(lv, s1325c2f115, ABISELECT(1200,828), "S1325C2.s1325c2f115");
    check_field_offset(lv, s1325c2f116, ABISELECT(1216,840), "S1325C2.s1325c2f116");
    check_field_offset(lv, s1325c2f117, ABISELECT(1232,852), "S1325C2.s1325c2f117");
    test_class_info(&lv, &cd_S1325C2);
    dp->~S1325C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1325C2(Test_S1325C2, "S1325C2", ABISELECT(1240,856));

#else // __cplusplus

extern void _ZN7S1325C2C1Ev();
extern void _ZN7S1325C2D1Ev();
Name_Map name_map_S1325C2[] = {
  NSPAIR(_ZN7S1325C2C1Ev),
  NSPAIR(_ZN7S1325C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1325C4;
extern VTBL_ENTRY _ZTI7S1325C4[];
extern  VTBL_ENTRY _ZTV7S1325C4[];
extern Class_Descriptor cd_S1325C6;
extern VTBL_ENTRY _ZTI7S1325C6[];
extern  VTBL_ENTRY _ZTV7S1325C6[];
extern Class_Descriptor cd_S1325C3;
extern VTBL_ENTRY _ZTI7S1325C3[];
extern  VTBL_ENTRY _ZTV7S1325C3[];
static Base_Class bases_S1325C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1325C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1325C6,    ABISELECT(96,60), //bcp->offset
    106, //bcp->virtual_function_table_offset
    2, //num_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_S1325C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1325C2[];
extern void _ZN7S1325C2D1Ev();
extern void _ZN7S1325C2D0Ev();
extern void _ZN7S1325C43v18Ev();
extern void _ZN7S1325C43v19Ev();
extern void _ZN7S1325C43v20Ev();
extern void _ZN7S1325C43v21Ev();
extern void _ZN7S1325C43v22Ev();
extern void _ZN7S1325C43v23Ev();
extern void _ZN7S1325C43v24Ev();
extern void _ZN7S1325C43v25Ev();
extern void _ZN7S1325C43v26Ev();
extern void _ZN7S1325C43v27Ev();
extern void _ZN7S1325C43v28Ev();
extern void _ZN7S1325C43v29Ev();
extern void _ZN7S1325C43v30Ev();
extern void _ZN7S1325C43v31Ev();
extern void _ZN7S1325C43v32Ev();
extern void _ZN7S1325C43v33Ev();
extern void _ZN7S1325C43v34Ev();
extern void _ZN7S1325C43v35Ev();
extern void _ZN7S1325C43v36Ev();
extern void _ZN7S1325C43v37Ev();
extern void _ZN7S1325C43v38Ev();
extern void _ZN7S1325C43v39Ev();
extern void _ZN7S1325C43v40Ev();
extern void _ZN7S1325C43v41Ev();
extern void _ZN7S1325C43v42Ev();
extern void _ZN7S1325C43v43Ev();
extern void _ZN7S1325C43v44Ev();
extern void _ZN7S1325C43v45Ev();
extern void _ZN7S1325C43v46Ev();
extern void _ZN7S1325C43v47Ev();
extern void _ZN7S1325C43v48Ev();
extern void _ZN7S1325C43v49Ev();
extern void _ZN7S1325C43v50Ev();
extern void _ZN7S1325C43v51Ev();
extern void _ZN7S1325C43v52Ev();
extern void _ZN7S1325C43v53Ev();
extern void _ZN7S1325C43v54Ev();
extern void _ZN7S1325C43v55Ev();
extern void _ZN7S1325C43v56Ev();
extern void _ZN7S1325C43v57Ev();
extern void _ZN7S1325C43v58Ev();
extern void _ZN7S1325C43v59Ev();
extern void _ZN7S1325C43v60Ev();
extern void _ZN7S1325C43v61Ev();
extern void _ZN7S1325C43v62Ev();
extern void _ZN7S1325C43v63Ev();
extern void _ZN7S1325C43v64Ev();
extern void _ZN7S1325C43v65Ev();
extern void _ZN7S1325C43v66Ev();
extern void _ZN7S1325C43v67Ev();
extern void _ZN7S1325C43v68Ev();
extern void _ZN7S1325C43v69Ev();
extern void _ZN7S1325C43v70Ev();
extern void _ZN7S1325C43v71Ev();
extern void _ZN7S1325C43v72Ev();
extern void _ZN7S1325C43v73Ev();
extern void _ZN7S1325C43v74Ev();
extern void _ZN7S1325C43v75Ev();
extern void _ZN7S1325C43v76Ev();
extern void _ZN7S1325C43v77Ev();
extern void _ZN7S1325C43v78Ev();
extern void _ZN7S1325C43v79Ev();
extern void _ZN7S1325C43v80Ev();
extern void _ZN7S1325C43v81Ev();
extern void _ZN7S1325C33v83Ev();
extern void _ZN7S1325C33v84Ev();
extern void _ZN7S1325C33v85Ev();
extern void _ZN7S1325C33v86Ev();
extern void _ZN7S1325C23v87Ev();
extern void _ZN7S1325C23v88Ev();
extern void _ZN7S1325C23v89Ev();
extern void _ZN7S1325C23v90Ev();
extern void _ZN7S1325C23v91Ev();
extern void _ZN7S1325C23v92Ev();
extern void _ZN7S1325C23v93Ev();
extern void _ZN7S1325C23v94Ev();
extern void _ZN7S1325C23v95Ev();
extern void _ZN7S1325C23v96Ev();
extern void _ZN7S1325C23v97Ev();
extern void _ZN7S1325C23v98Ev();
extern void _ZN7S1325C23v99Ev();
extern void _ZN7S1325C24v100Ev();
extern void _ZN7S1325C24v101Ev();
extern void _ZN7S1325C24v102Ev();
extern void _ZN7S1325C24v103Ev();
extern void _ZN7S1325C24v104Ev();
extern void _ZN7S1325C24v105Ev();
extern void _ZN7S1325C24v106Ev();
extern void _ZN7S1325C24v107Ev();
extern void _ZN7S1325C24v108Ev();
extern void _ZN7S1325C24v109Ev();
extern void _ZN7S1325C24v110Ev();
extern void _ZN7S1325C24v111Ev();
extern void _ZN7S1325C24v112Ev();
extern void _ZN7S1325C24v113Ev();
extern void _ZN7S1325C24v114Ev();
extern void _ZN7S1325C24v115Ev();
extern void _ZN7S1325C24v116Ev();
extern void _ZN7S1325C24v117Ev();
extern void _ZN7S1325C24v118Ev();
extern void _ZN7S1325C24v119Ev();
extern void _ZN7S1325C24v120Ev();
extern void _ZN7S1325C63v82Ev();
static  VTBL_ENTRY vtc_S1325C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1325C2[0]),
  (VTBL_ENTRY)&_ZN7S1325C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1325C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v79Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v80Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v81Ev,
  (VTBL_ENTRY)&_ZN7S1325C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1325C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1325C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1325C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v112Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v113Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v114Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v115Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v116Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v117Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v118Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v119Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v120Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1325C2[0]),
  (VTBL_ENTRY)&_ZN7S1325C63v82Ev,
};
extern VTBL_ENTRY _ZTI7S1325C2[];
extern  VTBL_ENTRY _ZTV7S1325C2[];
Class_Descriptor cd_S1325C2 = {  "S1325C2", // class name
  bases_S1325C2, 3,
  &(vtc_S1325C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1240,856), // object size
  NSPAIRA(_ZTI7S1325C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1325C2),109, //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  S1325C21  {
  ::S1325C8 s1325c21f0;
  ::S1325C8 s1325c21f1;
  int s1325c21f2;
  ::S1325C8 s1325c21f3;
  ::S1325C14 s1325c21f4;
  ::S1325C8 s1325c21f5;
  int s1325c21f6;
  void  mf1325c21(); // _ZN8S1325C219mf1325c21Ev
};
//SIG(-1 S1325C21) C1{ m FC2{ BC3{ BC4{ m Fp Fi[2]}}} FC2 Fi FC2 FC5{ BC4} FC2 Fi}


void  S1325C21 ::mf1325c21(){}

static void Test_S1325C21()
{
  {
    init_simple_test("S1325C21");
    S1325C21 lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S1325C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1325C21)");
    check_field_offset(lv, s1325c21f0, 0, "S1325C21.s1325c21f0");
    check_field_offset(lv, s1325c21f1, ABISELECT(16,12), "S1325C21.s1325c21f1");
    check_field_offset(lv, s1325c21f2, ABISELECT(32,24), "S1325C21.s1325c21f2");
    check_field_offset(lv, s1325c21f3, ABISELECT(40,28), "S1325C21.s1325c21f3");
    check_field_offset(lv, s1325c21f4, ABISELECT(56,40), "S1325C21.s1325c21f4");
    check_field_offset(lv, s1325c21f5, ABISELECT(72,52), "S1325C21.s1325c21f5");
    check_field_offset(lv, s1325c21f6, ABISELECT(88,64), "S1325C21.s1325c21f6");
  }
}
static Arrange_To_Call_Me vS1325C21(Test_S1325C21, "S1325C21", ABISELECT(96,68));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1325C23  : S1537C8_nt {
};
//SIG(-1 S1325C23) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1325C23()
{
  extern Class_Descriptor cd_S1325C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1325C23, buf);
    S1325C23 &lv = *(new (buf) S1325C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1325C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1325C23)");
    check_base_class_offset(lv, (S1537C8_nt*), 0, "S1325C23");
    test_class_info(&lv, &cd_S1325C23);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1325C23(Test_S1325C23, "S1325C23", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
static Base_Class bases_S1325C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1325C23 = {  "S1325C23", // class name
  bases_S1325C23, 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  S1325C22  : S1325C23 {
};
//SIG(-1 S1325C22) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1325C22()
{
  extern Class_Descriptor cd_S1325C22;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1325C22, buf);
    S1325C22 &lv = *(new (buf) S1325C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1325C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1325C22)");
    check_base_class_offset(lv, (S1537C8_nt*)(S1325C23*), 0, "S1325C22");
    check_base_class_offset(lv, (S1325C23*), 0, "S1325C22");
    test_class_info(&lv, &cd_S1325C22);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1325C22(Test_S1325C22, "S1325C22", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
extern Class_Descriptor cd_S1325C23;
static Base_Class bases_S1325C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1325C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1325C22 = {  "S1325C22", // class name
  bases_S1325C22, 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  S1325C27  : S1537C8_nt {
};
//SIG(-1 S1325C27) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1325C27()
{
  extern Class_Descriptor cd_S1325C27;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1325C27, buf);
    S1325C27 &lv = *(new (buf) S1325C27());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1325C27)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1325C27)");
    check_base_class_offset(lv, (S1537C8_nt*), 0, "S1325C27");
    test_class_info(&lv, &cd_S1325C27);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1325C27(Test_S1325C27, "S1325C27", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
static Base_Class bases_S1325C27[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1325C27 = {  "S1325C27", // class name
  bases_S1325C27, 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  S1325C26  : S1325C27 {
};
//SIG(-1 S1325C26) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1325C26()
{
  extern Class_Descriptor cd_S1325C26;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1325C26, buf);
    S1325C26 &lv = *(new (buf) S1325C26());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1325C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1325C26)");
    check_base_class_offset(lv, (S1537C8_nt*)(S1325C27*), 0, "S1325C26");
    check_base_class_offset(lv, (S1325C27*), 0, "S1325C26");
    test_class_info(&lv, &cd_S1325C26);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1325C26(Test_S1325C26, "S1325C26", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
extern Class_Descriptor cd_S1325C27;
static Base_Class bases_S1325C26[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1325C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1325C26 = {  "S1325C26", // class name
  bases_S1325C26, 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  S1325C31  : S1537C8_nt {
};
//SIG(-1 S1325C31) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1325C31()
{
  extern Class_Descriptor cd_S1325C31;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1325C31, buf);
    S1325C31 &lv = *(new (buf) S1325C31());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1325C31)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1325C31)");
    check_base_class_offset(lv, (S1537C8_nt*), 0, "S1325C31");
    test_class_info(&lv, &cd_S1325C31);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1325C31(Test_S1325C31, "S1325C31", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
static Base_Class bases_S1325C31[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1325C31 = {  "S1325C31", // class name
  bases_S1325C31, 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  S1325C30  : S1325C31 {
};
//SIG(-1 S1325C30) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1325C30()
{
  extern Class_Descriptor cd_S1325C30;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1325C30, buf);
    S1325C30 &lv = *(new (buf) S1325C30());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1325C30)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1325C30)");
    check_base_class_offset(lv, (S1537C8_nt*)(S1325C31*), 0, "S1325C30");
    check_base_class_offset(lv, (S1325C31*), 0, "S1325C30");
    test_class_info(&lv, &cd_S1325C30);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1325C30(Test_S1325C30, "S1325C30", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
extern Class_Descriptor cd_S1325C31;
static Base_Class bases_S1325C30[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1325C31,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1325C30 = {  "S1325C30", // class name
  bases_S1325C30, 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  S1325C1  : S1325C2 {
  void *s1325c1f0;
  ::S1325C21 s1325c1f1;
  ::S1325C21 s1325c1f2;
  ::S1537C18 s1325c1f3;
  ::S1325C7_nt s1325c1f4;
  char s1325c1f5;
  void *s1325c1f6;
  ::S1325C22 s1325c1f7;
  ::S1325C22 s1325c1f8;
  ::S1325C7_nt s1325c1f9;
  unsigned int s1325c1f10:1;
  unsigned int s1325c1f11:1;
  unsigned int s1325c1f12:1;
  unsigned int s1325c1f13:1;
  unsigned int s1325c1f14:1;
  int s1325c1f15[2];
  ::S1325C26 s1325c1f16;
  ::S1325C26 s1325c1f17;
  ::S1325C30 s1325c1f18;
  virtual  ~S1325C1(); // _ZN7S1325C1D1Ev
  virtual void  v1(); // _ZN7S1325C12v1Ev
  virtual void  v2(); // _ZN7S1325C12v2Ev
  virtual void  v3(); // _ZN7S1325C12v3Ev
  virtual void  v4(); // _ZN7S1325C12v4Ev
  virtual void  v5(); // _ZN7S1325C12v5Ev
  virtual void  v6(); // _ZN7S1325C12v6Ev
  virtual void  v7(); // _ZN7S1325C12v7Ev
  virtual void  v8(); // _ZN7S1325C12v8Ev
  virtual void  v9(); // _ZN7S1325C12v9Ev
  virtual void  v10(); // _ZN7S1325C13v10Ev
  virtual void  v11(); // _ZN7S1325C13v11Ev
  virtual void  v12(); // _ZN7S1325C13v12Ev
  virtual void  v13(); // _ZN7S1325C13v13Ev
  virtual void  v14(); // _ZN7S1325C13v14Ev
  virtual void  v15(); // _ZN7S1325C13v15Ev
  virtual void  v16(); // _ZN7S1325C13v16Ev
  virtual void  v17(); // _ZN7S1325C13v17Ev
  S1325C1(); // tgen
};
//SIG(1 S1325C1) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} BC6{ v82} vd v83 v84 v85 v86} vd 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 Fp FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} Fp FC7 Fp FC7 Fp FC7 FC11{ BC12{ BC10}} FC13{ BC14{ BC10}} Fp FC7 Fp FC7 Fp FC7 Fp FC7 Fp FC7 Fp FC7 Fp FC7 Fp FC7 Fp FC7 Fp FC7 Fp FC7 Fp FC7 Fp FC7 Fp FC7 FC15{ BC16{ BC10}} FC15 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[6] Fp FC7 Fp FC7 Fp FC7 Fi[3] Fp FC7 Fp FC7 Fp FC7 Fp FC7 Fp FC7 Fp FC7 Fp FC7 Fp FC7 Fp FC7 Fp FC7 Fi Fp FC12 Fp FC17{ BC10} Fi[3] Fp[2] FC18{ m} FC18 FC18 FC18 FC18 FC18 FC18 FC18 FC18 FC18 FC18 FC18 Fi FC7 Fc FC7 FC7 Fi[12] Fp FC7 Fi FC19{ BC20{ BC10}} FC7 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp FC21{ m FC8 FC8 Fi FC8 FC17 FC8 Fi} FC21 FC13 FC7 Fc Fp FC22{ BC23{ BC10}} FC22 FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2] FC24{ BC25{ BC10}} FC24 FC26{ BC27{ BC10}}}


 S1325C1 ::~S1325C1(){ note_dtor("S1325C1", this);}
void  S1325C1 ::v1(){vfunc_called(this, "_ZN7S1325C12v1Ev");}
void  S1325C1 ::v2(){vfunc_called(this, "_ZN7S1325C12v2Ev");}
void  S1325C1 ::v3(){vfunc_called(this, "_ZN7S1325C12v3Ev");}
void  S1325C1 ::v4(){vfunc_called(this, "_ZN7S1325C12v4Ev");}
void  S1325C1 ::v5(){vfunc_called(this, "_ZN7S1325C12v5Ev");}
void  S1325C1 ::v6(){vfunc_called(this, "_ZN7S1325C12v6Ev");}
void  S1325C1 ::v7(){vfunc_called(this, "_ZN7S1325C12v7Ev");}
void  S1325C1 ::v8(){vfunc_called(this, "_ZN7S1325C12v8Ev");}
void  S1325C1 ::v9(){vfunc_called(this, "_ZN7S1325C12v9Ev");}
void  S1325C1 ::v10(){vfunc_called(this, "_ZN7S1325C13v10Ev");}
void  S1325C1 ::v11(){vfunc_called(this, "_ZN7S1325C13v11Ev");}
void  S1325C1 ::v12(){vfunc_called(this, "_ZN7S1325C13v12Ev");}
void  S1325C1 ::v13(){vfunc_called(this, "_ZN7S1325C13v13Ev");}
void  S1325C1 ::v14(){vfunc_called(this, "_ZN7S1325C13v14Ev");}
void  S1325C1 ::v15(){vfunc_called(this, "_ZN7S1325C13v15Ev");}
void  S1325C1 ::v16(){vfunc_called(this, "_ZN7S1325C13v16Ev");}
void  S1325C1 ::v17(){vfunc_called(this, "_ZN7S1325C13v17Ev");}
S1325C1 ::S1325C1(){ note_ctor("S1325C1", this);} // tgen

static void Test_S1325C1()
{
  extern Class_Descriptor cd_S1325C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(201,279)];
    init_test(&cd_S1325C1, buf);
    S1325C1 *dp, &lv = *(dp=new (buf) S1325C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1600,1112), "sizeof(S1325C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1325C1)");
    check_base_class_offset(lv, (S1325C4*)(S1325C3*)(S1325C2*), 0, "S1325C1");
    check_base_class_offset(lv, (S1325C6*)(S1325C3*)(S1325C2*), ABISELECT(96,60), "S1325C1");
    check_base_class_offset(lv, (S1325C3*)(S1325C2*), 0, "S1325C1");
    check_base_class_offset(lv, (S1325C2*), 0, "S1325C1");
    check_field_offset(lv, s1325c1f0, ABISELECT(1240,856), "S1325C1.s1325c1f0");
    check_field_offset(lv, s1325c1f1, ABISELECT(1248,860), "S1325C1.s1325c1f1");
    check_field_offset(lv, s1325c1f2, ABISELECT(1344,928), "S1325C1.s1325c1f2");
    check_field_offset(lv, s1325c1f3, ABISELECT(1440,996), "S1325C1.s1325c1f3");
    check_field_offset(lv, s1325c1f4, ABISELECT(1456,1008), "S1325C1.s1325c1f4");
    check_field_offset(lv, s1325c1f5, ABISELECT(1472,1020), "S1325C1.s1325c1f5");
    check_field_offset(lv, s1325c1f6, ABISELECT(1480,1024), "S1325C1.s1325c1f6");
    check_field_offset(lv, s1325c1f7, ABISELECT(1488,1028), "S1325C1.s1325c1f7");
    check_field_offset(lv, s1325c1f8, ABISELECT(1504,1040), "S1325C1.s1325c1f8");
    check_field_offset(lv, s1325c1f9, ABISELECT(1520,1052), "S1325C1.s1325c1f9");
    set_bf_and_test(lv, s1325c1f10, ABISELECT(1536,1064), 0, 1, 1, "S1325C1");
    set_bf_and_test(lv, s1325c1f11, ABISELECT(1536,1064), 1, 1, 1, "S1325C1");
    set_bf_and_test(lv, s1325c1f12, ABISELECT(1536,1064), 2, 1, 1, "S1325C1");
    set_bf_and_test(lv, s1325c1f13, ABISELECT(1536,1064), 3, 1, 1, "S1325C1");
    set_bf_and_test(lv, s1325c1f14, ABISELECT(1536,1064), 4, 1, 1, "S1325C1");
    check_field_offset(lv, s1325c1f15, ABISELECT(1540,1068), "S1325C1.s1325c1f15");
    check_field_offset(lv, s1325c1f16, ABISELECT(1552,1076), "S1325C1.s1325c1f16");
    check_field_offset(lv, s1325c1f17, ABISELECT(1568,1088), "S1325C1.s1325c1f17");
    check_field_offset(lv, s1325c1f18, ABISELECT(1584,1100), "S1325C1.s1325c1f18");
    test_class_info(&lv, &cd_S1325C1);
    dp->~S1325C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1325C1(Test_S1325C1, "S1325C1", ABISELECT(1600,1112));

#else // __cplusplus

extern void _ZN7S1325C1C1Ev();
extern void _ZN7S1325C1D1Ev();
Name_Map name_map_S1325C1[] = {
  NSPAIR(_ZN7S1325C1C1Ev),
  NSPAIR(_ZN7S1325C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1325C4;
extern VTBL_ENTRY _ZTI7S1325C4[];
extern  VTBL_ENTRY _ZTV7S1325C4[];
extern Class_Descriptor cd_S1325C6;
extern VTBL_ENTRY _ZTI7S1325C6[];
extern  VTBL_ENTRY _ZTV7S1325C6[];
extern Class_Descriptor cd_S1325C3;
extern VTBL_ENTRY _ZTI7S1325C3[];
extern  VTBL_ENTRY _ZTV7S1325C3[];
extern Class_Descriptor cd_S1325C2;
extern VTBL_ENTRY _ZTI7S1325C2[];
extern  VTBL_ENTRY _ZTV7S1325C2[];
static Base_Class bases_S1325C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1325C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1325C6,    ABISELECT(96,60), //bcp->offset
    123, //bcp->virtual_function_table_offset
    2, //num_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_S1325C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1325C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1325C1[];
extern void _ZN7S1325C1D1Ev();
extern void _ZN7S1325C1D0Ev();
extern void _ZN7S1325C43v18Ev();
extern void _ZN7S1325C43v19Ev();
extern void _ZN7S1325C43v20Ev();
extern void _ZN7S1325C43v21Ev();
extern void _ZN7S1325C43v22Ev();
extern void _ZN7S1325C43v23Ev();
extern void _ZN7S1325C43v24Ev();
extern void _ZN7S1325C43v25Ev();
extern void _ZN7S1325C43v26Ev();
extern void _ZN7S1325C43v27Ev();
extern void _ZN7S1325C43v28Ev();
extern void _ZN7S1325C43v29Ev();
extern void _ZN7S1325C43v30Ev();
extern void _ZN7S1325C43v31Ev();
extern void _ZN7S1325C43v32Ev();
extern void _ZN7S1325C43v33Ev();
extern void _ZN7S1325C43v34Ev();
extern void _ZN7S1325C43v35Ev();
extern void _ZN7S1325C43v36Ev();
extern void _ZN7S1325C43v37Ev();
extern void _ZN7S1325C43v38Ev();
extern void _ZN7S1325C43v39Ev();
extern void _ZN7S1325C43v40Ev();
extern void _ZN7S1325C43v41Ev();
extern void _ZN7S1325C43v42Ev();
extern void _ZN7S1325C43v43Ev();
extern void _ZN7S1325C43v44Ev();
extern void _ZN7S1325C43v45Ev();
extern void _ZN7S1325C43v46Ev();
extern void _ZN7S1325C43v47Ev();
extern void _ZN7S1325C43v48Ev();
extern void _ZN7S1325C43v49Ev();
extern void _ZN7S1325C43v50Ev();
extern void _ZN7S1325C43v51Ev();
extern void _ZN7S1325C43v52Ev();
extern void _ZN7S1325C43v53Ev();
extern void _ZN7S1325C43v54Ev();
extern void _ZN7S1325C43v55Ev();
extern void _ZN7S1325C43v56Ev();
extern void _ZN7S1325C43v57Ev();
extern void _ZN7S1325C43v58Ev();
extern void _ZN7S1325C43v59Ev();
extern void _ZN7S1325C43v60Ev();
extern void _ZN7S1325C43v61Ev();
extern void _ZN7S1325C43v62Ev();
extern void _ZN7S1325C43v63Ev();
extern void _ZN7S1325C43v64Ev();
extern void _ZN7S1325C43v65Ev();
extern void _ZN7S1325C43v66Ev();
extern void _ZN7S1325C43v67Ev();
extern void _ZN7S1325C43v68Ev();
extern void _ZN7S1325C43v69Ev();
extern void _ZN7S1325C43v70Ev();
extern void _ZN7S1325C43v71Ev();
extern void _ZN7S1325C43v72Ev();
extern void _ZN7S1325C43v73Ev();
extern void _ZN7S1325C43v74Ev();
extern void _ZN7S1325C43v75Ev();
extern void _ZN7S1325C43v76Ev();
extern void _ZN7S1325C43v77Ev();
extern void _ZN7S1325C43v78Ev();
extern void _ZN7S1325C43v79Ev();
extern void _ZN7S1325C43v80Ev();
extern void _ZN7S1325C43v81Ev();
extern void _ZN7S1325C33v83Ev();
extern void _ZN7S1325C33v84Ev();
extern void _ZN7S1325C33v85Ev();
extern void _ZN7S1325C33v86Ev();
extern void _ZN7S1325C23v87Ev();
extern void _ZN7S1325C23v88Ev();
extern void _ZN7S1325C23v89Ev();
extern void _ZN7S1325C23v90Ev();
extern void _ZN7S1325C23v91Ev();
extern void _ZN7S1325C23v92Ev();
extern void _ZN7S1325C23v93Ev();
extern void _ZN7S1325C23v94Ev();
extern void _ZN7S1325C23v95Ev();
extern void _ZN7S1325C23v96Ev();
extern void _ZN7S1325C23v97Ev();
extern void _ZN7S1325C23v98Ev();
extern void _ZN7S1325C23v99Ev();
extern void _ZN7S1325C24v100Ev();
extern void _ZN7S1325C24v101Ev();
extern void _ZN7S1325C24v102Ev();
extern void _ZN7S1325C24v103Ev();
extern void _ZN7S1325C24v104Ev();
extern void _ZN7S1325C24v105Ev();
extern void _ZN7S1325C24v106Ev();
extern void _ZN7S1325C24v107Ev();
extern void _ZN7S1325C24v108Ev();
extern void _ZN7S1325C24v109Ev();
extern void _ZN7S1325C24v110Ev();
extern void _ZN7S1325C24v111Ev();
extern void _ZN7S1325C24v112Ev();
extern void _ZN7S1325C24v113Ev();
extern void _ZN7S1325C24v114Ev();
extern void _ZN7S1325C24v115Ev();
extern void _ZN7S1325C24v116Ev();
extern void _ZN7S1325C24v117Ev();
extern void _ZN7S1325C24v118Ev();
extern void _ZN7S1325C24v119Ev();
extern void _ZN7S1325C24v120Ev();
extern void _ZN7S1325C12v1Ev();
extern void _ZN7S1325C12v2Ev();
extern void _ZN7S1325C12v3Ev();
extern void _ZN7S1325C12v4Ev();
extern void _ZN7S1325C12v5Ev();
extern void _ZN7S1325C12v6Ev();
extern void _ZN7S1325C12v7Ev();
extern void _ZN7S1325C12v8Ev();
extern void _ZN7S1325C12v9Ev();
extern void _ZN7S1325C13v10Ev();
extern void _ZN7S1325C13v11Ev();
extern void _ZN7S1325C13v12Ev();
extern void _ZN7S1325C13v13Ev();
extern void _ZN7S1325C13v14Ev();
extern void _ZN7S1325C13v15Ev();
extern void _ZN7S1325C13v16Ev();
extern void _ZN7S1325C13v17Ev();
extern void _ZN7S1325C63v82Ev();
static  VTBL_ENTRY vtc_S1325C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1325C1[0]),
  (VTBL_ENTRY)&_ZN7S1325C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1325C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v79Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v80Ev,
  (VTBL_ENTRY)&_ZN7S1325C43v81Ev,
  (VTBL_ENTRY)&_ZN7S1325C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1325C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1325C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1325C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1325C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v112Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v113Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v114Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v115Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v116Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v117Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v118Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v119Ev,
  (VTBL_ENTRY)&_ZN7S1325C24v120Ev,
  (VTBL_ENTRY)&_ZN7S1325C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1325C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1325C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1325C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1325C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1325C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1325C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1325C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1325C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1325C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1325C13v11Ev,
  (VTBL_ENTRY)&_ZN7S1325C13v12Ev,
  (VTBL_ENTRY)&_ZN7S1325C13v13Ev,
  (VTBL_ENTRY)&_ZN7S1325C13v14Ev,
  (VTBL_ENTRY)&_ZN7S1325C13v15Ev,
  (VTBL_ENTRY)&_ZN7S1325C13v16Ev,
  (VTBL_ENTRY)&_ZN7S1325C13v17Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1325C1[0]),
  (VTBL_ENTRY)&_ZN7S1325C63v82Ev,
};
extern VTBL_ENTRY _ZTI7S1325C1[];
extern  VTBL_ENTRY _ZTV7S1325C1[];
Class_Descriptor cd_S1325C1 = {  "S1325C1", // class name
  bases_S1325C1, 4,
  &(vtc_S1325C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1600,1112), // object size
  NSPAIRA(_ZTI7S1325C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1325C1),126, //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  S1566C4  {
  int s1566c4f0;
  __tsi64 s1566c4f1;
  void *s1566c4f2[4];
  int s1566c4f3[2];
  void *s1566c4f4;
  ::S1537C5_nt s1566c4f5;
  void *s1566c4f6[2];
  virtual  ~S1566C4(); // _ZN7S1566C4D1Ev
  virtual void  v8(); // _ZN7S1566C42v8Ev
  virtual void  v9(); // _ZN7S1566C42v9Ev
  virtual void  v10(); // _ZN7S1566C43v10Ev
  virtual void  v11(); // _ZN7S1566C43v11Ev
  virtual void  v12(); // _ZN7S1566C43v12Ev
  virtual void  v13(); // _ZN7S1566C43v13Ev
  virtual void  v14(); // _ZN7S1566C43v14Ev
  virtual void  v15(); // _ZN7S1566C43v15Ev
  virtual void  v16(); // _ZN7S1566C43v16Ev
  virtual void  v17(); // _ZN7S1566C43v17Ev
  virtual void  v18(); // _ZN7S1566C43v18Ev
  virtual void  v19(); // _ZN7S1566C43v19Ev
  virtual void  v20(); // _ZN7S1566C43v20Ev
  virtual void  v21(); // _ZN7S1566C43v21Ev
  virtual void  v22(); // _ZN7S1566C43v22Ev
  virtual void  v23(); // _ZN7S1566C43v23Ev
  virtual void  v24(); // _ZN7S1566C43v24Ev
  virtual void  v25(); // _ZN7S1566C43v25Ev
  virtual void  v26(); // _ZN7S1566C43v26Ev
  virtual void  v27(); // _ZN7S1566C43v27Ev
  virtual void  v28(); // _ZN7S1566C43v28Ev
  virtual void  v29(); // _ZN7S1566C43v29Ev
  virtual void  v30(); // _ZN7S1566C43v30Ev
  virtual void  v31(); // _ZN7S1566C43v31Ev
  virtual void  v32(); // _ZN7S1566C43v32Ev
  virtual void  v33(); // _ZN7S1566C43v33Ev
  virtual void  v34(); // _ZN7S1566C43v34Ev
  virtual void  v35(); // _ZN7S1566C43v35Ev
  virtual void  v36(); // _ZN7S1566C43v36Ev
  virtual void  v37(); // _ZN7S1566C43v37Ev
  virtual void  v38(); // _ZN7S1566C43v38Ev
  virtual void  v39(); // _ZN7S1566C43v39Ev
  virtual void  v40(); // _ZN7S1566C43v40Ev
  virtual void  v41(); // _ZN7S1566C43v41Ev
  virtual void  v42(); // _ZN7S1566C43v42Ev
  virtual void  v43(); // _ZN7S1566C43v43Ev
  virtual void  v44(); // _ZN7S1566C43v44Ev
  virtual void  v45(); // _ZN7S1566C43v45Ev
  virtual void  v46(); // _ZN7S1566C43v46Ev
  virtual void  v47(); // _ZN7S1566C43v47Ev
  virtual void  v48(); // _ZN7S1566C43v48Ev
  virtual void  v49(); // _ZN7S1566C43v49Ev
  virtual void  v50(); // _ZN7S1566C43v50Ev
  virtual void  v51(); // _ZN7S1566C43v51Ev
  virtual void  v52(); // _ZN7S1566C43v52Ev
  virtual void  v53(); // _ZN7S1566C43v53Ev
  virtual void  v54(); // _ZN7S1566C43v54Ev
  virtual void  v55(); // _ZN7S1566C43v55Ev
  virtual void  v56(); // _ZN7S1566C43v56Ev
  virtual void  v57(); // _ZN7S1566C43v57Ev
  virtual void  v58(); // _ZN7S1566C43v58Ev
  virtual void  v59(); // _ZN7S1566C43v59Ev
  virtual void  v60(); // _ZN7S1566C43v60Ev
  virtual void  v61(); // _ZN7S1566C43v61Ev
  virtual void  v62(); // _ZN7S1566C43v62Ev
  virtual void  v63(); // _ZN7S1566C43v63Ev
  virtual void  v64(); // _ZN7S1566C43v64Ev
  virtual void  v65(); // _ZN7S1566C43v65Ev
  virtual void  v66(); // _ZN7S1566C43v66Ev
  virtual void  v67(); // _ZN7S1566C43v67Ev
  virtual void  v68(); // _ZN7S1566C43v68Ev
  virtual void  v69(); // _ZN7S1566C43v69Ev
  virtual void  v70(); // _ZN7S1566C43v70Ev
  virtual void  v71(); // _ZN7S1566C43v71Ev
  S1566C4(); // tgen
};
//SIG(-1 S1566C4) 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]}


 S1566C4 ::~S1566C4(){ note_dtor("S1566C4", this);}
void  S1566C4 ::v8(){vfunc_called(this, "_ZN7S1566C42v8Ev");}
void  S1566C4 ::v9(){vfunc_called(this, "_ZN7S1566C42v9Ev");}
void  S1566C4 ::v10(){vfunc_called(this, "_ZN7S1566C43v10Ev");}
void  S1566C4 ::v11(){vfunc_called(this, "_ZN7S1566C43v11Ev");}
void  S1566C4 ::v12(){vfunc_called(this, "_ZN7S1566C43v12Ev");}
void  S1566C4 ::v13(){vfunc_called(this, "_ZN7S1566C43v13Ev");}
void  S1566C4 ::v14(){vfunc_called(this, "_ZN7S1566C43v14Ev");}
void  S1566C4 ::v15(){vfunc_called(this, "_ZN7S1566C43v15Ev");}
void  S1566C4 ::v16(){vfunc_called(this, "_ZN7S1566C43v16Ev");}
void  S1566C4 ::v17(){vfunc_called(this, "_ZN7S1566C43v17Ev");}
void  S1566C4 ::v18(){vfunc_called(this, "_ZN7S1566C43v18Ev");}
void  S1566C4 ::v19(){vfunc_called(this, "_ZN7S1566C43v19Ev");}
void  S1566C4 ::v20(){vfunc_called(this, "_ZN7S1566C43v20Ev");}
void  S1566C4 ::v21(){vfunc_called(this, "_ZN7S1566C43v21Ev");}
void  S1566C4 ::v22(){vfunc_called(this, "_ZN7S1566C43v22Ev");}
void  S1566C4 ::v23(){vfunc_called(this, "_ZN7S1566C43v23Ev");}
void  S1566C4 ::v24(){vfunc_called(this, "_ZN7S1566C43v24Ev");}
void  S1566C4 ::v25(){vfunc_called(this, "_ZN7S1566C43v25Ev");}
void  S1566C4 ::v26(){vfunc_called(this, "_ZN7S1566C43v26Ev");}
void  S1566C4 ::v27(){vfunc_called(this, "_ZN7S1566C43v27Ev");}
void  S1566C4 ::v28(){vfunc_called(this, "_ZN7S1566C43v28Ev");}
void  S1566C4 ::v29(){vfunc_called(this, "_ZN7S1566C43v29Ev");}
void  S1566C4 ::v30(){vfunc_called(this, "_ZN7S1566C43v30Ev");}
void  S1566C4 ::v31(){vfunc_called(this, "_ZN7S1566C43v31Ev");}
void  S1566C4 ::v32(){vfunc_called(this, "_ZN7S1566C43v32Ev");}
void  S1566C4 ::v33(){vfunc_called(this, "_ZN7S1566C43v33Ev");}
void  S1566C4 ::v34(){vfunc_called(this, "_ZN7S1566C43v34Ev");}
void  S1566C4 ::v35(){vfunc_called(this, "_ZN7S1566C43v35Ev");}
void  S1566C4 ::v36(){vfunc_called(this, "_ZN7S1566C43v36Ev");}
void  S1566C4 ::v37(){vfunc_called(this, "_ZN7S1566C43v37Ev");}
void  S1566C4 ::v38(){vfunc_called(this, "_ZN7S1566C43v38Ev");}
void  S1566C4 ::v39(){vfunc_called(this, "_ZN7S1566C43v39Ev");}
void  S1566C4 ::v40(){vfunc_called(this, "_ZN7S1566C43v40Ev");}
void  S1566C4 ::v41(){vfunc_called(this, "_ZN7S1566C43v41Ev");}
void  S1566C4 ::v42(){vfunc_called(this, "_ZN7S1566C43v42Ev");}
void  S1566C4 ::v43(){vfunc_called(this, "_ZN7S1566C43v43Ev");}
void  S1566C4 ::v44(){vfunc_called(this, "_ZN7S1566C43v44Ev");}
void  S1566C4 ::v45(){vfunc_called(this, "_ZN7S1566C43v45Ev");}
void  S1566C4 ::v46(){vfunc_called(this, "_ZN7S1566C43v46Ev");}
void  S1566C4 ::v47(){vfunc_called(this, "_ZN7S1566C43v47Ev");}
void  S1566C4 ::v48(){vfunc_called(this, "_ZN7S1566C43v48Ev");}
void  S1566C4 ::v49(){vfunc_called(this, "_ZN7S1566C43v49Ev");}
void  S1566C4 ::v50(){vfunc_called(this, "_ZN7S1566C43v50Ev");}
void  S1566C4 ::v51(){vfunc_called(this, "_ZN7S1566C43v51Ev");}
void  S1566C4 ::v52(){vfunc_called(this, "_ZN7S1566C43v52Ev");}
void  S1566C4 ::v53(){vfunc_called(this, "_ZN7S1566C43v53Ev");}
void  S1566C4 ::v54(){vfunc_called(this, "_ZN7S1566C43v54Ev");}
void  S1566C4 ::v55(){vfunc_called(this, "_ZN7S1566C43v55Ev");}
void  S1566C4 ::v56(){vfunc_called(this, "_ZN7S1566C43v56Ev");}
void  S1566C4 ::v57(){vfunc_called(this, "_ZN7S1566C43v57Ev");}
void  S1566C4 ::v58(){vfunc_called(this, "_ZN7S1566C43v58Ev");}
void  S1566C4 ::v59(){vfunc_called(this, "_ZN7S1566C43v59Ev");}
void  S1566C4 ::v60(){vfunc_called(this, "_ZN7S1566C43v60Ev");}
void  S1566C4 ::v61(){vfunc_called(this, "_ZN7S1566C43v61Ev");}
void  S1566C4 ::v62(){vfunc_called(this, "_ZN7S1566C43v62Ev");}
void  S1566C4 ::v63(){vfunc_called(this, "_ZN7S1566C43v63Ev");}
void  S1566C4 ::v64(){vfunc_called(this, "_ZN7S1566C43v64Ev");}
void  S1566C4 ::v65(){vfunc_called(this, "_ZN7S1566C43v65Ev");}
void  S1566C4 ::v66(){vfunc_called(this, "_ZN7S1566C43v66Ev");}
void  S1566C4 ::v67(){vfunc_called(this, "_ZN7S1566C43v67Ev");}
void  S1566C4 ::v68(){vfunc_called(this, "_ZN7S1566C43v68Ev");}
void  S1566C4 ::v69(){vfunc_called(this, "_ZN7S1566C43v69Ev");}
void  S1566C4 ::v70(){vfunc_called(this, "_ZN7S1566C43v70Ev");}
void  S1566C4 ::v71(){vfunc_called(this, "_ZN7S1566C43v71Ev");}
S1566C4 ::S1566C4(){ note_ctor("S1566C4", this);} // tgen

static void Test_S1566C4()
{
  extern Class_Descriptor cd_S1566C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1566C4, buf);
    S1566C4 *dp, &lv = *(dp=new (buf) S1566C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1566C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1566C4)");
    check_field_offset(lv, s1566c4f0, ABISELECT(8,4), "S1566C4.s1566c4f0");
    check_field_offset(lv, s1566c4f1, ABISELECT(16,8), "S1566C4.s1566c4f1");
    check_field_offset(lv, s1566c4f2, ABISELECT(24,16), "S1566C4.s1566c4f2");
    check_field_offset(lv, s1566c4f3, ABISELECT(56,32), "S1566C4.s1566c4f3");
    check_field_offset(lv, s1566c4f4, ABISELECT(64,40), "S1566C4.s1566c4f4");
    check_field_offset(lv, s1566c4f5, ABISELECT(72,44), "S1566C4.s1566c4f5");
    check_field_offset(lv, s1566c4f6, ABISELECT(80,52), "S1566C4.s1566c4f6");
    test_class_info(&lv, &cd_S1566C4);
    dp->~S1566C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1566C4(Test_S1566C4, "S1566C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1566C4C1Ev();
extern void _ZN7S1566C4D1Ev();
Name_Map name_map_S1566C4[] = {
  NSPAIR(_ZN7S1566C4C1Ev),
  NSPAIR(_ZN7S1566C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1566C4[];
extern void _ZN7S1566C4D1Ev();
extern void _ZN7S1566C4D0Ev();
extern void _ZN7S1566C42v8Ev();
extern void _ZN7S1566C42v9Ev();
extern void _ZN7S1566C43v10Ev();
extern void _ZN7S1566C43v11Ev();
extern void _ZN7S1566C43v12Ev();
extern void _ZN7S1566C43v13Ev();
extern void _ZN7S1566C43v14Ev();
extern void _ZN7S1566C43v15Ev();
extern void _ZN7S1566C43v16Ev();
extern void _ZN7S1566C43v17Ev();
extern void _ZN7S1566C43v18Ev();
extern void _ZN7S1566C43v19Ev();
extern void _ZN7S1566C43v20Ev();
extern void _ZN7S1566C43v21Ev();
extern void _ZN7S1566C43v22Ev();
extern void _ZN7S1566C43v23Ev();
extern void _ZN7S1566C43v24Ev();
extern void _ZN7S1566C43v25Ev();
extern void _ZN7S1566C43v26Ev();
extern void _ZN7S1566C43v27Ev();
extern void _ZN7S1566C43v28Ev();
extern void _ZN7S1566C43v29Ev();
extern void _ZN7S1566C43v30Ev();
extern void _ZN7S1566C43v31Ev();
extern void _ZN7S1566C43v32Ev();
extern void _ZN7S1566C43v33Ev();
extern void _ZN7S1566C43v34Ev();
extern void _ZN7S1566C43v35Ev();
extern void _ZN7S1566C43v36Ev();
extern void _ZN7S1566C43v37Ev();
extern void _ZN7S1566C43v38Ev();
extern void _ZN7S1566C43v39Ev();
extern void _ZN7S1566C43v40Ev();
extern void _ZN7S1566C43v41Ev();
extern void _ZN7S1566C43v42Ev();
extern void _ZN7S1566C43v43Ev();
extern void _ZN7S1566C43v44Ev();
extern void _ZN7S1566C43v45Ev();
extern void _ZN7S1566C43v46Ev();
extern void _ZN7S1566C43v47Ev();
extern void _ZN7S1566C43v48Ev();
extern void _ZN7S1566C43v49Ev();
extern void _ZN7S1566C43v50Ev();
extern void _ZN7S1566C43v51Ev();
extern void _ZN7S1566C43v52Ev();
extern void _ZN7S1566C43v53Ev();
extern void _ZN7S1566C43v54Ev();
extern void _ZN7S1566C43v55Ev();
extern void _ZN7S1566C43v56Ev();
extern void _ZN7S1566C43v57Ev();
extern void _ZN7S1566C43v58Ev();
extern void _ZN7S1566C43v59Ev();
extern void _ZN7S1566C43v60Ev();
extern void _ZN7S1566C43v61Ev();
extern void _ZN7S1566C43v62Ev();
extern void _ZN7S1566C43v63Ev();
extern void _ZN7S1566C43v64Ev();
extern void _ZN7S1566C43v65Ev();
extern void _ZN7S1566C43v66Ev();
extern void _ZN7S1566C43v67Ev();
extern void _ZN7S1566C43v68Ev();
extern void _ZN7S1566C43v69Ev();
extern void _ZN7S1566C43v70Ev();
extern void _ZN7S1566C43v71Ev();
static  VTBL_ENTRY vtc_S1566C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1566C4[0]),
  (VTBL_ENTRY)&_ZN7S1566C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1566C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1566C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1566C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v71Ev,
};
extern VTBL_ENTRY _ZTI7S1566C4[];
extern  VTBL_ENTRY _ZTV7S1566C4[];
Class_Descriptor cd_S1566C4 = {  "S1566C4", // class name
  0,0,//no base classes
  &(vtc_S1566C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1566C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1566C4),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  S1566C6  {
  virtual void  v72(); // _ZN7S1566C63v72Ev
  ~S1566C6(); // tgen
  S1566C6(); // tgen
};
//SIG(-1 S1566C6) C1{ v1}


void  S1566C6 ::v72(){vfunc_called(this, "_ZN7S1566C63v72Ev");}
S1566C6 ::~S1566C6(){ note_dtor("S1566C6", this);} // tgen
S1566C6 ::S1566C6(){ note_ctor("S1566C6", this);} // tgen

static void Test_S1566C6()
{
  extern Class_Descriptor cd_S1566C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1566C6, buf);
    S1566C6 *dp, &lv = *(dp=new (buf) S1566C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1566C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1566C6)");
    test_class_info(&lv, &cd_S1566C6);
    dp->~S1566C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1566C6(Test_S1566C6, "S1566C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1566C6C1Ev();
extern void _ZN7S1566C6D1Ev();
Name_Map name_map_S1566C6[] = {
  NSPAIR(_ZN7S1566C6C1Ev),
  NSPAIR(_ZN7S1566C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1566C6[];
extern void _ZN7S1566C63v72Ev();
static  VTBL_ENTRY vtc_S1566C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1566C6[0]),
  (VTBL_ENTRY)&_ZN7S1566C63v72Ev,
};
extern VTBL_ENTRY _ZTI7S1566C6[];
extern  VTBL_ENTRY _ZTV7S1566C6[];
Class_Descriptor cd_S1566C6 = {  "S1566C6", // class name
  0,0,//no base classes
  &(vtc_S1566C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1566C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1566C6),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  S1566C3  : S1566C4 , S1566C6 {
  void *s1566c3f0;
  int s1566c3f1[7];
  virtual  ~S1566C3(); // _ZN7S1566C3D1Ev
  virtual void  v73(); // _ZN7S1566C33v73Ev
  virtual void  v74(); // _ZN7S1566C33v74Ev
  virtual void  v75(); // _ZN7S1566C33v75Ev
  virtual void  v76(); // _ZN7S1566C33v76Ev
  S1566C3(); // tgen
};
//SIG(-1 S1566C3) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} BC4{ v69} vd v1 v2 v3 v4 Fp Fi[7]}


 S1566C3 ::~S1566C3(){ note_dtor("S1566C3", this);}
void  S1566C3 ::v73(){vfunc_called(this, "_ZN7S1566C33v73Ev");}
void  S1566C3 ::v74(){vfunc_called(this, "_ZN7S1566C33v74Ev");}
void  S1566C3 ::v75(){vfunc_called(this, "_ZN7S1566C33v75Ev");}
void  S1566C3 ::v76(){vfunc_called(this, "_ZN7S1566C33v76Ev");}
S1566C3 ::S1566C3(){ note_ctor("S1566C3", this);} // tgen

static void Test_S1566C3()
{
  extern Class_Descriptor cd_S1566C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,25)];
    init_test(&cd_S1566C3, buf);
    S1566C3 *dp, &lv = *(dp=new (buf) S1566C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S1566C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1566C3)");
    check_base_class_offset(lv, (S1566C4*), 0, "S1566C3");
    check_base_class_offset(lv, (S1566C6*), ABISELECT(96,60), "S1566C3");
    check_field_offset(lv, s1566c3f0, ABISELECT(104,64), "S1566C3.s1566c3f0");
    check_field_offset(lv, s1566c3f1, ABISELECT(112,68), "S1566C3.s1566c3f1");
    test_class_info(&lv, &cd_S1566C3);
    dp->~S1566C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1566C3(Test_S1566C3, "S1566C3", ABISELECT(144,96));

#else // __cplusplus

extern void _ZN7S1566C3C1Ev();
extern void _ZN7S1566C3D1Ev();
Name_Map name_map_S1566C3[] = {
  NSPAIR(_ZN7S1566C3C1Ev),
  NSPAIR(_ZN7S1566C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1566C4;
extern VTBL_ENTRY _ZTI7S1566C4[];
extern  VTBL_ENTRY _ZTV7S1566C4[];
extern Class_Descriptor cd_S1566C6;
extern VTBL_ENTRY _ZTI7S1566C6[];
extern  VTBL_ENTRY _ZTV7S1566C6[];
static Base_Class bases_S1566C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1566C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S1566C6,    ABISELECT(96,60), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1566C3[];
extern void _ZN7S1566C3D1Ev();
extern void _ZN7S1566C3D0Ev();
extern void _ZN7S1566C42v8Ev();
extern void _ZN7S1566C42v9Ev();
extern void _ZN7S1566C43v10Ev();
extern void _ZN7S1566C43v11Ev();
extern void _ZN7S1566C43v12Ev();
extern void _ZN7S1566C43v13Ev();
extern void _ZN7S1566C43v14Ev();
extern void _ZN7S1566C43v15Ev();
extern void _ZN7S1566C43v16Ev();
extern void _ZN7S1566C43v17Ev();
extern void _ZN7S1566C43v18Ev();
extern void _ZN7S1566C43v19Ev();
extern void _ZN7S1566C43v20Ev();
extern void _ZN7S1566C43v21Ev();
extern void _ZN7S1566C43v22Ev();
extern void _ZN7S1566C43v23Ev();
extern void _ZN7S1566C43v24Ev();
extern void _ZN7S1566C43v25Ev();
extern void _ZN7S1566C43v26Ev();
extern void _ZN7S1566C43v27Ev();
extern void _ZN7S1566C43v28Ev();
extern void _ZN7S1566C43v29Ev();
extern void _ZN7S1566C43v30Ev();
extern void _ZN7S1566C43v31Ev();
extern void _ZN7S1566C43v32Ev();
extern void _ZN7S1566C43v33Ev();
extern void _ZN7S1566C43v34Ev();
extern void _ZN7S1566C43v35Ev();
extern void _ZN7S1566C43v36Ev();
extern void _ZN7S1566C43v37Ev();
extern void _ZN7S1566C43v38Ev();
extern void _ZN7S1566C43v39Ev();
extern void _ZN7S1566C43v40Ev();
extern void _ZN7S1566C43v41Ev();
extern void _ZN7S1566C43v42Ev();
extern void _ZN7S1566C43v43Ev();
extern void _ZN7S1566C43v44Ev();
extern void _ZN7S1566C43v45Ev();
extern void _ZN7S1566C43v46Ev();
extern void _ZN7S1566C43v47Ev();
extern void _ZN7S1566C43v48Ev();
extern void _ZN7S1566C43v49Ev();
extern void _ZN7S1566C43v50Ev();
extern void _ZN7S1566C43v51Ev();
extern void _ZN7S1566C43v52Ev();
extern void _ZN7S1566C43v53Ev();
extern void _ZN7S1566C43v54Ev();
extern void _ZN7S1566C43v55Ev();
extern void _ZN7S1566C43v56Ev();
extern void _ZN7S1566C43v57Ev();
extern void _ZN7S1566C43v58Ev();
extern void _ZN7S1566C43v59Ev();
extern void _ZN7S1566C43v60Ev();
extern void _ZN7S1566C43v61Ev();
extern void _ZN7S1566C43v62Ev();
extern void _ZN7S1566C43v63Ev();
extern void _ZN7S1566C43v64Ev();
extern void _ZN7S1566C43v65Ev();
extern void _ZN7S1566C43v66Ev();
extern void _ZN7S1566C43v67Ev();
extern void _ZN7S1566C43v68Ev();
extern void _ZN7S1566C43v69Ev();
extern void _ZN7S1566C43v70Ev();
extern void _ZN7S1566C43v71Ev();
extern void _ZN7S1566C33v73Ev();
extern void _ZN7S1566C33v74Ev();
extern void _ZN7S1566C33v75Ev();
extern void _ZN7S1566C33v76Ev();
extern void _ZN7S1566C63v72Ev();
static  VTBL_ENTRY vtc_S1566C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1566C3[0]),
  (VTBL_ENTRY)&_ZN7S1566C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1566C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1566C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1566C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1566C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1566C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1566C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1566C33v76Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1566C3[0]),
  (VTBL_ENTRY)&_ZN7S1566C63v72Ev,
};
extern VTBL_ENTRY _ZTI7S1566C3[];
extern  VTBL_ENTRY _ZTV7S1566C3[];
Class_Descriptor cd_S1566C3 = {  "S1566C3", // class name
  bases_S1566C3, 2,
  &(vtc_S1566C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,96), // object size
  NSPAIRA(_ZTI7S1566C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1566C3),75, //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  S1566C7_nt  {
  virtual  ~S1566C7_nt(); // _ZN10S1566C7_ntD1Ev
  virtual void  v77(); // _ZN10S1566C7_nt3v77Ev
  virtual void  v78(); // _ZN10S1566C7_nt3v78Ev
  virtual void  v79(); // _ZN10S1566C7_nt3v79Ev
  S1566C7_nt(); // tgen
};
//SIG(-1 S1566C7_nt) C1{ vd v1 v2 v3}


 S1566C7_nt ::~S1566C7_nt(){ note_dtor("S1566C7_nt", this);}
void  S1566C7_nt ::v77(){vfunc_called(this, "_ZN10S1566C7_nt3v77Ev");}
void  S1566C7_nt ::v78(){vfunc_called(this, "_ZN10S1566C7_nt3v78Ev");}
void  S1566C7_nt ::v79(){vfunc_called(this, "_ZN10S1566C7_nt3v79Ev");}
S1566C7_nt ::S1566C7_nt(){ note_ctor("S1566C7_nt", this);} // tgen

//skip512 S1566C7_nt

#else // __cplusplus

extern void _ZN10S1566C7_ntC1Ev();
extern void _ZN10S1566C7_ntD1Ev();
Name_Map name_map_S1566C7_nt[] = {
  NSPAIR(_ZN10S1566C7_ntC1Ev),
  NSPAIR(_ZN10S1566C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1566C7_nt[];
extern void _ZN10S1566C7_ntD1Ev();
extern void _ZN10S1566C7_ntD0Ev();
extern void _ZN10S1566C7_nt3v77Ev();
extern void _ZN10S1566C7_nt3v78Ev();
extern void _ZN10S1566C7_nt3v79Ev();
static  VTBL_ENTRY vtc_S1566C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1566C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S1566C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1566C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1566C7_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1566C7_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1566C7_nt3v79Ev,
};
extern VTBL_ENTRY _ZTI10S1566C7_nt[];
VTBL_ENTRY *P__ZTI10S1566C7_nt = _ZTI10S1566C7_nt; 
extern  VTBL_ENTRY _ZTV10S1566C7_nt[];
Class_Descriptor cd_S1566C7_nt = {  "S1566C7_nt", // class name
  0,0,//no base classes
  &(vtc_S1566C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S1566C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1566C7_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  S1566C10  : S1537C8_nt {
};
//SIG(-1 S1566C10) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1566C10()
{
  extern Class_Descriptor cd_S1566C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1566C10, buf);
    S1566C10 &lv = *(new (buf) S1566C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1566C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1566C10)");
    check_base_class_offset(lv, (S1537C8_nt*), 0, "S1566C10");
    test_class_info(&lv, &cd_S1566C10);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1566C10(Test_S1566C10, "S1566C10", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
static Base_Class bases_S1566C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1566C10 = {  "S1566C10", // class name
  bases_S1566C10, 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  S1566C9  : S1566C10 {
};
//SIG(-1 S1566C9) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1566C9()
{
  extern Class_Descriptor cd_S1566C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1566C9, buf);
    S1566C9 &lv = *(new (buf) S1566C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1566C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1566C9)");
    check_base_class_offset(lv, (S1537C8_nt*)(S1566C10*), 0, "S1566C9");
    check_base_class_offset(lv, (S1566C10*), 0, "S1566C9");
    test_class_info(&lv, &cd_S1566C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1566C9(Test_S1566C9, "S1566C9", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
extern Class_Descriptor cd_S1566C10;
static Base_Class bases_S1566C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1566C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1566C9 = {  "S1566C9", // class name
  bases_S1566C9, 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  S1566C14_nt  {
  int s1566c14f0[2];
  void  mf1566c14(); // _ZN11S1566C14_nt9mf1566c14Ev
};
//SIG(-1 S1566C14_nt) C1{ m Fi[2]}


void  S1566C14_nt ::mf1566c14(){}

//skip512 S1566C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1566C17  {
  int s1566c17f0[28];
  virtual  ~S1566C17(); // _ZN8S1566C17D1Ev
  virtual void  v105(); // _ZN8S1566C174v105Ev
  virtual void  v106(); // _ZN8S1566C174v106Ev
  virtual void  v107(); // _ZN8S1566C174v107Ev
  virtual void  v108(); // _ZN8S1566C174v108Ev
  virtual void  v109(); // _ZN8S1566C174v109Ev
  virtual void  v110(); // _ZN8S1566C174v110Ev
  virtual void  v111(); // _ZN8S1566C174v111Ev
  virtual void  v112(); // _ZN8S1566C174v112Ev
  virtual void  v113(); // _ZN8S1566C174v113Ev
  virtual void  v114(); // _ZN8S1566C174v114Ev
  virtual void  v115(); // _ZN8S1566C174v115Ev
  virtual void  v116(); // _ZN8S1566C174v116Ev
  virtual void  v117(); // _ZN8S1566C174v117Ev
  virtual void  v118(); // _ZN8S1566C174v118Ev
  virtual void  v119(); // _ZN8S1566C174v119Ev
  virtual void  v120(); // _ZN8S1566C174v120Ev
  virtual void  v121(); // _ZN8S1566C174v121Ev
  virtual void  v122(); // _ZN8S1566C174v122Ev
  virtual void  v123(); // _ZN8S1566C174v123Ev
  virtual void  v124(); // _ZN8S1566C174v124Ev
  virtual void  v125(); // _ZN8S1566C174v125Ev
  virtual void  v126(); // _ZN8S1566C174v126Ev
  virtual void  v127(); // _ZN8S1566C174v127Ev
  virtual void  v128(); // _ZN8S1566C174v128Ev
  virtual void  v129(); // _ZN8S1566C174v129Ev
  S1566C17(); // tgen
};
//SIG(-1 S1566C17) 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 Fi[28]}


 S1566C17 ::~S1566C17(){ note_dtor("S1566C17", this);}
void  S1566C17 ::v105(){vfunc_called(this, "_ZN8S1566C174v105Ev");}
void  S1566C17 ::v106(){vfunc_called(this, "_ZN8S1566C174v106Ev");}
void  S1566C17 ::v107(){vfunc_called(this, "_ZN8S1566C174v107Ev");}
void  S1566C17 ::v108(){vfunc_called(this, "_ZN8S1566C174v108Ev");}
void  S1566C17 ::v109(){vfunc_called(this, "_ZN8S1566C174v109Ev");}
void  S1566C17 ::v110(){vfunc_called(this, "_ZN8S1566C174v110Ev");}
void  S1566C17 ::v111(){vfunc_called(this, "_ZN8S1566C174v111Ev");}
void  S1566C17 ::v112(){vfunc_called(this, "_ZN8S1566C174v112Ev");}
void  S1566C17 ::v113(){vfunc_called(this, "_ZN8S1566C174v113Ev");}
void  S1566C17 ::v114(){vfunc_called(this, "_ZN8S1566C174v114Ev");}
void  S1566C17 ::v115(){vfunc_called(this, "_ZN8S1566C174v115Ev");}
void  S1566C17 ::v116(){vfunc_called(this, "_ZN8S1566C174v116Ev");}
void  S1566C17 ::v117(){vfunc_called(this, "_ZN8S1566C174v117Ev");}
void  S1566C17 ::v118(){vfunc_called(this, "_ZN8S1566C174v118Ev");}
void  S1566C17 ::v119(){vfunc_called(this, "_ZN8S1566C174v119Ev");}
void  S1566C17 ::v120(){vfunc_called(this, "_ZN8S1566C174v120Ev");}
void  S1566C17 ::v121(){vfunc_called(this, "_ZN8S1566C174v121Ev");}
void  S1566C17 ::v122(){vfunc_called(this, "_ZN8S1566C174v122Ev");}
void  S1566C17 ::v123(){vfunc_called(this, "_ZN8S1566C174v123Ev");}
void  S1566C17 ::v124(){vfunc_called(this, "_ZN8S1566C174v124Ev");}
void  S1566C17 ::v125(){vfunc_called(this, "_ZN8S1566C174v125Ev");}
void  S1566C17 ::v126(){vfunc_called(this, "_ZN8S1566C174v126Ev");}
void  S1566C17 ::v127(){vfunc_called(this, "_ZN8S1566C174v127Ev");}
void  S1566C17 ::v128(){vfunc_called(this, "_ZN8S1566C174v128Ev");}
void  S1566C17 ::v129(){vfunc_called(this, "_ZN8S1566C174v129Ev");}
S1566C17 ::S1566C17(){ note_ctor("S1566C17", this);} // tgen

static void Test_S1566C17()
{
  extern Class_Descriptor cd_S1566C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S1566C17, buf);
    S1566C17 *dp, &lv = *(dp=new (buf) S1566C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S1566C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1566C17)");
    check_field_offset(lv, s1566c17f0, ABISELECT(8,4), "S1566C17.s1566c17f0");
    test_class_info(&lv, &cd_S1566C17);
    dp->~S1566C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1566C17(Test_S1566C17, "S1566C17", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN8S1566C17C1Ev();
extern void _ZN8S1566C17D1Ev();
Name_Map name_map_S1566C17[] = {
  NSPAIR(_ZN8S1566C17C1Ev),
  NSPAIR(_ZN8S1566C17D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1566C17[];
extern void _ZN8S1566C17D1Ev();
extern void _ZN8S1566C17D0Ev();
extern void _ZN8S1566C174v105Ev();
extern void _ZN8S1566C174v106Ev();
extern void _ZN8S1566C174v107Ev();
extern void _ZN8S1566C174v108Ev();
extern void _ZN8S1566C174v109Ev();
extern void _ZN8S1566C174v110Ev();
extern void _ZN8S1566C174v111Ev();
extern void _ZN8S1566C174v112Ev();
extern void _ZN8S1566C174v113Ev();
extern void _ZN8S1566C174v114Ev();
extern void _ZN8S1566C174v115Ev();
extern void _ZN8S1566C174v116Ev();
extern void _ZN8S1566C174v117Ev();
extern void _ZN8S1566C174v118Ev();
extern void _ZN8S1566C174v119Ev();
extern void _ZN8S1566C174v120Ev();
extern void _ZN8S1566C174v121Ev();
extern void _ZN8S1566C174v122Ev();
extern void _ZN8S1566C174v123Ev();
extern void _ZN8S1566C174v124Ev();
extern void _ZN8S1566C174v125Ev();
extern void _ZN8S1566C174v126Ev();
extern void _ZN8S1566C174v127Ev();
extern void _ZN8S1566C174v128Ev();
extern void _ZN8S1566C174v129Ev();
static  VTBL_ENTRY vtc_S1566C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1566C17[0]),
  (VTBL_ENTRY)&_ZN8S1566C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1566C17D0Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v105Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v106Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v107Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v108Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v109Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v110Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v111Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v112Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v113Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v114Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v115Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v116Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v117Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v118Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v119Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v120Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v121Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v122Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v123Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v124Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v125Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v126Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v127Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v128Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v129Ev,
};
extern VTBL_ENTRY _ZTI8S1566C17[];
extern  VTBL_ENTRY _ZTV8S1566C17[];
Class_Descriptor cd_S1566C17 = {  "S1566C17", // class name
  0,0,//no base classes
  &(vtc_S1566C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI8S1566C17),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1566C17),29, //virtual function table var
  2, // 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  S1566C16  : S1566C17 {
  ::S1537C23 s1566c16f0;
  int s1566c16f1[2];
  virtual void  v130(); // _ZN8S1566C164v130Ev
  virtual void  v131(); // _ZN8S1566C164v131Ev
  virtual void  v132(); // _ZN8S1566C164v132Ev
  ~S1566C16(); // tgen
  S1566C16(); // tgen
};
//SIG(-1 S1566C16) C1{ BC2{ 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 Fi[28]} v1 v2 v3 FC3{ BC4{ m Fp Fi[2]}} Fi[2]}


void  S1566C16 ::v130(){vfunc_called(this, "_ZN8S1566C164v130Ev");}
void  S1566C16 ::v131(){vfunc_called(this, "_ZN8S1566C164v131Ev");}
void  S1566C16 ::v132(){vfunc_called(this, "_ZN8S1566C164v132Ev");}
S1566C16 ::~S1566C16(){ note_dtor("S1566C16", this);} // tgen
S1566C16 ::S1566C16(){ note_ctor("S1566C16", this);} // tgen

static void Test_S1566C16()
{
  extern Class_Descriptor cd_S1566C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,35)];
    init_test(&cd_S1566C16, buf);
    S1566C16 *dp, &lv = *(dp=new (buf) S1566C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,136), "sizeof(S1566C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1566C16)");
    check_base_class_offset(lv, (S1566C17*), 0, "S1566C16");
    check_field_offset(lv, s1566c16f0, ABISELECT(120,116), "S1566C16.s1566c16f0");
    check_field_offset(lv, s1566c16f1, ABISELECT(136,128), "S1566C16.s1566c16f1");
    test_class_info(&lv, &cd_S1566C16);
    dp->~S1566C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1566C16(Test_S1566C16, "S1566C16", ABISELECT(144,136));

#else // __cplusplus

extern void _ZN8S1566C16C1Ev();
extern void _ZN8S1566C16D1Ev();
Name_Map name_map_S1566C16[] = {
  NSPAIR(_ZN8S1566C16C1Ev),
  NSPAIR(_ZN8S1566C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1566C17;
extern VTBL_ENTRY _ZTI8S1566C17[];
extern  VTBL_ENTRY _ZTV8S1566C17[];
static Base_Class bases_S1566C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1566C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S1566C16[];
extern void _ZN8S1566C16D1Ev();
extern void _ZN8S1566C16D0Ev();
extern void _ZN8S1566C174v105Ev();
extern void _ZN8S1566C174v106Ev();
extern void _ZN8S1566C174v107Ev();
extern void _ZN8S1566C174v108Ev();
extern void _ZN8S1566C174v109Ev();
extern void _ZN8S1566C174v110Ev();
extern void _ZN8S1566C174v111Ev();
extern void _ZN8S1566C174v112Ev();
extern void _ZN8S1566C174v113Ev();
extern void _ZN8S1566C174v114Ev();
extern void _ZN8S1566C174v115Ev();
extern void _ZN8S1566C174v116Ev();
extern void _ZN8S1566C174v117Ev();
extern void _ZN8S1566C174v118Ev();
extern void _ZN8S1566C174v119Ev();
extern void _ZN8S1566C174v120Ev();
extern void _ZN8S1566C174v121Ev();
extern void _ZN8S1566C174v122Ev();
extern void _ZN8S1566C174v123Ev();
extern void _ZN8S1566C174v124Ev();
extern void _ZN8S1566C174v125Ev();
extern void _ZN8S1566C174v126Ev();
extern void _ZN8S1566C174v127Ev();
extern void _ZN8S1566C174v128Ev();
extern void _ZN8S1566C174v129Ev();
extern void _ZN8S1566C164v130Ev();
extern void _ZN8S1566C164v131Ev();
extern void _ZN8S1566C164v132Ev();
static  VTBL_ENTRY vtc_S1566C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1566C16[0]),
  (VTBL_ENTRY)&_ZN8S1566C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1566C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v105Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v106Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v107Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v108Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v109Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v110Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v111Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v112Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v113Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v114Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v115Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v116Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v117Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v118Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v119Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v120Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v121Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v122Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v123Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v124Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v125Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v126Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v127Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v128Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v129Ev,
  (VTBL_ENTRY)&_ZN8S1566C164v130Ev,
  (VTBL_ENTRY)&_ZN8S1566C164v131Ev,
  (VTBL_ENTRY)&_ZN8S1566C164v132Ev,
};
extern VTBL_ENTRY _ZTI8S1566C16[];
extern  VTBL_ENTRY _ZTV8S1566C16[];
Class_Descriptor cd_S1566C16 = {  "S1566C16", // class name
  bases_S1566C16, 1,
  &(vtc_S1566C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,136), // object size
  NSPAIRA(_ZTI8S1566C16),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S1566C16),32, //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  S1566C15  : S1566C16 {
  void *s1566c15f0[2];
  __tsi64 s1566c15f1;
  int s1566c15f2[5];
  char s1566c15f3[3];
  virtual void  v103(); // _ZN8S1566C154v103Ev
  virtual void  v104(); // _ZN8S1566C154v104Ev
  ~S1566C15(); // tgen
  S1566C15(); // tgen
};
//SIG(-1 S1566C15) C1{ BC2{ BC3{ 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 Fi[28]} v28 v29 v30 FC4{ BC5{ m Fp Fi[2]}} Fi[2]} v1 v2 Fp[2] FL Fi[5] Fc[3]}


void  S1566C15 ::v103(){vfunc_called(this, "_ZN8S1566C154v103Ev");}
void  S1566C15 ::v104(){vfunc_called(this, "_ZN8S1566C154v104Ev");}
S1566C15 ::~S1566C15(){ note_dtor("S1566C15", this);} // tgen
S1566C15 ::S1566C15(){ note_ctor("S1566C15", this);} // tgen

static void Test_S1566C15()
{
  extern Class_Descriptor cd_S1566C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,45)];
    init_test(&cd_S1566C15, buf);
    S1566C15 *dp, &lv = *(dp=new (buf) S1566C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,176), "sizeof(S1566C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1566C15)");
    check_base_class_offset(lv, (S1566C17*)(S1566C16*), 0, "S1566C15");
    check_base_class_offset(lv, (S1566C16*), 0, "S1566C15");
    check_field_offset(lv, s1566c15f0, ABISELECT(144,136), "S1566C15.s1566c15f0");
    check_field_offset(lv, s1566c15f1, ABISELECT(160,144), "S1566C15.s1566c15f1");
    check_field_offset(lv, s1566c15f2, ABISELECT(168,152), "S1566C15.s1566c15f2");
    check_field_offset(lv, s1566c15f3, ABISELECT(188,172), "S1566C15.s1566c15f3");
    test_class_info(&lv, &cd_S1566C15);
    dp->~S1566C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1566C15(Test_S1566C15, "S1566C15", ABISELECT(192,176));

#else // __cplusplus

extern void _ZN8S1566C15C1Ev();
extern void _ZN8S1566C15D1Ev();
Name_Map name_map_S1566C15[] = {
  NSPAIR(_ZN8S1566C15C1Ev),
  NSPAIR(_ZN8S1566C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1566C17;
extern VTBL_ENTRY _ZTI8S1566C17[];
extern  VTBL_ENTRY _ZTV8S1566C17[];
extern Class_Descriptor cd_S1566C16;
extern VTBL_ENTRY _ZTI8S1566C16[];
extern  VTBL_ENTRY _ZTV8S1566C16[];
static Base_Class bases_S1566C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1566C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1566C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S1566C15[];
extern void _ZN8S1566C15D1Ev();
extern void _ZN8S1566C15D0Ev();
extern void _ZN8S1566C174v105Ev();
extern void _ZN8S1566C174v106Ev();
extern void _ZN8S1566C174v107Ev();
extern void _ZN8S1566C174v108Ev();
extern void _ZN8S1566C174v109Ev();
extern void _ZN8S1566C174v110Ev();
extern void _ZN8S1566C174v111Ev();
extern void _ZN8S1566C174v112Ev();
extern void _ZN8S1566C174v113Ev();
extern void _ZN8S1566C174v114Ev();
extern void _ZN8S1566C174v115Ev();
extern void _ZN8S1566C174v116Ev();
extern void _ZN8S1566C174v117Ev();
extern void _ZN8S1566C174v118Ev();
extern void _ZN8S1566C174v119Ev();
extern void _ZN8S1566C174v120Ev();
extern void _ZN8S1566C174v121Ev();
extern void _ZN8S1566C174v122Ev();
extern void _ZN8S1566C174v123Ev();
extern void _ZN8S1566C174v124Ev();
extern void _ZN8S1566C174v125Ev();
extern void _ZN8S1566C174v126Ev();
extern void _ZN8S1566C174v127Ev();
extern void _ZN8S1566C174v128Ev();
extern void _ZN8S1566C174v129Ev();
extern void _ZN8S1566C164v130Ev();
extern void _ZN8S1566C164v131Ev();
extern void _ZN8S1566C164v132Ev();
extern void _ZN8S1566C154v103Ev();
extern void _ZN8S1566C154v104Ev();
static  VTBL_ENTRY vtc_S1566C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1566C15[0]),
  (VTBL_ENTRY)&_ZN8S1566C15D1Ev,
  (VTBL_ENTRY)&_ZN8S1566C15D0Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v105Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v106Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v107Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v108Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v109Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v110Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v111Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v112Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v113Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v114Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v115Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v116Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v117Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v118Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v119Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v120Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v121Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v122Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v123Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v124Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v125Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v126Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v127Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v128Ev,
  (VTBL_ENTRY)&_ZN8S1566C174v129Ev,
  (VTBL_ENTRY)&_ZN8S1566C164v130Ev,
  (VTBL_ENTRY)&_ZN8S1566C164v131Ev,
  (VTBL_ENTRY)&_ZN8S1566C164v132Ev,
  (VTBL_ENTRY)&_ZN8S1566C154v103Ev,
  (VTBL_ENTRY)&_ZN8S1566C154v104Ev,
};
extern VTBL_ENTRY _ZTI8S1566C15[];
extern  VTBL_ENTRY _ZTV8S1566C15[];
Class_Descriptor cd_S1566C15 = {  "S1566C15", // class name
  bases_S1566C15, 2,
  &(vtc_S1566C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,176), // object size
  NSPAIRA(_ZTI8S1566C15),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S1566C15),34, //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  S1566C23_nt  {
  ::S1325C31 s1566c23f0;
  void *s1566c23f1;
  int s1566c23f2;
  void  mf1566c23(); // _ZN11S1566C23_nt9mf1566c23Ev
};
//SIG(-1 S1566C23_nt) C1{ m FC2{ BC3{ m Fp Fi[2]}} Fp Fi}


void  S1566C23_nt ::mf1566c23(){}

//skip512 S1566C23_nt

#else // __cplusplus

Class_Descriptor cd_S1566C23_nt = {  "S1566C23_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1566C22_nt  : S1566C23_nt {
};
//SIG(-1 S1566C22_nt) C1{ BC2{ m FC3{ BC4{ m Fp Fi[2]}} Fp Fi}}



//skip512 S1566C22_nt

#else // __cplusplus

extern Class_Descriptor cd_S1566C23_nt;
static Base_Class bases_S1566C22_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1566C23_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  S1566C29  : S1537C8_nt {
};
//SIG(-1 S1566C29) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1566C29()
{
  extern Class_Descriptor cd_S1566C29;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1566C29, buf);
    S1566C29 &lv = *(new (buf) S1566C29());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1566C29)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1566C29)");
    check_base_class_offset(lv, (S1537C8_nt*), 0, "S1566C29");
    test_class_info(&lv, &cd_S1566C29);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1566C29(Test_S1566C29, "S1566C29", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
static Base_Class bases_S1566C29[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1566C29 = {  "S1566C29", // class name
  bases_S1566C29, 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  S1566C30  {
  int s1566c30f0[5];
  void  mf1566c30(); // _ZN8S1566C309mf1566c30Ev
};
//SIG(-1 S1566C30) C1{ m Fi[5]}


void  S1566C30 ::mf1566c30(){}

static void Test_S1566C30()
{
  {
    init_simple_test("S1566C30");
    S1566C30 lv;
    check2(sizeof(lv), 20, "sizeof(S1566C30)");
    check2(__alignof__(lv), 4, "__alignof__(S1566C30)");
    check_field_offset(lv, s1566c30f0, 0, "S1566C30.s1566c30f0");
  }
}
static Arrange_To_Call_Me vS1566C30(Test_S1566C30, "S1566C30", 20);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1566C2  : S1566C3 , S1566C7_nt {
  void *s1566c2f0;
  int s1566c2f1;
  ::S1325C21 s1566c2f2;
  void *s1566c2f3;
  int s1566c2f4[6];
  ::S1566C9 s1566c2f5;
  ::S1566C9 s1566c2f6;
  int s1566c2f7[3];
  ::S1325C7_nt s1566c2f8;
  ::S1566C9 s1566c2f9;
  ::S1566C9 s1566c2f10;
  __tsi64 s1566c2f11[3];
  int s1566c2f12[2];
  ::S1566C14_nt s1566c2f13;
  ::S1566C14_nt s1566c2f14;
  int s1566c2f15[2];
  void *s1566c2f16;
  ::S1566C15 s1566c2f17;
  __tsi64 s1566c2f18;
  int s1566c2f19[6];
  __tsi64 s1566c2f20[4];
  int s1566c2f21;
  ::S1566C16 s1566c2f22;
  __tsi64 s1566c2f23[256];
  int s1566c2f24[259];
  void *s1566c2f25[1023];
  int s1566c2f26[3069];
  ::S1537C19 s1566c2f27;
  ::S1537C19 s1566c2f28;
  ::S1537C13 s1566c2f29;
  ::S1537C7_nt s1566c2f30;
  ::S1566C22_nt s1566c2f31;
  void *s1566c2f32;
  ::S1325C27 s1566c2f33;
  ::S1325C23 s1566c2f34;
  ::S1537C5_nt s1566c2f35;
  ::S1325C14 s1566c2f36;
  ::S1325C9 s1566c2f37;
  ::S1566C29 s1566c2f38;
  void *s1566c2f39[2];
  int s1566c2f40;
  ::S1566C30 s1566c2f41;
  ::S1566C29 s1566c2f42;
  virtual  ~S1566C2(); // _ZN7S1566C2D1Ev
  virtual void  v80(); // _ZN7S1566C23v80Ev
  virtual void  v81(); // _ZN7S1566C23v81Ev
  virtual void  v82(); // _ZN7S1566C23v82Ev
  virtual void  v83(); // _ZN7S1566C23v83Ev
  virtual void  v84(); // _ZN7S1566C23v84Ev
  virtual void  v85(); // _ZN7S1566C23v85Ev
  virtual void  v86(); // _ZN7S1566C23v86Ev
  virtual void  v87(); // _ZN7S1566C23v87Ev
  virtual void  v88(); // _ZN7S1566C23v88Ev
  virtual void  v89(); // _ZN7S1566C23v89Ev
  virtual void  v90(); // _ZN7S1566C23v90Ev
  virtual void  v91(); // _ZN7S1566C23v91Ev
  virtual void  v92(); // _ZN7S1566C23v92Ev
  virtual void  v93(); // _ZN7S1566C23v93Ev
  virtual void  v94(); // _ZN7S1566C23v94Ev
  virtual void  v95(); // _ZN7S1566C23v95Ev
  virtual void  v96(); // _ZN7S1566C23v96Ev
  virtual void  v97(); // _ZN7S1566C23v97Ev
  virtual void  v98(); // _ZN7S1566C23v98Ev
  virtual void  v99(); // _ZN7S1566C23v99Ev
  virtual void  v100(); // _ZN7S1566C24v100Ev
  virtual void  v101(); // _ZN7S1566C24v101Ev
  virtual void  v102(); // _ZN7S1566C24v102Ev
  S1566C2(); // tgen
};
//SIG(-1 S1566C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v88} vd v89 v90 v91 v92 Fp Fi[7]} BC6{ vd v93 v94 v95} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp Fi FC7{ m FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC8 Fi FC8 FC11{ BC10} FC8 Fi} Fp Fi[6] FC12{ BC13{ BC10}} FC12 Fi[3] FC14{ BC8} FC12 FC12 FL[3] Fi[2] FC15{ m Fi[2]} FC15 Fi[2] Fp FC16{ BC17{ BC18{ vd 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 Fi[28]} v123 v124 v125 FC19{ BC10} Fi[2]} v96 v97 Fp[2] FL Fi[5] Fc[3]} FL Fi[6] FL[4] Fi FC17 FL[256] Fi[259] Fp[1023] Fi[3069] FC20{ BC10} FC20 FC21{ BC10} FC22{ BC10} FC23{ BC24{ m FC25{ BC10} Fp Fi}} Fp FC26{ BC10} FC27{ BC10} FC4 FC11 FC9 FC28{ BC10} Fp[2] Fi FC29{ m Fi[5]} FC28}


 S1566C2 ::~S1566C2(){ note_dtor("S1566C2", this);}
void  S1566C2 ::v80(){vfunc_called(this, "_ZN7S1566C23v80Ev");}
void  S1566C2 ::v81(){vfunc_called(this, "_ZN7S1566C23v81Ev");}
void  S1566C2 ::v82(){vfunc_called(this, "_ZN7S1566C23v82Ev");}
void  S1566C2 ::v83(){vfunc_called(this, "_ZN7S1566C23v83Ev");}
void  S1566C2 ::v84(){vfunc_called(this, "_ZN7S1566C23v84Ev");}
void  S1566C2 ::v85(){vfunc_called(this, "_ZN7S1566C23v85Ev");}
void  S1566C2 ::v86(){vfunc_called(this, "_ZN7S1566C23v86Ev");}
void  S1566C2 ::v87(){vfunc_called(this, "_ZN7S1566C23v87Ev");}
void  S1566C2 ::v88(){vfunc_called(this, "_ZN7S1566C23v88Ev");}
void  S1566C2 ::v89(){vfunc_called(this, "_ZN7S1566C23v89Ev");}
void  S1566C2 ::v90(){vfunc_called(this, "_ZN7S1566C23v90Ev");}
void  S1566C2 ::v91(){vfunc_called(this, "_ZN7S1566C23v91Ev");}
void  S1566C2 ::v92(){vfunc_called(this, "_ZN7S1566C23v92Ev");}
void  S1566C2 ::v93(){vfunc_called(this, "_ZN7S1566C23v93Ev");}
void  S1566C2 ::v94(){vfunc_called(this, "_ZN7S1566C23v94Ev");}
void  S1566C2 ::v95(){vfunc_called(this, "_ZN7S1566C23v95Ev");}
void  S1566C2 ::v96(){vfunc_called(this, "_ZN7S1566C23v96Ev");}
void  S1566C2 ::v97(){vfunc_called(this, "_ZN7S1566C23v97Ev");}
void  S1566C2 ::v98(){vfunc_called(this, "_ZN7S1566C23v98Ev");}
void  S1566C2 ::v99(){vfunc_called(this, "_ZN7S1566C23v99Ev");}
void  S1566C2 ::v100(){vfunc_called(this, "_ZN7S1566C24v100Ev");}
void  S1566C2 ::v101(){vfunc_called(this, "_ZN7S1566C24v101Ev");}
void  S1566C2 ::v102(){vfunc_called(this, "_ZN7S1566C24v102Ev");}
S1566C2 ::S1566C2(){ note_ctor("S1566C2", this);} // tgen

static void Test_S1566C2()
{
  extern Class_Descriptor cd_S1566C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3084,5089)];
    init_test(&cd_S1566C2, buf);
    S1566C2 *dp, &lv = *(dp=new (buf) S1566C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24664,20352), "sizeof(S1566C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1566C2)");
    check_base_class_offset(lv, (S1566C4*)(S1566C3*), 0, "S1566C2");
    check_base_class_offset(lv, (S1566C6*)(S1566C3*), ABISELECT(96,60), "S1566C2");
    check_base_class_offset(lv, (S1566C3*), 0, "S1566C2");
    check_base_class_offset(lv, (S1566C7_nt*), ABISELECT(144,96), "S1566C2");
    check_field_offset(lv, s1566c2f0, ABISELECT(152,100), "S1566C2.s1566c2f0");
    check_field_offset(lv, s1566c2f1, ABISELECT(160,104), "S1566C2.s1566c2f1");
    check_field_offset(lv, s1566c2f2, ABISELECT(168,108), "S1566C2.s1566c2f2");
    check_field_offset(lv, s1566c2f3, ABISELECT(264,176), "S1566C2.s1566c2f3");
    check_field_offset(lv, s1566c2f4, ABISELECT(272,180), "S1566C2.s1566c2f4");
    check_field_offset(lv, s1566c2f5, ABISELECT(296,204), "S1566C2.s1566c2f5");
    check_field_offset(lv, s1566c2f6, ABISELECT(312,216), "S1566C2.s1566c2f6");
    check_field_offset(lv, s1566c2f7, ABISELECT(328,228), "S1566C2.s1566c2f7");
    check_field_offset(lv, s1566c2f8, ABISELECT(344,240), "S1566C2.s1566c2f8");
    check_field_offset(lv, s1566c2f9, ABISELECT(360,252), "S1566C2.s1566c2f9");
    check_field_offset(lv, s1566c2f10, ABISELECT(376,264), "S1566C2.s1566c2f10");
    check_field_offset(lv, s1566c2f11, ABISELECT(392,276), "S1566C2.s1566c2f11");
    check_field_offset(lv, s1566c2f12, ABISELECT(416,300), "S1566C2.s1566c2f12");
    check_field_offset(lv, s1566c2f13, ABISELECT(424,308), "S1566C2.s1566c2f13");
    check_field_offset(lv, s1566c2f14, ABISELECT(432,316), "S1566C2.s1566c2f14");
    check_field_offset(lv, s1566c2f15, ABISELECT(440,324), "S1566C2.s1566c2f15");
    check_field_offset(lv, s1566c2f16, ABISELECT(448,332), "S1566C2.s1566c2f16");
    check_field_offset(lv, s1566c2f17, ABISELECT(456,336), "S1566C2.s1566c2f17");
    check_field_offset(lv, s1566c2f18, ABISELECT(648,512), "S1566C2.s1566c2f18");
    check_field_offset(lv, s1566c2f19, ABISELECT(656,520), "S1566C2.s1566c2f19");
    check_field_offset(lv, s1566c2f20, ABISELECT(680,544), "S1566C2.s1566c2f20");
    check_field_offset(lv, s1566c2f21, ABISELECT(712,576), "S1566C2.s1566c2f21");
    check_field_offset(lv, s1566c2f22, ABISELECT(720,580), "S1566C2.s1566c2f22");
    check_field_offset(lv, s1566c2f23, ABISELECT(864,716), "S1566C2.s1566c2f23");
    check_field_offset(lv, s1566c2f24, ABISELECT(2912,2764), "S1566C2.s1566c2f24");
    check_field_offset(lv, s1566c2f25, ABISELECT(3952,3800), "S1566C2.s1566c2f25");
    check_field_offset(lv, s1566c2f26, ABISELECT(12136,7892), "S1566C2.s1566c2f26");
    check_field_offset(lv, s1566c2f27, ABISELECT(24416,20168), "S1566C2.s1566c2f27");
    check_field_offset(lv, s1566c2f28, ABISELECT(24432,20180), "S1566C2.s1566c2f28");
    check_field_offset(lv, s1566c2f29, ABISELECT(24448,20192), "S1566C2.s1566c2f29");
    check_field_offset(lv, s1566c2f30, ABISELECT(24464,20204), "S1566C2.s1566c2f30");
    check_field_offset(lv, s1566c2f31, ABISELECT(24480,20216), "S1566C2.s1566c2f31");
    check_field_offset(lv, s1566c2f32, ABISELECT(24512,20236), "S1566C2.s1566c2f32");
    check_field_offset(lv, s1566c2f33, ABISELECT(24520,20240), "S1566C2.s1566c2f33");
    check_field_offset(lv, s1566c2f34, ABISELECT(24536,20252), "S1566C2.s1566c2f34");
    check_field_offset(lv, s1566c2f35, ABISELECT(24552,20264), "S1566C2.s1566c2f35");
    check_field_offset(lv, s1566c2f36, ABISELECT(24560,20272), "S1566C2.s1566c2f36");
    check_field_offset(lv, s1566c2f37, ABISELECT(24576,20284), "S1566C2.s1566c2f37");
    check_field_offset(lv, s1566c2f38, ABISELECT(24592,20296), "S1566C2.s1566c2f38");
    check_field_offset(lv, s1566c2f39, ABISELECT(24608,20308), "S1566C2.s1566c2f39");
    check_field_offset(lv, s1566c2f40, ABISELECT(24624,20316), "S1566C2.s1566c2f40");
    check_field_offset(lv, s1566c2f41, ABISELECT(24628,20320), "S1566C2.s1566c2f41");
    check_field_offset(lv, s1566c2f42, ABISELECT(24648,20340), "S1566C2.s1566c2f42");
    test_class_info(&lv, &cd_S1566C2);
    dp->~S1566C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1566C2(Test_S1566C2, "S1566C2", ABISELECT(24664,20352));

#else // __cplusplus

extern void _ZN7S1566C2C1Ev();
extern void _ZN7S1566C2D1Ev();
Name_Map name_map_S1566C2[] = {
  NSPAIR(_ZN7S1566C2C1Ev),
  NSPAIR(_ZN7S1566C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1566C4;
extern VTBL_ENTRY _ZTI7S1566C4[];
extern  VTBL_ENTRY _ZTV7S1566C4[];
extern Class_Descriptor cd_S1566C6;
extern VTBL_ENTRY _ZTI7S1566C6[];
extern  VTBL_ENTRY _ZTV7S1566C6[];
extern Class_Descriptor cd_S1566C3;
extern VTBL_ENTRY _ZTI7S1566C3[];
extern  VTBL_ENTRY _ZTV7S1566C3[];
extern Class_Descriptor cd_S1566C7_nt;
extern VTBL_ENTRY _ZTI10S1566C7_nt[];
extern  VTBL_ENTRY _ZTV10S1566C7_nt[];
static Base_Class bases_S1566C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1566C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1566C6,    ABISELECT(96,60), //bcp->offset
    95, //bcp->virtual_function_table_offset
    2, //num_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_S1566C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1566C7_nt,    ABISELECT(144,96), //bcp->offset
    98, //bcp->virtual_function_table_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 _ZTI7S1566C2[];
extern void _ZN7S1566C2D1Ev();
extern void _ZN7S1566C2D0Ev();
extern void _ZN7S1566C42v8Ev();
extern void _ZN7S1566C42v9Ev();
extern void _ZN7S1566C43v10Ev();
extern void _ZN7S1566C43v11Ev();
extern void _ZN7S1566C43v12Ev();
extern void _ZN7S1566C43v13Ev();
extern void _ZN7S1566C43v14Ev();
extern void _ZN7S1566C43v15Ev();
extern void _ZN7S1566C43v16Ev();
extern void _ZN7S1566C43v17Ev();
extern void _ZN7S1566C43v18Ev();
extern void _ZN7S1566C43v19Ev();
extern void _ZN7S1566C43v20Ev();
extern void _ZN7S1566C43v21Ev();
extern void _ZN7S1566C43v22Ev();
extern void _ZN7S1566C43v23Ev();
extern void _ZN7S1566C43v24Ev();
extern void _ZN7S1566C43v25Ev();
extern void _ZN7S1566C43v26Ev();
extern void _ZN7S1566C43v27Ev();
extern void _ZN7S1566C43v28Ev();
extern void _ZN7S1566C43v29Ev();
extern void _ZN7S1566C43v30Ev();
extern void _ZN7S1566C43v31Ev();
extern void _ZN7S1566C43v32Ev();
extern void _ZN7S1566C43v33Ev();
extern void _ZN7S1566C43v34Ev();
extern void _ZN7S1566C43v35Ev();
extern void _ZN7S1566C43v36Ev();
extern void _ZN7S1566C43v37Ev();
extern void _ZN7S1566C43v38Ev();
extern void _ZN7S1566C43v39Ev();
extern void _ZN7S1566C43v40Ev();
extern void _ZN7S1566C43v41Ev();
extern void _ZN7S1566C43v42Ev();
extern void _ZN7S1566C43v43Ev();
extern void _ZN7S1566C43v44Ev();
extern void _ZN7S1566C43v45Ev();
extern void _ZN7S1566C43v46Ev();
extern void _ZN7S1566C43v47Ev();
extern void _ZN7S1566C43v48Ev();
extern void _ZN7S1566C43v49Ev();
extern void _ZN7S1566C43v50Ev();
extern void _ZN7S1566C43v51Ev();
extern void _ZN7S1566C43v52Ev();
extern void _ZN7S1566C43v53Ev();
extern void _ZN7S1566C43v54Ev();
extern void _ZN7S1566C43v55Ev();
extern void _ZN7S1566C43v56Ev();
extern void _ZN7S1566C43v57Ev();
extern void _ZN7S1566C43v58Ev();
extern void _ZN7S1566C43v59Ev();
extern void _ZN7S1566C43v60Ev();
extern void _ZN7S1566C43v61Ev();
extern void _ZN7S1566C43v62Ev();
extern void _ZN7S1566C43v63Ev();
extern void _ZN7S1566C43v64Ev();
extern void _ZN7S1566C43v65Ev();
extern void _ZN7S1566C43v66Ev();
extern void _ZN7S1566C43v67Ev();
extern void _ZN7S1566C43v68Ev();
extern void _ZN7S1566C43v69Ev();
extern void _ZN7S1566C43v70Ev();
extern void _ZN7S1566C43v71Ev();
extern void _ZN7S1566C33v73Ev();
extern void _ZN7S1566C33v74Ev();
extern void _ZN7S1566C33v75Ev();
extern void _ZN7S1566C33v76Ev();
extern void _ZN7S1566C23v80Ev();
extern void _ZN7S1566C23v81Ev();
extern void _ZN7S1566C23v82Ev();
extern void _ZN7S1566C23v83Ev();
extern void _ZN7S1566C23v84Ev();
extern void _ZN7S1566C23v85Ev();
extern void _ZN7S1566C23v86Ev();
extern void _ZN7S1566C23v87Ev();
extern void _ZN7S1566C23v88Ev();
extern void _ZN7S1566C23v89Ev();
extern void _ZN7S1566C23v90Ev();
extern void _ZN7S1566C23v91Ev();
extern void _ZN7S1566C23v92Ev();
extern void _ZN7S1566C23v93Ev();
extern void _ZN7S1566C23v94Ev();
extern void _ZN7S1566C23v95Ev();
extern void _ZN7S1566C23v96Ev();
extern void _ZN7S1566C23v97Ev();
extern void _ZN7S1566C23v98Ev();
extern void _ZN7S1566C23v99Ev();
extern void _ZN7S1566C24v100Ev();
extern void _ZN7S1566C24v101Ev();
extern void _ZN7S1566C24v102Ev();
extern void _ZN7S1566C63v72Ev();
extern void ABISELECT(_ZThn144_N7S1566C2D1Ev,_ZThn96_N7S1566C2D1Ev)();
extern void ABISELECT(_ZThn144_N7S1566C2D0Ev,_ZThn96_N7S1566C2D0Ev)();
extern void _ZN10S1566C7_nt3v77Ev();
extern void _ZN10S1566C7_nt3v78Ev();
extern void _ZN10S1566C7_nt3v79Ev();
static  VTBL_ENTRY vtc_S1566C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1566C2[0]),
  (VTBL_ENTRY)&_ZN7S1566C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1566C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1566C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1566C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1566C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1566C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1566C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1566C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v80Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1566C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1566C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1566C24v102Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1566C2[0]),
  (VTBL_ENTRY)&_ZN7S1566C63v72Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI7S1566C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S1566C2D1Ev,_ZThn96_N7S1566C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S1566C2D0Ev,_ZThn96_N7S1566C2D0Ev),
  (VTBL_ENTRY)&_ZN10S1566C7_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1566C7_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1566C7_nt3v79Ev,
};
extern VTBL_ENTRY _ZTI7S1566C2[];
extern  VTBL_ENTRY _ZTV7S1566C2[];
Class_Descriptor cd_S1566C2 = {  "S1566C2", // class name
  bases_S1566C2, 4,
  &(vtc_S1566C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24664,20352), // object size
  NSPAIRA(_ZTI7S1566C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1566C2),105, //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  S1566C34_nt  {
  int s1566c34f0;
};
//SIG(-1 S1566C34_nt) C1{ Fi}



//skip512 S1566C34_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S1566C34_nt[];
VTBL_ENTRY *P__ZTI11S1566C34_nt = _ZTI11S1566C34_nt; 
Class_Descriptor cd_S1566C34_nt = {  "S1566C34_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI11S1566C34_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  S1566C33  {
  char s1566c33f0[2];
  short s1566c33f1;
  ::S1566C34_nt s1566c33f2;
  char s1566c33f3[8];
};
//SIG(-1 S1566C33) C1{ Fc[2] Fs FC2{ Fi} Fc[8]}



static void Test_S1566C33()
{
  {
    init_simple_test("S1566C33");
    S1566C33 lv;
    check2(sizeof(lv), 16, "sizeof(S1566C33)");
    check2(__alignof__(lv), 4, "__alignof__(S1566C33)");
    check_field_offset(lv, s1566c33f0, 0, "S1566C33.s1566c33f0");
    check_field_offset(lv, s1566c33f1, 2, "S1566C33.s1566c33f1");
    check_field_offset(lv, s1566c33f2, 4, "S1566C33.s1566c33f2");
    check_field_offset(lv, s1566c33f3, 8, "S1566C33.s1566c33f3");
  }
}
static Arrange_To_Call_Me vS1566C33(Test_S1566C33, "S1566C33", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1566C32  {
  ::S1566C33 s1566c32f0;
  void  mf1566c32(); // _ZN8S1566C329mf1566c32Ev
};
//SIG(-1 S1566C32) C1{ m FC2{ Fc[2] Fs FC3{ Fi} Fc[8]}}


void  S1566C32 ::mf1566c32(){}

static void Test_S1566C32()
{
  {
    init_simple_test("S1566C32");
    S1566C32 lv;
    check2(sizeof(lv), 16, "sizeof(S1566C32)");
    check2(__alignof__(lv), 4, "__alignof__(S1566C32)");
    check_field_offset(lv, s1566c32f0, 0, "S1566C32.s1566c32f0");
  }
}
static Arrange_To_Call_Me vS1566C32(Test_S1566C32, "S1566C32", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1566C1  : S1566C2 {
  ::S1566C32 s1566c1f0;
  void *s1566c1f1;
  int s1566c1f2;
  void *s1566c1f3;
  virtual  ~S1566C1(); // _ZN7S1566C1D1Ev
  virtual void  v1(); // _ZN7S1566C12v1Ev
  virtual void  v2(); // _ZN7S1566C12v2Ev
  virtual void  v3(); // _ZN7S1566C12v3Ev
  virtual void  v4(); // _ZN7S1566C12v4Ev
  virtual void  v5(); // _ZN7S1566C12v5Ev
  virtual void  v6(); // _ZN7S1566C12v6Ev
  virtual void  v7(); // _ZN7S1566C12v7Ev
  S1566C1(); // tgen
};
//SIG(1 S1566C1) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} BC6{ v72} vd v73 v74 v75 v76 Fp Fi[7]} BC7{ vd v77 v78 v79} vd v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 Fp Fi FC8{ m FC9{ BC10{ BC11{ m Fp Fi[2]}}} FC9 Fi FC9 FC12{ BC11} FC9 Fi} Fp Fi[6] FC13{ BC14{ BC11}} FC13 Fi[3] FC15{ BC9} FC13 FC13 FL[3] Fi[2] FC16{ m Fi[2]} FC16 Fi[2] Fp FC17{ BC18{ BC19{ vd 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 Fi[28]} v130 v131 v132 FC20{ BC11} Fi[2]} v103 v104 Fp[2] FL Fi[5] Fc[3]} FL Fi[6] FL[4] Fi FC18 FL[256] Fi[259] Fp[1023] Fi[3069] FC21{ BC11} FC21 FC22{ BC11} FC23{ BC11} FC24{ BC25{ m FC26{ BC11} Fp Fi}} Fp FC27{ BC11} FC28{ BC11} FC5 FC12 FC10 FC29{ BC11} Fp[2] Fi FC30{ m Fi[5]} FC29} vd v1 v2 v3 v4 v5 v6 v7 FC31{ m FC32{ Fc[2] Fs FC33{ Fi} Fc[8]}} Fp Fi Fp}


 S1566C1 ::~S1566C1(){ note_dtor("S1566C1", this);}
void  S1566C1 ::v1(){vfunc_called(this, "_ZN7S1566C12v1Ev");}
void  S1566C1 ::v2(){vfunc_called(this, "_ZN7S1566C12v2Ev");}
void  S1566C1 ::v3(){vfunc_called(this, "_ZN7S1566C12v3Ev");}
void  S1566C1 ::v4(){vfunc_called(this, "_ZN7S1566C12v4Ev");}
void  S1566C1 ::v5(){vfunc_called(this, "_ZN7S1566C12v5Ev");}
void  S1566C1 ::v6(){vfunc_called(this, "_ZN7S1566C12v6Ev");}
void  S1566C1 ::v7(){vfunc_called(this, "_ZN7S1566C12v7Ev");}
S1566C1 ::S1566C1(){ note_ctor("S1566C1", this);} // tgen

static void Test_S1566C1()
{
  extern Class_Descriptor cd_S1566C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3089,5096)];
    init_test(&cd_S1566C1, buf);
    S1566C1 *dp, &lv = *(dp=new (buf) S1566C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24704,20380), "sizeof(S1566C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1566C1)");
    check_base_class_offset(lv, (S1566C4*)(S1566C3*)(S1566C2*), 0, "S1566C1");
    check_base_class_offset(lv, (S1566C6*)(S1566C3*)(S1566C2*), ABISELECT(96,60), "S1566C1");
    check_base_class_offset(lv, (S1566C3*)(S1566C2*), 0, "S1566C1");
    check_base_class_offset(lv, (S1566C7_nt*)(S1566C2*), ABISELECT(144,96), "S1566C1");
    check_base_class_offset(lv, (S1566C2*), 0, "S1566C1");
    check_field_offset(lv, s1566c1f0, ABISELECT(24664,20352), "S1566C1.s1566c1f0");
    check_field_offset(lv, s1566c1f1, ABISELECT(24680,20368), "S1566C1.s1566c1f1");
    check_field_offset(lv, s1566c1f2, ABISELECT(24688,20372), "S1566C1.s1566c1f2");
    check_field_offset(lv, s1566c1f3, ABISELECT(24696,20376), "S1566C1.s1566c1f3");
    test_class_info(&lv, &cd_S1566C1);
    dp->~S1566C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1566C1(Test_S1566C1, "S1566C1", ABISELECT(24704,20380));

#else // __cplusplus

extern void _ZN7S1566C1C1Ev();
extern void _ZN7S1566C1D1Ev();
Name_Map name_map_S1566C1[] = {
  NSPAIR(_ZN7S1566C1C1Ev),
  NSPAIR(_ZN7S1566C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1566C4;
extern VTBL_ENTRY _ZTI7S1566C4[];
extern  VTBL_ENTRY _ZTV7S1566C4[];
extern Class_Descriptor cd_S1566C6;
extern VTBL_ENTRY _ZTI7S1566C6[];
extern  VTBL_ENTRY _ZTV7S1566C6[];
extern Class_Descriptor cd_S1566C3;
extern VTBL_ENTRY _ZTI7S1566C3[];
extern  VTBL_ENTRY _ZTV7S1566C3[];
extern Class_Descriptor cd_S1566C7_nt;
extern VTBL_ENTRY _ZTI10S1566C7_nt[];
extern  VTBL_ENTRY _ZTV10S1566C7_nt[];
extern Class_Descriptor cd_S1566C2;
extern VTBL_ENTRY _ZTI7S1566C2[];
extern  VTBL_ENTRY _ZTV7S1566C2[];
static Base_Class bases_S1566C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1566C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1566C6,    ABISELECT(96,60), //bcp->offset
    102, //bcp->virtual_function_table_offset
    2, //num_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_S1566C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1566C7_nt,    ABISELECT(144,96), //bcp->offset
    105, //bcp->virtual_function_table_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_S1566C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1566C1[];
extern void _ZN7S1566C1D1Ev();
extern void _ZN7S1566C1D0Ev();
extern void _ZN7S1566C42v8Ev();
extern void _ZN7S1566C42v9Ev();
extern void _ZN7S1566C43v10Ev();
extern void _ZN7S1566C43v11Ev();
extern void _ZN7S1566C43v12Ev();
extern void _ZN7S1566C43v13Ev();
extern void _ZN7S1566C43v14Ev();
extern void _ZN7S1566C43v15Ev();
extern void _ZN7S1566C43v16Ev();
extern void _ZN7S1566C43v17Ev();
extern void _ZN7S1566C43v18Ev();
extern void _ZN7S1566C43v19Ev();
extern void _ZN7S1566C43v20Ev();
extern void _ZN7S1566C43v21Ev();
extern void _ZN7S1566C43v22Ev();
extern void _ZN7S1566C43v23Ev();
extern void _ZN7S1566C43v24Ev();
extern void _ZN7S1566C43v25Ev();
extern void _ZN7S1566C43v26Ev();
extern void _ZN7S1566C43v27Ev();
extern void _ZN7S1566C43v28Ev();
extern void _ZN7S1566C43v29Ev();
extern void _ZN7S1566C43v30Ev();
extern void _ZN7S1566C43v31Ev();
extern void _ZN7S1566C43v32Ev();
extern void _ZN7S1566C43v33Ev();
extern void _ZN7S1566C43v34Ev();
extern void _ZN7S1566C43v35Ev();
extern void _ZN7S1566C43v36Ev();
extern void _ZN7S1566C43v37Ev();
extern void _ZN7S1566C43v38Ev();
extern void _ZN7S1566C43v39Ev();
extern void _ZN7S1566C43v40Ev();
extern void _ZN7S1566C43v41Ev();
extern void _ZN7S1566C43v42Ev();
extern void _ZN7S1566C43v43Ev();
extern void _ZN7S1566C43v44Ev();
extern void _ZN7S1566C43v45Ev();
extern void _ZN7S1566C43v46Ev();
extern void _ZN7S1566C43v47Ev();
extern void _ZN7S1566C43v48Ev();
extern void _ZN7S1566C43v49Ev();
extern void _ZN7S1566C43v50Ev();
extern void _ZN7S1566C43v51Ev();
extern void _ZN7S1566C43v52Ev();
extern void _ZN7S1566C43v53Ev();
extern void _ZN7S1566C43v54Ev();
extern void _ZN7S1566C43v55Ev();
extern void _ZN7S1566C43v56Ev();
extern void _ZN7S1566C43v57Ev();
extern void _ZN7S1566C43v58Ev();
extern void _ZN7S1566C43v59Ev();
extern void _ZN7S1566C43v60Ev();
extern void _ZN7S1566C43v61Ev();
extern void _ZN7S1566C43v62Ev();
extern void _ZN7S1566C43v63Ev();
extern void _ZN7S1566C43v64Ev();
extern void _ZN7S1566C43v65Ev();
extern void _ZN7S1566C43v66Ev();
extern void _ZN7S1566C43v67Ev();
extern void _ZN7S1566C43v68Ev();
extern void _ZN7S1566C43v69Ev();
extern void _ZN7S1566C43v70Ev();
extern void _ZN7S1566C43v71Ev();
extern void _ZN7S1566C33v73Ev();
extern void _ZN7S1566C33v74Ev();
extern void _ZN7S1566C33v75Ev();
extern void _ZN7S1566C33v76Ev();
extern void _ZN7S1566C23v80Ev();
extern void _ZN7S1566C23v81Ev();
extern void _ZN7S1566C23v82Ev();
extern void _ZN7S1566C23v83Ev();
extern void _ZN7S1566C23v84Ev();
extern void _ZN7S1566C23v85Ev();
extern void _ZN7S1566C23v86Ev();
extern void _ZN7S1566C23v87Ev();
extern void _ZN7S1566C23v88Ev();
extern void _ZN7S1566C23v89Ev();
extern void _ZN7S1566C23v90Ev();
extern void _ZN7S1566C23v91Ev();
extern void _ZN7S1566C23v92Ev();
extern void _ZN7S1566C23v93Ev();
extern void _ZN7S1566C23v94Ev();
extern void _ZN7S1566C23v95Ev();
extern void _ZN7S1566C23v96Ev();
extern void _ZN7S1566C23v97Ev();
extern void _ZN7S1566C23v98Ev();
extern void _ZN7S1566C23v99Ev();
extern void _ZN7S1566C24v100Ev();
extern void _ZN7S1566C24v101Ev();
extern void _ZN7S1566C24v102Ev();
extern void _ZN7S1566C12v1Ev();
extern void _ZN7S1566C12v2Ev();
extern void _ZN7S1566C12v3Ev();
extern void _ZN7S1566C12v4Ev();
extern void _ZN7S1566C12v5Ev();
extern void _ZN7S1566C12v6Ev();
extern void _ZN7S1566C12v7Ev();
extern void _ZN7S1566C63v72Ev();
extern void ABISELECT(_ZThn144_N7S1566C1D1Ev,_ZThn96_N7S1566C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S1566C1D0Ev,_ZThn96_N7S1566C1D0Ev)();
extern void _ZN10S1566C7_nt3v77Ev();
extern void _ZN10S1566C7_nt3v78Ev();
extern void _ZN10S1566C7_nt3v79Ev();
static  VTBL_ENTRY vtc_S1566C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1566C1[0]),
  (VTBL_ENTRY)&_ZN7S1566C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1566C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1566C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1566C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1566C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1566C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1566C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1566C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1566C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v80Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1566C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1566C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1566C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1566C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1566C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1566C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1566C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1566C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1566C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1566C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1566C12v7Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1566C1[0]),
  (VTBL_ENTRY)&_ZN7S1566C63v72Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI7S1566C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S1566C1D1Ev,_ZThn96_N7S1566C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S1566C1D0Ev,_ZThn96_N7S1566C1D0Ev),
  (VTBL_ENTRY)&_ZN10S1566C7_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1566C7_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1566C7_nt3v79Ev,
};
extern VTBL_ENTRY _ZTI7S1566C1[];
extern  VTBL_ENTRY _ZTV7S1566C1[];
Class_Descriptor cd_S1566C1 = {  "S1566C1", // class name
  bases_S1566C1, 5,
  &(vtc_S1566C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24704,20380), // object size
  NSPAIRA(_ZTI7S1566C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1566C1),112, //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  S1319C4  {
  int s1319c4f0;
  __tsi64 s1319c4f1;
  void *s1319c4f2[4];
  int s1319c4f3[2];
  void *s1319c4f4;
  ::S1566C14_nt s1319c4f5;
  void *s1319c4f6[2];
  virtual  ~S1319C4(); // _ZN7S1319C4D1Ev
  virtual void  v16(); // _ZN7S1319C43v16Ev
  virtual void  v17(); // _ZN7S1319C43v17Ev
  virtual void  v18(); // _ZN7S1319C43v18Ev
  virtual void  v19(); // _ZN7S1319C43v19Ev
  virtual void  v20(); // _ZN7S1319C43v20Ev
  virtual void  v21(); // _ZN7S1319C43v21Ev
  virtual void  v22(); // _ZN7S1319C43v22Ev
  virtual void  v23(); // _ZN7S1319C43v23Ev
  virtual void  v24(); // _ZN7S1319C43v24Ev
  virtual void  v25(); // _ZN7S1319C43v25Ev
  virtual void  v26(); // _ZN7S1319C43v26Ev
  virtual void  v27(); // _ZN7S1319C43v27Ev
  virtual void  v28(); // _ZN7S1319C43v28Ev
  virtual void  v29(); // _ZN7S1319C43v29Ev
  virtual void  v30(); // _ZN7S1319C43v30Ev
  virtual void  v31(); // _ZN7S1319C43v31Ev
  virtual void  v32(); // _ZN7S1319C43v32Ev
  virtual void  v33(); // _ZN7S1319C43v33Ev
  virtual void  v34(); // _ZN7S1319C43v34Ev
  virtual void  v35(); // _ZN7S1319C43v35Ev
  virtual void  v36(); // _ZN7S1319C43v36Ev
  virtual void  v37(); // _ZN7S1319C43v37Ev
  virtual void  v38(); // _ZN7S1319C43v38Ev
  virtual void  v39(); // _ZN7S1319C43v39Ev
  virtual void  v40(); // _ZN7S1319C43v40Ev
  virtual void  v41(); // _ZN7S1319C43v41Ev
  virtual void  v42(); // _ZN7S1319C43v42Ev
  virtual void  v43(); // _ZN7S1319C43v43Ev
  virtual void  v44(); // _ZN7S1319C43v44Ev
  virtual void  v45(); // _ZN7S1319C43v45Ev
  virtual void  v46(); // _ZN7S1319C43v46Ev
  virtual void  v47(); // _ZN7S1319C43v47Ev
  virtual void  v48(); // _ZN7S1319C43v48Ev
  virtual void  v49(); // _ZN7S1319C43v49Ev
  virtual void  v50(); // _ZN7S1319C43v50Ev
  virtual void  v51(); // _ZN7S1319C43v51Ev
  virtual void  v52(); // _ZN7S1319C43v52Ev
  virtual void  v53(); // _ZN7S1319C43v53Ev
  virtual void  v54(); // _ZN7S1319C43v54Ev
  virtual void  v55(); // _ZN7S1319C43v55Ev
  virtual void  v56(); // _ZN7S1319C43v56Ev
  virtual void  v57(); // _ZN7S1319C43v57Ev
  virtual void  v58(); // _ZN7S1319C43v58Ev
  virtual void  v59(); // _ZN7S1319C43v59Ev
  virtual void  v60(); // _ZN7S1319C43v60Ev
  virtual void  v61(); // _ZN7S1319C43v61Ev
  virtual void  v62(); // _ZN7S1319C43v62Ev
  virtual void  v63(); // _ZN7S1319C43v63Ev
  virtual void  v64(); // _ZN7S1319C43v64Ev
  virtual void  v65(); // _ZN7S1319C43v65Ev
  virtual void  v66(); // _ZN7S1319C43v66Ev
  virtual void  v67(); // _ZN7S1319C43v67Ev
  virtual void  v68(); // _ZN7S1319C43v68Ev
  virtual void  v69(); // _ZN7S1319C43v69Ev
  virtual void  v70(); // _ZN7S1319C43v70Ev
  virtual void  v71(); // _ZN7S1319C43v71Ev
  virtual void  v72(); // _ZN7S1319C43v72Ev
  virtual void  v73(); // _ZN7S1319C43v73Ev
  virtual void  v74(); // _ZN7S1319C43v74Ev
  virtual void  v75(); // _ZN7S1319C43v75Ev
  virtual void  v76(); // _ZN7S1319C43v76Ev
  virtual void  v77(); // _ZN7S1319C43v77Ev
  virtual void  v78(); // _ZN7S1319C43v78Ev
  virtual void  v79(); // _ZN7S1319C43v79Ev
  S1319C4(); // tgen
};
//SIG(-1 S1319C4) 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]}


 S1319C4 ::~S1319C4(){ note_dtor("S1319C4", this);}
void  S1319C4 ::v16(){vfunc_called(this, "_ZN7S1319C43v16Ev");}
void  S1319C4 ::v17(){vfunc_called(this, "_ZN7S1319C43v17Ev");}
void  S1319C4 ::v18(){vfunc_called(this, "_ZN7S1319C43v18Ev");}
void  S1319C4 ::v19(){vfunc_called(this, "_ZN7S1319C43v19Ev");}
void  S1319C4 ::v20(){vfunc_called(this, "_ZN7S1319C43v20Ev");}
void  S1319C4 ::v21(){vfunc_called(this, "_ZN7S1319C43v21Ev");}
void  S1319C4 ::v22(){vfunc_called(this, "_ZN7S1319C43v22Ev");}
void  S1319C4 ::v23(){vfunc_called(this, "_ZN7S1319C43v23Ev");}
void  S1319C4 ::v24(){vfunc_called(this, "_ZN7S1319C43v24Ev");}
void  S1319C4 ::v25(){vfunc_called(this, "_ZN7S1319C43v25Ev");}
void  S1319C4 ::v26(){vfunc_called(this, "_ZN7S1319C43v26Ev");}
void  S1319C4 ::v27(){vfunc_called(this, "_ZN7S1319C43v27Ev");}
void  S1319C4 ::v28(){vfunc_called(this, "_ZN7S1319C43v28Ev");}
void  S1319C4 ::v29(){vfunc_called(this, "_ZN7S1319C43v29Ev");}
void  S1319C4 ::v30(){vfunc_called(this, "_ZN7S1319C43v30Ev");}
void  S1319C4 ::v31(){vfunc_called(this, "_ZN7S1319C43v31Ev");}
void  S1319C4 ::v32(){vfunc_called(this, "_ZN7S1319C43v32Ev");}
void  S1319C4 ::v33(){vfunc_called(this, "_ZN7S1319C43v33Ev");}
void  S1319C4 ::v34(){vfunc_called(this, "_ZN7S1319C43v34Ev");}
void  S1319C4 ::v35(){vfunc_called(this, "_ZN7S1319C43v35Ev");}
void  S1319C4 ::v36(){vfunc_called(this, "_ZN7S1319C43v36Ev");}
void  S1319C4 ::v37(){vfunc_called(this, "_ZN7S1319C43v37Ev");}
void  S1319C4 ::v38(){vfunc_called(this, "_ZN7S1319C43v38Ev");}
void  S1319C4 ::v39(){vfunc_called(this, "_ZN7S1319C43v39Ev");}
void  S1319C4 ::v40(){vfunc_called(this, "_ZN7S1319C43v40Ev");}
void  S1319C4 ::v41(){vfunc_called(this, "_ZN7S1319C43v41Ev");}
void  S1319C4 ::v42(){vfunc_called(this, "_ZN7S1319C43v42Ev");}
void  S1319C4 ::v43(){vfunc_called(this, "_ZN7S1319C43v43Ev");}
void  S1319C4 ::v44(){vfunc_called(this, "_ZN7S1319C43v44Ev");}
void  S1319C4 ::v45(){vfunc_called(this, "_ZN7S1319C43v45Ev");}
void  S1319C4 ::v46(){vfunc_called(this, "_ZN7S1319C43v46Ev");}
void  S1319C4 ::v47(){vfunc_called(this, "_ZN7S1319C43v47Ev");}
void  S1319C4 ::v48(){vfunc_called(this, "_ZN7S1319C43v48Ev");}
void  S1319C4 ::v49(){vfunc_called(this, "_ZN7S1319C43v49Ev");}
void  S1319C4 ::v50(){vfunc_called(this, "_ZN7S1319C43v50Ev");}
void  S1319C4 ::v51(){vfunc_called(this, "_ZN7S1319C43v51Ev");}
void  S1319C4 ::v52(){vfunc_called(this, "_ZN7S1319C43v52Ev");}
void  S1319C4 ::v53(){vfunc_called(this, "_ZN7S1319C43v53Ev");}
void  S1319C4 ::v54(){vfunc_called(this, "_ZN7S1319C43v54Ev");}
void  S1319C4 ::v55(){vfunc_called(this, "_ZN7S1319C43v55Ev");}
void  S1319C4 ::v56(){vfunc_called(this, "_ZN7S1319C43v56Ev");}
void  S1319C4 ::v57(){vfunc_called(this, "_ZN7S1319C43v57Ev");}
void  S1319C4 ::v58(){vfunc_called(this, "_ZN7S1319C43v58Ev");}
void  S1319C4 ::v59(){vfunc_called(this, "_ZN7S1319C43v59Ev");}
void  S1319C4 ::v60(){vfunc_called(this, "_ZN7S1319C43v60Ev");}
void  S1319C4 ::v61(){vfunc_called(this, "_ZN7S1319C43v61Ev");}
void  S1319C4 ::v62(){vfunc_called(this, "_ZN7S1319C43v62Ev");}
void  S1319C4 ::v63(){vfunc_called(this, "_ZN7S1319C43v63Ev");}
void  S1319C4 ::v64(){vfunc_called(this, "_ZN7S1319C43v64Ev");}
void  S1319C4 ::v65(){vfunc_called(this, "_ZN7S1319C43v65Ev");}
void  S1319C4 ::v66(){vfunc_called(this, "_ZN7S1319C43v66Ev");}
void  S1319C4 ::v67(){vfunc_called(this, "_ZN7S1319C43v67Ev");}
void  S1319C4 ::v68(){vfunc_called(this, "_ZN7S1319C43v68Ev");}
void  S1319C4 ::v69(){vfunc_called(this, "_ZN7S1319C43v69Ev");}
void  S1319C4 ::v70(){vfunc_called(this, "_ZN7S1319C43v70Ev");}
void  S1319C4 ::v71(){vfunc_called(this, "_ZN7S1319C43v71Ev");}
void  S1319C4 ::v72(){vfunc_called(this, "_ZN7S1319C43v72Ev");}
void  S1319C4 ::v73(){vfunc_called(this, "_ZN7S1319C43v73Ev");}
void  S1319C4 ::v74(){vfunc_called(this, "_ZN7S1319C43v74Ev");}
void  S1319C4 ::v75(){vfunc_called(this, "_ZN7S1319C43v75Ev");}
void  S1319C4 ::v76(){vfunc_called(this, "_ZN7S1319C43v76Ev");}
void  S1319C4 ::v77(){vfunc_called(this, "_ZN7S1319C43v77Ev");}
void  S1319C4 ::v78(){vfunc_called(this, "_ZN7S1319C43v78Ev");}
void  S1319C4 ::v79(){vfunc_called(this, "_ZN7S1319C43v79Ev");}
S1319C4 ::S1319C4(){ note_ctor("S1319C4", this);} // tgen

static void Test_S1319C4()
{
  extern Class_Descriptor cd_S1319C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1319C4, buf);
    S1319C4 *dp, &lv = *(dp=new (buf) S1319C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1319C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1319C4)");
    check_field_offset(lv, s1319c4f0, ABISELECT(8,4), "S1319C4.s1319c4f0");
    check_field_offset(lv, s1319c4f1, ABISELECT(16,8), "S1319C4.s1319c4f1");
    check_field_offset(lv, s1319c4f2, ABISELECT(24,16), "S1319C4.s1319c4f2");
    check_field_offset(lv, s1319c4f3, ABISELECT(56,32), "S1319C4.s1319c4f3");
    check_field_offset(lv, s1319c4f4, ABISELECT(64,40), "S1319C4.s1319c4f4");
    check_field_offset(lv, s1319c4f5, ABISELECT(72,44), "S1319C4.s1319c4f5");
    check_field_offset(lv, s1319c4f6, ABISELECT(80,52), "S1319C4.s1319c4f6");
    test_class_info(&lv, &cd_S1319C4);
    dp->~S1319C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1319C4(Test_S1319C4, "S1319C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1319C4C1Ev();
extern void _ZN7S1319C4D1Ev();
Name_Map name_map_S1319C4[] = {
  NSPAIR(_ZN7S1319C4C1Ev),
  NSPAIR(_ZN7S1319C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1319C4[];
extern void _ZN7S1319C4D1Ev();
extern void _ZN7S1319C4D0Ev();
extern void _ZN7S1319C43v16Ev();
extern void _ZN7S1319C43v17Ev();
extern void _ZN7S1319C43v18Ev();
extern void _ZN7S1319C43v19Ev();
extern void _ZN7S1319C43v20Ev();
extern void _ZN7S1319C43v21Ev();
extern void _ZN7S1319C43v22Ev();
extern void _ZN7S1319C43v23Ev();
extern void _ZN7S1319C43v24Ev();
extern void _ZN7S1319C43v25Ev();
extern void _ZN7S1319C43v26Ev();
extern void _ZN7S1319C43v27Ev();
extern void _ZN7S1319C43v28Ev();
extern void _ZN7S1319C43v29Ev();
extern void _ZN7S1319C43v30Ev();
extern void _ZN7S1319C43v31Ev();
extern void _ZN7S1319C43v32Ev();
extern void _ZN7S1319C43v33Ev();
extern void _ZN7S1319C43v34Ev();
extern void _ZN7S1319C43v35Ev();
extern void _ZN7S1319C43v36Ev();
extern void _ZN7S1319C43v37Ev();
extern void _ZN7S1319C43v38Ev();
extern void _ZN7S1319C43v39Ev();
extern void _ZN7S1319C43v40Ev();
extern void _ZN7S1319C43v41Ev();
extern void _ZN7S1319C43v42Ev();
extern void _ZN7S1319C43v43Ev();
extern void _ZN7S1319C43v44Ev();
extern void _ZN7S1319C43v45Ev();
extern void _ZN7S1319C43v46Ev();
extern void _ZN7S1319C43v47Ev();
extern void _ZN7S1319C43v48Ev();
extern void _ZN7S1319C43v49Ev();
extern void _ZN7S1319C43v50Ev();
extern void _ZN7S1319C43v51Ev();
extern void _ZN7S1319C43v52Ev();
extern void _ZN7S1319C43v53Ev();
extern void _ZN7S1319C43v54Ev();
extern void _ZN7S1319C43v55Ev();
extern void _ZN7S1319C43v56Ev();
extern void _ZN7S1319C43v57Ev();
extern void _ZN7S1319C43v58Ev();
extern void _ZN7S1319C43v59Ev();
extern void _ZN7S1319C43v60Ev();
extern void _ZN7S1319C43v61Ev();
extern void _ZN7S1319C43v62Ev();
extern void _ZN7S1319C43v63Ev();
extern void _ZN7S1319C43v64Ev();
extern void _ZN7S1319C43v65Ev();
extern void _ZN7S1319C43v66Ev();
extern void _ZN7S1319C43v67Ev();
extern void _ZN7S1319C43v68Ev();
extern void _ZN7S1319C43v69Ev();
extern void _ZN7S1319C43v70Ev();
extern void _ZN7S1319C43v71Ev();
extern void _ZN7S1319C43v72Ev();
extern void _ZN7S1319C43v73Ev();
extern void _ZN7S1319C43v74Ev();
extern void _ZN7S1319C43v75Ev();
extern void _ZN7S1319C43v76Ev();
extern void _ZN7S1319C43v77Ev();
extern void _ZN7S1319C43v78Ev();
extern void _ZN7S1319C43v79Ev();
static  VTBL_ENTRY vtc_S1319C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1319C4[0]),
  (VTBL_ENTRY)&_ZN7S1319C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1319C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v79Ev,
};
extern VTBL_ENTRY _ZTI7S1319C4[];
extern  VTBL_ENTRY _ZTV7S1319C4[];
Class_Descriptor cd_S1319C4 = {  "S1319C4", // class name
  0,0,//no base classes
  &(vtc_S1319C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1319C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1319C4),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  S1319C6  {
  virtual void  v80(); // _ZN7S1319C63v80Ev
  ~S1319C6(); // tgen
  S1319C6(); // tgen
};
//SIG(-1 S1319C6) C1{ v1}


void  S1319C6 ::v80(){vfunc_called(this, "_ZN7S1319C63v80Ev");}
S1319C6 ::~S1319C6(){ note_dtor("S1319C6", this);} // tgen
S1319C6 ::S1319C6(){ note_ctor("S1319C6", this);} // tgen

static void Test_S1319C6()
{
  extern Class_Descriptor cd_S1319C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1319C6, buf);
    S1319C6 *dp, &lv = *(dp=new (buf) S1319C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1319C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1319C6)");
    test_class_info(&lv, &cd_S1319C6);
    dp->~S1319C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1319C6(Test_S1319C6, "S1319C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1319C6C1Ev();
extern void _ZN7S1319C6D1Ev();
Name_Map name_map_S1319C6[] = {
  NSPAIR(_ZN7S1319C6C1Ev),
  NSPAIR(_ZN7S1319C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1319C6[];
extern void _ZN7S1319C63v80Ev();
static  VTBL_ENTRY vtc_S1319C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1319C6[0]),
  (VTBL_ENTRY)&_ZN7S1319C63v80Ev,
};
extern VTBL_ENTRY _ZTI7S1319C6[];
extern  VTBL_ENTRY _ZTV7S1319C6[];
Class_Descriptor cd_S1319C6 = {  "S1319C6", // class name
  0,0,//no base classes
  &(vtc_S1319C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1319C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1319C6),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  S1319C3  : S1319C4 , S1319C6 {
  void *s1319c3f0;
  int s1319c3f1[7];
  virtual  ~S1319C3(); // _ZN7S1319C3D1Ev
  virtual void  v81(); // _ZN7S1319C33v81Ev
  virtual void  v82(); // _ZN7S1319C33v82Ev
  virtual void  v83(); // _ZN7S1319C33v83Ev
  virtual void  v84(); // _ZN7S1319C33v84Ev
  S1319C3(); // tgen
};
//SIG(-1 S1319C3) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} BC4{ v69} vd v1 v2 v3 v4 Fp Fi[7]}


 S1319C3 ::~S1319C3(){ note_dtor("S1319C3", this);}
void  S1319C3 ::v81(){vfunc_called(this, "_ZN7S1319C33v81Ev");}
void  S1319C3 ::v82(){vfunc_called(this, "_ZN7S1319C33v82Ev");}
void  S1319C3 ::v83(){vfunc_called(this, "_ZN7S1319C33v83Ev");}
void  S1319C3 ::v84(){vfunc_called(this, "_ZN7S1319C33v84Ev");}
S1319C3 ::S1319C3(){ note_ctor("S1319C3", this);} // tgen

static void Test_S1319C3()
{
  extern Class_Descriptor cd_S1319C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,25)];
    init_test(&cd_S1319C3, buf);
    S1319C3 *dp, &lv = *(dp=new (buf) S1319C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S1319C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1319C3)");
    check_base_class_offset(lv, (S1319C4*), 0, "S1319C3");
    check_base_class_offset(lv, (S1319C6*), ABISELECT(96,60), "S1319C3");
    check_field_offset(lv, s1319c3f0, ABISELECT(104,64), "S1319C3.s1319c3f0");
    check_field_offset(lv, s1319c3f1, ABISELECT(112,68), "S1319C3.s1319c3f1");
    test_class_info(&lv, &cd_S1319C3);
    dp->~S1319C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1319C3(Test_S1319C3, "S1319C3", ABISELECT(144,96));

#else // __cplusplus

extern void _ZN7S1319C3C1Ev();
extern void _ZN7S1319C3D1Ev();
Name_Map name_map_S1319C3[] = {
  NSPAIR(_ZN7S1319C3C1Ev),
  NSPAIR(_ZN7S1319C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1319C4;
extern VTBL_ENTRY _ZTI7S1319C4[];
extern  VTBL_ENTRY _ZTV7S1319C4[];
extern Class_Descriptor cd_S1319C6;
extern VTBL_ENTRY _ZTI7S1319C6[];
extern  VTBL_ENTRY _ZTV7S1319C6[];
static Base_Class bases_S1319C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1319C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S1319C6,    ABISELECT(96,60), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1319C3[];
extern void _ZN7S1319C3D1Ev();
extern void _ZN7S1319C3D0Ev();
extern void _ZN7S1319C43v16Ev();
extern void _ZN7S1319C43v17Ev();
extern void _ZN7S1319C43v18Ev();
extern void _ZN7S1319C43v19Ev();
extern void _ZN7S1319C43v20Ev();
extern void _ZN7S1319C43v21Ev();
extern void _ZN7S1319C43v22Ev();
extern void _ZN7S1319C43v23Ev();
extern void _ZN7S1319C43v24Ev();
extern void _ZN7S1319C43v25Ev();
extern void _ZN7S1319C43v26Ev();
extern void _ZN7S1319C43v27Ev();
extern void _ZN7S1319C43v28Ev();
extern void _ZN7S1319C43v29Ev();
extern void _ZN7S1319C43v30Ev();
extern void _ZN7S1319C43v31Ev();
extern void _ZN7S1319C43v32Ev();
extern void _ZN7S1319C43v33Ev();
extern void _ZN7S1319C43v34Ev();
extern void _ZN7S1319C43v35Ev();
extern void _ZN7S1319C43v36Ev();
extern void _ZN7S1319C43v37Ev();
extern void _ZN7S1319C43v38Ev();
extern void _ZN7S1319C43v39Ev();
extern void _ZN7S1319C43v40Ev();
extern void _ZN7S1319C43v41Ev();
extern void _ZN7S1319C43v42Ev();
extern void _ZN7S1319C43v43Ev();
extern void _ZN7S1319C43v44Ev();
extern void _ZN7S1319C43v45Ev();
extern void _ZN7S1319C43v46Ev();
extern void _ZN7S1319C43v47Ev();
extern void _ZN7S1319C43v48Ev();
extern void _ZN7S1319C43v49Ev();
extern void _ZN7S1319C43v50Ev();
extern void _ZN7S1319C43v51Ev();
extern void _ZN7S1319C43v52Ev();
extern void _ZN7S1319C43v53Ev();
extern void _ZN7S1319C43v54Ev();
extern void _ZN7S1319C43v55Ev();
extern void _ZN7S1319C43v56Ev();
extern void _ZN7S1319C43v57Ev();
extern void _ZN7S1319C43v58Ev();
extern void _ZN7S1319C43v59Ev();
extern void _ZN7S1319C43v60Ev();
extern void _ZN7S1319C43v61Ev();
extern void _ZN7S1319C43v62Ev();
extern void _ZN7S1319C43v63Ev();
extern void _ZN7S1319C43v64Ev();
extern void _ZN7S1319C43v65Ev();
extern void _ZN7S1319C43v66Ev();
extern void _ZN7S1319C43v67Ev();
extern void _ZN7S1319C43v68Ev();
extern void _ZN7S1319C43v69Ev();
extern void _ZN7S1319C43v70Ev();
extern void _ZN7S1319C43v71Ev();
extern void _ZN7S1319C43v72Ev();
extern void _ZN7S1319C43v73Ev();
extern void _ZN7S1319C43v74Ev();
extern void _ZN7S1319C43v75Ev();
extern void _ZN7S1319C43v76Ev();
extern void _ZN7S1319C43v77Ev();
extern void _ZN7S1319C43v78Ev();
extern void _ZN7S1319C43v79Ev();
extern void _ZN7S1319C33v81Ev();
extern void _ZN7S1319C33v82Ev();
extern void _ZN7S1319C33v83Ev();
extern void _ZN7S1319C33v84Ev();
extern void _ZN7S1319C63v80Ev();
static  VTBL_ENTRY vtc_S1319C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1319C3[0]),
  (VTBL_ENTRY)&_ZN7S1319C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1319C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v79Ev,
  (VTBL_ENTRY)&_ZN7S1319C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1319C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1319C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1319C33v84Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1319C3[0]),
  (VTBL_ENTRY)&_ZN7S1319C63v80Ev,
};
extern VTBL_ENTRY _ZTI7S1319C3[];
extern  VTBL_ENTRY _ZTV7S1319C3[];
Class_Descriptor cd_S1319C3 = {  "S1319C3", // class name
  bases_S1319C3, 2,
  &(vtc_S1319C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,96), // object size
  NSPAIRA(_ZTI7S1319C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1319C3),75, //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  S1319C7  {
  virtual  ~S1319C7(); // _ZN7S1319C7D1Ev
  virtual void  v85(); // _ZN7S1319C73v85Ev
  virtual void  v86(); // _ZN7S1319C73v86Ev
  virtual void  v87(); // _ZN7S1319C73v87Ev
  S1319C7(); // tgen
};
//SIG(-1 S1319C7) C1{ vd v1 v2 v3}


 S1319C7 ::~S1319C7(){ note_dtor("S1319C7", this);}
void  S1319C7 ::v85(){vfunc_called(this, "_ZN7S1319C73v85Ev");}
void  S1319C7 ::v86(){vfunc_called(this, "_ZN7S1319C73v86Ev");}
void  S1319C7 ::v87(){vfunc_called(this, "_ZN7S1319C73v87Ev");}
S1319C7 ::S1319C7(){ note_ctor("S1319C7", this);} // tgen

static void Test_S1319C7()
{
  extern Class_Descriptor cd_S1319C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1319C7, buf);
    S1319C7 *dp, &lv = *(dp=new (buf) S1319C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1319C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1319C7)");
    test_class_info(&lv, &cd_S1319C7);
    dp->~S1319C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1319C7(Test_S1319C7, "S1319C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1319C7C1Ev();
extern void _ZN7S1319C7D1Ev();
Name_Map name_map_S1319C7[] = {
  NSPAIR(_ZN7S1319C7C1Ev),
  NSPAIR(_ZN7S1319C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1319C7[];
extern void _ZN7S1319C7D1Ev();
extern void _ZN7S1319C7D0Ev();
extern void _ZN7S1319C73v85Ev();
extern void _ZN7S1319C73v86Ev();
extern void _ZN7S1319C73v87Ev();
static  VTBL_ENTRY vtc_S1319C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1319C7[0]),
  (VTBL_ENTRY)&_ZN7S1319C7D1Ev,
  (VTBL_ENTRY)&_ZN7S1319C7D0Ev,
  (VTBL_ENTRY)&_ZN7S1319C73v85Ev,
  (VTBL_ENTRY)&_ZN7S1319C73v86Ev,
  (VTBL_ENTRY)&_ZN7S1319C73v87Ev,
};
extern VTBL_ENTRY _ZTI7S1319C7[];
extern  VTBL_ENTRY _ZTV7S1319C7[];
Class_Descriptor cd_S1319C7 = {  "S1319C7", // class name
  0,0,//no base classes
  &(vtc_S1319C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1319C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1319C7),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  S1319C10  : S1537C8_nt {
};
//SIG(-1 S1319C10) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1319C10()
{
  extern Class_Descriptor cd_S1319C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1319C10, buf);
    S1319C10 &lv = *(new (buf) S1319C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1319C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1319C10)");
    check_base_class_offset(lv, (S1537C8_nt*), 0, "S1319C10");
    test_class_info(&lv, &cd_S1319C10);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1319C10(Test_S1319C10, "S1319C10", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
static Base_Class bases_S1319C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1319C10 = {  "S1319C10", // class name
  bases_S1319C10, 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  S1319C9  : S1319C10 {
};
//SIG(-1 S1319C9) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1319C9()
{
  extern Class_Descriptor cd_S1319C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1319C9, buf);
    S1319C9 &lv = *(new (buf) S1319C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1319C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1319C9)");
    check_base_class_offset(lv, (S1537C8_nt*)(S1319C10*), 0, "S1319C9");
    check_base_class_offset(lv, (S1319C10*), 0, "S1319C9");
    test_class_info(&lv, &cd_S1319C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1319C9(Test_S1319C9, "S1319C9", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
extern Class_Descriptor cd_S1319C10;
static Base_Class bases_S1319C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1319C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1319C9 = {  "S1319C9", // class name
  bases_S1319C9, 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  S1319C17  {
  int s1319c17f0[28];
  virtual  ~S1319C17(); // _ZN8S1319C17D1Ev
  virtual void  v113(); // _ZN8S1319C174v113Ev
  virtual void  v114(); // _ZN8S1319C174v114Ev
  virtual void  v115(); // _ZN8S1319C174v115Ev
  virtual void  v116(); // _ZN8S1319C174v116Ev
  virtual void  v117(); // _ZN8S1319C174v117Ev
  virtual void  v118(); // _ZN8S1319C174v118Ev
  virtual void  v119(); // _ZN8S1319C174v119Ev
  virtual void  v120(); // _ZN8S1319C174v120Ev
  virtual void  v121(); // _ZN8S1319C174v121Ev
  virtual void  v122(); // _ZN8S1319C174v122Ev
  virtual void  v123(); // _ZN8S1319C174v123Ev
  virtual void  v124(); // _ZN8S1319C174v124Ev
  virtual void  v125(); // _ZN8S1319C174v125Ev
  virtual void  v126(); // _ZN8S1319C174v126Ev
  virtual void  v127(); // _ZN8S1319C174v127Ev
  virtual void  v128(); // _ZN8S1319C174v128Ev
  virtual void  v129(); // _ZN8S1319C174v129Ev
  virtual void  v130(); // _ZN8S1319C174v130Ev
  virtual void  v131(); // _ZN8S1319C174v131Ev
  virtual void  v132(); // _ZN8S1319C174v132Ev
  virtual void  v133(); // _ZN8S1319C174v133Ev
  virtual void  v134(); // _ZN8S1319C174v134Ev
  virtual void  v135(); // _ZN8S1319C174v135Ev
  virtual void  v136(); // _ZN8S1319C174v136Ev
  virtual void  v137(); // _ZN8S1319C174v137Ev
  S1319C17(); // tgen
};
//SIG(-1 S1319C17) 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 Fi[28]}


 S1319C17 ::~S1319C17(){ note_dtor("S1319C17", this);}
void  S1319C17 ::v113(){vfunc_called(this, "_ZN8S1319C174v113Ev");}
void  S1319C17 ::v114(){vfunc_called(this, "_ZN8S1319C174v114Ev");}
void  S1319C17 ::v115(){vfunc_called(this, "_ZN8S1319C174v115Ev");}
void  S1319C17 ::v116(){vfunc_called(this, "_ZN8S1319C174v116Ev");}
void  S1319C17 ::v117(){vfunc_called(this, "_ZN8S1319C174v117Ev");}
void  S1319C17 ::v118(){vfunc_called(this, "_ZN8S1319C174v118Ev");}
void  S1319C17 ::v119(){vfunc_called(this, "_ZN8S1319C174v119Ev");}
void  S1319C17 ::v120(){vfunc_called(this, "_ZN8S1319C174v120Ev");}
void  S1319C17 ::v121(){vfunc_called(this, "_ZN8S1319C174v121Ev");}
void  S1319C17 ::v122(){vfunc_called(this, "_ZN8S1319C174v122Ev");}
void  S1319C17 ::v123(){vfunc_called(this, "_ZN8S1319C174v123Ev");}
void  S1319C17 ::v124(){vfunc_called(this, "_ZN8S1319C174v124Ev");}
void  S1319C17 ::v125(){vfunc_called(this, "_ZN8S1319C174v125Ev");}
void  S1319C17 ::v126(){vfunc_called(this, "_ZN8S1319C174v126Ev");}
void  S1319C17 ::v127(){vfunc_called(this, "_ZN8S1319C174v127Ev");}
void  S1319C17 ::v128(){vfunc_called(this, "_ZN8S1319C174v128Ev");}
void  S1319C17 ::v129(){vfunc_called(this, "_ZN8S1319C174v129Ev");}
void  S1319C17 ::v130(){vfunc_called(this, "_ZN8S1319C174v130Ev");}
void  S1319C17 ::v131(){vfunc_called(this, "_ZN8S1319C174v131Ev");}
void  S1319C17 ::v132(){vfunc_called(this, "_ZN8S1319C174v132Ev");}
void  S1319C17 ::v133(){vfunc_called(this, "_ZN8S1319C174v133Ev");}
void  S1319C17 ::v134(){vfunc_called(this, "_ZN8S1319C174v134Ev");}
void  S1319C17 ::v135(){vfunc_called(this, "_ZN8S1319C174v135Ev");}
void  S1319C17 ::v136(){vfunc_called(this, "_ZN8S1319C174v136Ev");}
void  S1319C17 ::v137(){vfunc_called(this, "_ZN8S1319C174v137Ev");}
S1319C17 ::S1319C17(){ note_ctor("S1319C17", this);} // tgen

static void Test_S1319C17()
{
  extern Class_Descriptor cd_S1319C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S1319C17, buf);
    S1319C17 *dp, &lv = *(dp=new (buf) S1319C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S1319C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1319C17)");
    check_field_offset(lv, s1319c17f0, ABISELECT(8,4), "S1319C17.s1319c17f0");
    test_class_info(&lv, &cd_S1319C17);
    dp->~S1319C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1319C17(Test_S1319C17, "S1319C17", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN8S1319C17C1Ev();
extern void _ZN8S1319C17D1Ev();
Name_Map name_map_S1319C17[] = {
  NSPAIR(_ZN8S1319C17C1Ev),
  NSPAIR(_ZN8S1319C17D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1319C17[];
extern void _ZN8S1319C17D1Ev();
extern void _ZN8S1319C17D0Ev();
extern void _ZN8S1319C174v113Ev();
extern void _ZN8S1319C174v114Ev();
extern void _ZN8S1319C174v115Ev();
extern void _ZN8S1319C174v116Ev();
extern void _ZN8S1319C174v117Ev();
extern void _ZN8S1319C174v118Ev();
extern void _ZN8S1319C174v119Ev();
extern void _ZN8S1319C174v120Ev();
extern void _ZN8S1319C174v121Ev();
extern void _ZN8S1319C174v122Ev();
extern void _ZN8S1319C174v123Ev();
extern void _ZN8S1319C174v124Ev();
extern void _ZN8S1319C174v125Ev();
extern void _ZN8S1319C174v126Ev();
extern void _ZN8S1319C174v127Ev();
extern void _ZN8S1319C174v128Ev();
extern void _ZN8S1319C174v129Ev();
extern void _ZN8S1319C174v130Ev();
extern void _ZN8S1319C174v131Ev();
extern void _ZN8S1319C174v132Ev();
extern void _ZN8S1319C174v133Ev();
extern void _ZN8S1319C174v134Ev();
extern void _ZN8S1319C174v135Ev();
extern void _ZN8S1319C174v136Ev();
extern void _ZN8S1319C174v137Ev();
static  VTBL_ENTRY vtc_S1319C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1319C17[0]),
  (VTBL_ENTRY)&_ZN8S1319C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1319C17D0Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v113Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v114Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v115Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v116Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v117Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v118Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v119Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v120Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v121Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v122Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v123Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v124Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v125Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v126Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v127Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v128Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v129Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v130Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v131Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v132Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v133Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v134Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v135Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v136Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v137Ev,
};
extern VTBL_ENTRY _ZTI8S1319C17[];
extern  VTBL_ENTRY _ZTV8S1319C17[];
Class_Descriptor cd_S1319C17 = {  "S1319C17", // class name
  0,0,//no base classes
  &(vtc_S1319C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI8S1319C17),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1319C17),29, //virtual function table var
  2, // 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  S1319C16  : S1319C17 {
  ::S1566C29 s1319c16f0;
  int s1319c16f1[2];
  virtual void  v138(); // _ZN8S1319C164v138Ev
  virtual void  v139(); // _ZN8S1319C164v139Ev
  virtual void  v140(); // _ZN8S1319C164v140Ev
  ~S1319C16(); // tgen
  S1319C16(); // tgen
};
//SIG(-1 S1319C16) C1{ BC2{ 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 Fi[28]} v1 v2 v3 FC3{ BC4{ m Fp Fi[2]}} Fi[2]}


void  S1319C16 ::v138(){vfunc_called(this, "_ZN8S1319C164v138Ev");}
void  S1319C16 ::v139(){vfunc_called(this, "_ZN8S1319C164v139Ev");}
void  S1319C16 ::v140(){vfunc_called(this, "_ZN8S1319C164v140Ev");}
S1319C16 ::~S1319C16(){ note_dtor("S1319C16", this);} // tgen
S1319C16 ::S1319C16(){ note_ctor("S1319C16", this);} // tgen

static void Test_S1319C16()
{
  extern Class_Descriptor cd_S1319C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,35)];
    init_test(&cd_S1319C16, buf);
    S1319C16 *dp, &lv = *(dp=new (buf) S1319C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,136), "sizeof(S1319C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1319C16)");
    check_base_class_offset(lv, (S1319C17*), 0, "S1319C16");
    check_field_offset(lv, s1319c16f0, ABISELECT(120,116), "S1319C16.s1319c16f0");
    check_field_offset(lv, s1319c16f1, ABISELECT(136,128), "S1319C16.s1319c16f1");
    test_class_info(&lv, &cd_S1319C16);
    dp->~S1319C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1319C16(Test_S1319C16, "S1319C16", ABISELECT(144,136));

#else // __cplusplus

extern void _ZN8S1319C16C1Ev();
extern void _ZN8S1319C16D1Ev();
Name_Map name_map_S1319C16[] = {
  NSPAIR(_ZN8S1319C16C1Ev),
  NSPAIR(_ZN8S1319C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1319C17;
extern VTBL_ENTRY _ZTI8S1319C17[];
extern  VTBL_ENTRY _ZTV8S1319C17[];
static Base_Class bases_S1319C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1319C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S1319C16[];
extern void _ZN8S1319C16D1Ev();
extern void _ZN8S1319C16D0Ev();
extern void _ZN8S1319C174v113Ev();
extern void _ZN8S1319C174v114Ev();
extern void _ZN8S1319C174v115Ev();
extern void _ZN8S1319C174v116Ev();
extern void _ZN8S1319C174v117Ev();
extern void _ZN8S1319C174v118Ev();
extern void _ZN8S1319C174v119Ev();
extern void _ZN8S1319C174v120Ev();
extern void _ZN8S1319C174v121Ev();
extern void _ZN8S1319C174v122Ev();
extern void _ZN8S1319C174v123Ev();
extern void _ZN8S1319C174v124Ev();
extern void _ZN8S1319C174v125Ev();
extern void _ZN8S1319C174v126Ev();
extern void _ZN8S1319C174v127Ev();
extern void _ZN8S1319C174v128Ev();
extern void _ZN8S1319C174v129Ev();
extern void _ZN8S1319C174v130Ev();
extern void _ZN8S1319C174v131Ev();
extern void _ZN8S1319C174v132Ev();
extern void _ZN8S1319C174v133Ev();
extern void _ZN8S1319C174v134Ev();
extern void _ZN8S1319C174v135Ev();
extern void _ZN8S1319C174v136Ev();
extern void _ZN8S1319C174v137Ev();
extern void _ZN8S1319C164v138Ev();
extern void _ZN8S1319C164v139Ev();
extern void _ZN8S1319C164v140Ev();
static  VTBL_ENTRY vtc_S1319C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1319C16[0]),
  (VTBL_ENTRY)&_ZN8S1319C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1319C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v113Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v114Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v115Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v116Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v117Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v118Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v119Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v120Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v121Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v122Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v123Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v124Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v125Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v126Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v127Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v128Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v129Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v130Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v131Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v132Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v133Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v134Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v135Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v136Ev,
  (VTBL_ENTRY)&_ZN8S1319C174v137Ev,
  (VTBL_ENTRY)&_ZN8S1319C164v138Ev,
  (VTBL_ENTRY)&_ZN8S1319C164v139Ev,
  (VTBL_ENTRY)&_ZN8S1319C164v140Ev,
};
extern VTBL_ENTRY _ZTI8S1319C16[];
extern  VTBL_ENTRY _ZTV8S1319C16[];
Class_Descriptor cd_S1319C16 = {  "S1319C16", // class name
  bases_S1319C16, 1,
  &(vtc_S1319C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,136), // object size
  NSPAIRA(_ZTI8S1319C16),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S1319C16),32, //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  S1319C2  : S1319C3 , S1319C7 {
  void *s1319c2f0;
  int s1319c2f1;
  ::S1325C21 s1319c2f2;
  void *s1319c2f3;
  int s1319c2f4[6];
  ::S1319C9 s1319c2f5;
  ::S1319C9 s1319c2f6;
  int s1319c2f7[3];
  ::S1325C7_nt s1319c2f8;
  ::S1319C9 s1319c2f9;
  ::S1319C9 s1319c2f10;
  __tsi64 s1319c2f11[3];
  int s1319c2f12[2];
  ::S1537C5_nt s1319c2f13;
  ::S1537C5_nt s1319c2f14;
  int s1319c2f15[2];
  void *s1319c2f16;
  ::S1566C15 s1319c2f17;
  __tsi64 s1319c2f18;
  int s1319c2f19[6];
  __tsi64 s1319c2f20[4];
  int s1319c2f21;
  ::S1319C16 s1319c2f22;
  __tsi64 s1319c2f23[256];
  int s1319c2f24[259];
  void *s1319c2f25[1023];
  int s1319c2f26[3069];
  ::S1566C10 s1319c2f27;
  ::S1566C10 s1319c2f28;
  ::S1537C23 s1319c2f29;
  ::S1537C19 s1319c2f30;
  ::S1566C22_nt s1319c2f31;
  void *s1319c2f32;
  ::S1537C13 s1319c2f33;
  ::S1537C7_nt s1319c2f34;
  ::S1566C14_nt s1319c2f35;
  ::S1325C31 s1319c2f36;
  ::S1325C27 s1319c2f37;
  ::S1325C23 s1319c2f38;
  void *s1319c2f39[2];
  int s1319c2f40;
  ::S1566C30 s1319c2f41;
  ::S1325C14 s1319c2f42;
  virtual  ~S1319C2(); // _ZN7S1319C2D1Ev
  virtual void  v88(); // _ZN7S1319C23v88Ev
  virtual void  v89(); // _ZN7S1319C23v89Ev
  virtual void  v90(); // _ZN7S1319C23v90Ev
  virtual void  v91(); // _ZN7S1319C23v91Ev
  virtual void  v92(); // _ZN7S1319C23v92Ev
  virtual void  v93(); // _ZN7S1319C23v93Ev
  virtual void  v94(); // _ZN7S1319C23v94Ev
  virtual void  v95(); // _ZN7S1319C23v95Ev
  virtual void  v96(); // _ZN7S1319C23v96Ev
  virtual void  v97(); // _ZN7S1319C23v97Ev
  virtual void  v98(); // _ZN7S1319C23v98Ev
  virtual void  v99(); // _ZN7S1319C23v99Ev
  virtual void  v100(); // _ZN7S1319C24v100Ev
  virtual void  v101(); // _ZN7S1319C24v101Ev
  virtual void  v102(); // _ZN7S1319C24v102Ev
  virtual void  v103(); // _ZN7S1319C24v103Ev
  virtual void  v104(); // _ZN7S1319C24v104Ev
  virtual void  v105(); // _ZN7S1319C24v105Ev
  virtual void  v106(); // _ZN7S1319C24v106Ev
  virtual void  v107(); // _ZN7S1319C24v107Ev
  virtual void  v108(); // _ZN7S1319C24v108Ev
  virtual void  v109(); // _ZN7S1319C24v109Ev
  virtual void  v110(); // _ZN7S1319C24v110Ev
  S1319C2(); // tgen
};
//SIG(-1 S1319C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v88} vd v89 v90 v91 v92 Fp Fi[7]} BC6{ vd v93 v94 v95} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp Fi FC7{ m FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC8 Fi FC8 FC11{ BC10} FC8 Fi} Fp Fi[6] FC12{ BC13{ BC10}} FC12 Fi[3] FC14{ BC8} FC12 FC12 FL[3] Fi[2] FC15{ m Fi[2]} FC15 Fi[2] Fp FC16{ BC17{ BC18{ vd 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 Fi[28]} v123 v124 v125 FC19{ BC10} Fi[2]} v96 v97 Fp[2] FL Fi[5] Fc[3]} FL Fi[6] FL[4] Fi FC20{ BC21{ vd 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 Fi[28]} v126 v127 v128 FC22{ BC10} Fi[2]} FL[256] Fi[259] Fp[1023] Fi[3069] FC23{ BC10} FC23 FC19 FC24{ BC10} FC25{ BC26{ m FC27{ BC10} Fp Fi}} Fp FC28{ BC10} FC29{ BC10} FC4 FC27 FC30{ BC10} FC31{ BC10} Fp[2] Fi FC32{ m Fi[5]} FC11}


 S1319C2 ::~S1319C2(){ note_dtor("S1319C2", this);}
void  S1319C2 ::v88(){vfunc_called(this, "_ZN7S1319C23v88Ev");}
void  S1319C2 ::v89(){vfunc_called(this, "_ZN7S1319C23v89Ev");}
void  S1319C2 ::v90(){vfunc_called(this, "_ZN7S1319C23v90Ev");}
void  S1319C2 ::v91(){vfunc_called(this, "_ZN7S1319C23v91Ev");}
void  S1319C2 ::v92(){vfunc_called(this, "_ZN7S1319C23v92Ev");}
void  S1319C2 ::v93(){vfunc_called(this, "_ZN7S1319C23v93Ev");}
void  S1319C2 ::v94(){vfunc_called(this, "_ZN7S1319C23v94Ev");}
void  S1319C2 ::v95(){vfunc_called(this, "_ZN7S1319C23v95Ev");}
void  S1319C2 ::v96(){vfunc_called(this, "_ZN7S1319C23v96Ev");}
void  S1319C2 ::v97(){vfunc_called(this, "_ZN7S1319C23v97Ev");}
void  S1319C2 ::v98(){vfunc_called(this, "_ZN7S1319C23v98Ev");}
void  S1319C2 ::v99(){vfunc_called(this, "_ZN7S1319C23v99Ev");}
void  S1319C2 ::v100(){vfunc_called(this, "_ZN7S1319C24v100Ev");}
void  S1319C2 ::v101(){vfunc_called(this, "_ZN7S1319C24v101Ev");}
void  S1319C2 ::v102(){vfunc_called(this, "_ZN7S1319C24v102Ev");}
void  S1319C2 ::v103(){vfunc_called(this, "_ZN7S1319C24v103Ev");}
void  S1319C2 ::v104(){vfunc_called(this, "_ZN7S1319C24v104Ev");}
void  S1319C2 ::v105(){vfunc_called(this, "_ZN7S1319C24v105Ev");}
void  S1319C2 ::v106(){vfunc_called(this, "_ZN7S1319C24v106Ev");}
void  S1319C2 ::v107(){vfunc_called(this, "_ZN7S1319C24v107Ev");}
void  S1319C2 ::v108(){vfunc_called(this, "_ZN7S1319C24v108Ev");}
void  S1319C2 ::v109(){vfunc_called(this, "_ZN7S1319C24v109Ev");}
void  S1319C2 ::v110(){vfunc_called(this, "_ZN7S1319C24v110Ev");}
S1319C2 ::S1319C2(){ note_ctor("S1319C2", this);} // tgen

static void Test_S1319C2()
{
  extern Class_Descriptor cd_S1319C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3084,5089)];
    init_test(&cd_S1319C2, buf);
    S1319C2 *dp, &lv = *(dp=new (buf) S1319C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24664,20352), "sizeof(S1319C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1319C2)");
    check_base_class_offset(lv, (S1319C4*)(S1319C3*), 0, "S1319C2");
    check_base_class_offset(lv, (S1319C6*)(S1319C3*), ABISELECT(96,60), "S1319C2");
    check_base_class_offset(lv, (S1319C3*), 0, "S1319C2");
    check_base_class_offset(lv, (S1319C7*), ABISELECT(144,96), "S1319C2");
    check_field_offset(lv, s1319c2f0, ABISELECT(152,100), "S1319C2.s1319c2f0");
    check_field_offset(lv, s1319c2f1, ABISELECT(160,104), "S1319C2.s1319c2f1");
    check_field_offset(lv, s1319c2f2, ABISELECT(168,108), "S1319C2.s1319c2f2");
    check_field_offset(lv, s1319c2f3, ABISELECT(264,176), "S1319C2.s1319c2f3");
    check_field_offset(lv, s1319c2f4, ABISELECT(272,180), "S1319C2.s1319c2f4");
    check_field_offset(lv, s1319c2f5, ABISELECT(296,204), "S1319C2.s1319c2f5");
    check_field_offset(lv, s1319c2f6, ABISELECT(312,216), "S1319C2.s1319c2f6");
    check_field_offset(lv, s1319c2f7, ABISELECT(328,228), "S1319C2.s1319c2f7");
    check_field_offset(lv, s1319c2f8, ABISELECT(344,240), "S1319C2.s1319c2f8");
    check_field_offset(lv, s1319c2f9, ABISELECT(360,252), "S1319C2.s1319c2f9");
    check_field_offset(lv, s1319c2f10, ABISELECT(376,264), "S1319C2.s1319c2f10");
    check_field_offset(lv, s1319c2f11, ABISELECT(392,276), "S1319C2.s1319c2f11");
    check_field_offset(lv, s1319c2f12, ABISELECT(416,300), "S1319C2.s1319c2f12");
    check_field_offset(lv, s1319c2f13, ABISELECT(424,308), "S1319C2.s1319c2f13");
    check_field_offset(lv, s1319c2f14, ABISELECT(432,316), "S1319C2.s1319c2f14");
    check_field_offset(lv, s1319c2f15, ABISELECT(440,324), "S1319C2.s1319c2f15");
    check_field_offset(lv, s1319c2f16, ABISELECT(448,332), "S1319C2.s1319c2f16");
    check_field_offset(lv, s1319c2f17, ABISELECT(456,336), "S1319C2.s1319c2f17");
    check_field_offset(lv, s1319c2f18, ABISELECT(648,512), "S1319C2.s1319c2f18");
    check_field_offset(lv, s1319c2f19, ABISELECT(656,520), "S1319C2.s1319c2f19");
    check_field_offset(lv, s1319c2f20, ABISELECT(680,544), "S1319C2.s1319c2f20");
    check_field_offset(lv, s1319c2f21, ABISELECT(712,576), "S1319C2.s1319c2f21");
    check_field_offset(lv, s1319c2f22, ABISELECT(720,580), "S1319C2.s1319c2f22");
    check_field_offset(lv, s1319c2f23, ABISELECT(864,716), "S1319C2.s1319c2f23");
    check_field_offset(lv, s1319c2f24, ABISELECT(2912,2764), "S1319C2.s1319c2f24");
    check_field_offset(lv, s1319c2f25, ABISELECT(3952,3800), "S1319C2.s1319c2f25");
    check_field_offset(lv, s1319c2f26, ABISELECT(12136,7892), "S1319C2.s1319c2f26");
    check_field_offset(lv, s1319c2f27, ABISELECT(24416,20168), "S1319C2.s1319c2f27");
    check_field_offset(lv, s1319c2f28, ABISELECT(24432,20180), "S1319C2.s1319c2f28");
    check_field_offset(lv, s1319c2f29, ABISELECT(24448,20192), "S1319C2.s1319c2f29");
    check_field_offset(lv, s1319c2f30, ABISELECT(24464,20204), "S1319C2.s1319c2f30");
    check_field_offset(lv, s1319c2f31, ABISELECT(24480,20216), "S1319C2.s1319c2f31");
    check_field_offset(lv, s1319c2f32, ABISELECT(24512,20236), "S1319C2.s1319c2f32");
    check_field_offset(lv, s1319c2f33, ABISELECT(24520,20240), "S1319C2.s1319c2f33");
    check_field_offset(lv, s1319c2f34, ABISELECT(24536,20252), "S1319C2.s1319c2f34");
    check_field_offset(lv, s1319c2f35, ABISELECT(24552,20264), "S1319C2.s1319c2f35");
    check_field_offset(lv, s1319c2f36, ABISELECT(24560,20272), "S1319C2.s1319c2f36");
    check_field_offset(lv, s1319c2f37, ABISELECT(24576,20284), "S1319C2.s1319c2f37");
    check_field_offset(lv, s1319c2f38, ABISELECT(24592,20296), "S1319C2.s1319c2f38");
    check_field_offset(lv, s1319c2f39, ABISELECT(24608,20308), "S1319C2.s1319c2f39");
    check_field_offset(lv, s1319c2f40, ABISELECT(24624,20316), "S1319C2.s1319c2f40");
    check_field_offset(lv, s1319c2f41, ABISELECT(24628,20320), "S1319C2.s1319c2f41");
    check_field_offset(lv, s1319c2f42, ABISELECT(24648,20340), "S1319C2.s1319c2f42");
    test_class_info(&lv, &cd_S1319C2);
    dp->~S1319C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1319C2(Test_S1319C2, "S1319C2", ABISELECT(24664,20352));

#else // __cplusplus

extern void _ZN7S1319C2C1Ev();
extern void _ZN7S1319C2D1Ev();
Name_Map name_map_S1319C2[] = {
  NSPAIR(_ZN7S1319C2C1Ev),
  NSPAIR(_ZN7S1319C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1319C4;
extern VTBL_ENTRY _ZTI7S1319C4[];
extern  VTBL_ENTRY _ZTV7S1319C4[];
extern Class_Descriptor cd_S1319C6;
extern VTBL_ENTRY _ZTI7S1319C6[];
extern  VTBL_ENTRY _ZTV7S1319C6[];
extern Class_Descriptor cd_S1319C3;
extern VTBL_ENTRY _ZTI7S1319C3[];
extern  VTBL_ENTRY _ZTV7S1319C3[];
extern Class_Descriptor cd_S1319C7;
extern VTBL_ENTRY _ZTI7S1319C7[];
extern  VTBL_ENTRY _ZTV7S1319C7[];
static Base_Class bases_S1319C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1319C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1319C6,    ABISELECT(96,60), //bcp->offset
    95, //bcp->virtual_function_table_offset
    2, //num_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_S1319C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1319C7,    ABISELECT(144,96), //bcp->offset
    98, //bcp->virtual_function_table_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 _ZTI7S1319C2[];
extern void _ZN7S1319C2D1Ev();
extern void _ZN7S1319C2D0Ev();
extern void _ZN7S1319C43v16Ev();
extern void _ZN7S1319C43v17Ev();
extern void _ZN7S1319C43v18Ev();
extern void _ZN7S1319C43v19Ev();
extern void _ZN7S1319C43v20Ev();
extern void _ZN7S1319C43v21Ev();
extern void _ZN7S1319C43v22Ev();
extern void _ZN7S1319C43v23Ev();
extern void _ZN7S1319C43v24Ev();
extern void _ZN7S1319C43v25Ev();
extern void _ZN7S1319C43v26Ev();
extern void _ZN7S1319C43v27Ev();
extern void _ZN7S1319C43v28Ev();
extern void _ZN7S1319C43v29Ev();
extern void _ZN7S1319C43v30Ev();
extern void _ZN7S1319C43v31Ev();
extern void _ZN7S1319C43v32Ev();
extern void _ZN7S1319C43v33Ev();
extern void _ZN7S1319C43v34Ev();
extern void _ZN7S1319C43v35Ev();
extern void _ZN7S1319C43v36Ev();
extern void _ZN7S1319C43v37Ev();
extern void _ZN7S1319C43v38Ev();
extern void _ZN7S1319C43v39Ev();
extern void _ZN7S1319C43v40Ev();
extern void _ZN7S1319C43v41Ev();
extern void _ZN7S1319C43v42Ev();
extern void _ZN7S1319C43v43Ev();
extern void _ZN7S1319C43v44Ev();
extern void _ZN7S1319C43v45Ev();
extern void _ZN7S1319C43v46Ev();
extern void _ZN7S1319C43v47Ev();
extern void _ZN7S1319C43v48Ev();
extern void _ZN7S1319C43v49Ev();
extern void _ZN7S1319C43v50Ev();
extern void _ZN7S1319C43v51Ev();
extern void _ZN7S1319C43v52Ev();
extern void _ZN7S1319C43v53Ev();
extern void _ZN7S1319C43v54Ev();
extern void _ZN7S1319C43v55Ev();
extern void _ZN7S1319C43v56Ev();
extern void _ZN7S1319C43v57Ev();
extern void _ZN7S1319C43v58Ev();
extern void _ZN7S1319C43v59Ev();
extern void _ZN7S1319C43v60Ev();
extern void _ZN7S1319C43v61Ev();
extern void _ZN7S1319C43v62Ev();
extern void _ZN7S1319C43v63Ev();
extern void _ZN7S1319C43v64Ev();
extern void _ZN7S1319C43v65Ev();
extern void _ZN7S1319C43v66Ev();
extern void _ZN7S1319C43v67Ev();
extern void _ZN7S1319C43v68Ev();
extern void _ZN7S1319C43v69Ev();
extern void _ZN7S1319C43v70Ev();
extern void _ZN7S1319C43v71Ev();
extern void _ZN7S1319C43v72Ev();
extern void _ZN7S1319C43v73Ev();
extern void _ZN7S1319C43v74Ev();
extern void _ZN7S1319C43v75Ev();
extern void _ZN7S1319C43v76Ev();
extern void _ZN7S1319C43v77Ev();
extern void _ZN7S1319C43v78Ev();
extern void _ZN7S1319C43v79Ev();
extern void _ZN7S1319C33v81Ev();
extern void _ZN7S1319C33v82Ev();
extern void _ZN7S1319C33v83Ev();
extern void _ZN7S1319C33v84Ev();
extern void _ZN7S1319C23v88Ev();
extern void _ZN7S1319C23v89Ev();
extern void _ZN7S1319C23v90Ev();
extern void _ZN7S1319C23v91Ev();
extern void _ZN7S1319C23v92Ev();
extern void _ZN7S1319C23v93Ev();
extern void _ZN7S1319C23v94Ev();
extern void _ZN7S1319C23v95Ev();
extern void _ZN7S1319C23v96Ev();
extern void _ZN7S1319C23v97Ev();
extern void _ZN7S1319C23v98Ev();
extern void _ZN7S1319C23v99Ev();
extern void _ZN7S1319C24v100Ev();
extern void _ZN7S1319C24v101Ev();
extern void _ZN7S1319C24v102Ev();
extern void _ZN7S1319C24v103Ev();
extern void _ZN7S1319C24v104Ev();
extern void _ZN7S1319C24v105Ev();
extern void _ZN7S1319C24v106Ev();
extern void _ZN7S1319C24v107Ev();
extern void _ZN7S1319C24v108Ev();
extern void _ZN7S1319C24v109Ev();
extern void _ZN7S1319C24v110Ev();
extern void _ZN7S1319C63v80Ev();
extern void ABISELECT(_ZThn144_N7S1319C2D1Ev,_ZThn96_N7S1319C2D1Ev)();
extern void ABISELECT(_ZThn144_N7S1319C2D0Ev,_ZThn96_N7S1319C2D0Ev)();
extern void _ZN7S1319C73v85Ev();
extern void _ZN7S1319C73v86Ev();
extern void _ZN7S1319C73v87Ev();
static  VTBL_ENTRY vtc_S1319C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1319C2[0]),
  (VTBL_ENTRY)&_ZN7S1319C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1319C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v79Ev,
  (VTBL_ENTRY)&_ZN7S1319C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1319C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1319C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1319C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v110Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1319C2[0]),
  (VTBL_ENTRY)&_ZN7S1319C63v80Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI7S1319C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S1319C2D1Ev,_ZThn96_N7S1319C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S1319C2D0Ev,_ZThn96_N7S1319C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1319C73v85Ev,
  (VTBL_ENTRY)&_ZN7S1319C73v86Ev,
  (VTBL_ENTRY)&_ZN7S1319C73v87Ev,
};
extern VTBL_ENTRY _ZTI7S1319C2[];
extern  VTBL_ENTRY _ZTV7S1319C2[];
Class_Descriptor cd_S1319C2 = {  "S1319C2", // class name
  bases_S1319C2, 4,
  &(vtc_S1319C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24664,20352), // object size
  NSPAIRA(_ZTI7S1319C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1319C2),105, //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  S1319C1  : S1319C2 {
  void *s1319c1f0;
  virtual  ~S1319C1(); // _ZN7S1319C1D1Ev
  virtual void  v1(); // _ZN7S1319C12v1Ev
  virtual void  v2(); // _ZN7S1319C12v2Ev
  virtual void  v3(); // _ZN7S1319C12v3Ev
  virtual void  v4(); // _ZN7S1319C12v4Ev
  virtual void  v5(); // _ZN7S1319C12v5Ev
  virtual void  v6(); // _ZN7S1319C12v6Ev
  virtual void  v7(); // _ZN7S1319C12v7Ev
  virtual void  v8(); // _ZN7S1319C12v8Ev
  virtual void  v9(); // _ZN7S1319C12v9Ev
  virtual void  v10(); // _ZN7S1319C13v10Ev
  virtual void  v11(); // _ZN7S1319C13v11Ev
  virtual void  v12(); // _ZN7S1319C13v12Ev
  virtual void  v13(); // _ZN7S1319C13v13Ev
  virtual void  v14(); // _ZN7S1319C13v14Ev
  virtual void  v15(); // _ZN7S1319C13v15Ev
  S1319C1(); // tgen
};
//SIG(1 S1319C1) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} BC6{ v80} vd v81 v82 v83 v84 Fp Fi[7]} BC7{ vd v85 v86 v87} vd v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fp Fi FC8{ m FC9{ BC10{ BC11{ m Fp Fi[2]}}} FC9 Fi FC9 FC12{ BC11} FC9 Fi} Fp Fi[6] FC13{ BC14{ BC11}} FC13 Fi[3] FC15{ BC9} FC13 FC13 FL[3] Fi[2] FC16{ m Fi[2]} FC16 Fi[2] Fp FC17{ BC18{ BC19{ vd 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 Fi[28]} v138 v139 v140 FC20{ BC11} Fi[2]} v111 v112 Fp[2] FL Fi[5] Fc[3]} FL Fi[6] FL[4] Fi FC21{ BC22{ 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 Fi[28]} v141 v142 v143 FC23{ BC11} Fi[2]} FL[256] Fi[259] Fp[1023] Fi[3069] FC24{ BC11} FC24 FC20 FC25{ BC11} FC26{ BC27{ m FC28{ BC11} Fp Fi}} Fp FC29{ BC11} FC30{ BC11} FC5 FC28 FC31{ BC11} FC32{ BC11} Fp[2] Fi FC33{ m Fi[5]} FC12} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp}


 S1319C1 ::~S1319C1(){ note_dtor("S1319C1", this);}
void  S1319C1 ::v1(){vfunc_called(this, "_ZN7S1319C12v1Ev");}
void  S1319C1 ::v2(){vfunc_called(this, "_ZN7S1319C12v2Ev");}
void  S1319C1 ::v3(){vfunc_called(this, "_ZN7S1319C12v3Ev");}
void  S1319C1 ::v4(){vfunc_called(this, "_ZN7S1319C12v4Ev");}
void  S1319C1 ::v5(){vfunc_called(this, "_ZN7S1319C12v5Ev");}
void  S1319C1 ::v6(){vfunc_called(this, "_ZN7S1319C12v6Ev");}
void  S1319C1 ::v7(){vfunc_called(this, "_ZN7S1319C12v7Ev");}
void  S1319C1 ::v8(){vfunc_called(this, "_ZN7S1319C12v8Ev");}
void  S1319C1 ::v9(){vfunc_called(this, "_ZN7S1319C12v9Ev");}
void  S1319C1 ::v10(){vfunc_called(this, "_ZN7S1319C13v10Ev");}
void  S1319C1 ::v11(){vfunc_called(this, "_ZN7S1319C13v11Ev");}
void  S1319C1 ::v12(){vfunc_called(this, "_ZN7S1319C13v12Ev");}
void  S1319C1 ::v13(){vfunc_called(this, "_ZN7S1319C13v13Ev");}
void  S1319C1 ::v14(){vfunc_called(this, "_ZN7S1319C13v14Ev");}
void  S1319C1 ::v15(){vfunc_called(this, "_ZN7S1319C13v15Ev");}
S1319C1 ::S1319C1(){ note_ctor("S1319C1", this);} // tgen

static void Test_S1319C1()
{
  extern Class_Descriptor cd_S1319C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3085,5090)];
    init_test(&cd_S1319C1, buf);
    S1319C1 *dp, &lv = *(dp=new (buf) S1319C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24672,20356), "sizeof(S1319C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1319C1)");
    check_base_class_offset(lv, (S1319C4*)(S1319C3*)(S1319C2*), 0, "S1319C1");
    check_base_class_offset(lv, (S1319C6*)(S1319C3*)(S1319C2*), ABISELECT(96,60), "S1319C1");
    check_base_class_offset(lv, (S1319C3*)(S1319C2*), 0, "S1319C1");
    check_base_class_offset(lv, (S1319C7*)(S1319C2*), ABISELECT(144,96), "S1319C1");
    check_base_class_offset(lv, (S1319C2*), 0, "S1319C1");
    check_field_offset(lv, s1319c1f0, ABISELECT(24664,20352), "S1319C1.s1319c1f0");
    test_class_info(&lv, &cd_S1319C1);
    dp->~S1319C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1319C1(Test_S1319C1, "S1319C1", ABISELECT(24672,20356));

#else // __cplusplus

extern void _ZN7S1319C1C1Ev();
extern void _ZN7S1319C1D1Ev();
Name_Map name_map_S1319C1[] = {
  NSPAIR(_ZN7S1319C1C1Ev),
  NSPAIR(_ZN7S1319C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1319C4;
extern VTBL_ENTRY _ZTI7S1319C4[];
extern  VTBL_ENTRY _ZTV7S1319C4[];
extern Class_Descriptor cd_S1319C6;
extern VTBL_ENTRY _ZTI7S1319C6[];
extern  VTBL_ENTRY _ZTV7S1319C6[];
extern Class_Descriptor cd_S1319C3;
extern VTBL_ENTRY _ZTI7S1319C3[];
extern  VTBL_ENTRY _ZTV7S1319C3[];
extern Class_Descriptor cd_S1319C7;
extern VTBL_ENTRY _ZTI7S1319C7[];
extern  VTBL_ENTRY _ZTV7S1319C7[];
extern Class_Descriptor cd_S1319C2;
extern VTBL_ENTRY _ZTI7S1319C2[];
extern  VTBL_ENTRY _ZTV7S1319C2[];
static Base_Class bases_S1319C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1319C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1319C6,    ABISELECT(96,60), //bcp->offset
    110, //bcp->virtual_function_table_offset
    2, //num_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_S1319C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1319C7,    ABISELECT(144,96), //bcp->offset
    113, //bcp->virtual_function_table_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_S1319C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1319C1[];
extern void _ZN7S1319C1D1Ev();
extern void _ZN7S1319C1D0Ev();
extern void _ZN7S1319C43v16Ev();
extern void _ZN7S1319C43v17Ev();
extern void _ZN7S1319C43v18Ev();
extern void _ZN7S1319C43v19Ev();
extern void _ZN7S1319C43v20Ev();
extern void _ZN7S1319C43v21Ev();
extern void _ZN7S1319C43v22Ev();
extern void _ZN7S1319C43v23Ev();
extern void _ZN7S1319C43v24Ev();
extern void _ZN7S1319C43v25Ev();
extern void _ZN7S1319C43v26Ev();
extern void _ZN7S1319C43v27Ev();
extern void _ZN7S1319C43v28Ev();
extern void _ZN7S1319C43v29Ev();
extern void _ZN7S1319C43v30Ev();
extern void _ZN7S1319C43v31Ev();
extern void _ZN7S1319C43v32Ev();
extern void _ZN7S1319C43v33Ev();
extern void _ZN7S1319C43v34Ev();
extern void _ZN7S1319C43v35Ev();
extern void _ZN7S1319C43v36Ev();
extern void _ZN7S1319C43v37Ev();
extern void _ZN7S1319C43v38Ev();
extern void _ZN7S1319C43v39Ev();
extern void _ZN7S1319C43v40Ev();
extern void _ZN7S1319C43v41Ev();
extern void _ZN7S1319C43v42Ev();
extern void _ZN7S1319C43v43Ev();
extern void _ZN7S1319C43v44Ev();
extern void _ZN7S1319C43v45Ev();
extern void _ZN7S1319C43v46Ev();
extern void _ZN7S1319C43v47Ev();
extern void _ZN7S1319C43v48Ev();
extern void _ZN7S1319C43v49Ev();
extern void _ZN7S1319C43v50Ev();
extern void _ZN7S1319C43v51Ev();
extern void _ZN7S1319C43v52Ev();
extern void _ZN7S1319C43v53Ev();
extern void _ZN7S1319C43v54Ev();
extern void _ZN7S1319C43v55Ev();
extern void _ZN7S1319C43v56Ev();
extern void _ZN7S1319C43v57Ev();
extern void _ZN7S1319C43v58Ev();
extern void _ZN7S1319C43v59Ev();
extern void _ZN7S1319C43v60Ev();
extern void _ZN7S1319C43v61Ev();
extern void _ZN7S1319C43v62Ev();
extern void _ZN7S1319C43v63Ev();
extern void _ZN7S1319C43v64Ev();
extern void _ZN7S1319C43v65Ev();
extern void _ZN7S1319C43v66Ev();
extern void _ZN7S1319C43v67Ev();
extern void _ZN7S1319C43v68Ev();
extern void _ZN7S1319C43v69Ev();
extern void _ZN7S1319C43v70Ev();
extern void _ZN7S1319C43v71Ev();
extern void _ZN7S1319C43v72Ev();
extern void _ZN7S1319C43v73Ev();
extern void _ZN7S1319C43v74Ev();
extern void _ZN7S1319C43v75Ev();
extern void _ZN7S1319C43v76Ev();
extern void _ZN7S1319C43v77Ev();
extern void _ZN7S1319C43v78Ev();
extern void _ZN7S1319C43v79Ev();
extern void _ZN7S1319C33v81Ev();
extern void _ZN7S1319C33v82Ev();
extern void _ZN7S1319C33v83Ev();
extern void _ZN7S1319C33v84Ev();
extern void _ZN7S1319C23v88Ev();
extern void _ZN7S1319C23v89Ev();
extern void _ZN7S1319C23v90Ev();
extern void _ZN7S1319C23v91Ev();
extern void _ZN7S1319C23v92Ev();
extern void _ZN7S1319C23v93Ev();
extern void _ZN7S1319C23v94Ev();
extern void _ZN7S1319C23v95Ev();
extern void _ZN7S1319C23v96Ev();
extern void _ZN7S1319C23v97Ev();
extern void _ZN7S1319C23v98Ev();
extern void _ZN7S1319C23v99Ev();
extern void _ZN7S1319C24v100Ev();
extern void _ZN7S1319C24v101Ev();
extern void _ZN7S1319C24v102Ev();
extern void _ZN7S1319C24v103Ev();
extern void _ZN7S1319C24v104Ev();
extern void _ZN7S1319C24v105Ev();
extern void _ZN7S1319C24v106Ev();
extern void _ZN7S1319C24v107Ev();
extern void _ZN7S1319C24v108Ev();
extern void _ZN7S1319C24v109Ev();
extern void _ZN7S1319C24v110Ev();
extern void _ZN7S1319C12v1Ev();
extern void _ZN7S1319C12v2Ev();
extern void _ZN7S1319C12v3Ev();
extern void _ZN7S1319C12v4Ev();
extern void _ZN7S1319C12v5Ev();
extern void _ZN7S1319C12v6Ev();
extern void _ZN7S1319C12v7Ev();
extern void _ZN7S1319C12v8Ev();
extern void _ZN7S1319C12v9Ev();
extern void _ZN7S1319C13v10Ev();
extern void _ZN7S1319C13v11Ev();
extern void _ZN7S1319C13v12Ev();
extern void _ZN7S1319C13v13Ev();
extern void _ZN7S1319C13v14Ev();
extern void _ZN7S1319C13v15Ev();
extern void _ZN7S1319C63v80Ev();
extern void ABISELECT(_ZThn144_N7S1319C1D1Ev,_ZThn96_N7S1319C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S1319C1D0Ev,_ZThn96_N7S1319C1D0Ev)();
extern void _ZN7S1319C73v85Ev();
extern void _ZN7S1319C73v86Ev();
extern void _ZN7S1319C73v87Ev();
static  VTBL_ENTRY vtc_S1319C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1319C1[0]),
  (VTBL_ENTRY)&_ZN7S1319C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1319C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1319C43v79Ev,
  (VTBL_ENTRY)&_ZN7S1319C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1319C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1319C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1319C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1319C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1319C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1319C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1319C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1319C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1319C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1319C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1319C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1319C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1319C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1319C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1319C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1319C13v11Ev,
  (VTBL_ENTRY)&_ZN7S1319C13v12Ev,
  (VTBL_ENTRY)&_ZN7S1319C13v13Ev,
  (VTBL_ENTRY)&_ZN7S1319C13v14Ev,
  (VTBL_ENTRY)&_ZN7S1319C13v15Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1319C1[0]),
  (VTBL_ENTRY)&_ZN7S1319C63v80Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI7S1319C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S1319C1D1Ev,_ZThn96_N7S1319C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S1319C1D0Ev,_ZThn96_N7S1319C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1319C73v85Ev,
  (VTBL_ENTRY)&_ZN7S1319C73v86Ev,
  (VTBL_ENTRY)&_ZN7S1319C73v87Ev,
};
extern VTBL_ENTRY _ZTI7S1319C1[];
extern  VTBL_ENTRY _ZTV7S1319C1[];
Class_Descriptor cd_S1319C1 = {  "S1319C1", // class name
  bases_S1319C1, 5,
  &(vtc_S1319C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24672,20356), // object size
  NSPAIRA(_ZTI7S1319C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1319C1),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  S1284C4  {
  int s1284c4f0;
  __tsi64 s1284c4f1;
  void *s1284c4f2[4];
  int s1284c4f3[2];
  void *s1284c4f4;
  ::S1566C14_nt s1284c4f5;
  void *s1284c4f6[2];
  virtual  ~S1284C4(); // _ZN7S1284C4D1Ev
  virtual void  v10(); // _ZN7S1284C43v10Ev
  virtual void  v11(); // _ZN7S1284C43v11Ev
  virtual void  v12(); // _ZN7S1284C43v12Ev
  virtual void  v13(); // _ZN7S1284C43v13Ev
  virtual void  v14(); // _ZN7S1284C43v14Ev
  virtual void  v15(); // _ZN7S1284C43v15Ev
  virtual void  v16(); // _ZN7S1284C43v16Ev
  virtual void  v17(); // _ZN7S1284C43v17Ev
  virtual void  v18(); // _ZN7S1284C43v18Ev
  virtual void  v19(); // _ZN7S1284C43v19Ev
  virtual void  v20(); // _ZN7S1284C43v20Ev
  virtual void  v21(); // _ZN7S1284C43v21Ev
  virtual void  v22(); // _ZN7S1284C43v22Ev
  virtual void  v23(); // _ZN7S1284C43v23Ev
  virtual void  v24(); // _ZN7S1284C43v24Ev
  virtual void  v25(); // _ZN7S1284C43v25Ev
  virtual void  v26(); // _ZN7S1284C43v26Ev
  virtual void  v27(); // _ZN7S1284C43v27Ev
  virtual void  v28(); // _ZN7S1284C43v28Ev
  virtual void  v29(); // _ZN7S1284C43v29Ev
  virtual void  v30(); // _ZN7S1284C43v30Ev
  virtual void  v31(); // _ZN7S1284C43v31Ev
  virtual void  v32(); // _ZN7S1284C43v32Ev
  virtual void  v33(); // _ZN7S1284C43v33Ev
  virtual void  v34(); // _ZN7S1284C43v34Ev
  virtual void  v35(); // _ZN7S1284C43v35Ev
  virtual void  v36(); // _ZN7S1284C43v36Ev
  virtual void  v37(); // _ZN7S1284C43v37Ev
  virtual void  v38(); // _ZN7S1284C43v38Ev
  virtual void  v39(); // _ZN7S1284C43v39Ev
  virtual void  v40(); // _ZN7S1284C43v40Ev
  virtual void  v41(); // _ZN7S1284C43v41Ev
  virtual void  v42(); // _ZN7S1284C43v42Ev
  virtual void  v43(); // _ZN7S1284C43v43Ev
  virtual void  v44(); // _ZN7S1284C43v44Ev
  virtual void  v45(); // _ZN7S1284C43v45Ev
  virtual void  v46(); // _ZN7S1284C43v46Ev
  virtual void  v47(); // _ZN7S1284C43v47Ev
  virtual void  v48(); // _ZN7S1284C43v48Ev
  virtual void  v49(); // _ZN7S1284C43v49Ev
  virtual void  v50(); // _ZN7S1284C43v50Ev
  virtual void  v51(); // _ZN7S1284C43v51Ev
  virtual void  v52(); // _ZN7S1284C43v52Ev
  virtual void  v53(); // _ZN7S1284C43v53Ev
  virtual void  v54(); // _ZN7S1284C43v54Ev
  virtual void  v55(); // _ZN7S1284C43v55Ev
  virtual void  v56(); // _ZN7S1284C43v56Ev
  virtual void  v57(); // _ZN7S1284C43v57Ev
  virtual void  v58(); // _ZN7S1284C43v58Ev
  virtual void  v59(); // _ZN7S1284C43v59Ev
  virtual void  v60(); // _ZN7S1284C43v60Ev
  virtual void  v61(); // _ZN7S1284C43v61Ev
  virtual void  v62(); // _ZN7S1284C43v62Ev
  virtual void  v63(); // _ZN7S1284C43v63Ev
  virtual void  v64(); // _ZN7S1284C43v64Ev
  virtual void  v65(); // _ZN7S1284C43v65Ev
  virtual void  v66(); // _ZN7S1284C43v66Ev
  virtual void  v67(); // _ZN7S1284C43v67Ev
  virtual void  v68(); // _ZN7S1284C43v68Ev
  virtual void  v69(); // _ZN7S1284C43v69Ev
  virtual void  v70(); // _ZN7S1284C43v70Ev
  virtual void  v71(); // _ZN7S1284C43v71Ev
  virtual void  v72(); // _ZN7S1284C43v72Ev
  virtual void  v73(); // _ZN7S1284C43v73Ev
  S1284C4(); // tgen
};
//SIG(-1 S1284C4) 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]}


 S1284C4 ::~S1284C4(){ note_dtor("S1284C4", this);}
void  S1284C4 ::v10(){vfunc_called(this, "_ZN7S1284C43v10Ev");}
void  S1284C4 ::v11(){vfunc_called(this, "_ZN7S1284C43v11Ev");}
void  S1284C4 ::v12(){vfunc_called(this, "_ZN7S1284C43v12Ev");}
void  S1284C4 ::v13(){vfunc_called(this, "_ZN7S1284C43v13Ev");}
void  S1284C4 ::v14(){vfunc_called(this, "_ZN7S1284C43v14Ev");}
void  S1284C4 ::v15(){vfunc_called(this, "_ZN7S1284C43v15Ev");}
void  S1284C4 ::v16(){vfunc_called(this, "_ZN7S1284C43v16Ev");}
void  S1284C4 ::v17(){vfunc_called(this, "_ZN7S1284C43v17Ev");}
void  S1284C4 ::v18(){vfunc_called(this, "_ZN7S1284C43v18Ev");}
void  S1284C4 ::v19(){vfunc_called(this, "_ZN7S1284C43v19Ev");}
void  S1284C4 ::v20(){vfunc_called(this, "_ZN7S1284C43v20Ev");}
void  S1284C4 ::v21(){vfunc_called(this, "_ZN7S1284C43v21Ev");}
void  S1284C4 ::v22(){vfunc_called(this, "_ZN7S1284C43v22Ev");}
void  S1284C4 ::v23(){vfunc_called(this, "_ZN7S1284C43v23Ev");}
void  S1284C4 ::v24(){vfunc_called(this, "_ZN7S1284C43v24Ev");}
void  S1284C4 ::v25(){vfunc_called(this, "_ZN7S1284C43v25Ev");}
void  S1284C4 ::v26(){vfunc_called(this, "_ZN7S1284C43v26Ev");}
void  S1284C4 ::v27(){vfunc_called(this, "_ZN7S1284C43v27Ev");}
void  S1284C4 ::v28(){vfunc_called(this, "_ZN7S1284C43v28Ev");}
void  S1284C4 ::v29(){vfunc_called(this, "_ZN7S1284C43v29Ev");}
void  S1284C4 ::v30(){vfunc_called(this, "_ZN7S1284C43v30Ev");}
void  S1284C4 ::v31(){vfunc_called(this, "_ZN7S1284C43v31Ev");}
void  S1284C4 ::v32(){vfunc_called(this, "_ZN7S1284C43v32Ev");}
void  S1284C4 ::v33(){vfunc_called(this, "_ZN7S1284C43v33Ev");}
void  S1284C4 ::v34(){vfunc_called(this, "_ZN7S1284C43v34Ev");}
void  S1284C4 ::v35(){vfunc_called(this, "_ZN7S1284C43v35Ev");}
void  S1284C4 ::v36(){vfunc_called(this, "_ZN7S1284C43v36Ev");}
void  S1284C4 ::v37(){vfunc_called(this, "_ZN7S1284C43v37Ev");}
void  S1284C4 ::v38(){vfunc_called(this, "_ZN7S1284C43v38Ev");}
void  S1284C4 ::v39(){vfunc_called(this, "_ZN7S1284C43v39Ev");}
void  S1284C4 ::v40(){vfunc_called(this, "_ZN7S1284C43v40Ev");}
void  S1284C4 ::v41(){vfunc_called(this, "_ZN7S1284C43v41Ev");}
void  S1284C4 ::v42(){vfunc_called(this, "_ZN7S1284C43v42Ev");}
void  S1284C4 ::v43(){vfunc_called(this, "_ZN7S1284C43v43Ev");}
void  S1284C4 ::v44(){vfunc_called(this, "_ZN7S1284C43v44Ev");}
void  S1284C4 ::v45(){vfunc_called(this, "_ZN7S1284C43v45Ev");}
void  S1284C4 ::v46(){vfunc_called(this, "_ZN7S1284C43v46Ev");}
void  S1284C4 ::v47(){vfunc_called(this, "_ZN7S1284C43v47Ev");}
void  S1284C4 ::v48(){vfunc_called(this, "_ZN7S1284C43v48Ev");}
void  S1284C4 ::v49(){vfunc_called(this, "_ZN7S1284C43v49Ev");}
void  S1284C4 ::v50(){vfunc_called(this, "_ZN7S1284C43v50Ev");}
void  S1284C4 ::v51(){vfunc_called(this, "_ZN7S1284C43v51Ev");}
void  S1284C4 ::v52(){vfunc_called(this, "_ZN7S1284C43v52Ev");}
void  S1284C4 ::v53(){vfunc_called(this, "_ZN7S1284C43v53Ev");}
void  S1284C4 ::v54(){vfunc_called(this, "_ZN7S1284C43v54Ev");}
void  S1284C4 ::v55(){vfunc_called(this, "_ZN7S1284C43v55Ev");}
void  S1284C4 ::v56(){vfunc_called(this, "_ZN7S1284C43v56Ev");}
void  S1284C4 ::v57(){vfunc_called(this, "_ZN7S1284C43v57Ev");}
void  S1284C4 ::v58(){vfunc_called(this, "_ZN7S1284C43v58Ev");}
void  S1284C4 ::v59(){vfunc_called(this, "_ZN7S1284C43v59Ev");}
void  S1284C4 ::v60(){vfunc_called(this, "_ZN7S1284C43v60Ev");}
void  S1284C4 ::v61(){vfunc_called(this, "_ZN7S1284C43v61Ev");}
void  S1284C4 ::v62(){vfunc_called(this, "_ZN7S1284C43v62Ev");}
void  S1284C4 ::v63(){vfunc_called(this, "_ZN7S1284C43v63Ev");}
void  S1284C4 ::v64(){vfunc_called(this, "_ZN7S1284C43v64Ev");}
void  S1284C4 ::v65(){vfunc_called(this, "_ZN7S1284C43v65Ev");}
void  S1284C4 ::v66(){vfunc_called(this, "_ZN7S1284C43v66Ev");}
void  S1284C4 ::v67(){vfunc_called(this, "_ZN7S1284C43v67Ev");}
void  S1284C4 ::v68(){vfunc_called(this, "_ZN7S1284C43v68Ev");}
void  S1284C4 ::v69(){vfunc_called(this, "_ZN7S1284C43v69Ev");}
void  S1284C4 ::v70(){vfunc_called(this, "_ZN7S1284C43v70Ev");}
void  S1284C4 ::v71(){vfunc_called(this, "_ZN7S1284C43v71Ev");}
void  S1284C4 ::v72(){vfunc_called(this, "_ZN7S1284C43v72Ev");}
void  S1284C4 ::v73(){vfunc_called(this, "_ZN7S1284C43v73Ev");}
S1284C4 ::S1284C4(){ note_ctor("S1284C4", this);} // tgen

static void Test_S1284C4()
{
  extern Class_Descriptor cd_S1284C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1284C4, buf);
    S1284C4 *dp, &lv = *(dp=new (buf) S1284C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1284C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1284C4)");
    check_field_offset(lv, s1284c4f0, ABISELECT(8,4), "S1284C4.s1284c4f0");
    check_field_offset(lv, s1284c4f1, ABISELECT(16,8), "S1284C4.s1284c4f1");
    check_field_offset(lv, s1284c4f2, ABISELECT(24,16), "S1284C4.s1284c4f2");
    check_field_offset(lv, s1284c4f3, ABISELECT(56,32), "S1284C4.s1284c4f3");
    check_field_offset(lv, s1284c4f4, ABISELECT(64,40), "S1284C4.s1284c4f4");
    check_field_offset(lv, s1284c4f5, ABISELECT(72,44), "S1284C4.s1284c4f5");
    check_field_offset(lv, s1284c4f6, ABISELECT(80,52), "S1284C4.s1284c4f6");
    test_class_info(&lv, &cd_S1284C4);
    dp->~S1284C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1284C4(Test_S1284C4, "S1284C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1284C4C1Ev();
extern void _ZN7S1284C4D1Ev();
Name_Map name_map_S1284C4[] = {
  NSPAIR(_ZN7S1284C4C1Ev),
  NSPAIR(_ZN7S1284C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1284C4[];
extern void _ZN7S1284C4D1Ev();
extern void _ZN7S1284C4D0Ev();
extern void _ZN7S1284C43v10Ev();
extern void _ZN7S1284C43v11Ev();
extern void _ZN7S1284C43v12Ev();
extern void _ZN7S1284C43v13Ev();
extern void _ZN7S1284C43v14Ev();
extern void _ZN7S1284C43v15Ev();
extern void _ZN7S1284C43v16Ev();
extern void _ZN7S1284C43v17Ev();
extern void _ZN7S1284C43v18Ev();
extern void _ZN7S1284C43v19Ev();
extern void _ZN7S1284C43v20Ev();
extern void _ZN7S1284C43v21Ev();
extern void _ZN7S1284C43v22Ev();
extern void _ZN7S1284C43v23Ev();
extern void _ZN7S1284C43v24Ev();
extern void _ZN7S1284C43v25Ev();
extern void _ZN7S1284C43v26Ev();
extern void _ZN7S1284C43v27Ev();
extern void _ZN7S1284C43v28Ev();
extern void _ZN7S1284C43v29Ev();
extern void _ZN7S1284C43v30Ev();
extern void _ZN7S1284C43v31Ev();
extern void _ZN7S1284C43v32Ev();
extern void _ZN7S1284C43v33Ev();
extern void _ZN7S1284C43v34Ev();
extern void _ZN7S1284C43v35Ev();
extern void _ZN7S1284C43v36Ev();
extern void _ZN7S1284C43v37Ev();
extern void _ZN7S1284C43v38Ev();
extern void _ZN7S1284C43v39Ev();
extern void _ZN7S1284C43v40Ev();
extern void _ZN7S1284C43v41Ev();
extern void _ZN7S1284C43v42Ev();
extern void _ZN7S1284C43v43Ev();
extern void _ZN7S1284C43v44Ev();
extern void _ZN7S1284C43v45Ev();
extern void _ZN7S1284C43v46Ev();
extern void _ZN7S1284C43v47Ev();
extern void _ZN7S1284C43v48Ev();
extern void _ZN7S1284C43v49Ev();
extern void _ZN7S1284C43v50Ev();
extern void _ZN7S1284C43v51Ev();
extern void _ZN7S1284C43v52Ev();
extern void _ZN7S1284C43v53Ev();
extern void _ZN7S1284C43v54Ev();
extern void _ZN7S1284C43v55Ev();
extern void _ZN7S1284C43v56Ev();
extern void _ZN7S1284C43v57Ev();
extern void _ZN7S1284C43v58Ev();
extern void _ZN7S1284C43v59Ev();
extern void _ZN7S1284C43v60Ev();
extern void _ZN7S1284C43v61Ev();
extern void _ZN7S1284C43v62Ev();
extern void _ZN7S1284C43v63Ev();
extern void _ZN7S1284C43v64Ev();
extern void _ZN7S1284C43v65Ev();
extern void _ZN7S1284C43v66Ev();
extern void _ZN7S1284C43v67Ev();
extern void _ZN7S1284C43v68Ev();
extern void _ZN7S1284C43v69Ev();
extern void _ZN7S1284C43v70Ev();
extern void _ZN7S1284C43v71Ev();
extern void _ZN7S1284C43v72Ev();
extern void _ZN7S1284C43v73Ev();
static  VTBL_ENTRY vtc_S1284C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1284C4[0]),
  (VTBL_ENTRY)&_ZN7S1284C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1284C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v73Ev,
};
extern VTBL_ENTRY _ZTI7S1284C4[];
extern  VTBL_ENTRY _ZTV7S1284C4[];
Class_Descriptor cd_S1284C4 = {  "S1284C4", // class name
  0,0,//no base classes
  &(vtc_S1284C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1284C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1284C4),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  S1284C6  {
  virtual void  v74(); // _ZN7S1284C63v74Ev
  ~S1284C6(); // tgen
  S1284C6(); // tgen
};
//SIG(-1 S1284C6) C1{ v1}


void  S1284C6 ::v74(){vfunc_called(this, "_ZN7S1284C63v74Ev");}
S1284C6 ::~S1284C6(){ note_dtor("S1284C6", this);} // tgen
S1284C6 ::S1284C6(){ note_ctor("S1284C6", this);} // tgen

static void Test_S1284C6()
{
  extern Class_Descriptor cd_S1284C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1284C6, buf);
    S1284C6 *dp, &lv = *(dp=new (buf) S1284C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1284C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1284C6)");
    test_class_info(&lv, &cd_S1284C6);
    dp->~S1284C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1284C6(Test_S1284C6, "S1284C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1284C6C1Ev();
extern void _ZN7S1284C6D1Ev();
Name_Map name_map_S1284C6[] = {
  NSPAIR(_ZN7S1284C6C1Ev),
  NSPAIR(_ZN7S1284C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1284C6[];
extern void _ZN7S1284C63v74Ev();
static  VTBL_ENTRY vtc_S1284C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1284C6[0]),
  (VTBL_ENTRY)&_ZN7S1284C63v74Ev,
};
extern VTBL_ENTRY _ZTI7S1284C6[];
extern  VTBL_ENTRY _ZTV7S1284C6[];
Class_Descriptor cd_S1284C6 = {  "S1284C6", // class name
  0,0,//no base classes
  &(vtc_S1284C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1284C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1284C6),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  S1284C3  : S1284C4 , S1284C6 {
  void *s1284c3f0;
  int s1284c3f1[7];
  virtual  ~S1284C3(); // _ZN7S1284C3D1Ev
  virtual void  v75(); // _ZN7S1284C33v75Ev
  virtual void  v76(); // _ZN7S1284C33v76Ev
  virtual void  v77(); // _ZN7S1284C33v77Ev
  virtual void  v78(); // _ZN7S1284C33v78Ev
  S1284C3(); // tgen
};
//SIG(-1 S1284C3) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} BC4{ v69} vd v1 v2 v3 v4 Fp Fi[7]}


 S1284C3 ::~S1284C3(){ note_dtor("S1284C3", this);}
void  S1284C3 ::v75(){vfunc_called(this, "_ZN7S1284C33v75Ev");}
void  S1284C3 ::v76(){vfunc_called(this, "_ZN7S1284C33v76Ev");}
void  S1284C3 ::v77(){vfunc_called(this, "_ZN7S1284C33v77Ev");}
void  S1284C3 ::v78(){vfunc_called(this, "_ZN7S1284C33v78Ev");}
S1284C3 ::S1284C3(){ note_ctor("S1284C3", this);} // tgen

static void Test_S1284C3()
{
  extern Class_Descriptor cd_S1284C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,25)];
    init_test(&cd_S1284C3, buf);
    S1284C3 *dp, &lv = *(dp=new (buf) S1284C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S1284C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1284C3)");
    check_base_class_offset(lv, (S1284C4*), 0, "S1284C3");
    check_base_class_offset(lv, (S1284C6*), ABISELECT(96,60), "S1284C3");
    check_field_offset(lv, s1284c3f0, ABISELECT(104,64), "S1284C3.s1284c3f0");
    check_field_offset(lv, s1284c3f1, ABISELECT(112,68), "S1284C3.s1284c3f1");
    test_class_info(&lv, &cd_S1284C3);
    dp->~S1284C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1284C3(Test_S1284C3, "S1284C3", ABISELECT(144,96));

#else // __cplusplus

extern void _ZN7S1284C3C1Ev();
extern void _ZN7S1284C3D1Ev();
Name_Map name_map_S1284C3[] = {
  NSPAIR(_ZN7S1284C3C1Ev),
  NSPAIR(_ZN7S1284C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1284C4;
extern VTBL_ENTRY _ZTI7S1284C4[];
extern  VTBL_ENTRY _ZTV7S1284C4[];
extern Class_Descriptor cd_S1284C6;
extern VTBL_ENTRY _ZTI7S1284C6[];
extern  VTBL_ENTRY _ZTV7S1284C6[];
static Base_Class bases_S1284C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1284C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S1284C6,    ABISELECT(96,60), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1284C3[];
extern void _ZN7S1284C3D1Ev();
extern void _ZN7S1284C3D0Ev();
extern void _ZN7S1284C43v10Ev();
extern void _ZN7S1284C43v11Ev();
extern void _ZN7S1284C43v12Ev();
extern void _ZN7S1284C43v13Ev();
extern void _ZN7S1284C43v14Ev();
extern void _ZN7S1284C43v15Ev();
extern void _ZN7S1284C43v16Ev();
extern void _ZN7S1284C43v17Ev();
extern void _ZN7S1284C43v18Ev();
extern void _ZN7S1284C43v19Ev();
extern void _ZN7S1284C43v20Ev();
extern void _ZN7S1284C43v21Ev();
extern void _ZN7S1284C43v22Ev();
extern void _ZN7S1284C43v23Ev();
extern void _ZN7S1284C43v24Ev();
extern void _ZN7S1284C43v25Ev();
extern void _ZN7S1284C43v26Ev();
extern void _ZN7S1284C43v27Ev();
extern void _ZN7S1284C43v28Ev();
extern void _ZN7S1284C43v29Ev();
extern void _ZN7S1284C43v30Ev();
extern void _ZN7S1284C43v31Ev();
extern void _ZN7S1284C43v32Ev();
extern void _ZN7S1284C43v33Ev();
extern void _ZN7S1284C43v34Ev();
extern void _ZN7S1284C43v35Ev();
extern void _ZN7S1284C43v36Ev();
extern void _ZN7S1284C43v37Ev();
extern void _ZN7S1284C43v38Ev();
extern void _ZN7S1284C43v39Ev();
extern void _ZN7S1284C43v40Ev();
extern void _ZN7S1284C43v41Ev();
extern void _ZN7S1284C43v42Ev();
extern void _ZN7S1284C43v43Ev();
extern void _ZN7S1284C43v44Ev();
extern void _ZN7S1284C43v45Ev();
extern void _ZN7S1284C43v46Ev();
extern void _ZN7S1284C43v47Ev();
extern void _ZN7S1284C43v48Ev();
extern void _ZN7S1284C43v49Ev();
extern void _ZN7S1284C43v50Ev();
extern void _ZN7S1284C43v51Ev();
extern void _ZN7S1284C43v52Ev();
extern void _ZN7S1284C43v53Ev();
extern void _ZN7S1284C43v54Ev();
extern void _ZN7S1284C43v55Ev();
extern void _ZN7S1284C43v56Ev();
extern void _ZN7S1284C43v57Ev();
extern void _ZN7S1284C43v58Ev();
extern void _ZN7S1284C43v59Ev();
extern void _ZN7S1284C43v60Ev();
extern void _ZN7S1284C43v61Ev();
extern void _ZN7S1284C43v62Ev();
extern void _ZN7S1284C43v63Ev();
extern void _ZN7S1284C43v64Ev();
extern void _ZN7S1284C43v65Ev();
extern void _ZN7S1284C43v66Ev();
extern void _ZN7S1284C43v67Ev();
extern void _ZN7S1284C43v68Ev();
extern void _ZN7S1284C43v69Ev();
extern void _ZN7S1284C43v70Ev();
extern void _ZN7S1284C43v71Ev();
extern void _ZN7S1284C43v72Ev();
extern void _ZN7S1284C43v73Ev();
extern void _ZN7S1284C33v75Ev();
extern void _ZN7S1284C33v76Ev();
extern void _ZN7S1284C33v77Ev();
extern void _ZN7S1284C33v78Ev();
extern void _ZN7S1284C63v74Ev();
static  VTBL_ENTRY vtc_S1284C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1284C3[0]),
  (VTBL_ENTRY)&_ZN7S1284C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1284C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1284C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1284C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1284C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1284C33v78Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1284C3[0]),
  (VTBL_ENTRY)&_ZN7S1284C63v74Ev,
};
extern VTBL_ENTRY _ZTI7S1284C3[];
extern  VTBL_ENTRY _ZTV7S1284C3[];
Class_Descriptor cd_S1284C3 = {  "S1284C3", // class name
  bases_S1284C3, 2,
  &(vtc_S1284C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,96), // object size
  NSPAIRA(_ZTI7S1284C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1284C3),75, //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  S1284C7  {
  virtual  ~S1284C7(); // _ZN7S1284C7D1Ev
  virtual void  v79(); // _ZN7S1284C73v79Ev
  virtual void  v80(); // _ZN7S1284C73v80Ev
  virtual void  v81(); // _ZN7S1284C73v81Ev
  S1284C7(); // tgen
};
//SIG(-1 S1284C7) C1{ vd v1 v2 v3}


 S1284C7 ::~S1284C7(){ note_dtor("S1284C7", this);}
void  S1284C7 ::v79(){vfunc_called(this, "_ZN7S1284C73v79Ev");}
void  S1284C7 ::v80(){vfunc_called(this, "_ZN7S1284C73v80Ev");}
void  S1284C7 ::v81(){vfunc_called(this, "_ZN7S1284C73v81Ev");}
S1284C7 ::S1284C7(){ note_ctor("S1284C7", this);} // tgen

static void Test_S1284C7()
{
  extern Class_Descriptor cd_S1284C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1284C7, buf);
    S1284C7 *dp, &lv = *(dp=new (buf) S1284C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1284C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1284C7)");
    test_class_info(&lv, &cd_S1284C7);
    dp->~S1284C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1284C7(Test_S1284C7, "S1284C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1284C7C1Ev();
extern void _ZN7S1284C7D1Ev();
Name_Map name_map_S1284C7[] = {
  NSPAIR(_ZN7S1284C7C1Ev),
  NSPAIR(_ZN7S1284C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1284C7[];
extern void _ZN7S1284C7D1Ev();
extern void _ZN7S1284C7D0Ev();
extern void _ZN7S1284C73v79Ev();
extern void _ZN7S1284C73v80Ev();
extern void _ZN7S1284C73v81Ev();
static  VTBL_ENTRY vtc_S1284C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1284C7[0]),
  (VTBL_ENTRY)&_ZN7S1284C7D1Ev,
  (VTBL_ENTRY)&_ZN7S1284C7D0Ev,
  (VTBL_ENTRY)&_ZN7S1284C73v79Ev,
  (VTBL_ENTRY)&_ZN7S1284C73v80Ev,
  (VTBL_ENTRY)&_ZN7S1284C73v81Ev,
};
extern VTBL_ENTRY _ZTI7S1284C7[];
extern  VTBL_ENTRY _ZTV7S1284C7[];
Class_Descriptor cd_S1284C7 = {  "S1284C7", // class name
  0,0,//no base classes
  &(vtc_S1284C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1284C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1284C7),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  S1284C10  : S1537C8_nt {
};
//SIG(-1 S1284C10) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1284C10()
{
  extern Class_Descriptor cd_S1284C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1284C10, buf);
    S1284C10 &lv = *(new (buf) S1284C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1284C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1284C10)");
    check_base_class_offset(lv, (S1537C8_nt*), 0, "S1284C10");
    test_class_info(&lv, &cd_S1284C10);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1284C10(Test_S1284C10, "S1284C10", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
static Base_Class bases_S1284C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1284C10 = {  "S1284C10", // class name
  bases_S1284C10, 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  S1284C9  : S1284C10 {
};
//SIG(-1 S1284C9) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1284C9()
{
  extern Class_Descriptor cd_S1284C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1284C9, buf);
    S1284C9 &lv = *(new (buf) S1284C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1284C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1284C9)");
    check_base_class_offset(lv, (S1537C8_nt*)(S1284C10*), 0, "S1284C9");
    check_base_class_offset(lv, (S1284C10*), 0, "S1284C9");
    test_class_info(&lv, &cd_S1284C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1284C9(Test_S1284C9, "S1284C9", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
extern Class_Descriptor cd_S1284C10;
static Base_Class bases_S1284C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1284C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1284C9 = {  "S1284C9", // class name
  bases_S1284C9, 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  S1284C17  {
  int s1284c17f0[28];
  virtual  ~S1284C17(); // _ZN8S1284C17D1Ev
  virtual void  v107(); // _ZN8S1284C174v107Ev
  virtual void  v108(); // _ZN8S1284C174v108Ev
  virtual void  v109(); // _ZN8S1284C174v109Ev
  virtual void  v110(); // _ZN8S1284C174v110Ev
  virtual void  v111(); // _ZN8S1284C174v111Ev
  virtual void  v112(); // _ZN8S1284C174v112Ev
  virtual void  v113(); // _ZN8S1284C174v113Ev
  virtual void  v114(); // _ZN8S1284C174v114Ev
  virtual void  v115(); // _ZN8S1284C174v115Ev
  virtual void  v116(); // _ZN8S1284C174v116Ev
  virtual void  v117(); // _ZN8S1284C174v117Ev
  virtual void  v118(); // _ZN8S1284C174v118Ev
  virtual void  v119(); // _ZN8S1284C174v119Ev
  virtual void  v120(); // _ZN8S1284C174v120Ev
  virtual void  v121(); // _ZN8S1284C174v121Ev
  virtual void  v122(); // _ZN8S1284C174v122Ev
  virtual void  v123(); // _ZN8S1284C174v123Ev
  virtual void  v124(); // _ZN8S1284C174v124Ev
  virtual void  v125(); // _ZN8S1284C174v125Ev
  virtual void  v126(); // _ZN8S1284C174v126Ev
  virtual void  v127(); // _ZN8S1284C174v127Ev
  virtual void  v128(); // _ZN8S1284C174v128Ev
  virtual void  v129(); // _ZN8S1284C174v129Ev
  virtual void  v130(); // _ZN8S1284C174v130Ev
  virtual void  v131(); // _ZN8S1284C174v131Ev
  S1284C17(); // tgen
};
//SIG(-1 S1284C17) 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 Fi[28]}


 S1284C17 ::~S1284C17(){ note_dtor("S1284C17", this);}
void  S1284C17 ::v107(){vfunc_called(this, "_ZN8S1284C174v107Ev");}
void  S1284C17 ::v108(){vfunc_called(this, "_ZN8S1284C174v108Ev");}
void  S1284C17 ::v109(){vfunc_called(this, "_ZN8S1284C174v109Ev");}
void  S1284C17 ::v110(){vfunc_called(this, "_ZN8S1284C174v110Ev");}
void  S1284C17 ::v111(){vfunc_called(this, "_ZN8S1284C174v111Ev");}
void  S1284C17 ::v112(){vfunc_called(this, "_ZN8S1284C174v112Ev");}
void  S1284C17 ::v113(){vfunc_called(this, "_ZN8S1284C174v113Ev");}
void  S1284C17 ::v114(){vfunc_called(this, "_ZN8S1284C174v114Ev");}
void  S1284C17 ::v115(){vfunc_called(this, "_ZN8S1284C174v115Ev");}
void  S1284C17 ::v116(){vfunc_called(this, "_ZN8S1284C174v116Ev");}
void  S1284C17 ::v117(){vfunc_called(this, "_ZN8S1284C174v117Ev");}
void  S1284C17 ::v118(){vfunc_called(this, "_ZN8S1284C174v118Ev");}
void  S1284C17 ::v119(){vfunc_called(this, "_ZN8S1284C174v119Ev");}
void  S1284C17 ::v120(){vfunc_called(this, "_ZN8S1284C174v120Ev");}
void  S1284C17 ::v121(){vfunc_called(this, "_ZN8S1284C174v121Ev");}
void  S1284C17 ::v122(){vfunc_called(this, "_ZN8S1284C174v122Ev");}
void  S1284C17 ::v123(){vfunc_called(this, "_ZN8S1284C174v123Ev");}
void  S1284C17 ::v124(){vfunc_called(this, "_ZN8S1284C174v124Ev");}
void  S1284C17 ::v125(){vfunc_called(this, "_ZN8S1284C174v125Ev");}
void  S1284C17 ::v126(){vfunc_called(this, "_ZN8S1284C174v126Ev");}
void  S1284C17 ::v127(){vfunc_called(this, "_ZN8S1284C174v127Ev");}
void  S1284C17 ::v128(){vfunc_called(this, "_ZN8S1284C174v128Ev");}
void  S1284C17 ::v129(){vfunc_called(this, "_ZN8S1284C174v129Ev");}
void  S1284C17 ::v130(){vfunc_called(this, "_ZN8S1284C174v130Ev");}
void  S1284C17 ::v131(){vfunc_called(this, "_ZN8S1284C174v131Ev");}
S1284C17 ::S1284C17(){ note_ctor("S1284C17", this);} // tgen

static void Test_S1284C17()
{
  extern Class_Descriptor cd_S1284C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S1284C17, buf);
    S1284C17 *dp, &lv = *(dp=new (buf) S1284C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S1284C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1284C17)");
    check_field_offset(lv, s1284c17f0, ABISELECT(8,4), "S1284C17.s1284c17f0");
    test_class_info(&lv, &cd_S1284C17);
    dp->~S1284C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1284C17(Test_S1284C17, "S1284C17", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN8S1284C17C1Ev();
extern void _ZN8S1284C17D1Ev();
Name_Map name_map_S1284C17[] = {
  NSPAIR(_ZN8S1284C17C1Ev),
  NSPAIR(_ZN8S1284C17D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1284C17[];
extern void _ZN8S1284C17D1Ev();
extern void _ZN8S1284C17D0Ev();
extern void _ZN8S1284C174v107Ev();
extern void _ZN8S1284C174v108Ev();
extern void _ZN8S1284C174v109Ev();
extern void _ZN8S1284C174v110Ev();
extern void _ZN8S1284C174v111Ev();
extern void _ZN8S1284C174v112Ev();
extern void _ZN8S1284C174v113Ev();
extern void _ZN8S1284C174v114Ev();
extern void _ZN8S1284C174v115Ev();
extern void _ZN8S1284C174v116Ev();
extern void _ZN8S1284C174v117Ev();
extern void _ZN8S1284C174v118Ev();
extern void _ZN8S1284C174v119Ev();
extern void _ZN8S1284C174v120Ev();
extern void _ZN8S1284C174v121Ev();
extern void _ZN8S1284C174v122Ev();
extern void _ZN8S1284C174v123Ev();
extern void _ZN8S1284C174v124Ev();
extern void _ZN8S1284C174v125Ev();
extern void _ZN8S1284C174v126Ev();
extern void _ZN8S1284C174v127Ev();
extern void _ZN8S1284C174v128Ev();
extern void _ZN8S1284C174v129Ev();
extern void _ZN8S1284C174v130Ev();
extern void _ZN8S1284C174v131Ev();
static  VTBL_ENTRY vtc_S1284C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1284C17[0]),
  (VTBL_ENTRY)&_ZN8S1284C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1284C17D0Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v107Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v108Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v109Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v110Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v111Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v112Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v113Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v114Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v115Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v116Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v117Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v118Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v119Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v120Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v121Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v122Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v123Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v124Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v125Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v126Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v127Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v128Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v129Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v130Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v131Ev,
};
extern VTBL_ENTRY _ZTI8S1284C17[];
extern  VTBL_ENTRY _ZTV8S1284C17[];
Class_Descriptor cd_S1284C17 = {  "S1284C17", // class name
  0,0,//no base classes
  &(vtc_S1284C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI8S1284C17),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1284C17),29, //virtual function table var
  2, // 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  S1284C16  : S1284C17 {
  ::S1566C29 s1284c16f0;
  int s1284c16f1[2];
  virtual void  v132(); // _ZN8S1284C164v132Ev
  virtual void  v133(); // _ZN8S1284C164v133Ev
  virtual void  v134(); // _ZN8S1284C164v134Ev
  ~S1284C16(); // tgen
  S1284C16(); // tgen
};
//SIG(-1 S1284C16) C1{ BC2{ 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 Fi[28]} v1 v2 v3 FC3{ BC4{ m Fp Fi[2]}} Fi[2]}


void  S1284C16 ::v132(){vfunc_called(this, "_ZN8S1284C164v132Ev");}
void  S1284C16 ::v133(){vfunc_called(this, "_ZN8S1284C164v133Ev");}
void  S1284C16 ::v134(){vfunc_called(this, "_ZN8S1284C164v134Ev");}
S1284C16 ::~S1284C16(){ note_dtor("S1284C16", this);} // tgen
S1284C16 ::S1284C16(){ note_ctor("S1284C16", this);} // tgen

static void Test_S1284C16()
{
  extern Class_Descriptor cd_S1284C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,35)];
    init_test(&cd_S1284C16, buf);
    S1284C16 *dp, &lv = *(dp=new (buf) S1284C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,136), "sizeof(S1284C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1284C16)");
    check_base_class_offset(lv, (S1284C17*), 0, "S1284C16");
    check_field_offset(lv, s1284c16f0, ABISELECT(120,116), "S1284C16.s1284c16f0");
    check_field_offset(lv, s1284c16f1, ABISELECT(136,128), "S1284C16.s1284c16f1");
    test_class_info(&lv, &cd_S1284C16);
    dp->~S1284C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1284C16(Test_S1284C16, "S1284C16", ABISELECT(144,136));

#else // __cplusplus

extern void _ZN8S1284C16C1Ev();
extern void _ZN8S1284C16D1Ev();
Name_Map name_map_S1284C16[] = {
  NSPAIR(_ZN8S1284C16C1Ev),
  NSPAIR(_ZN8S1284C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1284C17;
extern VTBL_ENTRY _ZTI8S1284C17[];
extern  VTBL_ENTRY _ZTV8S1284C17[];
static Base_Class bases_S1284C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1284C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S1284C16[];
extern void _ZN8S1284C16D1Ev();
extern void _ZN8S1284C16D0Ev();
extern void _ZN8S1284C174v107Ev();
extern void _ZN8S1284C174v108Ev();
extern void _ZN8S1284C174v109Ev();
extern void _ZN8S1284C174v110Ev();
extern void _ZN8S1284C174v111Ev();
extern void _ZN8S1284C174v112Ev();
extern void _ZN8S1284C174v113Ev();
extern void _ZN8S1284C174v114Ev();
extern void _ZN8S1284C174v115Ev();
extern void _ZN8S1284C174v116Ev();
extern void _ZN8S1284C174v117Ev();
extern void _ZN8S1284C174v118Ev();
extern void _ZN8S1284C174v119Ev();
extern void _ZN8S1284C174v120Ev();
extern void _ZN8S1284C174v121Ev();
extern void _ZN8S1284C174v122Ev();
extern void _ZN8S1284C174v123Ev();
extern void _ZN8S1284C174v124Ev();
extern void _ZN8S1284C174v125Ev();
extern void _ZN8S1284C174v126Ev();
extern void _ZN8S1284C174v127Ev();
extern void _ZN8S1284C174v128Ev();
extern void _ZN8S1284C174v129Ev();
extern void _ZN8S1284C174v130Ev();
extern void _ZN8S1284C174v131Ev();
extern void _ZN8S1284C164v132Ev();
extern void _ZN8S1284C164v133Ev();
extern void _ZN8S1284C164v134Ev();
static  VTBL_ENTRY vtc_S1284C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1284C16[0]),
  (VTBL_ENTRY)&_ZN8S1284C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1284C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v107Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v108Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v109Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v110Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v111Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v112Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v113Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v114Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v115Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v116Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v117Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v118Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v119Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v120Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v121Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v122Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v123Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v124Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v125Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v126Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v127Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v128Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v129Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v130Ev,
  (VTBL_ENTRY)&_ZN8S1284C174v131Ev,
  (VTBL_ENTRY)&_ZN8S1284C164v132Ev,
  (VTBL_ENTRY)&_ZN8S1284C164v133Ev,
  (VTBL_ENTRY)&_ZN8S1284C164v134Ev,
};
extern VTBL_ENTRY _ZTI8S1284C16[];
extern  VTBL_ENTRY _ZTV8S1284C16[];
Class_Descriptor cd_S1284C16 = {  "S1284C16", // class name
  bases_S1284C16, 1,
  &(vtc_S1284C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,136), // object size
  NSPAIRA(_ZTI8S1284C16),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S1284C16),32, //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  S1284C2  : S1284C3 , S1284C7 {
  void *s1284c2f0;
  int s1284c2f1;
  ::S1325C21 s1284c2f2;
  void *s1284c2f3;
  int s1284c2f4[6];
  ::S1284C9 s1284c2f5;
  ::S1284C9 s1284c2f6;
  int s1284c2f7[3];
  ::S1325C7_nt s1284c2f8;
  ::S1284C9 s1284c2f9;
  ::S1284C9 s1284c2f10;
  __tsi64 s1284c2f11[3];
  int s1284c2f12[2];
  ::S1537C5_nt s1284c2f13;
  ::S1537C5_nt s1284c2f14;
  int s1284c2f15[2];
  void *s1284c2f16;
  ::S1566C15 s1284c2f17;
  __tsi64 s1284c2f18;
  int s1284c2f19[6];
  __tsi64 s1284c2f20[4];
  int s1284c2f21;
  ::S1284C16 s1284c2f22;
  __tsi64 s1284c2f23[256];
  int s1284c2f24[259];
  void *s1284c2f25[1023];
  int s1284c2f26[3069];
  ::S1566C10 s1284c2f27;
  ::S1566C10 s1284c2f28;
  ::S1537C23 s1284c2f29;
  ::S1537C19 s1284c2f30;
  ::S1566C22_nt s1284c2f31;
  void *s1284c2f32;
  ::S1537C13 s1284c2f33;
  ::S1537C7_nt s1284c2f34;
  ::S1566C14_nt s1284c2f35;
  ::S1325C31 s1284c2f36;
  ::S1325C27 s1284c2f37;
  ::S1325C23 s1284c2f38;
  void *s1284c2f39[2];
  int s1284c2f40;
  ::S1566C30 s1284c2f41;
  ::S1325C14 s1284c2f42;
  virtual  ~S1284C2(); // _ZN7S1284C2D1Ev
  virtual void  v82(); // _ZN7S1284C23v82Ev
  virtual void  v83(); // _ZN7S1284C23v83Ev
  virtual void  v84(); // _ZN7S1284C23v84Ev
  virtual void  v85(); // _ZN7S1284C23v85Ev
  virtual void  v86(); // _ZN7S1284C23v86Ev
  virtual void  v87(); // _ZN7S1284C23v87Ev
  virtual void  v88(); // _ZN7S1284C23v88Ev
  virtual void  v89(); // _ZN7S1284C23v89Ev
  virtual void  v90(); // _ZN7S1284C23v90Ev
  virtual void  v91(); // _ZN7S1284C23v91Ev
  virtual void  v92(); // _ZN7S1284C23v92Ev
  virtual void  v93(); // _ZN7S1284C23v93Ev
  virtual void  v94(); // _ZN7S1284C23v94Ev
  virtual void  v95(); // _ZN7S1284C23v95Ev
  virtual void  v96(); // _ZN7S1284C23v96Ev
  virtual void  v97(); // _ZN7S1284C23v97Ev
  virtual void  v98(); // _ZN7S1284C23v98Ev
  virtual void  v99(); // _ZN7S1284C23v99Ev
  virtual void  v100(); // _ZN7S1284C24v100Ev
  virtual void  v101(); // _ZN7S1284C24v101Ev
  virtual void  v102(); // _ZN7S1284C24v102Ev
  virtual void  v103(); // _ZN7S1284C24v103Ev
  virtual void  v104(); // _ZN7S1284C24v104Ev
  S1284C2(); // tgen
};
//SIG(-1 S1284C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v88} vd v89 v90 v91 v92 Fp Fi[7]} BC6{ vd v93 v94 v95} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp Fi FC7{ m FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC8 Fi FC8 FC11{ BC10} FC8 Fi} Fp Fi[6] FC12{ BC13{ BC10}} FC12 Fi[3] FC14{ BC8} FC12 FC12 FL[3] Fi[2] FC15{ m Fi[2]} FC15 Fi[2] Fp FC16{ BC17{ BC18{ vd 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 Fi[28]} v123 v124 v125 FC19{ BC10} Fi[2]} v96 v97 Fp[2] FL Fi[5] Fc[3]} FL Fi[6] FL[4] Fi FC20{ BC21{ vd 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 Fi[28]} v126 v127 v128 FC22{ BC10} Fi[2]} FL[256] Fi[259] Fp[1023] Fi[3069] FC23{ BC10} FC23 FC19 FC24{ BC10} FC25{ BC26{ m FC27{ BC10} Fp Fi}} Fp FC28{ BC10} FC29{ BC10} FC4 FC27 FC30{ BC10} FC31{ BC10} Fp[2] Fi FC32{ m Fi[5]} FC11}


 S1284C2 ::~S1284C2(){ note_dtor("S1284C2", this);}
void  S1284C2 ::v82(){vfunc_called(this, "_ZN7S1284C23v82Ev");}
void  S1284C2 ::v83(){vfunc_called(this, "_ZN7S1284C23v83Ev");}
void  S1284C2 ::v84(){vfunc_called(this, "_ZN7S1284C23v84Ev");}
void  S1284C2 ::v85(){vfunc_called(this, "_ZN7S1284C23v85Ev");}
void  S1284C2 ::v86(){vfunc_called(this, "_ZN7S1284C23v86Ev");}
void  S1284C2 ::v87(){vfunc_called(this, "_ZN7S1284C23v87Ev");}
void  S1284C2 ::v88(){vfunc_called(this, "_ZN7S1284C23v88Ev");}
void  S1284C2 ::v89(){vfunc_called(this, "_ZN7S1284C23v89Ev");}
void  S1284C2 ::v90(){vfunc_called(this, "_ZN7S1284C23v90Ev");}
void  S1284C2 ::v91(){vfunc_called(this, "_ZN7S1284C23v91Ev");}
void  S1284C2 ::v92(){vfunc_called(this, "_ZN7S1284C23v92Ev");}
void  S1284C2 ::v93(){vfunc_called(this, "_ZN7S1284C23v93Ev");}
void  S1284C2 ::v94(){vfunc_called(this, "_ZN7S1284C23v94Ev");}
void  S1284C2 ::v95(){vfunc_called(this, "_ZN7S1284C23v95Ev");}
void  S1284C2 ::v96(){vfunc_called(this, "_ZN7S1284C23v96Ev");}
void  S1284C2 ::v97(){vfunc_called(this, "_ZN7S1284C23v97Ev");}
void  S1284C2 ::v98(){vfunc_called(this, "_ZN7S1284C23v98Ev");}
void  S1284C2 ::v99(){vfunc_called(this, "_ZN7S1284C23v99Ev");}
void  S1284C2 ::v100(){vfunc_called(this, "_ZN7S1284C24v100Ev");}
void  S1284C2 ::v101(){vfunc_called(this, "_ZN7S1284C24v101Ev");}
void  S1284C2 ::v102(){vfunc_called(this, "_ZN7S1284C24v102Ev");}
void  S1284C2 ::v103(){vfunc_called(this, "_ZN7S1284C24v103Ev");}
void  S1284C2 ::v104(){vfunc_called(this, "_ZN7S1284C24v104Ev");}
S1284C2 ::S1284C2(){ note_ctor("S1284C2", this);} // tgen

static void Test_S1284C2()
{
  extern Class_Descriptor cd_S1284C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3084,5089)];
    init_test(&cd_S1284C2, buf);
    S1284C2 *dp, &lv = *(dp=new (buf) S1284C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24664,20352), "sizeof(S1284C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1284C2)");
    check_base_class_offset(lv, (S1284C4*)(S1284C3*), 0, "S1284C2");
    check_base_class_offset(lv, (S1284C6*)(S1284C3*), ABISELECT(96,60), "S1284C2");
    check_base_class_offset(lv, (S1284C3*), 0, "S1284C2");
    check_base_class_offset(lv, (S1284C7*), ABISELECT(144,96), "S1284C2");
    check_field_offset(lv, s1284c2f0, ABISELECT(152,100), "S1284C2.s1284c2f0");
    check_field_offset(lv, s1284c2f1, ABISELECT(160,104), "S1284C2.s1284c2f1");
    check_field_offset(lv, s1284c2f2, ABISELECT(168,108), "S1284C2.s1284c2f2");
    check_field_offset(lv, s1284c2f3, ABISELECT(264,176), "S1284C2.s1284c2f3");
    check_field_offset(lv, s1284c2f4, ABISELECT(272,180), "S1284C2.s1284c2f4");
    check_field_offset(lv, s1284c2f5, ABISELECT(296,204), "S1284C2.s1284c2f5");
    check_field_offset(lv, s1284c2f6, ABISELECT(312,216), "S1284C2.s1284c2f6");
    check_field_offset(lv, s1284c2f7, ABISELECT(328,228), "S1284C2.s1284c2f7");
    check_field_offset(lv, s1284c2f8, ABISELECT(344,240), "S1284C2.s1284c2f8");
    check_field_offset(lv, s1284c2f9, ABISELECT(360,252), "S1284C2.s1284c2f9");
    check_field_offset(lv, s1284c2f10, ABISELECT(376,264), "S1284C2.s1284c2f10");
    check_field_offset(lv, s1284c2f11, ABISELECT(392,276), "S1284C2.s1284c2f11");
    check_field_offset(lv, s1284c2f12, ABISELECT(416,300), "S1284C2.s1284c2f12");
    check_field_offset(lv, s1284c2f13, ABISELECT(424,308), "S1284C2.s1284c2f13");
    check_field_offset(lv, s1284c2f14, ABISELECT(432,316), "S1284C2.s1284c2f14");
    check_field_offset(lv, s1284c2f15, ABISELECT(440,324), "S1284C2.s1284c2f15");
    check_field_offset(lv, s1284c2f16, ABISELECT(448,332), "S1284C2.s1284c2f16");
    check_field_offset(lv, s1284c2f17, ABISELECT(456,336), "S1284C2.s1284c2f17");
    check_field_offset(lv, s1284c2f18, ABISELECT(648,512), "S1284C2.s1284c2f18");
    check_field_offset(lv, s1284c2f19, ABISELECT(656,520), "S1284C2.s1284c2f19");
    check_field_offset(lv, s1284c2f20, ABISELECT(680,544), "S1284C2.s1284c2f20");
    check_field_offset(lv, s1284c2f21, ABISELECT(712,576), "S1284C2.s1284c2f21");
    check_field_offset(lv, s1284c2f22, ABISELECT(720,580), "S1284C2.s1284c2f22");
    check_field_offset(lv, s1284c2f23, ABISELECT(864,716), "S1284C2.s1284c2f23");
    check_field_offset(lv, s1284c2f24, ABISELECT(2912,2764), "S1284C2.s1284c2f24");
    check_field_offset(lv, s1284c2f25, ABISELECT(3952,3800), "S1284C2.s1284c2f25");
    check_field_offset(lv, s1284c2f26, ABISELECT(12136,7892), "S1284C2.s1284c2f26");
    check_field_offset(lv, s1284c2f27, ABISELECT(24416,20168), "S1284C2.s1284c2f27");
    check_field_offset(lv, s1284c2f28, ABISELECT(24432,20180), "S1284C2.s1284c2f28");
    check_field_offset(lv, s1284c2f29, ABISELECT(24448,20192), "S1284C2.s1284c2f29");
    check_field_offset(lv, s1284c2f30, ABISELECT(24464,20204), "S1284C2.s1284c2f30");
    check_field_offset(lv, s1284c2f31, ABISELECT(24480,20216), "S1284C2.s1284c2f31");
    check_field_offset(lv, s1284c2f32, ABISELECT(24512,20236), "S1284C2.s1284c2f32");
    check_field_offset(lv, s1284c2f33, ABISELECT(24520,20240), "S1284C2.s1284c2f33");
    check_field_offset(lv, s1284c2f34, ABISELECT(24536,20252), "S1284C2.s1284c2f34");
    check_field_offset(lv, s1284c2f35, ABISELECT(24552,20264), "S1284C2.s1284c2f35");
    check_field_offset(lv, s1284c2f36, ABISELECT(24560,20272), "S1284C2.s1284c2f36");
    check_field_offset(lv, s1284c2f37, ABISELECT(24576,20284), "S1284C2.s1284c2f37");
    check_field_offset(lv, s1284c2f38, ABISELECT(24592,20296), "S1284C2.s1284c2f38");
    check_field_offset(lv, s1284c2f39, ABISELECT(24608,20308), "S1284C2.s1284c2f39");
    check_field_offset(lv, s1284c2f40, ABISELECT(24624,20316), "S1284C2.s1284c2f40");
    check_field_offset(lv, s1284c2f41, ABISELECT(24628,20320), "S1284C2.s1284c2f41");
    check_field_offset(lv, s1284c2f42, ABISELECT(24648,20340), "S1284C2.s1284c2f42");
    test_class_info(&lv, &cd_S1284C2);
    dp->~S1284C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1284C2(Test_S1284C2, "S1284C2", ABISELECT(24664,20352));

#else // __cplusplus

extern void _ZN7S1284C2C1Ev();
extern void _ZN7S1284C2D1Ev();
Name_Map name_map_S1284C2[] = {
  NSPAIR(_ZN7S1284C2C1Ev),
  NSPAIR(_ZN7S1284C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1284C4;
extern VTBL_ENTRY _ZTI7S1284C4[];
extern  VTBL_ENTRY _ZTV7S1284C4[];
extern Class_Descriptor cd_S1284C6;
extern VTBL_ENTRY _ZTI7S1284C6[];
extern  VTBL_ENTRY _ZTV7S1284C6[];
extern Class_Descriptor cd_S1284C3;
extern VTBL_ENTRY _ZTI7S1284C3[];
extern  VTBL_ENTRY _ZTV7S1284C3[];
extern Class_Descriptor cd_S1284C7;
extern VTBL_ENTRY _ZTI7S1284C7[];
extern  VTBL_ENTRY _ZTV7S1284C7[];
static Base_Class bases_S1284C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1284C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1284C6,    ABISELECT(96,60), //bcp->offset
    95, //bcp->virtual_function_table_offset
    2, //num_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_S1284C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1284C7,    ABISELECT(144,96), //bcp->offset
    98, //bcp->virtual_function_table_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 _ZTI7S1284C2[];
extern void _ZN7S1284C2D1Ev();
extern void _ZN7S1284C2D0Ev();
extern void _ZN7S1284C43v10Ev();
extern void _ZN7S1284C43v11Ev();
extern void _ZN7S1284C43v12Ev();
extern void _ZN7S1284C43v13Ev();
extern void _ZN7S1284C43v14Ev();
extern void _ZN7S1284C43v15Ev();
extern void _ZN7S1284C43v16Ev();
extern void _ZN7S1284C43v17Ev();
extern void _ZN7S1284C43v18Ev();
extern void _ZN7S1284C43v19Ev();
extern void _ZN7S1284C43v20Ev();
extern void _ZN7S1284C43v21Ev();
extern void _ZN7S1284C43v22Ev();
extern void _ZN7S1284C43v23Ev();
extern void _ZN7S1284C43v24Ev();
extern void _ZN7S1284C43v25Ev();
extern void _ZN7S1284C43v26Ev();
extern void _ZN7S1284C43v27Ev();
extern void _ZN7S1284C43v28Ev();
extern void _ZN7S1284C43v29Ev();
extern void _ZN7S1284C43v30Ev();
extern void _ZN7S1284C43v31Ev();
extern void _ZN7S1284C43v32Ev();
extern void _ZN7S1284C43v33Ev();
extern void _ZN7S1284C43v34Ev();
extern void _ZN7S1284C43v35Ev();
extern void _ZN7S1284C43v36Ev();
extern void _ZN7S1284C43v37Ev();
extern void _ZN7S1284C43v38Ev();
extern void _ZN7S1284C43v39Ev();
extern void _ZN7S1284C43v40Ev();
extern void _ZN7S1284C43v41Ev();
extern void _ZN7S1284C43v42Ev();
extern void _ZN7S1284C43v43Ev();
extern void _ZN7S1284C43v44Ev();
extern void _ZN7S1284C43v45Ev();
extern void _ZN7S1284C43v46Ev();
extern void _ZN7S1284C43v47Ev();
extern void _ZN7S1284C43v48Ev();
extern void _ZN7S1284C43v49Ev();
extern void _ZN7S1284C43v50Ev();
extern void _ZN7S1284C43v51Ev();
extern void _ZN7S1284C43v52Ev();
extern void _ZN7S1284C43v53Ev();
extern void _ZN7S1284C43v54Ev();
extern void _ZN7S1284C43v55Ev();
extern void _ZN7S1284C43v56Ev();
extern void _ZN7S1284C43v57Ev();
extern void _ZN7S1284C43v58Ev();
extern void _ZN7S1284C43v59Ev();
extern void _ZN7S1284C43v60Ev();
extern void _ZN7S1284C43v61Ev();
extern void _ZN7S1284C43v62Ev();
extern void _ZN7S1284C43v63Ev();
extern void _ZN7S1284C43v64Ev();
extern void _ZN7S1284C43v65Ev();
extern void _ZN7S1284C43v66Ev();
extern void _ZN7S1284C43v67Ev();
extern void _ZN7S1284C43v68Ev();
extern void _ZN7S1284C43v69Ev();
extern void _ZN7S1284C43v70Ev();
extern void _ZN7S1284C43v71Ev();
extern void _ZN7S1284C43v72Ev();
extern void _ZN7S1284C43v73Ev();
extern void _ZN7S1284C33v75Ev();
extern void _ZN7S1284C33v76Ev();
extern void _ZN7S1284C33v77Ev();
extern void _ZN7S1284C33v78Ev();
extern void _ZN7S1284C23v82Ev();
extern void _ZN7S1284C23v83Ev();
extern void _ZN7S1284C23v84Ev();
extern void _ZN7S1284C23v85Ev();
extern void _ZN7S1284C23v86Ev();
extern void _ZN7S1284C23v87Ev();
extern void _ZN7S1284C23v88Ev();
extern void _ZN7S1284C23v89Ev();
extern void _ZN7S1284C23v90Ev();
extern void _ZN7S1284C23v91Ev();
extern void _ZN7S1284C23v92Ev();
extern void _ZN7S1284C23v93Ev();
extern void _ZN7S1284C23v94Ev();
extern void _ZN7S1284C23v95Ev();
extern void _ZN7S1284C23v96Ev();
extern void _ZN7S1284C23v97Ev();
extern void _ZN7S1284C23v98Ev();
extern void _ZN7S1284C23v99Ev();
extern void _ZN7S1284C24v100Ev();
extern void _ZN7S1284C24v101Ev();
extern void _ZN7S1284C24v102Ev();
extern void _ZN7S1284C24v103Ev();
extern void _ZN7S1284C24v104Ev();
extern void _ZN7S1284C63v74Ev();
extern void ABISELECT(_ZThn144_N7S1284C2D1Ev,_ZThn96_N7S1284C2D1Ev)();
extern void ABISELECT(_ZThn144_N7S1284C2D0Ev,_ZThn96_N7S1284C2D0Ev)();
extern void _ZN7S1284C73v79Ev();
extern void _ZN7S1284C73v80Ev();
extern void _ZN7S1284C73v81Ev();
static  VTBL_ENTRY vtc_S1284C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1284C2[0]),
  (VTBL_ENTRY)&_ZN7S1284C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1284C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1284C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1284C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1284C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1284C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1284C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1284C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1284C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1284C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1284C24v104Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1284C2[0]),
  (VTBL_ENTRY)&_ZN7S1284C63v74Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI7S1284C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S1284C2D1Ev,_ZThn96_N7S1284C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S1284C2D0Ev,_ZThn96_N7S1284C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1284C73v79Ev,
  (VTBL_ENTRY)&_ZN7S1284C73v80Ev,
  (VTBL_ENTRY)&_ZN7S1284C73v81Ev,
};
extern VTBL_ENTRY _ZTI7S1284C2[];
extern  VTBL_ENTRY _ZTV7S1284C2[];
Class_Descriptor cd_S1284C2 = {  "S1284C2", // class name
  bases_S1284C2, 4,
  &(vtc_S1284C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24664,20352), // object size
  NSPAIRA(_ZTI7S1284C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1284C2),105, //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  S1284C1  : S1284C2 {
  virtual  ~S1284C1(); // _ZN7S1284C1D1Ev
  virtual void  v1(); // _ZN7S1284C12v1Ev
  virtual void  v2(); // _ZN7S1284C12v2Ev
  virtual void  v3(); // _ZN7S1284C12v3Ev
  virtual void  v4(); // _ZN7S1284C12v4Ev
  virtual void  v5(); // _ZN7S1284C12v5Ev
  virtual void  v6(); // _ZN7S1284C12v6Ev
  virtual void  v7(); // _ZN7S1284C12v7Ev
  virtual void  v8(); // _ZN7S1284C12v8Ev
  virtual void  v9(); // _ZN7S1284C12v9Ev
  S1284C1(); // tgen
};
//SIG(1 S1284C1) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} BC6{ v74} vd v75 v76 v77 v78 Fp Fi[7]} BC7{ vd v79 v80 v81} vd v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 Fp Fi FC8{ m FC9{ BC10{ BC11{ m Fp Fi[2]}}} FC9 Fi FC9 FC12{ BC11} FC9 Fi} Fp Fi[6] FC13{ BC14{ BC11}} FC13 Fi[3] FC15{ BC9} FC13 FC13 FL[3] Fi[2] FC16{ m Fi[2]} FC16 Fi[2] Fp FC17{ BC18{ BC19{ vd 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 Fi[28]} v132 v133 v134 FC20{ BC11} Fi[2]} v105 v106 Fp[2] FL Fi[5] Fc[3]} FL Fi[6] FL[4] Fi FC21{ BC22{ vd 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 Fi[28]} v135 v136 v137 FC23{ BC11} Fi[2]} FL[256] Fi[259] Fp[1023] Fi[3069] FC24{ BC11} FC24 FC20 FC25{ BC11} FC26{ BC27{ m FC28{ BC11} Fp Fi}} Fp FC29{ BC11} FC30{ BC11} FC5 FC28 FC31{ BC11} FC32{ BC11} Fp[2] Fi FC33{ m Fi[5]} FC12} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S1284C1 ::~S1284C1(){ note_dtor("S1284C1", this);}
void  S1284C1 ::v1(){vfunc_called(this, "_ZN7S1284C12v1Ev");}
void  S1284C1 ::v2(){vfunc_called(this, "_ZN7S1284C12v2Ev");}
void  S1284C1 ::v3(){vfunc_called(this, "_ZN7S1284C12v3Ev");}
void  S1284C1 ::v4(){vfunc_called(this, "_ZN7S1284C12v4Ev");}
void  S1284C1 ::v5(){vfunc_called(this, "_ZN7S1284C12v5Ev");}
void  S1284C1 ::v6(){vfunc_called(this, "_ZN7S1284C12v6Ev");}
void  S1284C1 ::v7(){vfunc_called(this, "_ZN7S1284C12v7Ev");}
void  S1284C1 ::v8(){vfunc_called(this, "_ZN7S1284C12v8Ev");}
void  S1284C1 ::v9(){vfunc_called(this, "_ZN7S1284C12v9Ev");}
S1284C1 ::S1284C1(){ note_ctor("S1284C1", this);} // tgen

static void Test_S1284C1()
{
  extern Class_Descriptor cd_S1284C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3084,5089)];
    init_test(&cd_S1284C1, buf);
    S1284C1 *dp, &lv = *(dp=new (buf) S1284C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24664,20352), "sizeof(S1284C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1284C1)");
    check_base_class_offset(lv, (S1284C4*)(S1284C3*)(S1284C2*), 0, "S1284C1");
    check_base_class_offset(lv, (S1284C6*)(S1284C3*)(S1284C2*), ABISELECT(96,60), "S1284C1");
    check_base_class_offset(lv, (S1284C3*)(S1284C2*), 0, "S1284C1");
    check_base_class_offset(lv, (S1284C7*)(S1284C2*), ABISELECT(144,96), "S1284C1");
    check_base_class_offset(lv, (S1284C2*), 0, "S1284C1");
    test_class_info(&lv, &cd_S1284C1);
    dp->~S1284C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1284C1(Test_S1284C1, "S1284C1", ABISELECT(24664,20352));

#else // __cplusplus

extern void _ZN7S1284C1C1Ev();
extern void _ZN7S1284C1D1Ev();
Name_Map name_map_S1284C1[] = {
  NSPAIR(_ZN7S1284C1C1Ev),
  NSPAIR(_ZN7S1284C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1284C4;
extern VTBL_ENTRY _ZTI7S1284C4[];
extern  VTBL_ENTRY _ZTV7S1284C4[];
extern Class_Descriptor cd_S1284C6;
extern VTBL_ENTRY _ZTI7S1284C6[];
extern  VTBL_ENTRY _ZTV7S1284C6[];
extern Class_Descriptor cd_S1284C3;
extern VTBL_ENTRY _ZTI7S1284C3[];
extern  VTBL_ENTRY _ZTV7S1284C3[];
extern Class_Descriptor cd_S1284C7;
extern VTBL_ENTRY _ZTI7S1284C7[];
extern  VTBL_ENTRY _ZTV7S1284C7[];
extern Class_Descriptor cd_S1284C2;
extern VTBL_ENTRY _ZTI7S1284C2[];
extern  VTBL_ENTRY _ZTV7S1284C2[];
static Base_Class bases_S1284C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1284C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1284C6,    ABISELECT(96,60), //bcp->offset
    104, //bcp->virtual_function_table_offset
    2, //num_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_S1284C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1284C7,    ABISELECT(144,96), //bcp->offset
    107, //bcp->virtual_function_table_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_S1284C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1284C1[];
extern void _ZN7S1284C1D1Ev();
extern void _ZN7S1284C1D0Ev();
extern void _ZN7S1284C43v10Ev();
extern void _ZN7S1284C43v11Ev();
extern void _ZN7S1284C43v12Ev();
extern void _ZN7S1284C43v13Ev();
extern void _ZN7S1284C43v14Ev();
extern void _ZN7S1284C43v15Ev();
extern void _ZN7S1284C43v16Ev();
extern void _ZN7S1284C43v17Ev();
extern void _ZN7S1284C43v18Ev();
extern void _ZN7S1284C43v19Ev();
extern void _ZN7S1284C43v20Ev();
extern void _ZN7S1284C43v21Ev();
extern void _ZN7S1284C43v22Ev();
extern void _ZN7S1284C43v23Ev();
extern void _ZN7S1284C43v24Ev();
extern void _ZN7S1284C43v25Ev();
extern void _ZN7S1284C43v26Ev();
extern void _ZN7S1284C43v27Ev();
extern void _ZN7S1284C43v28Ev();
extern void _ZN7S1284C43v29Ev();
extern void _ZN7S1284C43v30Ev();
extern void _ZN7S1284C43v31Ev();
extern void _ZN7S1284C43v32Ev();
extern void _ZN7S1284C43v33Ev();
extern void _ZN7S1284C43v34Ev();
extern void _ZN7S1284C43v35Ev();
extern void _ZN7S1284C43v36Ev();
extern void _ZN7S1284C43v37Ev();
extern void _ZN7S1284C43v38Ev();
extern void _ZN7S1284C43v39Ev();
extern void _ZN7S1284C43v40Ev();
extern void _ZN7S1284C43v41Ev();
extern void _ZN7S1284C43v42Ev();
extern void _ZN7S1284C43v43Ev();
extern void _ZN7S1284C43v44Ev();
extern void _ZN7S1284C43v45Ev();
extern void _ZN7S1284C43v46Ev();
extern void _ZN7S1284C43v47Ev();
extern void _ZN7S1284C43v48Ev();
extern void _ZN7S1284C43v49Ev();
extern void _ZN7S1284C43v50Ev();
extern void _ZN7S1284C43v51Ev();
extern void _ZN7S1284C43v52Ev();
extern void _ZN7S1284C43v53Ev();
extern void _ZN7S1284C43v54Ev();
extern void _ZN7S1284C43v55Ev();
extern void _ZN7S1284C43v56Ev();
extern void _ZN7S1284C43v57Ev();
extern void _ZN7S1284C43v58Ev();
extern void _ZN7S1284C43v59Ev();
extern void _ZN7S1284C43v60Ev();
extern void _ZN7S1284C43v61Ev();
extern void _ZN7S1284C43v62Ev();
extern void _ZN7S1284C43v63Ev();
extern void _ZN7S1284C43v64Ev();
extern void _ZN7S1284C43v65Ev();
extern void _ZN7S1284C43v66Ev();
extern void _ZN7S1284C43v67Ev();
extern void _ZN7S1284C43v68Ev();
extern void _ZN7S1284C43v69Ev();
extern void _ZN7S1284C43v70Ev();
extern void _ZN7S1284C43v71Ev();
extern void _ZN7S1284C43v72Ev();
extern void _ZN7S1284C43v73Ev();
extern void _ZN7S1284C33v75Ev();
extern void _ZN7S1284C33v76Ev();
extern void _ZN7S1284C33v77Ev();
extern void _ZN7S1284C33v78Ev();
extern void _ZN7S1284C23v82Ev();
extern void _ZN7S1284C23v83Ev();
extern void _ZN7S1284C23v84Ev();
extern void _ZN7S1284C23v85Ev();
extern void _ZN7S1284C23v86Ev();
extern void _ZN7S1284C23v87Ev();
extern void _ZN7S1284C23v88Ev();
extern void _ZN7S1284C23v89Ev();
extern void _ZN7S1284C23v90Ev();
extern void _ZN7S1284C23v91Ev();
extern void _ZN7S1284C23v92Ev();
extern void _ZN7S1284C23v93Ev();
extern void _ZN7S1284C23v94Ev();
extern void _ZN7S1284C23v95Ev();
extern void _ZN7S1284C23v96Ev();
extern void _ZN7S1284C23v97Ev();
extern void _ZN7S1284C23v98Ev();
extern void _ZN7S1284C23v99Ev();
extern void _ZN7S1284C24v100Ev();
extern void _ZN7S1284C24v101Ev();
extern void _ZN7S1284C24v102Ev();
extern void _ZN7S1284C24v103Ev();
extern void _ZN7S1284C24v104Ev();
extern void _ZN7S1284C12v1Ev();
extern void _ZN7S1284C12v2Ev();
extern void _ZN7S1284C12v3Ev();
extern void _ZN7S1284C12v4Ev();
extern void _ZN7S1284C12v5Ev();
extern void _ZN7S1284C12v6Ev();
extern void _ZN7S1284C12v7Ev();
extern void _ZN7S1284C12v8Ev();
extern void _ZN7S1284C12v9Ev();
extern void _ZN7S1284C63v74Ev();
extern void ABISELECT(_ZThn144_N7S1284C1D1Ev,_ZThn96_N7S1284C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S1284C1D0Ev,_ZThn96_N7S1284C1D0Ev)();
extern void _ZN7S1284C73v79Ev();
extern void _ZN7S1284C73v80Ev();
extern void _ZN7S1284C73v81Ev();
static  VTBL_ENTRY vtc_S1284C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1284C1[0]),
  (VTBL_ENTRY)&_ZN7S1284C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1284C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1284C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1284C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1284C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1284C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1284C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1284C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1284C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1284C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1284C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1284C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1284C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1284C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1284C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1284C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1284C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1284C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1284C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1284C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1284C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1284C12v9Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1284C1[0]),
  (VTBL_ENTRY)&_ZN7S1284C63v74Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI7S1284C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S1284C1D1Ev,_ZThn96_N7S1284C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S1284C1D0Ev,_ZThn96_N7S1284C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1284C73v79Ev,
  (VTBL_ENTRY)&_ZN7S1284C73v80Ev,
  (VTBL_ENTRY)&_ZN7S1284C73v81Ev,
};
extern VTBL_ENTRY _ZTI7S1284C1[];
extern  VTBL_ENTRY _ZTV7S1284C1[];
Class_Descriptor cd_S1284C1 = {  "S1284C1", // class name
  bases_S1284C1, 5,
  &(vtc_S1284C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24664,20352), // object size
  NSPAIRA(_ZTI7S1284C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1284C1),114, //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  S1307C4  {
  int s1307c4f0;
  __tsi64 s1307c4f1;
  void *s1307c4f2[4];
  int s1307c4f3[2];
  void *s1307c4f4;
  ::S1566C14_nt s1307c4f5;
  void *s1307c4f6[2];
  virtual  ~S1307C4(); // _ZN7S1307C4D1Ev
  virtual void  v12(); // _ZN7S1307C43v12Ev
  virtual void  v13(); // _ZN7S1307C43v13Ev
  virtual void  v14(); // _ZN7S1307C43v14Ev
  virtual void  v15(); // _ZN7S1307C43v15Ev
  virtual void  v16(); // _ZN7S1307C43v16Ev
  virtual void  v17(); // _ZN7S1307C43v17Ev
  virtual void  v18(); // _ZN7S1307C43v18Ev
  virtual void  v19(); // _ZN7S1307C43v19Ev
  virtual void  v20(); // _ZN7S1307C43v20Ev
  virtual void  v21(); // _ZN7S1307C43v21Ev
  virtual void  v22(); // _ZN7S1307C43v22Ev
  virtual void  v23(); // _ZN7S1307C43v23Ev
  virtual void  v24(); // _ZN7S1307C43v24Ev
  virtual void  v25(); // _ZN7S1307C43v25Ev
  virtual void  v26(); // _ZN7S1307C43v26Ev
  virtual void  v27(); // _ZN7S1307C43v27Ev
  virtual void  v28(); // _ZN7S1307C43v28Ev
  virtual void  v29(); // _ZN7S1307C43v29Ev
  virtual void  v30(); // _ZN7S1307C43v30Ev
  virtual void  v31(); // _ZN7S1307C43v31Ev
  virtual void  v32(); // _ZN7S1307C43v32Ev
  virtual void  v33(); // _ZN7S1307C43v33Ev
  virtual void  v34(); // _ZN7S1307C43v34Ev
  virtual void  v35(); // _ZN7S1307C43v35Ev
  virtual void  v36(); // _ZN7S1307C43v36Ev
  virtual void  v37(); // _ZN7S1307C43v37Ev
  virtual void  v38(); // _ZN7S1307C43v38Ev
  virtual void  v39(); // _ZN7S1307C43v39Ev
  virtual void  v40(); // _ZN7S1307C43v40Ev
  virtual void  v41(); // _ZN7S1307C43v41Ev
  virtual void  v42(); // _ZN7S1307C43v42Ev
  virtual void  v43(); // _ZN7S1307C43v43Ev
  virtual void  v44(); // _ZN7S1307C43v44Ev
  virtual void  v45(); // _ZN7S1307C43v45Ev
  virtual void  v46(); // _ZN7S1307C43v46Ev
  virtual void  v47(); // _ZN7S1307C43v47Ev
  virtual void  v48(); // _ZN7S1307C43v48Ev
  virtual void  v49(); // _ZN7S1307C43v49Ev
  virtual void  v50(); // _ZN7S1307C43v50Ev
  virtual void  v51(); // _ZN7S1307C43v51Ev
  virtual void  v52(); // _ZN7S1307C43v52Ev
  virtual void  v53(); // _ZN7S1307C43v53Ev
  virtual void  v54(); // _ZN7S1307C43v54Ev
  virtual void  v55(); // _ZN7S1307C43v55Ev
  virtual void  v56(); // _ZN7S1307C43v56Ev
  virtual void  v57(); // _ZN7S1307C43v57Ev
  virtual void  v58(); // _ZN7S1307C43v58Ev
  virtual void  v59(); // _ZN7S1307C43v59Ev
  virtual void  v60(); // _ZN7S1307C43v60Ev
  virtual void  v61(); // _ZN7S1307C43v61Ev
  virtual void  v62(); // _ZN7S1307C43v62Ev
  virtual void  v63(); // _ZN7S1307C43v63Ev
  virtual void  v64(); // _ZN7S1307C43v64Ev
  virtual void  v65(); // _ZN7S1307C43v65Ev
  virtual void  v66(); // _ZN7S1307C43v66Ev
  virtual void  v67(); // _ZN7S1307C43v67Ev
  virtual void  v68(); // _ZN7S1307C43v68Ev
  virtual void  v69(); // _ZN7S1307C43v69Ev
  virtual void  v70(); // _ZN7S1307C43v70Ev
  virtual void  v71(); // _ZN7S1307C43v71Ev
  virtual void  v72(); // _ZN7S1307C43v72Ev
  virtual void  v73(); // _ZN7S1307C43v73Ev
  virtual void  v74(); // _ZN7S1307C43v74Ev
  virtual void  v75(); // _ZN7S1307C43v75Ev
  S1307C4(); // tgen
};
//SIG(-1 S1307C4) 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]}


 S1307C4 ::~S1307C4(){ note_dtor("S1307C4", this);}
void  S1307C4 ::v12(){vfunc_called(this, "_ZN7S1307C43v12Ev");}
void  S1307C4 ::v13(){vfunc_called(this, "_ZN7S1307C43v13Ev");}
void  S1307C4 ::v14(){vfunc_called(this, "_ZN7S1307C43v14Ev");}
void  S1307C4 ::v15(){vfunc_called(this, "_ZN7S1307C43v15Ev");}
void  S1307C4 ::v16(){vfunc_called(this, "_ZN7S1307C43v16Ev");}
void  S1307C4 ::v17(){vfunc_called(this, "_ZN7S1307C43v17Ev");}
void  S1307C4 ::v18(){vfunc_called(this, "_ZN7S1307C43v18Ev");}
void  S1307C4 ::v19(){vfunc_called(this, "_ZN7S1307C43v19Ev");}
void  S1307C4 ::v20(){vfunc_called(this, "_ZN7S1307C43v20Ev");}
void  S1307C4 ::v21(){vfunc_called(this, "_ZN7S1307C43v21Ev");}
void  S1307C4 ::v22(){vfunc_called(this, "_ZN7S1307C43v22Ev");}
void  S1307C4 ::v23(){vfunc_called(this, "_ZN7S1307C43v23Ev");}
void  S1307C4 ::v24(){vfunc_called(this, "_ZN7S1307C43v24Ev");}
void  S1307C4 ::v25(){vfunc_called(this, "_ZN7S1307C43v25Ev");}
void  S1307C4 ::v26(){vfunc_called(this, "_ZN7S1307C43v26Ev");}
void  S1307C4 ::v27(){vfunc_called(this, "_ZN7S1307C43v27Ev");}
void  S1307C4 ::v28(){vfunc_called(this, "_ZN7S1307C43v28Ev");}
void  S1307C4 ::v29(){vfunc_called(this, "_ZN7S1307C43v29Ev");}
void  S1307C4 ::v30(){vfunc_called(this, "_ZN7S1307C43v30Ev");}
void  S1307C4 ::v31(){vfunc_called(this, "_ZN7S1307C43v31Ev");}
void  S1307C4 ::v32(){vfunc_called(this, "_ZN7S1307C43v32Ev");}
void  S1307C4 ::v33(){vfunc_called(this, "_ZN7S1307C43v33Ev");}
void  S1307C4 ::v34(){vfunc_called(this, "_ZN7S1307C43v34Ev");}
void  S1307C4 ::v35(){vfunc_called(this, "_ZN7S1307C43v35Ev");}
void  S1307C4 ::v36(){vfunc_called(this, "_ZN7S1307C43v36Ev");}
void  S1307C4 ::v37(){vfunc_called(this, "_ZN7S1307C43v37Ev");}
void  S1307C4 ::v38(){vfunc_called(this, "_ZN7S1307C43v38Ev");}
void  S1307C4 ::v39(){vfunc_called(this, "_ZN7S1307C43v39Ev");}
void  S1307C4 ::v40(){vfunc_called(this, "_ZN7S1307C43v40Ev");}
void  S1307C4 ::v41(){vfunc_called(this, "_ZN7S1307C43v41Ev");}
void  S1307C4 ::v42(){vfunc_called(this, "_ZN7S1307C43v42Ev");}
void  S1307C4 ::v43(){vfunc_called(this, "_ZN7S1307C43v43Ev");}
void  S1307C4 ::v44(){vfunc_called(this, "_ZN7S1307C43v44Ev");}
void  S1307C4 ::v45(){vfunc_called(this, "_ZN7S1307C43v45Ev");}
void  S1307C4 ::v46(){vfunc_called(this, "_ZN7S1307C43v46Ev");}
void  S1307C4 ::v47(){vfunc_called(this, "_ZN7S1307C43v47Ev");}
void  S1307C4 ::v48(){vfunc_called(this, "_ZN7S1307C43v48Ev");}
void  S1307C4 ::v49(){vfunc_called(this, "_ZN7S1307C43v49Ev");}
void  S1307C4 ::v50(){vfunc_called(this, "_ZN7S1307C43v50Ev");}
void  S1307C4 ::v51(){vfunc_called(this, "_ZN7S1307C43v51Ev");}
void  S1307C4 ::v52(){vfunc_called(this, "_ZN7S1307C43v52Ev");}
void  S1307C4 ::v53(){vfunc_called(this, "_ZN7S1307C43v53Ev");}
void  S1307C4 ::v54(){vfunc_called(this, "_ZN7S1307C43v54Ev");}
void  S1307C4 ::v55(){vfunc_called(this, "_ZN7S1307C43v55Ev");}
void  S1307C4 ::v56(){vfunc_called(this, "_ZN7S1307C43v56Ev");}
void  S1307C4 ::v57(){vfunc_called(this, "_ZN7S1307C43v57Ev");}
void  S1307C4 ::v58(){vfunc_called(this, "_ZN7S1307C43v58Ev");}
void  S1307C4 ::v59(){vfunc_called(this, "_ZN7S1307C43v59Ev");}
void  S1307C4 ::v60(){vfunc_called(this, "_ZN7S1307C43v60Ev");}
void  S1307C4 ::v61(){vfunc_called(this, "_ZN7S1307C43v61Ev");}
void  S1307C4 ::v62(){vfunc_called(this, "_ZN7S1307C43v62Ev");}
void  S1307C4 ::v63(){vfunc_called(this, "_ZN7S1307C43v63Ev");}
void  S1307C4 ::v64(){vfunc_called(this, "_ZN7S1307C43v64Ev");}
void  S1307C4 ::v65(){vfunc_called(this, "_ZN7S1307C43v65Ev");}
void  S1307C4 ::v66(){vfunc_called(this, "_ZN7S1307C43v66Ev");}
void  S1307C4 ::v67(){vfunc_called(this, "_ZN7S1307C43v67Ev");}
void  S1307C4 ::v68(){vfunc_called(this, "_ZN7S1307C43v68Ev");}
void  S1307C4 ::v69(){vfunc_called(this, "_ZN7S1307C43v69Ev");}
void  S1307C4 ::v70(){vfunc_called(this, "_ZN7S1307C43v70Ev");}
void  S1307C4 ::v71(){vfunc_called(this, "_ZN7S1307C43v71Ev");}
void  S1307C4 ::v72(){vfunc_called(this, "_ZN7S1307C43v72Ev");}
void  S1307C4 ::v73(){vfunc_called(this, "_ZN7S1307C43v73Ev");}
void  S1307C4 ::v74(){vfunc_called(this, "_ZN7S1307C43v74Ev");}
void  S1307C4 ::v75(){vfunc_called(this, "_ZN7S1307C43v75Ev");}
S1307C4 ::S1307C4(){ note_ctor("S1307C4", this);} // tgen

static void Test_S1307C4()
{
  extern Class_Descriptor cd_S1307C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1307C4, buf);
    S1307C4 *dp, &lv = *(dp=new (buf) S1307C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1307C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1307C4)");
    check_field_offset(lv, s1307c4f0, ABISELECT(8,4), "S1307C4.s1307c4f0");
    check_field_offset(lv, s1307c4f1, ABISELECT(16,8), "S1307C4.s1307c4f1");
    check_field_offset(lv, s1307c4f2, ABISELECT(24,16), "S1307C4.s1307c4f2");
    check_field_offset(lv, s1307c4f3, ABISELECT(56,32), "S1307C4.s1307c4f3");
    check_field_offset(lv, s1307c4f4, ABISELECT(64,40), "S1307C4.s1307c4f4");
    check_field_offset(lv, s1307c4f5, ABISELECT(72,44), "S1307C4.s1307c4f5");
    check_field_offset(lv, s1307c4f6, ABISELECT(80,52), "S1307C4.s1307c4f6");
    test_class_info(&lv, &cd_S1307C4);
    dp->~S1307C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1307C4(Test_S1307C4, "S1307C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1307C4C1Ev();
extern void _ZN7S1307C4D1Ev();
Name_Map name_map_S1307C4[] = {
  NSPAIR(_ZN7S1307C4C1Ev),
  NSPAIR(_ZN7S1307C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1307C4[];
extern void _ZN7S1307C4D1Ev();
extern void _ZN7S1307C4D0Ev();
extern void _ZN7S1307C43v12Ev();
extern void _ZN7S1307C43v13Ev();
extern void _ZN7S1307C43v14Ev();
extern void _ZN7S1307C43v15Ev();
extern void _ZN7S1307C43v16Ev();
extern void _ZN7S1307C43v17Ev();
extern void _ZN7S1307C43v18Ev();
extern void _ZN7S1307C43v19Ev();
extern void _ZN7S1307C43v20Ev();
extern void _ZN7S1307C43v21Ev();
extern void _ZN7S1307C43v22Ev();
extern void _ZN7S1307C43v23Ev();
extern void _ZN7S1307C43v24Ev();
extern void _ZN7S1307C43v25Ev();
extern void _ZN7S1307C43v26Ev();
extern void _ZN7S1307C43v27Ev();
extern void _ZN7S1307C43v28Ev();
extern void _ZN7S1307C43v29Ev();
extern void _ZN7S1307C43v30Ev();
extern void _ZN7S1307C43v31Ev();
extern void _ZN7S1307C43v32Ev();
extern void _ZN7S1307C43v33Ev();
extern void _ZN7S1307C43v34Ev();
extern void _ZN7S1307C43v35Ev();
extern void _ZN7S1307C43v36Ev();
extern void _ZN7S1307C43v37Ev();
extern void _ZN7S1307C43v38Ev();
extern void _ZN7S1307C43v39Ev();
extern void _ZN7S1307C43v40Ev();
extern void _ZN7S1307C43v41Ev();
extern void _ZN7S1307C43v42Ev();
extern void _ZN7S1307C43v43Ev();
extern void _ZN7S1307C43v44Ev();
extern void _ZN7S1307C43v45Ev();
extern void _ZN7S1307C43v46Ev();
extern void _ZN7S1307C43v47Ev();
extern void _ZN7S1307C43v48Ev();
extern void _ZN7S1307C43v49Ev();
extern void _ZN7S1307C43v50Ev();
extern void _ZN7S1307C43v51Ev();
extern void _ZN7S1307C43v52Ev();
extern void _ZN7S1307C43v53Ev();
extern void _ZN7S1307C43v54Ev();
extern void _ZN7S1307C43v55Ev();
extern void _ZN7S1307C43v56Ev();
extern void _ZN7S1307C43v57Ev();
extern void _ZN7S1307C43v58Ev();
extern void _ZN7S1307C43v59Ev();
extern void _ZN7S1307C43v60Ev();
extern void _ZN7S1307C43v61Ev();
extern void _ZN7S1307C43v62Ev();
extern void _ZN7S1307C43v63Ev();
extern void _ZN7S1307C43v64Ev();
extern void _ZN7S1307C43v65Ev();
extern void _ZN7S1307C43v66Ev();
extern void _ZN7S1307C43v67Ev();
extern void _ZN7S1307C43v68Ev();
extern void _ZN7S1307C43v69Ev();
extern void _ZN7S1307C43v70Ev();
extern void _ZN7S1307C43v71Ev();
extern void _ZN7S1307C43v72Ev();
extern void _ZN7S1307C43v73Ev();
extern void _ZN7S1307C43v74Ev();
extern void _ZN7S1307C43v75Ev();
static  VTBL_ENTRY vtc_S1307C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1307C4[0]),
  (VTBL_ENTRY)&_ZN7S1307C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1307C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v75Ev,
};
extern VTBL_ENTRY _ZTI7S1307C4[];
extern  VTBL_ENTRY _ZTV7S1307C4[];
Class_Descriptor cd_S1307C4 = {  "S1307C4", // class name
  0,0,//no base classes
  &(vtc_S1307C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1307C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1307C4),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  S1307C6  {
  virtual void  v76(); // _ZN7S1307C63v76Ev
  ~S1307C6(); // tgen
  S1307C6(); // tgen
};
//SIG(-1 S1307C6) C1{ v1}


void  S1307C6 ::v76(){vfunc_called(this, "_ZN7S1307C63v76Ev");}
S1307C6 ::~S1307C6(){ note_dtor("S1307C6", this);} // tgen
S1307C6 ::S1307C6(){ note_ctor("S1307C6", this);} // tgen

static void Test_S1307C6()
{
  extern Class_Descriptor cd_S1307C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1307C6, buf);
    S1307C6 *dp, &lv = *(dp=new (buf) S1307C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1307C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1307C6)");
    test_class_info(&lv, &cd_S1307C6);
    dp->~S1307C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1307C6(Test_S1307C6, "S1307C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1307C6C1Ev();
extern void _ZN7S1307C6D1Ev();
Name_Map name_map_S1307C6[] = {
  NSPAIR(_ZN7S1307C6C1Ev),
  NSPAIR(_ZN7S1307C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1307C6[];
extern void _ZN7S1307C63v76Ev();
static  VTBL_ENTRY vtc_S1307C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1307C6[0]),
  (VTBL_ENTRY)&_ZN7S1307C63v76Ev,
};
extern VTBL_ENTRY _ZTI7S1307C6[];
extern  VTBL_ENTRY _ZTV7S1307C6[];
Class_Descriptor cd_S1307C6 = {  "S1307C6", // class name
  0,0,//no base classes
  &(vtc_S1307C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1307C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1307C6),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  S1307C3  : S1307C4 , S1307C6 {
  virtual  ~S1307C3(); // _ZN7S1307C3D1Ev
  virtual void  v77(); // _ZN7S1307C33v77Ev
  virtual void  v78(); // _ZN7S1307C33v78Ev
  virtual void  v79(); // _ZN7S1307C33v79Ev
  virtual void  v80(); // _ZN7S1307C33v80Ev
  S1307C3(); // tgen
};
//SIG(-1 S1307C3) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} BC4{ v69} vd v1 v2 v3 v4}


 S1307C3 ::~S1307C3(){ note_dtor("S1307C3", this);}
void  S1307C3 ::v77(){vfunc_called(this, "_ZN7S1307C33v77Ev");}
void  S1307C3 ::v78(){vfunc_called(this, "_ZN7S1307C33v78Ev");}
void  S1307C3 ::v79(){vfunc_called(this, "_ZN7S1307C33v79Ev");}
void  S1307C3 ::v80(){vfunc_called(this, "_ZN7S1307C33v80Ev");}
S1307C3 ::S1307C3(){ note_ctor("S1307C3", this);} // tgen

static void Test_S1307C3()
{
  extern Class_Descriptor cd_S1307C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1307C3, buf);
    S1307C3 *dp, &lv = *(dp=new (buf) S1307C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1307C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1307C3)");
    check_base_class_offset(lv, (S1307C4*), 0, "S1307C3");
    check_base_class_offset(lv, (S1307C6*), ABISELECT(96,60), "S1307C3");
    test_class_info(&lv, &cd_S1307C3);
    dp->~S1307C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1307C3(Test_S1307C3, "S1307C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1307C3C1Ev();
extern void _ZN7S1307C3D1Ev();
Name_Map name_map_S1307C3[] = {
  NSPAIR(_ZN7S1307C3C1Ev),
  NSPAIR(_ZN7S1307C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1307C4;
extern VTBL_ENTRY _ZTI7S1307C4[];
extern  VTBL_ENTRY _ZTV7S1307C4[];
extern Class_Descriptor cd_S1307C6;
extern VTBL_ENTRY _ZTI7S1307C6[];
extern  VTBL_ENTRY _ZTV7S1307C6[];
static Base_Class bases_S1307C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1307C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S1307C6,    ABISELECT(96,60), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1307C3[];
extern void _ZN7S1307C3D1Ev();
extern void _ZN7S1307C3D0Ev();
extern void _ZN7S1307C43v12Ev();
extern void _ZN7S1307C43v13Ev();
extern void _ZN7S1307C43v14Ev();
extern void _ZN7S1307C43v15Ev();
extern void _ZN7S1307C43v16Ev();
extern void _ZN7S1307C43v17Ev();
extern void _ZN7S1307C43v18Ev();
extern void _ZN7S1307C43v19Ev();
extern void _ZN7S1307C43v20Ev();
extern void _ZN7S1307C43v21Ev();
extern void _ZN7S1307C43v22Ev();
extern void _ZN7S1307C43v23Ev();
extern void _ZN7S1307C43v24Ev();
extern void _ZN7S1307C43v25Ev();
extern void _ZN7S1307C43v26Ev();
extern void _ZN7S1307C43v27Ev();
extern void _ZN7S1307C43v28Ev();
extern void _ZN7S1307C43v29Ev();
extern void _ZN7S1307C43v30Ev();
extern void _ZN7S1307C43v31Ev();
extern void _ZN7S1307C43v32Ev();
extern void _ZN7S1307C43v33Ev();
extern void _ZN7S1307C43v34Ev();
extern void _ZN7S1307C43v35Ev();
extern void _ZN7S1307C43v36Ev();
extern void _ZN7S1307C43v37Ev();
extern void _ZN7S1307C43v38Ev();
extern void _ZN7S1307C43v39Ev();
extern void _ZN7S1307C43v40Ev();
extern void _ZN7S1307C43v41Ev();
extern void _ZN7S1307C43v42Ev();
extern void _ZN7S1307C43v43Ev();
extern void _ZN7S1307C43v44Ev();
extern void _ZN7S1307C43v45Ev();
extern void _ZN7S1307C43v46Ev();
extern void _ZN7S1307C43v47Ev();
extern void _ZN7S1307C43v48Ev();
extern void _ZN7S1307C43v49Ev();
extern void _ZN7S1307C43v50Ev();
extern void _ZN7S1307C43v51Ev();
extern void _ZN7S1307C43v52Ev();
extern void _ZN7S1307C43v53Ev();
extern void _ZN7S1307C43v54Ev();
extern void _ZN7S1307C43v55Ev();
extern void _ZN7S1307C43v56Ev();
extern void _ZN7S1307C43v57Ev();
extern void _ZN7S1307C43v58Ev();
extern void _ZN7S1307C43v59Ev();
extern void _ZN7S1307C43v60Ev();
extern void _ZN7S1307C43v61Ev();
extern void _ZN7S1307C43v62Ev();
extern void _ZN7S1307C43v63Ev();
extern void _ZN7S1307C43v64Ev();
extern void _ZN7S1307C43v65Ev();
extern void _ZN7S1307C43v66Ev();
extern void _ZN7S1307C43v67Ev();
extern void _ZN7S1307C43v68Ev();
extern void _ZN7S1307C43v69Ev();
extern void _ZN7S1307C43v70Ev();
extern void _ZN7S1307C43v71Ev();
extern void _ZN7S1307C43v72Ev();
extern void _ZN7S1307C43v73Ev();
extern void _ZN7S1307C43v74Ev();
extern void _ZN7S1307C43v75Ev();
extern void _ZN7S1307C33v77Ev();
extern void _ZN7S1307C33v78Ev();
extern void _ZN7S1307C33v79Ev();
extern void _ZN7S1307C33v80Ev();
extern void _ZN7S1307C63v76Ev();
static  VTBL_ENTRY vtc_S1307C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1307C3[0]),
  (VTBL_ENTRY)&_ZN7S1307C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1307C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1307C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1307C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1307C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1307C33v80Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1307C3[0]),
  (VTBL_ENTRY)&_ZN7S1307C63v76Ev,
};
extern VTBL_ENTRY _ZTI7S1307C3[];
extern  VTBL_ENTRY _ZTV7S1307C3[];
Class_Descriptor cd_S1307C3 = {  "S1307C3", // class name
  bases_S1307C3, 2,
  &(vtc_S1307C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1307C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1307C3),75, //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  S1307C12_nt  {
  void *s1307c12f0;
  int s1307c12f1[2];
  ::S1566C29 s1307c12f2;
  void *s1307c12f3;
  void  mf1307c12(); // _ZN11S1307C12_nt9mf1307c12Ev
};
//SIG(-1 S1307C12_nt) C1{ m Fp Fi[2] FC2{ BC3{ m Fp Fi[2]}} Fp}


void  S1307C12_nt ::mf1307c12(){}

//skip512 S1307C12_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1307C2  : S1307C3 {
  int s1307c2f0;
  unsigned int s1307c2f1:1;
  unsigned int s1307c2f2:1;
  unsigned int s1307c2f3:1;
  unsigned int s1307c2f4:1;
  ::S1566C9 s1307c2f5;
  ::S1537C22 s1307c2f6;
  ::S1537C22 s1307c2f7;
  ::S1307C12_nt s1307c2f8;
  ::S1537C18 s1307c2f9;
  __tsi64 s1307c2f10;
  ::S1566C22_nt s1307c2f11;
  ::S1537C12 s1307c2f12;
  ::S1537C12 s1307c2f13;
  ::S1537C12 s1307c2f14;
  ::S1537C12 s1307c2f15;
  ::S1537C6_nt s1307c2f16;
  void *s1307c2f17;
  char s1307c2f18;
  __tsi64 s1307c2f19[2];
  void *s1307c2f20;
  int s1307c2f21;
  virtual  ~S1307C2(); // _ZN7S1307C2D1Ev
  virtual void  v81(); // _ZN7S1307C23v81Ev
  virtual void  v82(); // _ZN7S1307C23v82Ev
  virtual void  v83(); // _ZN7S1307C23v83Ev
  virtual void  v84(); // _ZN7S1307C23v84Ev
  virtual void  v85(); // _ZN7S1307C23v85Ev
  virtual void  v86(); // _ZN7S1307C23v86Ev
  virtual void  v87(); // _ZN7S1307C23v87Ev
  virtual void  v88(); // _ZN7S1307C23v88Ev
  virtual void  v89(); // _ZN7S1307C23v89Ev
  virtual void  v90(); // _ZN7S1307C23v90Ev
  virtual void  v91(); // _ZN7S1307C23v91Ev
  virtual void  v92(); // _ZN7S1307C23v92Ev
  virtual void  v93(); // _ZN7S1307C23v93Ev
  virtual void  v94(); // _ZN7S1307C23v94Ev
  virtual void  v95(); // _ZN7S1307C23v95Ev
  S1307C2(); // tgen
};
//SIG(-1 S1307C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v80} vd v81 v82 v83 v84} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fi Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} FC9 FC11{ m Fp Fi[2] FC12{ BC8} Fp} FC13{ BC14{ BC8}} FL FC15{ BC16{ m FC17{ BC8} Fp Fi}} FC18{ BC19{ BC8}} FC18 FC18 FC18 FC20{ BC21{ BC8}} Fp Fc FL[2] Fp Fi}


 S1307C2 ::~S1307C2(){ note_dtor("S1307C2", this);}
void  S1307C2 ::v81(){vfunc_called(this, "_ZN7S1307C23v81Ev");}
void  S1307C2 ::v82(){vfunc_called(this, "_ZN7S1307C23v82Ev");}
void  S1307C2 ::v83(){vfunc_called(this, "_ZN7S1307C23v83Ev");}
void  S1307C2 ::v84(){vfunc_called(this, "_ZN7S1307C23v84Ev");}
void  S1307C2 ::v85(){vfunc_called(this, "_ZN7S1307C23v85Ev");}
void  S1307C2 ::v86(){vfunc_called(this, "_ZN7S1307C23v86Ev");}
void  S1307C2 ::v87(){vfunc_called(this, "_ZN7S1307C23v87Ev");}
void  S1307C2 ::v88(){vfunc_called(this, "_ZN7S1307C23v88Ev");}
void  S1307C2 ::v89(){vfunc_called(this, "_ZN7S1307C23v89Ev");}
void  S1307C2 ::v90(){vfunc_called(this, "_ZN7S1307C23v90Ev");}
void  S1307C2 ::v91(){vfunc_called(this, "_ZN7S1307C23v91Ev");}
void  S1307C2 ::v92(){vfunc_called(this, "_ZN7S1307C23v92Ev");}
void  S1307C2 ::v93(){vfunc_called(this, "_ZN7S1307C23v93Ev");}
void  S1307C2 ::v94(){vfunc_called(this, "_ZN7S1307C23v94Ev");}
void  S1307C2 ::v95(){vfunc_called(this, "_ZN7S1307C23v95Ev");}
S1307C2 ::S1307C2(){ note_ctor("S1307C2", this);} // tgen

static void Test_S1307C2()
{
  extern Class_Descriptor cd_S1307C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,68)];
    init_test(&cd_S1307C2, buf);
    S1307C2 *dp, &lv = *(dp=new (buf) S1307C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,268), "sizeof(S1307C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1307C2)");
    check_base_class_offset(lv, (S1307C4*)(S1307C3*), 0, "S1307C2");
    check_base_class_offset(lv, (S1307C6*)(S1307C3*), ABISELECT(96,60), "S1307C2");
    check_base_class_offset(lv, (S1307C3*), 0, "S1307C2");
    check_field_offset(lv, s1307c2f0, ABISELECT(104,64), "S1307C2.s1307c2f0");
    set_bf_and_test(lv, s1307c2f1, ABISELECT(108,68), 0, 1, 1, "S1307C2");
    set_bf_and_test(lv, s1307c2f2, ABISELECT(108,68), 1, 1, 1, "S1307C2");
    set_bf_and_test(lv, s1307c2f3, ABISELECT(108,68), 2, 1, 1, "S1307C2");
    set_bf_and_test(lv, s1307c2f4, ABISELECT(108,68), 3, 1, 1, "S1307C2");
    check_field_offset(lv, s1307c2f5, ABISELECT(112,72), "S1307C2.s1307c2f5");
    check_field_offset(lv, s1307c2f6, ABISELECT(128,84), "S1307C2.s1307c2f6");
    check_field_offset(lv, s1307c2f7, ABISELECT(144,96), "S1307C2.s1307c2f7");
    check_field_offset(lv, s1307c2f8, ABISELECT(160,108), "S1307C2.s1307c2f8");
    check_field_offset(lv, s1307c2f9, ABISELECT(200,136), "S1307C2.s1307c2f9");
    check_field_offset(lv, s1307c2f10, ABISELECT(216,148), "S1307C2.s1307c2f10");
    check_field_offset(lv, s1307c2f11, ABISELECT(224,156), "S1307C2.s1307c2f11");
    check_field_offset(lv, s1307c2f12, ABISELECT(256,176), "S1307C2.s1307c2f12");
    check_field_offset(lv, s1307c2f13, ABISELECT(272,188), "S1307C2.s1307c2f13");
    check_field_offset(lv, s1307c2f14, ABISELECT(288,200), "S1307C2.s1307c2f14");
    check_field_offset(lv, s1307c2f15, ABISELECT(304,212), "S1307C2.s1307c2f15");
    check_field_offset(lv, s1307c2f16, ABISELECT(320,224), "S1307C2.s1307c2f16");
    check_field_offset(lv, s1307c2f17, ABISELECT(336,236), "S1307C2.s1307c2f17");
    check_field_offset(lv, s1307c2f18, ABISELECT(344,240), "S1307C2.s1307c2f18");
    check_field_offset(lv, s1307c2f19, ABISELECT(352,244), "S1307C2.s1307c2f19");
    check_field_offset(lv, s1307c2f20, ABISELECT(368,260), "S1307C2.s1307c2f20");
    check_field_offset(lv, s1307c2f21, ABISELECT(376,264), "S1307C2.s1307c2f21");
    test_class_info(&lv, &cd_S1307C2);
    dp->~S1307C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1307C2(Test_S1307C2, "S1307C2", ABISELECT(384,268));

#else // __cplusplus

extern void _ZN7S1307C2C1Ev();
extern void _ZN7S1307C2D1Ev();
Name_Map name_map_S1307C2[] = {
  NSPAIR(_ZN7S1307C2C1Ev),
  NSPAIR(_ZN7S1307C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1307C4;
extern VTBL_ENTRY _ZTI7S1307C4[];
extern  VTBL_ENTRY _ZTV7S1307C4[];
extern Class_Descriptor cd_S1307C6;
extern VTBL_ENTRY _ZTI7S1307C6[];
extern  VTBL_ENTRY _ZTV7S1307C6[];
extern Class_Descriptor cd_S1307C3;
extern VTBL_ENTRY _ZTI7S1307C3[];
extern  VTBL_ENTRY _ZTV7S1307C3[];
static Base_Class bases_S1307C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1307C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1307C6,    ABISELECT(96,60), //bcp->offset
    87, //bcp->virtual_function_table_offset
    2, //num_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_S1307C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1307C2[];
extern void _ZN7S1307C2D1Ev();
extern void _ZN7S1307C2D0Ev();
extern void _ZN7S1307C43v12Ev();
extern void _ZN7S1307C43v13Ev();
extern void _ZN7S1307C43v14Ev();
extern void _ZN7S1307C43v15Ev();
extern void _ZN7S1307C43v16Ev();
extern void _ZN7S1307C43v17Ev();
extern void _ZN7S1307C43v18Ev();
extern void _ZN7S1307C43v19Ev();
extern void _ZN7S1307C43v20Ev();
extern void _ZN7S1307C43v21Ev();
extern void _ZN7S1307C43v22Ev();
extern void _ZN7S1307C43v23Ev();
extern void _ZN7S1307C43v24Ev();
extern void _ZN7S1307C43v25Ev();
extern void _ZN7S1307C43v26Ev();
extern void _ZN7S1307C43v27Ev();
extern void _ZN7S1307C43v28Ev();
extern void _ZN7S1307C43v29Ev();
extern void _ZN7S1307C43v30Ev();
extern void _ZN7S1307C43v31Ev();
extern void _ZN7S1307C43v32Ev();
extern void _ZN7S1307C43v33Ev();
extern void _ZN7S1307C43v34Ev();
extern void _ZN7S1307C43v35Ev();
extern void _ZN7S1307C43v36Ev();
extern void _ZN7S1307C43v37Ev();
extern void _ZN7S1307C43v38Ev();
extern void _ZN7S1307C43v39Ev();
extern void _ZN7S1307C43v40Ev();
extern void _ZN7S1307C43v41Ev();
extern void _ZN7S1307C43v42Ev();
extern void _ZN7S1307C43v43Ev();
extern void _ZN7S1307C43v44Ev();
extern void _ZN7S1307C43v45Ev();
extern void _ZN7S1307C43v46Ev();
extern void _ZN7S1307C43v47Ev();
extern void _ZN7S1307C43v48Ev();
extern void _ZN7S1307C43v49Ev();
extern void _ZN7S1307C43v50Ev();
extern void _ZN7S1307C43v51Ev();
extern void _ZN7S1307C43v52Ev();
extern void _ZN7S1307C43v53Ev();
extern void _ZN7S1307C43v54Ev();
extern void _ZN7S1307C43v55Ev();
extern void _ZN7S1307C43v56Ev();
extern void _ZN7S1307C43v57Ev();
extern void _ZN7S1307C43v58Ev();
extern void _ZN7S1307C43v59Ev();
extern void _ZN7S1307C43v60Ev();
extern void _ZN7S1307C43v61Ev();
extern void _ZN7S1307C43v62Ev();
extern void _ZN7S1307C43v63Ev();
extern void _ZN7S1307C43v64Ev();
extern void _ZN7S1307C43v65Ev();
extern void _ZN7S1307C43v66Ev();
extern void _ZN7S1307C43v67Ev();
extern void _ZN7S1307C43v68Ev();
extern void _ZN7S1307C43v69Ev();
extern void _ZN7S1307C43v70Ev();
extern void _ZN7S1307C43v71Ev();
extern void _ZN7S1307C43v72Ev();
extern void _ZN7S1307C43v73Ev();
extern void _ZN7S1307C43v74Ev();
extern void _ZN7S1307C43v75Ev();
extern void _ZN7S1307C33v77Ev();
extern void _ZN7S1307C33v78Ev();
extern void _ZN7S1307C33v79Ev();
extern void _ZN7S1307C33v80Ev();
extern void _ZN7S1307C23v81Ev();
extern void _ZN7S1307C23v82Ev();
extern void _ZN7S1307C23v83Ev();
extern void _ZN7S1307C23v84Ev();
extern void _ZN7S1307C23v85Ev();
extern void _ZN7S1307C23v86Ev();
extern void _ZN7S1307C23v87Ev();
extern void _ZN7S1307C23v88Ev();
extern void _ZN7S1307C23v89Ev();
extern void _ZN7S1307C23v90Ev();
extern void _ZN7S1307C23v91Ev();
extern void _ZN7S1307C23v92Ev();
extern void _ZN7S1307C23v93Ev();
extern void _ZN7S1307C23v94Ev();
extern void _ZN7S1307C23v95Ev();
extern void _ZN7S1307C63v76Ev();
static  VTBL_ENTRY vtc_S1307C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1307C2[0]),
  (VTBL_ENTRY)&_ZN7S1307C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1307C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1307C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1307C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1307C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1307C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v95Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1307C2[0]),
  (VTBL_ENTRY)&_ZN7S1307C63v76Ev,
};
extern VTBL_ENTRY _ZTI7S1307C2[];
extern  VTBL_ENTRY _ZTV7S1307C2[];
Class_Descriptor cd_S1307C2 = {  "S1307C2", // class name
  bases_S1307C2, 3,
  &(vtc_S1307C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,268), // object size
  NSPAIRA(_ZTI7S1307C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1307C2),90, //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  S1307C26  {
  int s1307c26f0[2];
  __tsi64 s1307c26f1[2];
  int s1307c26f2[2];
};
//SIG(-1 S1307C26) C1{ Fi[2] FL[2] Fi[2]}



static void Test_S1307C26()
{
  {
    init_simple_test("S1307C26");
    S1307C26 lv;
    check2(sizeof(lv), 32, "sizeof(S1307C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1307C26)");
    check_field_offset(lv, s1307c26f0, 0, "S1307C26.s1307c26f0");
    check_field_offset(lv, s1307c26f1, 8, "S1307C26.s1307c26f1");
    check_field_offset(lv, s1307c26f2, 24, "S1307C26.s1307c26f2");
  }
}
static Arrange_To_Call_Me vS1307C26(Test_S1307C26, "S1307C26", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1307C1  : S1307C2 {
  ::S1566C10 s1307c1f0;
  ::S1307C12_nt s1307c1f1;
  int s1307c1f2[2];
  ::S1307C26 s1307c1f3;
  void *s1307c1f4;
  __tsi64 s1307c1f5;
  void *s1307c1f6[2];
  int s1307c1f7[3];
  virtual  ~S1307C1(); // _ZN7S1307C1D1Ev
  virtual void  v1(); // _ZN7S1307C12v1Ev
  virtual void  v2(); // _ZN7S1307C12v2Ev
  virtual void  v3(); // _ZN7S1307C12v3Ev
  virtual void  v4(); // _ZN7S1307C12v4Ev
  virtual void  v5(); // _ZN7S1307C12v5Ev
  virtual void  v6(); // _ZN7S1307C12v6Ev
  virtual void  v7(); // _ZN7S1307C12v7Ev
  virtual void  v8(); // _ZN7S1307C12v8Ev
  virtual void  v9(); // _ZN7S1307C12v9Ev
  virtual void  v10(); // _ZN7S1307C13v10Ev
  virtual void  v11(); // _ZN7S1307C13v11Ev
  S1307C1(); // tgen
};
//SIG(1 S1307C1) C1{ BC2{ BC3{ BC4{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} BC6{ v76} vd v77 v78 v79 v80} vd v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 Fi Fi:1 Fi:1 Fi:1 Fi:1 FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC10{ BC11{ BC9}} FC10 FC12{ m Fp Fi[2] FC13{ BC9} Fp} FC14{ BC15{ BC9}} FL FC16{ BC17{ m FC18{ BC9} Fp Fi}} FC19{ BC20{ BC9}} FC19 FC19 FC19 FC21{ BC22{ BC9}} Fp Fc FL[2] Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC8 FC12 Fi[2] FC23{ Fi[2] FL[2] Fi[2]} Fp FL Fp[2] Fi[3]}


 S1307C1 ::~S1307C1(){ note_dtor("S1307C1", this);}
void  S1307C1 ::v1(){vfunc_called(this, "_ZN7S1307C12v1Ev");}
void  S1307C1 ::v2(){vfunc_called(this, "_ZN7S1307C12v2Ev");}
void  S1307C1 ::v3(){vfunc_called(this, "_ZN7S1307C12v3Ev");}
void  S1307C1 ::v4(){vfunc_called(this, "_ZN7S1307C12v4Ev");}
void  S1307C1 ::v5(){vfunc_called(this, "_ZN7S1307C12v5Ev");}
void  S1307C1 ::v6(){vfunc_called(this, "_ZN7S1307C12v6Ev");}
void  S1307C1 ::v7(){vfunc_called(this, "_ZN7S1307C12v7Ev");}
void  S1307C1 ::v8(){vfunc_called(this, "_ZN7S1307C12v8Ev");}
void  S1307C1 ::v9(){vfunc_called(this, "_ZN7S1307C12v9Ev");}
void  S1307C1 ::v10(){vfunc_called(this, "_ZN7S1307C13v10Ev");}
void  S1307C1 ::v11(){vfunc_called(this, "_ZN7S1307C13v11Ev");}
S1307C1 ::S1307C1(){ note_ctor("S1307C1", this);} // tgen

static void Test_S1307C1()
{
  extern Class_Descriptor cd_S1307C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(67,96)];
    init_test(&cd_S1307C1, buf);
    S1307C1 *dp, &lv = *(dp=new (buf) S1307C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,380), "sizeof(S1307C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1307C1)");
    check_base_class_offset(lv, (S1307C4*)(S1307C3*)(S1307C2*), 0, "S1307C1");
    check_base_class_offset(lv, (S1307C6*)(S1307C3*)(S1307C2*), ABISELECT(96,60), "S1307C1");
    check_base_class_offset(lv, (S1307C3*)(S1307C2*), 0, "S1307C1");
    check_base_class_offset(lv, (S1307C2*), 0, "S1307C1");
    check_field_offset(lv, s1307c1f0, ABISELECT(384,268), "S1307C1.s1307c1f0");
    check_field_offset(lv, s1307c1f1, ABISELECT(400,280), "S1307C1.s1307c1f1");
    check_field_offset(lv, s1307c1f2, ABISELECT(440,308), "S1307C1.s1307c1f2");
    check_field_offset(lv, s1307c1f3, ABISELECT(448,316), "S1307C1.s1307c1f3");
    check_field_offset(lv, s1307c1f4, ABISELECT(480,348), "S1307C1.s1307c1f4");
    check_field_offset(lv, s1307c1f5, ABISELECT(488,352), "S1307C1.s1307c1f5");
    check_field_offset(lv, s1307c1f6, ABISELECT(496,360), "S1307C1.s1307c1f6");
    check_field_offset(lv, s1307c1f7, ABISELECT(512,368), "S1307C1.s1307c1f7");
    test_class_info(&lv, &cd_S1307C1);
    dp->~S1307C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1307C1(Test_S1307C1, "S1307C1", ABISELECT(528,380));

#else // __cplusplus

extern void _ZN7S1307C1C1Ev();
extern void _ZN7S1307C1D1Ev();
Name_Map name_map_S1307C1[] = {
  NSPAIR(_ZN7S1307C1C1Ev),
  NSPAIR(_ZN7S1307C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1307C4;
extern VTBL_ENTRY _ZTI7S1307C4[];
extern  VTBL_ENTRY _ZTV7S1307C4[];
extern Class_Descriptor cd_S1307C6;
extern VTBL_ENTRY _ZTI7S1307C6[];
extern  VTBL_ENTRY _ZTV7S1307C6[];
extern Class_Descriptor cd_S1307C3;
extern VTBL_ENTRY _ZTI7S1307C3[];
extern  VTBL_ENTRY _ZTV7S1307C3[];
extern Class_Descriptor cd_S1307C2;
extern VTBL_ENTRY _ZTI7S1307C2[];
extern  VTBL_ENTRY _ZTV7S1307C2[];
static Base_Class bases_S1307C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1307C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1307C6,    ABISELECT(96,60), //bcp->offset
    98, //bcp->virtual_function_table_offset
    2, //num_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_S1307C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1307C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1307C1[];
extern void _ZN7S1307C1D1Ev();
extern void _ZN7S1307C1D0Ev();
extern void _ZN7S1307C43v12Ev();
extern void _ZN7S1307C43v13Ev();
extern void _ZN7S1307C43v14Ev();
extern void _ZN7S1307C43v15Ev();
extern void _ZN7S1307C43v16Ev();
extern void _ZN7S1307C43v17Ev();
extern void _ZN7S1307C43v18Ev();
extern void _ZN7S1307C43v19Ev();
extern void _ZN7S1307C43v20Ev();
extern void _ZN7S1307C43v21Ev();
extern void _ZN7S1307C43v22Ev();
extern void _ZN7S1307C43v23Ev();
extern void _ZN7S1307C43v24Ev();
extern void _ZN7S1307C43v25Ev();
extern void _ZN7S1307C43v26Ev();
extern void _ZN7S1307C43v27Ev();
extern void _ZN7S1307C43v28Ev();
extern void _ZN7S1307C43v29Ev();
extern void _ZN7S1307C43v30Ev();
extern void _ZN7S1307C43v31Ev();
extern void _ZN7S1307C43v32Ev();
extern void _ZN7S1307C43v33Ev();
extern void _ZN7S1307C43v34Ev();
extern void _ZN7S1307C43v35Ev();
extern void _ZN7S1307C43v36Ev();
extern void _ZN7S1307C43v37Ev();
extern void _ZN7S1307C43v38Ev();
extern void _ZN7S1307C43v39Ev();
extern void _ZN7S1307C43v40Ev();
extern void _ZN7S1307C43v41Ev();
extern void _ZN7S1307C43v42Ev();
extern void _ZN7S1307C43v43Ev();
extern void _ZN7S1307C43v44Ev();
extern void _ZN7S1307C43v45Ev();
extern void _ZN7S1307C43v46Ev();
extern void _ZN7S1307C43v47Ev();
extern void _ZN7S1307C43v48Ev();
extern void _ZN7S1307C43v49Ev();
extern void _ZN7S1307C43v50Ev();
extern void _ZN7S1307C43v51Ev();
extern void _ZN7S1307C43v52Ev();
extern void _ZN7S1307C43v53Ev();
extern void _ZN7S1307C43v54Ev();
extern void _ZN7S1307C43v55Ev();
extern void _ZN7S1307C43v56Ev();
extern void _ZN7S1307C43v57Ev();
extern void _ZN7S1307C43v58Ev();
extern void _ZN7S1307C43v59Ev();
extern void _ZN7S1307C43v60Ev();
extern void _ZN7S1307C43v61Ev();
extern void _ZN7S1307C43v62Ev();
extern void _ZN7S1307C43v63Ev();
extern void _ZN7S1307C43v64Ev();
extern void _ZN7S1307C43v65Ev();
extern void _ZN7S1307C43v66Ev();
extern void _ZN7S1307C43v67Ev();
extern void _ZN7S1307C43v68Ev();
extern void _ZN7S1307C43v69Ev();
extern void _ZN7S1307C43v70Ev();
extern void _ZN7S1307C43v71Ev();
extern void _ZN7S1307C43v72Ev();
extern void _ZN7S1307C43v73Ev();
extern void _ZN7S1307C43v74Ev();
extern void _ZN7S1307C43v75Ev();
extern void _ZN7S1307C33v77Ev();
extern void _ZN7S1307C33v78Ev();
extern void _ZN7S1307C33v79Ev();
extern void _ZN7S1307C33v80Ev();
extern void _ZN7S1307C23v81Ev();
extern void _ZN7S1307C23v82Ev();
extern void _ZN7S1307C23v83Ev();
extern void _ZN7S1307C23v84Ev();
extern void _ZN7S1307C23v85Ev();
extern void _ZN7S1307C23v86Ev();
extern void _ZN7S1307C23v87Ev();
extern void _ZN7S1307C23v88Ev();
extern void _ZN7S1307C23v89Ev();
extern void _ZN7S1307C23v90Ev();
extern void _ZN7S1307C23v91Ev();
extern void _ZN7S1307C23v92Ev();
extern void _ZN7S1307C23v93Ev();
extern void _ZN7S1307C23v94Ev();
extern void _ZN7S1307C23v95Ev();
extern void _ZN7S1307C12v1Ev();
extern void _ZN7S1307C12v2Ev();
extern void _ZN7S1307C12v3Ev();
extern void _ZN7S1307C12v4Ev();
extern void _ZN7S1307C12v5Ev();
extern void _ZN7S1307C12v6Ev();
extern void _ZN7S1307C12v7Ev();
extern void _ZN7S1307C12v8Ev();
extern void _ZN7S1307C12v9Ev();
extern void _ZN7S1307C13v10Ev();
extern void _ZN7S1307C13v11Ev();
extern void _ZN7S1307C63v76Ev();
static  VTBL_ENTRY vtc_S1307C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1307C1[0]),
  (VTBL_ENTRY)&_ZN7S1307C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1307C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1307C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1307C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1307C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1307C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1307C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1307C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1307C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1307C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1307C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1307C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1307C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1307C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1307C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1307C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1307C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1307C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1307C13v11Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1307C1[0]),
  (VTBL_ENTRY)&_ZN7S1307C63v76Ev,
};
extern VTBL_ENTRY _ZTI7S1307C1[];
extern  VTBL_ENTRY _ZTV7S1307C1[];
Class_Descriptor cd_S1307C1 = {  "S1307C1", // class name
  bases_S1307C1, 4,
  &(vtc_S1307C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(528,380), // object size
  NSPAIRA(_ZTI7S1307C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1307C1),101, //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  S544C5  {
  int s544c5f0;
  __tsi64 s544c5f1;
  void *s544c5f2[4];
  int s544c5f3[2];
  void *s544c5f4;
  ::S1566C14_nt s544c5f5;
  void *s544c5f6[2];
  virtual  ~S544C5(); // _ZN6S544C5D1Ev
  virtual void  v4(); // _ZN6S544C52v4Ev
  virtual void  v5(); // _ZN6S544C52v5Ev
  virtual void  v6(); // _ZN6S544C52v6Ev
  virtual void  v7(); // _ZN6S544C52v7Ev
  virtual void  v8(); // _ZN6S544C52v8Ev
  virtual void  v9(); // _ZN6S544C52v9Ev
  virtual void  v10(); // _ZN6S544C53v10Ev
  virtual void  v11(); // _ZN6S544C53v11Ev
  virtual void  v12(); // _ZN6S544C53v12Ev
  virtual void  v13(); // _ZN6S544C53v13Ev
  virtual void  v14(); // _ZN6S544C53v14Ev
  virtual void  v15(); // _ZN6S544C53v15Ev
  virtual void  v16(); // _ZN6S544C53v16Ev
  virtual void  v17(); // _ZN6S544C53v17Ev
  virtual void  v18(); // _ZN6S544C53v18Ev
  virtual void  v19(); // _ZN6S544C53v19Ev
  virtual void  v20(); // _ZN6S544C53v20Ev
  virtual void  v21(); // _ZN6S544C53v21Ev
  virtual void  v22(); // _ZN6S544C53v22Ev
  virtual void  v23(); // _ZN6S544C53v23Ev
  virtual void  v24(); // _ZN6S544C53v24Ev
  virtual void  v25(); // _ZN6S544C53v25Ev
  virtual void  v26(); // _ZN6S544C53v26Ev
  virtual void  v27(); // _ZN6S544C53v27Ev
  virtual void  v28(); // _ZN6S544C53v28Ev
  virtual void  v29(); // _ZN6S544C53v29Ev
  virtual void  v30(); // _ZN6S544C53v30Ev
  virtual void  v31(); // _ZN6S544C53v31Ev
  virtual void  v32(); // _ZN6S544C53v32Ev
  virtual void  v33(); // _ZN6S544C53v33Ev
  virtual void  v34(); // _ZN6S544C53v34Ev
  virtual void  v35(); // _ZN6S544C53v35Ev
  virtual void  v36(); // _ZN6S544C53v36Ev
  virtual void  v37(); // _ZN6S544C53v37Ev
  virtual void  v38(); // _ZN6S544C53v38Ev
  virtual void  v39(); // _ZN6S544C53v39Ev
  virtual void  v40(); // _ZN6S544C53v40Ev
  virtual void  v41(); // _ZN6S544C53v41Ev
  virtual void  v42(); // _ZN6S544C53v42Ev
  virtual void  v43(); // _ZN6S544C53v43Ev
  virtual void  v44(); // _ZN6S544C53v44Ev
  virtual void  v45(); // _ZN6S544C53v45Ev
  virtual void  v46(); // _ZN6S544C53v46Ev
  virtual void  v47(); // _ZN6S544C53v47Ev
  virtual void  v48(); // _ZN6S544C53v48Ev
  virtual void  v49(); // _ZN6S544C53v49Ev
  virtual void  v50(); // _ZN6S544C53v50Ev
  virtual void  v51(); // _ZN6S544C53v51Ev
  virtual void  v52(); // _ZN6S544C53v52Ev
  virtual void  v53(); // _ZN6S544C53v53Ev
  virtual void  v54(); // _ZN6S544C53v54Ev
  virtual void  v55(); // _ZN6S544C53v55Ev
  virtual void  v56(); // _ZN6S544C53v56Ev
  virtual void  v57(); // _ZN6S544C53v57Ev
  virtual void  v58(); // _ZN6S544C53v58Ev
  virtual void  v59(); // _ZN6S544C53v59Ev
  virtual void  v60(); // _ZN6S544C53v60Ev
  virtual void  v61(); // _ZN6S544C53v61Ev
  virtual void  v62(); // _ZN6S544C53v62Ev
  virtual void  v63(); // _ZN6S544C53v63Ev
  virtual void  v64(); // _ZN6S544C53v64Ev
  virtual void  v65(); // _ZN6S544C53v65Ev
  virtual void  v66(); // _ZN6S544C53v66Ev
  virtual void  v67(); // _ZN6S544C53v67Ev
  S544C5(); // tgen
};
//SIG(-1 S544C5) 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]}


 S544C5 ::~S544C5(){ note_dtor("S544C5", this);}
void  S544C5 ::v4(){vfunc_called(this, "_ZN6S544C52v4Ev");}
void  S544C5 ::v5(){vfunc_called(this, "_ZN6S544C52v5Ev");}
void  S544C5 ::v6(){vfunc_called(this, "_ZN6S544C52v6Ev");}
void  S544C5 ::v7(){vfunc_called(this, "_ZN6S544C52v7Ev");}
void  S544C5 ::v8(){vfunc_called(this, "_ZN6S544C52v8Ev");}
void  S544C5 ::v9(){vfunc_called(this, "_ZN6S544C52v9Ev");}
void  S544C5 ::v10(){vfunc_called(this, "_ZN6S544C53v10Ev");}
void  S544C5 ::v11(){vfunc_called(this, "_ZN6S544C53v11Ev");}
void  S544C5 ::v12(){vfunc_called(this, "_ZN6S544C53v12Ev");}
void  S544C5 ::v13(){vfunc_called(this, "_ZN6S544C53v13Ev");}
void  S544C5 ::v14(){vfunc_called(this, "_ZN6S544C53v14Ev");}
void  S544C5 ::v15(){vfunc_called(this, "_ZN6S544C53v15Ev");}
void  S544C5 ::v16(){vfunc_called(this, "_ZN6S544C53v16Ev");}
void  S544C5 ::v17(){vfunc_called(this, "_ZN6S544C53v17Ev");}
void  S544C5 ::v18(){vfunc_called(this, "_ZN6S544C53v18Ev");}
void  S544C5 ::v19(){vfunc_called(this, "_ZN6S544C53v19Ev");}
void  S544C5 ::v20(){vfunc_called(this, "_ZN6S544C53v20Ev");}
void  S544C5 ::v21(){vfunc_called(this, "_ZN6S544C53v21Ev");}
void  S544C5 ::v22(){vfunc_called(this, "_ZN6S544C53v22Ev");}
void  S544C5 ::v23(){vfunc_called(this, "_ZN6S544C53v23Ev");}
void  S544C5 ::v24(){vfunc_called(this, "_ZN6S544C53v24Ev");}
void  S544C5 ::v25(){vfunc_called(this, "_ZN6S544C53v25Ev");}
void  S544C5 ::v26(){vfunc_called(this, "_ZN6S544C53v26Ev");}
void  S544C5 ::v27(){vfunc_called(this, "_ZN6S544C53v27Ev");}
void  S544C5 ::v28(){vfunc_called(this, "_ZN6S544C53v28Ev");}
void  S544C5 ::v29(){vfunc_called(this, "_ZN6S544C53v29Ev");}
void  S544C5 ::v30(){vfunc_called(this, "_ZN6S544C53v30Ev");}
void  S544C5 ::v31(){vfunc_called(this, "_ZN6S544C53v31Ev");}
void  S544C5 ::v32(){vfunc_called(this, "_ZN6S544C53v32Ev");}
void  S544C5 ::v33(){vfunc_called(this, "_ZN6S544C53v33Ev");}
void  S544C5 ::v34(){vfunc_called(this, "_ZN6S544C53v34Ev");}
void  S544C5 ::v35(){vfunc_called(this, "_ZN6S544C53v35Ev");}
void  S544C5 ::v36(){vfunc_called(this, "_ZN6S544C53v36Ev");}
void  S544C5 ::v37(){vfunc_called(this, "_ZN6S544C53v37Ev");}
void  S544C5 ::v38(){vfunc_called(this, "_ZN6S544C53v38Ev");}
void  S544C5 ::v39(){vfunc_called(this, "_ZN6S544C53v39Ev");}
void  S544C5 ::v40(){vfunc_called(this, "_ZN6S544C53v40Ev");}
void  S544C5 ::v41(){vfunc_called(this, "_ZN6S544C53v41Ev");}
void  S544C5 ::v42(){vfunc_called(this, "_ZN6S544C53v42Ev");}
void  S544C5 ::v43(){vfunc_called(this, "_ZN6S544C53v43Ev");}
void  S544C5 ::v44(){vfunc_called(this, "_ZN6S544C53v44Ev");}
void  S544C5 ::v45(){vfunc_called(this, "_ZN6S544C53v45Ev");}
void  S544C5 ::v46(){vfunc_called(this, "_ZN6S544C53v46Ev");}
void  S544C5 ::v47(){vfunc_called(this, "_ZN6S544C53v47Ev");}
void  S544C5 ::v48(){vfunc_called(this, "_ZN6S544C53v48Ev");}
void  S544C5 ::v49(){vfunc_called(this, "_ZN6S544C53v49Ev");}
void  S544C5 ::v50(){vfunc_called(this, "_ZN6S544C53v50Ev");}
void  S544C5 ::v51(){vfunc_called(this, "_ZN6S544C53v51Ev");}
void  S544C5 ::v52(){vfunc_called(this, "_ZN6S544C53v52Ev");}
void  S544C5 ::v53(){vfunc_called(this, "_ZN6S544C53v53Ev");}
void  S544C5 ::v54(){vfunc_called(this, "_ZN6S544C53v54Ev");}
void  S544C5 ::v55(){vfunc_called(this, "_ZN6S544C53v55Ev");}
void  S544C5 ::v56(){vfunc_called(this, "_ZN6S544C53v56Ev");}
void  S544C5 ::v57(){vfunc_called(this, "_ZN6S544C53v57Ev");}
void  S544C5 ::v58(){vfunc_called(this, "_ZN6S544C53v58Ev");}
void  S544C5 ::v59(){vfunc_called(this, "_ZN6S544C53v59Ev");}
void  S544C5 ::v60(){vfunc_called(this, "_ZN6S544C53v60Ev");}
void  S544C5 ::v61(){vfunc_called(this, "_ZN6S544C53v61Ev");}
void  S544C5 ::v62(){vfunc_called(this, "_ZN6S544C53v62Ev");}
void  S544C5 ::v63(){vfunc_called(this, "_ZN6S544C53v63Ev");}
void  S544C5 ::v64(){vfunc_called(this, "_ZN6S544C53v64Ev");}
void  S544C5 ::v65(){vfunc_called(this, "_ZN6S544C53v65Ev");}
void  S544C5 ::v66(){vfunc_called(this, "_ZN6S544C53v66Ev");}
void  S544C5 ::v67(){vfunc_called(this, "_ZN6S544C53v67Ev");}
S544C5 ::S544C5(){ note_ctor("S544C5", this);} // tgen

static void Test_S544C5()
{
  extern Class_Descriptor cd_S544C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S544C5, buf);
    S544C5 *dp, &lv = *(dp=new (buf) S544C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S544C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S544C5)");
    check_field_offset(lv, s544c5f0, ABISELECT(8,4), "S544C5.s544c5f0");
    check_field_offset(lv, s544c5f1, ABISELECT(16,8), "S544C5.s544c5f1");
    check_field_offset(lv, s544c5f2, ABISELECT(24,16), "S544C5.s544c5f2");
    check_field_offset(lv, s544c5f3, ABISELECT(56,32), "S544C5.s544c5f3");
    check_field_offset(lv, s544c5f4, ABISELECT(64,40), "S544C5.s544c5f4");
    check_field_offset(lv, s544c5f5, ABISELECT(72,44), "S544C5.s544c5f5");
    check_field_offset(lv, s544c5f6, ABISELECT(80,52), "S544C5.s544c5f6");
    test_class_info(&lv, &cd_S544C5);
    dp->~S544C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS544C5(Test_S544C5, "S544C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S544C5C1Ev();
extern void _ZN6S544C5D1Ev();
Name_Map name_map_S544C5[] = {
  NSPAIR(_ZN6S544C5C1Ev),
  NSPAIR(_ZN6S544C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S544C5[];
extern void _ZN6S544C5D1Ev();
extern void _ZN6S544C5D0Ev();
extern void _ZN6S544C52v4Ev();
extern void _ZN6S544C52v5Ev();
extern void _ZN6S544C52v6Ev();
extern void _ZN6S544C52v7Ev();
extern void _ZN6S544C52v8Ev();
extern void _ZN6S544C52v9Ev();
extern void _ZN6S544C53v10Ev();
extern void _ZN6S544C53v11Ev();
extern void _ZN6S544C53v12Ev();
extern void _ZN6S544C53v13Ev();
extern void _ZN6S544C53v14Ev();
extern void _ZN6S544C53v15Ev();
extern void _ZN6S544C53v16Ev();
extern void _ZN6S544C53v17Ev();
extern void _ZN6S544C53v18Ev();
extern void _ZN6S544C53v19Ev();
extern void _ZN6S544C53v20Ev();
extern void _ZN6S544C53v21Ev();
extern void _ZN6S544C53v22Ev();
extern void _ZN6S544C53v23Ev();
extern void _ZN6S544C53v24Ev();
extern void _ZN6S544C53v25Ev();
extern void _ZN6S544C53v26Ev();
extern void _ZN6S544C53v27Ev();
extern void _ZN6S544C53v28Ev();
extern void _ZN6S544C53v29Ev();
extern void _ZN6S544C53v30Ev();
extern void _ZN6S544C53v31Ev();
extern void _ZN6S544C53v32Ev();
extern void _ZN6S544C53v33Ev();
extern void _ZN6S544C53v34Ev();
extern void _ZN6S544C53v35Ev();
extern void _ZN6S544C53v36Ev();
extern void _ZN6S544C53v37Ev();
extern void _ZN6S544C53v38Ev();
extern void _ZN6S544C53v39Ev();
extern void _ZN6S544C53v40Ev();
extern void _ZN6S544C53v41Ev();
extern void _ZN6S544C53v42Ev();
extern void _ZN6S544C53v43Ev();
extern void _ZN6S544C53v44Ev();
extern void _ZN6S544C53v45Ev();
extern void _ZN6S544C53v46Ev();
extern void _ZN6S544C53v47Ev();
extern void _ZN6S544C53v48Ev();
extern void _ZN6S544C53v49Ev();
extern void _ZN6S544C53v50Ev();
extern void _ZN6S544C53v51Ev();
extern void _ZN6S544C53v52Ev();
extern void _ZN6S544C53v53Ev();
extern void _ZN6S544C53v54Ev();
extern void _ZN6S544C53v55Ev();
extern void _ZN6S544C53v56Ev();
extern void _ZN6S544C53v57Ev();
extern void _ZN6S544C53v58Ev();
extern void _ZN6S544C53v59Ev();
extern void _ZN6S544C53v60Ev();
extern void _ZN6S544C53v61Ev();
extern void _ZN6S544C53v62Ev();
extern void _ZN6S544C53v63Ev();
extern void _ZN6S544C53v64Ev();
extern void _ZN6S544C53v65Ev();
extern void _ZN6S544C53v66Ev();
extern void _ZN6S544C53v67Ev();
static  VTBL_ENTRY vtc_S544C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S544C5[0]),
  (VTBL_ENTRY)&_ZN6S544C5D1Ev,
  (VTBL_ENTRY)&_ZN6S544C5D0Ev,
  (VTBL_ENTRY)&_ZN6S544C52v4Ev,
  (VTBL_ENTRY)&_ZN6S544C52v5Ev,
  (VTBL_ENTRY)&_ZN6S544C52v6Ev,
  (VTBL_ENTRY)&_ZN6S544C52v7Ev,
  (VTBL_ENTRY)&_ZN6S544C52v8Ev,
  (VTBL_ENTRY)&_ZN6S544C52v9Ev,
  (VTBL_ENTRY)&_ZN6S544C53v10Ev,
  (VTBL_ENTRY)&_ZN6S544C53v11Ev,
  (VTBL_ENTRY)&_ZN6S544C53v12Ev,
  (VTBL_ENTRY)&_ZN6S544C53v13Ev,
  (VTBL_ENTRY)&_ZN6S544C53v14Ev,
  (VTBL_ENTRY)&_ZN6S544C53v15Ev,
  (VTBL_ENTRY)&_ZN6S544C53v16Ev,
  (VTBL_ENTRY)&_ZN6S544C53v17Ev,
  (VTBL_ENTRY)&_ZN6S544C53v18Ev,
  (VTBL_ENTRY)&_ZN6S544C53v19Ev,
  (VTBL_ENTRY)&_ZN6S544C53v20Ev,
  (VTBL_ENTRY)&_ZN6S544C53v21Ev,
  (VTBL_ENTRY)&_ZN6S544C53v22Ev,
  (VTBL_ENTRY)&_ZN6S544C53v23Ev,
  (VTBL_ENTRY)&_ZN6S544C53v24Ev,
  (VTBL_ENTRY)&_ZN6S544C53v25Ev,
  (VTBL_ENTRY)&_ZN6S544C53v26Ev,
  (VTBL_ENTRY)&_ZN6S544C53v27Ev,
  (VTBL_ENTRY)&_ZN6S544C53v28Ev,
  (VTBL_ENTRY)&_ZN6S544C53v29Ev,
  (VTBL_ENTRY)&_ZN6S544C53v30Ev,
  (VTBL_ENTRY)&_ZN6S544C53v31Ev,
  (VTBL_ENTRY)&_ZN6S544C53v32Ev,
  (VTBL_ENTRY)&_ZN6S544C53v33Ev,
  (VTBL_ENTRY)&_ZN6S544C53v34Ev,
  (VTBL_ENTRY)&_ZN6S544C53v35Ev,
  (VTBL_ENTRY)&_ZN6S544C53v36Ev,
  (VTBL_ENTRY)&_ZN6S544C53v37Ev,
  (VTBL_ENTRY)&_ZN6S544C53v38Ev,
  (VTBL_ENTRY)&_ZN6S544C53v39Ev,
  (VTBL_ENTRY)&_ZN6S544C53v40Ev,
  (VTBL_ENTRY)&_ZN6S544C53v41Ev,
  (VTBL_ENTRY)&_ZN6S544C53v42Ev,
  (VTBL_ENTRY)&_ZN6S544C53v43Ev,
  (VTBL_ENTRY)&_ZN6S544C53v44Ev,
  (VTBL_ENTRY)&_ZN6S544C53v45Ev,
  (VTBL_ENTRY)&_ZN6S544C53v46Ev,
  (VTBL_ENTRY)&_ZN6S544C53v47Ev,
  (VTBL_ENTRY)&_ZN6S544C53v48Ev,
  (VTBL_ENTRY)&_ZN6S544C53v49Ev,
  (VTBL_ENTRY)&_ZN6S544C53v50Ev,
  (VTBL_ENTRY)&_ZN6S544C53v51Ev,
  (VTBL_ENTRY)&_ZN6S544C53v52Ev,
  (VTBL_ENTRY)&_ZN6S544C53v53Ev,
  (VTBL_ENTRY)&_ZN6S544C53v54Ev,
  (VTBL_ENTRY)&_ZN6S544C53v55Ev,
  (VTBL_ENTRY)&_ZN6S544C53v56Ev,
  (VTBL_ENTRY)&_ZN6S544C53v57Ev,
  (VTBL_ENTRY)&_ZN6S544C53v58Ev,
  (VTBL_ENTRY)&_ZN6S544C53v59Ev,
  (VTBL_ENTRY)&_ZN6S544C53v60Ev,
  (VTBL_ENTRY)&_ZN6S544C53v61Ev,
  (VTBL_ENTRY)&_ZN6S544C53v62Ev,
  (VTBL_ENTRY)&_ZN6S544C53v63Ev,
  (VTBL_ENTRY)&_ZN6S544C53v64Ev,
  (VTBL_ENTRY)&_ZN6S544C53v65Ev,
  (VTBL_ENTRY)&_ZN6S544C53v66Ev,
  (VTBL_ENTRY)&_ZN6S544C53v67Ev,
};
extern VTBL_ENTRY _ZTI6S544C5[];
extern  VTBL_ENTRY _ZTV6S544C5[];
Class_Descriptor cd_S544C5 = {  "S544C5", // class name
  0,0,//no base classes
  &(vtc_S544C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S544C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S544C5),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  S544C7  {
  virtual void  v68(); // _ZN6S544C73v68Ev
  ~S544C7(); // tgen
  S544C7(); // tgen
};
//SIG(-1 S544C7) C1{ v1}


void  S544C7 ::v68(){vfunc_called(this, "_ZN6S544C73v68Ev");}
S544C7 ::~S544C7(){ note_dtor("S544C7", this);} // tgen
S544C7 ::S544C7(){ note_ctor("S544C7", this);} // tgen

static void Test_S544C7()
{
  extern Class_Descriptor cd_S544C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S544C7, buf);
    S544C7 *dp, &lv = *(dp=new (buf) S544C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S544C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S544C7)");
    test_class_info(&lv, &cd_S544C7);
    dp->~S544C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS544C7(Test_S544C7, "S544C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S544C7C1Ev();
extern void _ZN6S544C7D1Ev();
Name_Map name_map_S544C7[] = {
  NSPAIR(_ZN6S544C7C1Ev),
  NSPAIR(_ZN6S544C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S544C7[];
extern void _ZN6S544C73v68Ev();
static  VTBL_ENTRY vtc_S544C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S544C7[0]),
  (VTBL_ENTRY)&_ZN6S544C73v68Ev,
};
extern VTBL_ENTRY _ZTI6S544C7[];
extern  VTBL_ENTRY _ZTV6S544C7[];
Class_Descriptor cd_S544C7 = {  "S544C7", // class name
  0,0,//no base classes
  &(vtc_S544C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S544C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S544C7),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  S544C4  : S544C5 , S544C7 {
  virtual  ~S544C4(); // _ZN6S544C4D1Ev
  virtual void  v69(); // _ZN6S544C43v69Ev
  virtual void  v70(); // _ZN6S544C43v70Ev
  virtual void  v71(); // _ZN6S544C43v71Ev
  virtual void  v72(); // _ZN6S544C43v72Ev
  S544C4(); // tgen
};
//SIG(-1 S544C4) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} BC4{ v69} vd v1 v2 v3 v4}


 S544C4 ::~S544C4(){ note_dtor("S544C4", this);}
void  S544C4 ::v69(){vfunc_called(this, "_ZN6S544C43v69Ev");}
void  S544C4 ::v70(){vfunc_called(this, "_ZN6S544C43v70Ev");}
void  S544C4 ::v71(){vfunc_called(this, "_ZN6S544C43v71Ev");}
void  S544C4 ::v72(){vfunc_called(this, "_ZN6S544C43v72Ev");}
S544C4 ::S544C4(){ note_ctor("S544C4", this);} // tgen

static void Test_S544C4()
{
  extern Class_Descriptor cd_S544C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S544C4, buf);
    S544C4 *dp, &lv = *(dp=new (buf) S544C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S544C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S544C4)");
    check_base_class_offset(lv, (S544C5*), 0, "S544C4");
    check_base_class_offset(lv, (S544C7*), ABISELECT(96,60), "S544C4");
    test_class_info(&lv, &cd_S544C4);
    dp->~S544C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS544C4(Test_S544C4, "S544C4", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN6S544C4C1Ev();
extern void _ZN6S544C4D1Ev();
Name_Map name_map_S544C4[] = {
  NSPAIR(_ZN6S544C4C1Ev),
  NSPAIR(_ZN6S544C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S544C5;
extern VTBL_ENTRY _ZTI6S544C5[];
extern  VTBL_ENTRY _ZTV6S544C5[];
extern Class_Descriptor cd_S544C7;
extern VTBL_ENTRY _ZTI6S544C7[];
extern  VTBL_ENTRY _ZTV6S544C7[];
static Base_Class bases_S544C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S544C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S544C7,    ABISELECT(96,60), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S544C4[];
extern void _ZN6S544C4D1Ev();
extern void _ZN6S544C4D0Ev();
extern void _ZN6S544C52v4Ev();
extern void _ZN6S544C52v5Ev();
extern void _ZN6S544C52v6Ev();
extern void _ZN6S544C52v7Ev();
extern void _ZN6S544C52v8Ev();
extern void _ZN6S544C52v9Ev();
extern void _ZN6S544C53v10Ev();
extern void _ZN6S544C53v11Ev();
extern void _ZN6S544C53v12Ev();
extern void _ZN6S544C53v13Ev();
extern void _ZN6S544C53v14Ev();
extern void _ZN6S544C53v15Ev();
extern void _ZN6S544C53v16Ev();
extern void _ZN6S544C53v17Ev();
extern void _ZN6S544C53v18Ev();
extern void _ZN6S544C53v19Ev();
extern void _ZN6S544C53v20Ev();
extern void _ZN6S544C53v21Ev();
extern void _ZN6S544C53v22Ev();
extern void _ZN6S544C53v23Ev();
extern void _ZN6S544C53v24Ev();
extern void _ZN6S544C53v25Ev();
extern void _ZN6S544C53v26Ev();
extern void _ZN6S544C53v27Ev();
extern void _ZN6S544C53v28Ev();
extern void _ZN6S544C53v29Ev();
extern void _ZN6S544C53v30Ev();
extern void _ZN6S544C53v31Ev();
extern void _ZN6S544C53v32Ev();
extern void _ZN6S544C53v33Ev();
extern void _ZN6S544C53v34Ev();
extern void _ZN6S544C53v35Ev();
extern void _ZN6S544C53v36Ev();
extern void _ZN6S544C53v37Ev();
extern void _ZN6S544C53v38Ev();
extern void _ZN6S544C53v39Ev();
extern void _ZN6S544C53v40Ev();
extern void _ZN6S544C53v41Ev();
extern void _ZN6S544C53v42Ev();
extern void _ZN6S544C53v43Ev();
extern void _ZN6S544C53v44Ev();
extern void _ZN6S544C53v45Ev();
extern void _ZN6S544C53v46Ev();
extern void _ZN6S544C53v47Ev();
extern void _ZN6S544C53v48Ev();
extern void _ZN6S544C53v49Ev();
extern void _ZN6S544C53v50Ev();
extern void _ZN6S544C53v51Ev();
extern void _ZN6S544C53v52Ev();
extern void _ZN6S544C53v53Ev();
extern void _ZN6S544C53v54Ev();
extern void _ZN6S544C53v55Ev();
extern void _ZN6S544C53v56Ev();
extern void _ZN6S544C53v57Ev();
extern void _ZN6S544C53v58Ev();
extern void _ZN6S544C53v59Ev();
extern void _ZN6S544C53v60Ev();
extern void _ZN6S544C53v61Ev();
extern void _ZN6S544C53v62Ev();
extern void _ZN6S544C53v63Ev();
extern void _ZN6S544C53v64Ev();
extern void _ZN6S544C53v65Ev();
extern void _ZN6S544C53v66Ev();
extern void _ZN6S544C53v67Ev();
extern void _ZN6S544C43v69Ev();
extern void _ZN6S544C43v70Ev();
extern void _ZN6S544C43v71Ev();
extern void _ZN6S544C43v72Ev();
extern void _ZN6S544C73v68Ev();
static  VTBL_ENTRY vtc_S544C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S544C4[0]),
  (VTBL_ENTRY)&_ZN6S544C4D1Ev,
  (VTBL_ENTRY)&_ZN6S544C4D0Ev,
  (VTBL_ENTRY)&_ZN6S544C52v4Ev,
  (VTBL_ENTRY)&_ZN6S544C52v5Ev,
  (VTBL_ENTRY)&_ZN6S544C52v6Ev,
  (VTBL_ENTRY)&_ZN6S544C52v7Ev,
  (VTBL_ENTRY)&_ZN6S544C52v8Ev,
  (VTBL_ENTRY)&_ZN6S544C52v9Ev,
  (VTBL_ENTRY)&_ZN6S544C53v10Ev,
  (VTBL_ENTRY)&_ZN6S544C53v11Ev,
  (VTBL_ENTRY)&_ZN6S544C53v12Ev,
  (VTBL_ENTRY)&_ZN6S544C53v13Ev,
  (VTBL_ENTRY)&_ZN6S544C53v14Ev,
  (VTBL_ENTRY)&_ZN6S544C53v15Ev,
  (VTBL_ENTRY)&_ZN6S544C53v16Ev,
  (VTBL_ENTRY)&_ZN6S544C53v17Ev,
  (VTBL_ENTRY)&_ZN6S544C53v18Ev,
  (VTBL_ENTRY)&_ZN6S544C53v19Ev,
  (VTBL_ENTRY)&_ZN6S544C53v20Ev,
  (VTBL_ENTRY)&_ZN6S544C53v21Ev,
  (VTBL_ENTRY)&_ZN6S544C53v22Ev,
  (VTBL_ENTRY)&_ZN6S544C53v23Ev,
  (VTBL_ENTRY)&_ZN6S544C53v24Ev,
  (VTBL_ENTRY)&_ZN6S544C53v25Ev,
  (VTBL_ENTRY)&_ZN6S544C53v26Ev,
  (VTBL_ENTRY)&_ZN6S544C53v27Ev,
  (VTBL_ENTRY)&_ZN6S544C53v28Ev,
  (VTBL_ENTRY)&_ZN6S544C53v29Ev,
  (VTBL_ENTRY)&_ZN6S544C53v30Ev,
  (VTBL_ENTRY)&_ZN6S544C53v31Ev,
  (VTBL_ENTRY)&_ZN6S544C53v32Ev,
  (VTBL_ENTRY)&_ZN6S544C53v33Ev,
  (VTBL_ENTRY)&_ZN6S544C53v34Ev,
  (VTBL_ENTRY)&_ZN6S544C53v35Ev,
  (VTBL_ENTRY)&_ZN6S544C53v36Ev,
  (VTBL_ENTRY)&_ZN6S544C53v37Ev,
  (VTBL_ENTRY)&_ZN6S544C53v38Ev,
  (VTBL_ENTRY)&_ZN6S544C53v39Ev,
  (VTBL_ENTRY)&_ZN6S544C53v40Ev,
  (VTBL_ENTRY)&_ZN6S544C53v41Ev,
  (VTBL_ENTRY)&_ZN6S544C53v42Ev,
  (VTBL_ENTRY)&_ZN6S544C53v43Ev,
  (VTBL_ENTRY)&_ZN6S544C53v44Ev,
  (VTBL_ENTRY)&_ZN6S544C53v45Ev,
  (VTBL_ENTRY)&_ZN6S544C53v46Ev,
  (VTBL_ENTRY)&_ZN6S544C53v47Ev,
  (VTBL_ENTRY)&_ZN6S544C53v48Ev,
  (VTBL_ENTRY)&_ZN6S544C53v49Ev,
  (VTBL_ENTRY)&_ZN6S544C53v50Ev,
  (VTBL_ENTRY)&_ZN6S544C53v51Ev,
  (VTBL_ENTRY)&_ZN6S544C53v52Ev,
  (VTBL_ENTRY)&_ZN6S544C53v53Ev,
  (VTBL_ENTRY)&_ZN6S544C53v54Ev,
  (VTBL_ENTRY)&_ZN6S544C53v55Ev,
  (VTBL_ENTRY)&_ZN6S544C53v56Ev,
  (VTBL_ENTRY)&_ZN6S544C53v57Ev,
  (VTBL_ENTRY)&_ZN6S544C53v58Ev,
  (VTBL_ENTRY)&_ZN6S544C53v59Ev,
  (VTBL_ENTRY)&_ZN6S544C53v60Ev,
  (VTBL_ENTRY)&_ZN6S544C53v61Ev,
  (VTBL_ENTRY)&_ZN6S544C53v62Ev,
  (VTBL_ENTRY)&_ZN6S544C53v63Ev,
  (VTBL_ENTRY)&_ZN6S544C53v64Ev,
  (VTBL_ENTRY)&_ZN6S544C53v65Ev,
  (VTBL_ENTRY)&_ZN6S544C53v66Ev,
  (VTBL_ENTRY)&_ZN6S544C53v67Ev,
  (VTBL_ENTRY)&_ZN6S544C43v69Ev,
  (VTBL_ENTRY)&_ZN6S544C43v70Ev,
  (VTBL_ENTRY)&_ZN6S544C43v71Ev,
  (VTBL_ENTRY)&_ZN6S544C43v72Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI6S544C4[0]),
  (VTBL_ENTRY)&_ZN6S544C73v68Ev,
};
extern VTBL_ENTRY _ZTI6S544C4[];
extern  VTBL_ENTRY _ZTV6S544C4[];
Class_Descriptor cd_S544C4 = {  "S544C4", // class name
  bases_S544C4, 2,
  &(vtc_S544C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI6S544C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S544C4),75, //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  S544C8  {
  virtual  ~S544C8(); // _ZN6S544C8D1Ev
  virtual void  v73(); // _ZN6S544C83v73Ev
  virtual void  v74(); // _ZN6S544C83v74Ev
  virtual void  v75(); // _ZN6S544C83v75Ev
  S544C8(); // tgen
};
//SIG(-1 S544C8) C1{ vd v1 v2 v3}


 S544C8 ::~S544C8(){ note_dtor("S544C8", this);}
void  S544C8 ::v73(){vfunc_called(this, "_ZN6S544C83v73Ev");}
void  S544C8 ::v74(){vfunc_called(this, "_ZN6S544C83v74Ev");}
void  S544C8 ::v75(){vfunc_called(this, "_ZN6S544C83v75Ev");}
S544C8 ::S544C8(){ note_ctor("S544C8", this);} // tgen

static void Test_S544C8()
{
  extern Class_Descriptor cd_S544C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S544C8, buf);
    S544C8 *dp, &lv = *(dp=new (buf) S544C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S544C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S544C8)");
    test_class_info(&lv, &cd_S544C8);
    dp->~S544C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS544C8(Test_S544C8, "S544C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S544C8C1Ev();
extern void _ZN6S544C8D1Ev();
Name_Map name_map_S544C8[] = {
  NSPAIR(_ZN6S544C8C1Ev),
  NSPAIR(_ZN6S544C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S544C8[];
extern void _ZN6S544C8D1Ev();
extern void _ZN6S544C8D0Ev();
extern void _ZN6S544C83v73Ev();
extern void _ZN6S544C83v74Ev();
extern void _ZN6S544C83v75Ev();
static  VTBL_ENTRY vtc_S544C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S544C8[0]),
  (VTBL_ENTRY)&_ZN6S544C8D1Ev,
  (VTBL_ENTRY)&_ZN6S544C8D0Ev,
  (VTBL_ENTRY)&_ZN6S544C83v73Ev,
  (VTBL_ENTRY)&_ZN6S544C83v74Ev,
  (VTBL_ENTRY)&_ZN6S544C83v75Ev,
};
extern VTBL_ENTRY _ZTI6S544C8[];
extern  VTBL_ENTRY _ZTV6S544C8[];
Class_Descriptor cd_S544C8 = {  "S544C8", // class name
  0,0,//no base classes
  &(vtc_S544C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S544C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S544C8),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  S544C3  : S544C4 , S544C8 {
  ::S1566C29 s544c3f0;
  void *s544c3f1[3];
  __tsi64 s544c3f2;
  int s544c3f3[12];
  void *s544c3f4[2];
  int s544c3f5[3];
  ::S1566C10 s544c3f6;
  int s544c3f7[16];
  ::S1566C22_nt s544c3f8;
  __tsi64 s544c3f9;
  int s544c3f10;
  ::S1325C7_nt s544c3f11;
  void *s544c3f12;
  ::S1566C30 s544c3f13;
  virtual  ~S544C3(); // _ZN6S544C3D1Ev
  virtual void  v76(); // _ZN6S544C33v76Ev
  virtual void  v77(); // _ZN6S544C33v77Ev
  virtual void  v78(); // _ZN6S544C33v78Ev
  virtual void  v79(); // _ZN6S544C33v79Ev
  virtual void  v80(); // _ZN6S544C33v80Ev
  virtual void  v81(); // _ZN6S544C33v81Ev
  virtual void  v82(); // _ZN6S544C33v82Ev
  virtual void  v83(); // _ZN6S544C33v83Ev
  virtual void  v84(); // _ZN6S544C33v84Ev
  virtual void  v85(); // _ZN6S544C33v85Ev
  virtual void  v86(); // _ZN6S544C33v86Ev
  virtual void  v87(); // _ZN6S544C33v87Ev
  virtual void  v88(); // _ZN6S544C33v88Ev
  virtual void  v89(); // _ZN6S544C33v89Ev
  virtual void  v90(); // _ZN6S544C33v90Ev
  virtual void  v91(); // _ZN6S544C33v91Ev
  virtual void  v92(); // _ZN6S544C33v92Ev
  virtual void  v93(); // _ZN6S544C33v93Ev
  virtual void  v94(); // _ZN6S544C33v94Ev
  virtual void  v95(); // _ZN6S544C33v95Ev
  virtual void  v96(); // _ZN6S544C33v96Ev
  S544C3(); // tgen
};
//SIG(-1 S544C3) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v86} vd v87 v88 v89 v90} BC6{ vd v91 v92 v93} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 FC7{ BC8{ m Fp Fi[2]}} Fp[3] FL Fi[12] Fp[2] Fi[3] FC9{ BC8} Fi[16] FC10{ BC11{ m FC12{ BC8} Fp Fi}} FL Fi FC13{ BC14{ BC15{ BC8}}} Fp FC16{ m Fi[5]}}


 S544C3 ::~S544C3(){ note_dtor("S544C3", this);}
void  S544C3 ::v76(){vfunc_called(this, "_ZN6S544C33v76Ev");}
void  S544C3 ::v77(){vfunc_called(this, "_ZN6S544C33v77Ev");}
void  S544C3 ::v78(){vfunc_called(this, "_ZN6S544C33v78Ev");}
void  S544C3 ::v79(){vfunc_called(this, "_ZN6S544C33v79Ev");}
void  S544C3 ::v80(){vfunc_called(this, "_ZN6S544C33v80Ev");}
void  S544C3 ::v81(){vfunc_called(this, "_ZN6S544C33v81Ev");}
void  S544C3 ::v82(){vfunc_called(this, "_ZN6S544C33v82Ev");}
void  S544C3 ::v83(){vfunc_called(this, "_ZN6S544C33v83Ev");}
void  S544C3 ::v84(){vfunc_called(this, "_ZN6S544C33v84Ev");}
void  S544C3 ::v85(){vfunc_called(this, "_ZN6S544C33v85Ev");}
void  S544C3 ::v86(){vfunc_called(this, "_ZN6S544C33v86Ev");}
void  S544C3 ::v87(){vfunc_called(this, "_ZN6S544C33v87Ev");}
void  S544C3 ::v88(){vfunc_called(this, "_ZN6S544C33v88Ev");}
void  S544C3 ::v89(){vfunc_called(this, "_ZN6S544C33v89Ev");}
void  S544C3 ::v90(){vfunc_called(this, "_ZN6S544C33v90Ev");}
void  S544C3 ::v91(){vfunc_called(this, "_ZN6S544C33v91Ev");}
void  S544C3 ::v92(){vfunc_called(this, "_ZN6S544C33v92Ev");}
void  S544C3 ::v93(){vfunc_called(this, "_ZN6S544C33v93Ev");}
void  S544C3 ::v94(){vfunc_called(this, "_ZN6S544C33v94Ev");}
void  S544C3 ::v95(){vfunc_called(this, "_ZN6S544C33v95Ev");}
void  S544C3 ::v96(){vfunc_called(this, "_ZN6S544C33v96Ev");}
S544C3 ::S544C3(){ note_ctor("S544C3", this);} // tgen

static void Test_S544C3()
{
  extern Class_Descriptor cd_S544C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(53,79)];
    init_test(&cd_S544C3, buf);
    S544C3 *dp, &lv = *(dp=new (buf) S544C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,312), "sizeof(S544C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S544C3)");
    check_base_class_offset(lv, (S544C5*)(S544C4*), 0, "S544C3");
    check_base_class_offset(lv, (S544C7*)(S544C4*), ABISELECT(96,60), "S544C3");
    check_base_class_offset(lv, (S544C4*), 0, "S544C3");
    check_base_class_offset(lv, (S544C8*), ABISELECT(104,64), "S544C3");
    check_field_offset(lv, s544c3f0, ABISELECT(112,68), "S544C3.s544c3f0");
    check_field_offset(lv, s544c3f1, ABISELECT(128,80), "S544C3.s544c3f1");
    check_field_offset(lv, s544c3f2, ABISELECT(152,92), "S544C3.s544c3f2");
    check_field_offset(lv, s544c3f3, ABISELECT(160,100), "S544C3.s544c3f3");
    check_field_offset(lv, s544c3f4, ABISELECT(208,148), "S544C3.s544c3f4");
    check_field_offset(lv, s544c3f5, ABISELECT(224,156), "S544C3.s544c3f5");
    check_field_offset(lv, s544c3f6, ABISELECT(240,168), "S544C3.s544c3f6");
    check_field_offset(lv, s544c3f7, ABISELECT(256,180), "S544C3.s544c3f7");
    check_field_offset(lv, s544c3f8, ABISELECT(320,244), "S544C3.s544c3f8");
    check_field_offset(lv, s544c3f9, ABISELECT(352,264), "S544C3.s544c3f9");
    check_field_offset(lv, s544c3f10, ABISELECT(360,272), "S544C3.s544c3f10");
    check_field_offset(lv, s544c3f11, ABISELECT(368,276), "S544C3.s544c3f11");
    check_field_offset(lv, s544c3f12, ABISELECT(384,288), "S544C3.s544c3f12");
    check_field_offset(lv, s544c3f13, ABISELECT(392,292), "S544C3.s544c3f13");
    test_class_info(&lv, &cd_S544C3);
    dp->~S544C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS544C3(Test_S544C3, "S544C3", ABISELECT(416,312));

#else // __cplusplus

extern void _ZN6S544C3C1Ev();
extern void _ZN6S544C3D1Ev();
Name_Map name_map_S544C3[] = {
  NSPAIR(_ZN6S544C3C1Ev),
  NSPAIR(_ZN6S544C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S544C5;
extern VTBL_ENTRY _ZTI6S544C5[];
extern  VTBL_ENTRY _ZTV6S544C5[];
extern Class_Descriptor cd_S544C7;
extern VTBL_ENTRY _ZTI6S544C7[];
extern  VTBL_ENTRY _ZTV6S544C7[];
extern Class_Descriptor cd_S544C4;
extern VTBL_ENTRY _ZTI6S544C4[];
extern  VTBL_ENTRY _ZTV6S544C4[];
extern Class_Descriptor cd_S544C8;
extern VTBL_ENTRY _ZTI6S544C8[];
extern  VTBL_ENTRY _ZTV6S544C8[];
static Base_Class bases_S544C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S544C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S544C7,    ABISELECT(96,60), //bcp->offset
    93, //bcp->virtual_function_table_offset
    2, //num_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_S544C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S544C8,    ABISELECT(104,64), //bcp->offset
    96, //bcp->virtual_function_table_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 _ZTI6S544C3[];
extern void _ZN6S544C3D1Ev();
extern void _ZN6S544C3D0Ev();
extern void _ZN6S544C52v4Ev();
extern void _ZN6S544C52v5Ev();
extern void _ZN6S544C52v6Ev();
extern void _ZN6S544C52v7Ev();
extern void _ZN6S544C52v8Ev();
extern void _ZN6S544C52v9Ev();
extern void _ZN6S544C53v10Ev();
extern void _ZN6S544C53v11Ev();
extern void _ZN6S544C53v12Ev();
extern void _ZN6S544C53v13Ev();
extern void _ZN6S544C53v14Ev();
extern void _ZN6S544C53v15Ev();
extern void _ZN6S544C53v16Ev();
extern void _ZN6S544C53v17Ev();
extern void _ZN6S544C53v18Ev();
extern void _ZN6S544C53v19Ev();
extern void _ZN6S544C53v20Ev();
extern void _ZN6S544C53v21Ev();
extern void _ZN6S544C53v22Ev();
extern void _ZN6S544C53v23Ev();
extern void _ZN6S544C53v24Ev();
extern void _ZN6S544C53v25Ev();
extern void _ZN6S544C53v26Ev();
extern void _ZN6S544C53v27Ev();
extern void _ZN6S544C53v28Ev();
extern void _ZN6S544C53v29Ev();
extern void _ZN6S544C53v30Ev();
extern void _ZN6S544C53v31Ev();
extern void _ZN6S544C53v32Ev();
extern void _ZN6S544C53v33Ev();
extern void _ZN6S544C53v34Ev();
extern void _ZN6S544C53v35Ev();
extern void _ZN6S544C53v36Ev();
extern void _ZN6S544C53v37Ev();
extern void _ZN6S544C53v38Ev();
extern void _ZN6S544C53v39Ev();
extern void _ZN6S544C53v40Ev();
extern void _ZN6S544C53v41Ev();
extern void _ZN6S544C53v42Ev();
extern void _ZN6S544C53v43Ev();
extern void _ZN6S544C53v44Ev();
extern void _ZN6S544C53v45Ev();
extern void _ZN6S544C53v46Ev();
extern void _ZN6S544C53v47Ev();
extern void _ZN6S544C53v48Ev();
extern void _ZN6S544C53v49Ev();
extern void _ZN6S544C53v50Ev();
extern void _ZN6S544C53v51Ev();
extern void _ZN6S544C53v52Ev();
extern void _ZN6S544C53v53Ev();
extern void _ZN6S544C53v54Ev();
extern void _ZN6S544C53v55Ev();
extern void _ZN6S544C53v56Ev();
extern void _ZN6S544C53v57Ev();
extern void _ZN6S544C53v58Ev();
extern void _ZN6S544C53v59Ev();
extern void _ZN6S544C53v60Ev();
extern void _ZN6S544C53v61Ev();
extern void _ZN6S544C53v62Ev();
extern void _ZN6S544C53v63Ev();
extern void _ZN6S544C53v64Ev();
extern void _ZN6S544C53v65Ev();
extern void _ZN6S544C53v66Ev();
extern void _ZN6S544C53v67Ev();
extern void _ZN6S544C43v69Ev();
extern void _ZN6S544C43v70Ev();
extern void _ZN6S544C43v71Ev();
extern void _ZN6S544C43v72Ev();
extern void _ZN6S544C33v76Ev();
extern void _ZN6S544C33v77Ev();
extern void _ZN6S544C33v78Ev();
extern void _ZN6S544C33v79Ev();
extern void _ZN6S544C33v80Ev();
extern void _ZN6S544C33v81Ev();
extern void _ZN6S544C33v82Ev();
extern void _ZN6S544C33v83Ev();
extern void _ZN6S544C33v84Ev();
extern void _ZN6S544C33v85Ev();
extern void _ZN6S544C33v86Ev();
extern void _ZN6S544C33v87Ev();
extern void _ZN6S544C33v88Ev();
extern void _ZN6S544C33v89Ev();
extern void _ZN6S544C33v90Ev();
extern void _ZN6S544C33v91Ev();
extern void _ZN6S544C33v92Ev();
extern void _ZN6S544C33v93Ev();
extern void _ZN6S544C33v94Ev();
extern void _ZN6S544C33v95Ev();
extern void _ZN6S544C33v96Ev();
extern void _ZN6S544C73v68Ev();
extern void ABISELECT(_ZThn104_N6S544C3D1Ev,_ZThn64_N6S544C3D1Ev)();
extern void ABISELECT(_ZThn104_N6S544C3D0Ev,_ZThn64_N6S544C3D0Ev)();
extern void _ZN6S544C83v73Ev();
extern void _ZN6S544C83v74Ev();
extern void _ZN6S544C83v75Ev();
static  VTBL_ENTRY vtc_S544C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S544C3[0]),
  (VTBL_ENTRY)&_ZN6S544C3D1Ev,
  (VTBL_ENTRY)&_ZN6S544C3D0Ev,
  (VTBL_ENTRY)&_ZN6S544C52v4Ev,
  (VTBL_ENTRY)&_ZN6S544C52v5Ev,
  (VTBL_ENTRY)&_ZN6S544C52v6Ev,
  (VTBL_ENTRY)&_ZN6S544C52v7Ev,
  (VTBL_ENTRY)&_ZN6S544C52v8Ev,
  (VTBL_ENTRY)&_ZN6S544C52v9Ev,
  (VTBL_ENTRY)&_ZN6S544C53v10Ev,
  (VTBL_ENTRY)&_ZN6S544C53v11Ev,
  (VTBL_ENTRY)&_ZN6S544C53v12Ev,
  (VTBL_ENTRY)&_ZN6S544C53v13Ev,
  (VTBL_ENTRY)&_ZN6S544C53v14Ev,
  (VTBL_ENTRY)&_ZN6S544C53v15Ev,
  (VTBL_ENTRY)&_ZN6S544C53v16Ev,
  (VTBL_ENTRY)&_ZN6S544C53v17Ev,
  (VTBL_ENTRY)&_ZN6S544C53v18Ev,
  (VTBL_ENTRY)&_ZN6S544C53v19Ev,
  (VTBL_ENTRY)&_ZN6S544C53v20Ev,
  (VTBL_ENTRY)&_ZN6S544C53v21Ev,
  (VTBL_ENTRY)&_ZN6S544C53v22Ev,
  (VTBL_ENTRY)&_ZN6S544C53v23Ev,
  (VTBL_ENTRY)&_ZN6S544C53v24Ev,
  (VTBL_ENTRY)&_ZN6S544C53v25Ev,
  (VTBL_ENTRY)&_ZN6S544C53v26Ev,
  (VTBL_ENTRY)&_ZN6S544C53v27Ev,
  (VTBL_ENTRY)&_ZN6S544C53v28Ev,
  (VTBL_ENTRY)&_ZN6S544C53v29Ev,
  (VTBL_ENTRY)&_ZN6S544C53v30Ev,
  (VTBL_ENTRY)&_ZN6S544C53v31Ev,
  (VTBL_ENTRY)&_ZN6S544C53v32Ev,
  (VTBL_ENTRY)&_ZN6S544C53v33Ev,
  (VTBL_ENTRY)&_ZN6S544C53v34Ev,
  (VTBL_ENTRY)&_ZN6S544C53v35Ev,
  (VTBL_ENTRY)&_ZN6S544C53v36Ev,
  (VTBL_ENTRY)&_ZN6S544C53v37Ev,
  (VTBL_ENTRY)&_ZN6S544C53v38Ev,
  (VTBL_ENTRY)&_ZN6S544C53v39Ev,
  (VTBL_ENTRY)&_ZN6S544C53v40Ev,
  (VTBL_ENTRY)&_ZN6S544C53v41Ev,
  (VTBL_ENTRY)&_ZN6S544C53v42Ev,
  (VTBL_ENTRY)&_ZN6S544C53v43Ev,
  (VTBL_ENTRY)&_ZN6S544C53v44Ev,
  (VTBL_ENTRY)&_ZN6S544C53v45Ev,
  (VTBL_ENTRY)&_ZN6S544C53v46Ev,
  (VTBL_ENTRY)&_ZN6S544C53v47Ev,
  (VTBL_ENTRY)&_ZN6S544C53v48Ev,
  (VTBL_ENTRY)&_ZN6S544C53v49Ev,
  (VTBL_ENTRY)&_ZN6S544C53v50Ev,
  (VTBL_ENTRY)&_ZN6S544C53v51Ev,
  (VTBL_ENTRY)&_ZN6S544C53v52Ev,
  (VTBL_ENTRY)&_ZN6S544C53v53Ev,
  (VTBL_ENTRY)&_ZN6S544C53v54Ev,
  (VTBL_ENTRY)&_ZN6S544C53v55Ev,
  (VTBL_ENTRY)&_ZN6S544C53v56Ev,
  (VTBL_ENTRY)&_ZN6S544C53v57Ev,
  (VTBL_ENTRY)&_ZN6S544C53v58Ev,
  (VTBL_ENTRY)&_ZN6S544C53v59Ev,
  (VTBL_ENTRY)&_ZN6S544C53v60Ev,
  (VTBL_ENTRY)&_ZN6S544C53v61Ev,
  (VTBL_ENTRY)&_ZN6S544C53v62Ev,
  (VTBL_ENTRY)&_ZN6S544C53v63Ev,
  (VTBL_ENTRY)&_ZN6S544C53v64Ev,
  (VTBL_ENTRY)&_ZN6S544C53v65Ev,
  (VTBL_ENTRY)&_ZN6S544C53v66Ev,
  (VTBL_ENTRY)&_ZN6S544C53v67Ev,
  (VTBL_ENTRY)&_ZN6S544C43v69Ev,
  (VTBL_ENTRY)&_ZN6S544C43v70Ev,
  (VTBL_ENTRY)&_ZN6S544C43v71Ev,
  (VTBL_ENTRY)&_ZN6S544C43v72Ev,
  (VTBL_ENTRY)&_ZN6S544C33v76Ev,
  (VTBL_ENTRY)&_ZN6S544C33v77Ev,
  (VTBL_ENTRY)&_ZN6S544C33v78Ev,
  (VTBL_ENTRY)&_ZN6S544C33v79Ev,
  (VTBL_ENTRY)&_ZN6S544C33v80Ev,
  (VTBL_ENTRY)&_ZN6S544C33v81Ev,
  (VTBL_ENTRY)&_ZN6S544C33v82Ev,
  (VTBL_ENTRY)&_ZN6S544C33v83Ev,
  (VTBL_ENTRY)&_ZN6S544C33v84Ev,
  (VTBL_ENTRY)&_ZN6S544C33v85Ev,
  (VTBL_ENTRY)&_ZN6S544C33v86Ev,
  (VTBL_ENTRY)&_ZN6S544C33v87Ev,
  (VTBL_ENTRY)&_ZN6S544C33v88Ev,
  (VTBL_ENTRY)&_ZN6S544C33v89Ev,
  (VTBL_ENTRY)&_ZN6S544C33v90Ev,
  (VTBL_ENTRY)&_ZN6S544C33v91Ev,
  (VTBL_ENTRY)&_ZN6S544C33v92Ev,
  (VTBL_ENTRY)&_ZN6S544C33v93Ev,
  (VTBL_ENTRY)&_ZN6S544C33v94Ev,
  (VTBL_ENTRY)&_ZN6S544C33v95Ev,
  (VTBL_ENTRY)&_ZN6S544C33v96Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI6S544C3[0]),
  (VTBL_ENTRY)&_ZN6S544C73v68Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI6S544C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N6S544C3D1Ev,_ZThn64_N6S544C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N6S544C3D0Ev,_ZThn64_N6S544C3D0Ev),
  (VTBL_ENTRY)&_ZN6S544C83v73Ev,
  (VTBL_ENTRY)&_ZN6S544C83v74Ev,
  (VTBL_ENTRY)&_ZN6S544C83v75Ev,
};
extern VTBL_ENTRY _ZTI6S544C3[];
extern  VTBL_ENTRY _ZTV6S544C3[];
Class_Descriptor cd_S544C3 = {  "S544C3", // class name
  bases_S544C3, 4,
  &(vtc_S544C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,312), // object size
  NSPAIRA(_ZTI6S544C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S544C3),103, //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  S544C17  : S1537C8_nt {
};
//SIG(-1 S544C17) C1{ BC2{ m Fp Fi[2]}}



static void Test_S544C17()
{
  extern Class_Descriptor cd_S544C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S544C17, buf);
    S544C17 &lv = *(new (buf) S544C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S544C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S544C17)");
    check_base_class_offset(lv, (S1537C8_nt*), 0, "S544C17");
    test_class_info(&lv, &cd_S544C17);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS544C17(Test_S544C17, "S544C17", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
static Base_Class bases_S544C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S544C17 = {  "S544C17", // class name
  bases_S544C17, 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  S544C16  : S544C17 {
};
//SIG(-1 S544C16) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S544C16()
{
  extern Class_Descriptor cd_S544C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S544C16, buf);
    S544C16 &lv = *(new (buf) S544C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S544C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S544C16)");
    check_base_class_offset(lv, (S1537C8_nt*)(S544C17*), 0, "S544C16");
    check_base_class_offset(lv, (S544C17*), 0, "S544C16");
    test_class_info(&lv, &cd_S544C16);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS544C16(Test_S544C16, "S544C16", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
extern Class_Descriptor cd_S544C17;
static Base_Class bases_S544C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S544C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S544C16 = {  "S544C16", // class name
  bases_S544C16, 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  S544C2  : S544C3 {
  int s544c2f0[6];
  ::S544C16 s544c2f1;
  ::S1325C7_nt s544c2f2;
  void *s544c2f3;
  __tsi64 s544c2f4[2];
  int s544c2f5[2];
  ::S1325C21 s544c2f6;
  __tsi64 s544c2f7;
  int s544c2f8;
  virtual  ~S544C2(); // _ZN6S544C2D1Ev
  virtual void  v97(); // _ZN6S544C23v97Ev
  virtual void  v98(); // _ZN6S544C23v98Ev
  virtual void  v99(); // _ZN6S544C23v99Ev
  virtual void  v100(); // _ZN6S544C24v100Ev
  virtual void  v101(); // _ZN6S544C24v101Ev
  virtual void  v102(); // _ZN6S544C24v102Ev
  virtual void  v103(); // _ZN6S544C24v103Ev
  virtual void  v104(); // _ZN6S544C24v104Ev
  virtual void  v105(); // _ZN6S544C24v105Ev
  S544C2(); // tgen
};
//SIG(-1 S544C2) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} BC6{ v74} vd v75 v76 v77 v78} BC7{ vd v79 v80 v81} vd v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 FC8{ BC9{ m Fp Fi[2]}} Fp[3] FL Fi[12] Fp[2] Fi[3] FC10{ BC9} Fi[16] FC11{ BC12{ m FC13{ BC9} Fp Fi}} FL Fi FC14{ BC15{ BC16{ BC9}}} Fp FC17{ m Fi[5]}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fi[6] FC18{ BC19{ BC9}} FC14 Fp FL[2] Fi[2] FC20{ m FC15 FC15 Fi FC15 FC21{ BC9} FC15 Fi} FL Fi}


 S544C2 ::~S544C2(){ note_dtor("S544C2", this);}
void  S544C2 ::v97(){vfunc_called(this, "_ZN6S544C23v97Ev");}
void  S544C2 ::v98(){vfunc_called(this, "_ZN6S544C23v98Ev");}
void  S544C2 ::v99(){vfunc_called(this, "_ZN6S544C23v99Ev");}
void  S544C2 ::v100(){vfunc_called(this, "_ZN6S544C24v100Ev");}
void  S544C2 ::v101(){vfunc_called(this, "_ZN6S544C24v101Ev");}
void  S544C2 ::v102(){vfunc_called(this, "_ZN6S544C24v102Ev");}
void  S544C2 ::v103(){vfunc_called(this, "_ZN6S544C24v103Ev");}
void  S544C2 ::v104(){vfunc_called(this, "_ZN6S544C24v104Ev");}
void  S544C2 ::v105(){vfunc_called(this, "_ZN6S544C24v105Ev");}
S544C2 ::S544C2(){ note_ctor("S544C2", this);} // tgen

static void Test_S544C2()
{
  extern Class_Descriptor cd_S544C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(78,118)];
    init_test(&cd_S544C2, buf);
    S544C2 *dp, &lv = *(dp=new (buf) S544C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(616,468), "sizeof(S544C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S544C2)");
    check_base_class_offset(lv, (S544C5*)(S544C4*)(S544C3*), 0, "S544C2");
    check_base_class_offset(lv, (S544C7*)(S544C4*)(S544C3*), ABISELECT(96,60), "S544C2");
    check_base_class_offset(lv, (S544C4*)(S544C3*), 0, "S544C2");
    check_base_class_offset(lv, (S544C8*)(S544C3*), ABISELECT(104,64), "S544C2");
    check_base_class_offset(lv, (S544C3*), 0, "S544C2");
    check_field_offset(lv, s544c2f0, ABISELECT(412,312), "S544C2.s544c2f0");
    check_field_offset(lv, s544c2f1, ABISELECT(440,336), "S544C2.s544c2f1");
    check_field_offset(lv, s544c2f2, ABISELECT(456,348), "S544C2.s544c2f2");
    check_field_offset(lv, s544c2f3, ABISELECT(472,360), "S544C2.s544c2f3");
    check_field_offset(lv, s544c2f4, ABISELECT(480,364), "S544C2.s544c2f4");
    check_field_offset(lv, s544c2f5, ABISELECT(496,380), "S544C2.s544c2f5");
    check_field_offset(lv, s544c2f6, ABISELECT(504,388), "S544C2.s544c2f6");
    check_field_offset(lv, s544c2f7, ABISELECT(600,456), "S544C2.s544c2f7");
    check_field_offset(lv, s544c2f8, ABISELECT(608,464), "S544C2.s544c2f8");
    test_class_info(&lv, &cd_S544C2);
    dp->~S544C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS544C2(Test_S544C2, "S544C2", ABISELECT(616,468));

#else // __cplusplus

extern void _ZN6S544C2C1Ev();
extern void _ZN6S544C2D1Ev();
Name_Map name_map_S544C2[] = {
  NSPAIR(_ZN6S544C2C1Ev),
  NSPAIR(_ZN6S544C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S544C5;
extern VTBL_ENTRY _ZTI6S544C5[];
extern  VTBL_ENTRY _ZTV6S544C5[];
extern Class_Descriptor cd_S544C7;
extern VTBL_ENTRY _ZTI6S544C7[];
extern  VTBL_ENTRY _ZTV6S544C7[];
extern Class_Descriptor cd_S544C4;
extern VTBL_ENTRY _ZTI6S544C4[];
extern  VTBL_ENTRY _ZTV6S544C4[];
extern Class_Descriptor cd_S544C8;
extern VTBL_ENTRY _ZTI6S544C8[];
extern  VTBL_ENTRY _ZTV6S544C8[];
extern Class_Descriptor cd_S544C3;
extern VTBL_ENTRY _ZTI6S544C3[];
extern  VTBL_ENTRY _ZTV6S544C3[];
static Base_Class bases_S544C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S544C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S544C7,    ABISELECT(96,60), //bcp->offset
    102, //bcp->virtual_function_table_offset
    2, //num_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_S544C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S544C8,    ABISELECT(104,64), //bcp->offset
    105, //bcp->virtual_function_table_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_S544C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S544C2[];
extern void _ZN6S544C2D1Ev();
extern void _ZN6S544C2D0Ev();
extern void _ZN6S544C52v4Ev();
extern void _ZN6S544C52v5Ev();
extern void _ZN6S544C52v6Ev();
extern void _ZN6S544C52v7Ev();
extern void _ZN6S544C52v8Ev();
extern void _ZN6S544C52v9Ev();
extern void _ZN6S544C53v10Ev();
extern void _ZN6S544C53v11Ev();
extern void _ZN6S544C53v12Ev();
extern void _ZN6S544C53v13Ev();
extern void _ZN6S544C53v14Ev();
extern void _ZN6S544C53v15Ev();
extern void _ZN6S544C53v16Ev();
extern void _ZN6S544C53v17Ev();
extern void _ZN6S544C53v18Ev();
extern void _ZN6S544C53v19Ev();
extern void _ZN6S544C53v20Ev();
extern void _ZN6S544C53v21Ev();
extern void _ZN6S544C53v22Ev();
extern void _ZN6S544C53v23Ev();
extern void _ZN6S544C53v24Ev();
extern void _ZN6S544C53v25Ev();
extern void _ZN6S544C53v26Ev();
extern void _ZN6S544C53v27Ev();
extern void _ZN6S544C53v28Ev();
extern void _ZN6S544C53v29Ev();
extern void _ZN6S544C53v30Ev();
extern void _ZN6S544C53v31Ev();
extern void _ZN6S544C53v32Ev();
extern void _ZN6S544C53v33Ev();
extern void _ZN6S544C53v34Ev();
extern void _ZN6S544C53v35Ev();
extern void _ZN6S544C53v36Ev();
extern void _ZN6S544C53v37Ev();
extern void _ZN6S544C53v38Ev();
extern void _ZN6S544C53v39Ev();
extern void _ZN6S544C53v40Ev();
extern void _ZN6S544C53v41Ev();
extern void _ZN6S544C53v42Ev();
extern void _ZN6S544C53v43Ev();
extern void _ZN6S544C53v44Ev();
extern void _ZN6S544C53v45Ev();
extern void _ZN6S544C53v46Ev();
extern void _ZN6S544C53v47Ev();
extern void _ZN6S544C53v48Ev();
extern void _ZN6S544C53v49Ev();
extern void _ZN6S544C53v50Ev();
extern void _ZN6S544C53v51Ev();
extern void _ZN6S544C53v52Ev();
extern void _ZN6S544C53v53Ev();
extern void _ZN6S544C53v54Ev();
extern void _ZN6S544C53v55Ev();
extern void _ZN6S544C53v56Ev();
extern void _ZN6S544C53v57Ev();
extern void _ZN6S544C53v58Ev();
extern void _ZN6S544C53v59Ev();
extern void _ZN6S544C53v60Ev();
extern void _ZN6S544C53v61Ev();
extern void _ZN6S544C53v62Ev();
extern void _ZN6S544C53v63Ev();
extern void _ZN6S544C53v64Ev();
extern void _ZN6S544C53v65Ev();
extern void _ZN6S544C53v66Ev();
extern void _ZN6S544C53v67Ev();
extern void _ZN6S544C43v69Ev();
extern void _ZN6S544C43v70Ev();
extern void _ZN6S544C43v71Ev();
extern void _ZN6S544C43v72Ev();
extern void _ZN6S544C33v76Ev();
extern void _ZN6S544C33v77Ev();
extern void _ZN6S544C33v78Ev();
extern void _ZN6S544C33v79Ev();
extern void _ZN6S544C33v80Ev();
extern void _ZN6S544C33v81Ev();
extern void _ZN6S544C33v82Ev();
extern void _ZN6S544C33v83Ev();
extern void _ZN6S544C33v84Ev();
extern void _ZN6S544C33v85Ev();
extern void _ZN6S544C33v86Ev();
extern void _ZN6S544C33v87Ev();
extern void _ZN6S544C33v88Ev();
extern void _ZN6S544C33v89Ev();
extern void _ZN6S544C33v90Ev();
extern void _ZN6S544C33v91Ev();
extern void _ZN6S544C33v92Ev();
extern void _ZN6S544C33v93Ev();
extern void _ZN6S544C33v94Ev();
extern void _ZN6S544C33v95Ev();
extern void _ZN6S544C33v96Ev();
extern void _ZN6S544C23v97Ev();
extern void _ZN6S544C23v98Ev();
extern void _ZN6S544C23v99Ev();
extern void _ZN6S544C24v100Ev();
extern void _ZN6S544C24v101Ev();
extern void _ZN6S544C24v102Ev();
extern void _ZN6S544C24v103Ev();
extern void _ZN6S544C24v104Ev();
extern void _ZN6S544C24v105Ev();
extern void _ZN6S544C73v68Ev();
extern void ABISELECT(_ZThn104_N6S544C2D1Ev,_ZThn64_N6S544C2D1Ev)();
extern void ABISELECT(_ZThn104_N6S544C2D0Ev,_ZThn64_N6S544C2D0Ev)();
extern void _ZN6S544C83v73Ev();
extern void _ZN6S544C83v74Ev();
extern void _ZN6S544C83v75Ev();
static  VTBL_ENTRY vtc_S544C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S544C2[0]),
  (VTBL_ENTRY)&_ZN6S544C2D1Ev,
  (VTBL_ENTRY)&_ZN6S544C2D0Ev,
  (VTBL_ENTRY)&_ZN6S544C52v4Ev,
  (VTBL_ENTRY)&_ZN6S544C52v5Ev,
  (VTBL_ENTRY)&_ZN6S544C52v6Ev,
  (VTBL_ENTRY)&_ZN6S544C52v7Ev,
  (VTBL_ENTRY)&_ZN6S544C52v8Ev,
  (VTBL_ENTRY)&_ZN6S544C52v9Ev,
  (VTBL_ENTRY)&_ZN6S544C53v10Ev,
  (VTBL_ENTRY)&_ZN6S544C53v11Ev,
  (VTBL_ENTRY)&_ZN6S544C53v12Ev,
  (VTBL_ENTRY)&_ZN6S544C53v13Ev,
  (VTBL_ENTRY)&_ZN6S544C53v14Ev,
  (VTBL_ENTRY)&_ZN6S544C53v15Ev,
  (VTBL_ENTRY)&_ZN6S544C53v16Ev,
  (VTBL_ENTRY)&_ZN6S544C53v17Ev,
  (VTBL_ENTRY)&_ZN6S544C53v18Ev,
  (VTBL_ENTRY)&_ZN6S544C53v19Ev,
  (VTBL_ENTRY)&_ZN6S544C53v20Ev,
  (VTBL_ENTRY)&_ZN6S544C53v21Ev,
  (VTBL_ENTRY)&_ZN6S544C53v22Ev,
  (VTBL_ENTRY)&_ZN6S544C53v23Ev,
  (VTBL_ENTRY)&_ZN6S544C53v24Ev,
  (VTBL_ENTRY)&_ZN6S544C53v25Ev,
  (VTBL_ENTRY)&_ZN6S544C53v26Ev,
  (VTBL_ENTRY)&_ZN6S544C53v27Ev,
  (VTBL_ENTRY)&_ZN6S544C53v28Ev,
  (VTBL_ENTRY)&_ZN6S544C53v29Ev,
  (VTBL_ENTRY)&_ZN6S544C53v30Ev,
  (VTBL_ENTRY)&_ZN6S544C53v31Ev,
  (VTBL_ENTRY)&_ZN6S544C53v32Ev,
  (VTBL_ENTRY)&_ZN6S544C53v33Ev,
  (VTBL_ENTRY)&_ZN6S544C53v34Ev,
  (VTBL_ENTRY)&_ZN6S544C53v35Ev,
  (VTBL_ENTRY)&_ZN6S544C53v36Ev,
  (VTBL_ENTRY)&_ZN6S544C53v37Ev,
  (VTBL_ENTRY)&_ZN6S544C53v38Ev,
  (VTBL_ENTRY)&_ZN6S544C53v39Ev,
  (VTBL_ENTRY)&_ZN6S544C53v40Ev,
  (VTBL_ENTRY)&_ZN6S544C53v41Ev,
  (VTBL_ENTRY)&_ZN6S544C53v42Ev,
  (VTBL_ENTRY)&_ZN6S544C53v43Ev,
  (VTBL_ENTRY)&_ZN6S544C53v44Ev,
  (VTBL_ENTRY)&_ZN6S544C53v45Ev,
  (VTBL_ENTRY)&_ZN6S544C53v46Ev,
  (VTBL_ENTRY)&_ZN6S544C53v47Ev,
  (VTBL_ENTRY)&_ZN6S544C53v48Ev,
  (VTBL_ENTRY)&_ZN6S544C53v49Ev,
  (VTBL_ENTRY)&_ZN6S544C53v50Ev,
  (VTBL_ENTRY)&_ZN6S544C53v51Ev,
  (VTBL_ENTRY)&_ZN6S544C53v52Ev,
  (VTBL_ENTRY)&_ZN6S544C53v53Ev,
  (VTBL_ENTRY)&_ZN6S544C53v54Ev,
  (VTBL_ENTRY)&_ZN6S544C53v55Ev,
  (VTBL_ENTRY)&_ZN6S544C53v56Ev,
  (VTBL_ENTRY)&_ZN6S544C53v57Ev,
  (VTBL_ENTRY)&_ZN6S544C53v58Ev,
  (VTBL_ENTRY)&_ZN6S544C53v59Ev,
  (VTBL_ENTRY)&_ZN6S544C53v60Ev,
  (VTBL_ENTRY)&_ZN6S544C53v61Ev,
  (VTBL_ENTRY)&_ZN6S544C53v62Ev,
  (VTBL_ENTRY)&_ZN6S544C53v63Ev,
  (VTBL_ENTRY)&_ZN6S544C53v64Ev,
  (VTBL_ENTRY)&_ZN6S544C53v65Ev,
  (VTBL_ENTRY)&_ZN6S544C53v66Ev,
  (VTBL_ENTRY)&_ZN6S544C53v67Ev,
  (VTBL_ENTRY)&_ZN6S544C43v69Ev,
  (VTBL_ENTRY)&_ZN6S544C43v70Ev,
  (VTBL_ENTRY)&_ZN6S544C43v71Ev,
  (VTBL_ENTRY)&_ZN6S544C43v72Ev,
  (VTBL_ENTRY)&_ZN6S544C33v76Ev,
  (VTBL_ENTRY)&_ZN6S544C33v77Ev,
  (VTBL_ENTRY)&_ZN6S544C33v78Ev,
  (VTBL_ENTRY)&_ZN6S544C33v79Ev,
  (VTBL_ENTRY)&_ZN6S544C33v80Ev,
  (VTBL_ENTRY)&_ZN6S544C33v81Ev,
  (VTBL_ENTRY)&_ZN6S544C33v82Ev,
  (VTBL_ENTRY)&_ZN6S544C33v83Ev,
  (VTBL_ENTRY)&_ZN6S544C33v84Ev,
  (VTBL_ENTRY)&_ZN6S544C33v85Ev,
  (VTBL_ENTRY)&_ZN6S544C33v86Ev,
  (VTBL_ENTRY)&_ZN6S544C33v87Ev,
  (VTBL_ENTRY)&_ZN6S544C33v88Ev,
  (VTBL_ENTRY)&_ZN6S544C33v89Ev,
  (VTBL_ENTRY)&_ZN6S544C33v90Ev,
  (VTBL_ENTRY)&_ZN6S544C33v91Ev,
  (VTBL_ENTRY)&_ZN6S544C33v92Ev,
  (VTBL_ENTRY)&_ZN6S544C33v93Ev,
  (VTBL_ENTRY)&_ZN6S544C33v94Ev,
  (VTBL_ENTRY)&_ZN6S544C33v95Ev,
  (VTBL_ENTRY)&_ZN6S544C33v96Ev,
  (VTBL_ENTRY)&_ZN6S544C23v97Ev,
  (VTBL_ENTRY)&_ZN6S544C23v98Ev,
  (VTBL_ENTRY)&_ZN6S544C23v99Ev,
  (VTBL_ENTRY)&_ZN6S544C24v100Ev,
  (VTBL_ENTRY)&_ZN6S544C24v101Ev,
  (VTBL_ENTRY)&_ZN6S544C24v102Ev,
  (VTBL_ENTRY)&_ZN6S544C24v103Ev,
  (VTBL_ENTRY)&_ZN6S544C24v104Ev,
  (VTBL_ENTRY)&_ZN6S544C24v105Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI6S544C2[0]),
  (VTBL_ENTRY)&_ZN6S544C73v68Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI6S544C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N6S544C2D1Ev,_ZThn64_N6S544C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N6S544C2D0Ev,_ZThn64_N6S544C2D0Ev),
  (VTBL_ENTRY)&_ZN6S544C83v73Ev,
  (VTBL_ENTRY)&_ZN6S544C83v74Ev,
  (VTBL_ENTRY)&_ZN6S544C83v75Ev,
};
extern VTBL_ENTRY _ZTI6S544C2[];
extern  VTBL_ENTRY _ZTV6S544C2[];
Class_Descriptor cd_S544C2 = {  "S544C2", // class name
  bases_S544C2, 5,
  &(vtc_S544C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(616,468), // object size
  NSPAIRA(_ZTI6S544C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S544C2),112, //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  S544C1  : S544C2 {
  virtual  ~S544C1(); // _ZN6S544C1D1Ev
  virtual void  v1(); // _ZN6S544C12v1Ev
  virtual void  v2(); // _ZN6S544C12v2Ev
  virtual void  v3(); // _ZN6S544C12v3Ev
  S544C1(); // tgen
};
//SIG(1 S544C1) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ m Fi[2]} Fp[2]} BC7{ v68} vd v69 v70 v71 v72} BC8{ vd v73 v74 v75} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 FC9{ BC10{ m Fp Fi[2]}} Fp[3] FL Fi[12] Fp[2] Fi[3] FC11{ BC10} Fi[16] FC12{ BC13{ m FC14{ BC10} Fp Fi}} FL Fi FC15{ BC16{ BC17{ BC10}}} Fp FC18{ m Fi[5]}} vd v97 v98 v99 v100 v101 v102 v103 v104 v105 Fi[6] FC19{ BC20{ BC10}} FC15 Fp FL[2] Fi[2] FC21{ m FC16 FC16 Fi FC16 FC22{ BC10} FC16 Fi} FL Fi} vd v1 v2 v3}


 S544C1 ::~S544C1(){ note_dtor("S544C1", this);}
void  S544C1 ::v1(){vfunc_called(this, "_ZN6S544C12v1Ev");}
void  S544C1 ::v2(){vfunc_called(this, "_ZN6S544C12v2Ev");}
void  S544C1 ::v3(){vfunc_called(this, "_ZN6S544C12v3Ev");}
S544C1 ::S544C1(){ note_ctor("S544C1", this);} // tgen

static void Test_S544C1()
{
  extern Class_Descriptor cd_S544C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(78,118)];
    init_test(&cd_S544C1, buf);
    S544C1 *dp, &lv = *(dp=new (buf) S544C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(616,468), "sizeof(S544C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S544C1)");
    check_base_class_offset(lv, (S544C5*)(S544C4*)(S544C3*)(S544C2*), 0, "S544C1");
    check_base_class_offset(lv, (S544C7*)(S544C4*)(S544C3*)(S544C2*), ABISELECT(96,60), "S544C1");
    check_base_class_offset(lv, (S544C4*)(S544C3*)(S544C2*), 0, "S544C1");
    check_base_class_offset(lv, (S544C8*)(S544C3*)(S544C2*), ABISELECT(104,64), "S544C1");
    check_base_class_offset(lv, (S544C3*)(S544C2*), 0, "S544C1");
    check_base_class_offset(lv, (S544C2*), 0, "S544C1");
    test_class_info(&lv, &cd_S544C1);
    dp->~S544C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS544C1(Test_S544C1, "S544C1", ABISELECT(616,468));

#else // __cplusplus

extern void _ZN6S544C1C1Ev();
extern void _ZN6S544C1D1Ev();
Name_Map name_map_S544C1[] = {
  NSPAIR(_ZN6S544C1C1Ev),
  NSPAIR(_ZN6S544C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S544C5;
extern VTBL_ENTRY _ZTI6S544C5[];
extern  VTBL_ENTRY _ZTV6S544C5[];
extern Class_Descriptor cd_S544C7;
extern VTBL_ENTRY _ZTI6S544C7[];
extern  VTBL_ENTRY _ZTV6S544C7[];
extern Class_Descriptor cd_S544C4;
extern VTBL_ENTRY _ZTI6S544C4[];
extern  VTBL_ENTRY _ZTV6S544C4[];
extern Class_Descriptor cd_S544C8;
extern VTBL_ENTRY _ZTI6S544C8[];
extern  VTBL_ENTRY _ZTV6S544C8[];
extern Class_Descriptor cd_S544C3;
extern VTBL_ENTRY _ZTI6S544C3[];
extern  VTBL_ENTRY _ZTV6S544C3[];
extern Class_Descriptor cd_S544C2;
extern VTBL_ENTRY _ZTI6S544C2[];
extern  VTBL_ENTRY _ZTV6S544C2[];
static Base_Class bases_S544C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S544C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S544C7,    ABISELECT(96,60), //bcp->offset
    105, //bcp->virtual_function_table_offset
    2, //num_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_S544C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S544C8,    ABISELECT(104,64), //bcp->offset
    108, //bcp->virtual_function_table_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_S544C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S544C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S544C1[];
extern void _ZN6S544C1D1Ev();
extern void _ZN6S544C1D0Ev();
extern void _ZN6S544C52v4Ev();
extern void _ZN6S544C52v5Ev();
extern void _ZN6S544C52v6Ev();
extern void _ZN6S544C52v7Ev();
extern void _ZN6S544C52v8Ev();
extern void _ZN6S544C52v9Ev();
extern void _ZN6S544C53v10Ev();
extern void _ZN6S544C53v11Ev();
extern void _ZN6S544C53v12Ev();
extern void _ZN6S544C53v13Ev();
extern void _ZN6S544C53v14Ev();
extern void _ZN6S544C53v15Ev();
extern void _ZN6S544C53v16Ev();
extern void _ZN6S544C53v17Ev();
extern void _ZN6S544C53v18Ev();
extern void _ZN6S544C53v19Ev();
extern void _ZN6S544C53v20Ev();
extern void _ZN6S544C53v21Ev();
extern void _ZN6S544C53v22Ev();
extern void _ZN6S544C53v23Ev();
extern void _ZN6S544C53v24Ev();
extern void _ZN6S544C53v25Ev();
extern void _ZN6S544C53v26Ev();
extern void _ZN6S544C53v27Ev();
extern void _ZN6S544C53v28Ev();
extern void _ZN6S544C53v29Ev();
extern void _ZN6S544C53v30Ev();
extern void _ZN6S544C53v31Ev();
extern void _ZN6S544C53v32Ev();
extern void _ZN6S544C53v33Ev();
extern void _ZN6S544C53v34Ev();
extern void _ZN6S544C53v35Ev();
extern void _ZN6S544C53v36Ev();
extern void _ZN6S544C53v37Ev();
extern void _ZN6S544C53v38Ev();
extern void _ZN6S544C53v39Ev();
extern void _ZN6S544C53v40Ev();
extern void _ZN6S544C53v41Ev();
extern void _ZN6S544C53v42Ev();
extern void _ZN6S544C53v43Ev();
extern void _ZN6S544C53v44Ev();
extern void _ZN6S544C53v45Ev();
extern void _ZN6S544C53v46Ev();
extern void _ZN6S544C53v47Ev();
extern void _ZN6S544C53v48Ev();
extern void _ZN6S544C53v49Ev();
extern void _ZN6S544C53v50Ev();
extern void _ZN6S544C53v51Ev();
extern void _ZN6S544C53v52Ev();
extern void _ZN6S544C53v53Ev();
extern void _ZN6S544C53v54Ev();
extern void _ZN6S544C53v55Ev();
extern void _ZN6S544C53v56Ev();
extern void _ZN6S544C53v57Ev();
extern void _ZN6S544C53v58Ev();
extern void _ZN6S544C53v59Ev();
extern void _ZN6S544C53v60Ev();
extern void _ZN6S544C53v61Ev();
extern void _ZN6S544C53v62Ev();
extern void _ZN6S544C53v63Ev();
extern void _ZN6S544C53v64Ev();
extern void _ZN6S544C53v65Ev();
extern void _ZN6S544C53v66Ev();
extern void _ZN6S544C53v67Ev();
extern void _ZN6S544C43v69Ev();
extern void _ZN6S544C43v70Ev();
extern void _ZN6S544C43v71Ev();
extern void _ZN6S544C43v72Ev();
extern void _ZN6S544C33v76Ev();
extern void _ZN6S544C33v77Ev();
extern void _ZN6S544C33v78Ev();
extern void _ZN6S544C33v79Ev();
extern void _ZN6S544C33v80Ev();
extern void _ZN6S544C33v81Ev();
extern void _ZN6S544C33v82Ev();
extern void _ZN6S544C33v83Ev();
extern void _ZN6S544C33v84Ev();
extern void _ZN6S544C33v85Ev();
extern void _ZN6S544C33v86Ev();
extern void _ZN6S544C33v87Ev();
extern void _ZN6S544C33v88Ev();
extern void _ZN6S544C33v89Ev();
extern void _ZN6S544C33v90Ev();
extern void _ZN6S544C33v91Ev();
extern void _ZN6S544C33v92Ev();
extern void _ZN6S544C33v93Ev();
extern void _ZN6S544C33v94Ev();
extern void _ZN6S544C33v95Ev();
extern void _ZN6S544C33v96Ev();
extern void _ZN6S544C23v97Ev();
extern void _ZN6S544C23v98Ev();
extern void _ZN6S544C23v99Ev();
extern void _ZN6S544C24v100Ev();
extern void _ZN6S544C24v101Ev();
extern void _ZN6S544C24v102Ev();
extern void _ZN6S544C24v103Ev();
extern void _ZN6S544C24v104Ev();
extern void _ZN6S544C24v105Ev();
extern void _ZN6S544C12v1Ev();
extern void _ZN6S544C12v2Ev();
extern void _ZN6S544C12v3Ev();
extern void _ZN6S544C73v68Ev();
extern void ABISELECT(_ZThn104_N6S544C1D1Ev,_ZThn64_N6S544C1D1Ev)();
extern void ABISELECT(_ZThn104_N6S544C1D0Ev,_ZThn64_N6S544C1D0Ev)();
extern void _ZN6S544C83v73Ev();
extern void _ZN6S544C83v74Ev();
extern void _ZN6S544C83v75Ev();
static  VTBL_ENTRY vtc_S544C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S544C1[0]),
  (VTBL_ENTRY)&_ZN6S544C1D1Ev,
  (VTBL_ENTRY)&_ZN6S544C1D0Ev,
  (VTBL_ENTRY)&_ZN6S544C52v4Ev,
  (VTBL_ENTRY)&_ZN6S544C52v5Ev,
  (VTBL_ENTRY)&_ZN6S544C52v6Ev,
  (VTBL_ENTRY)&_ZN6S544C52v7Ev,
  (VTBL_ENTRY)&_ZN6S544C52v8Ev,
  (VTBL_ENTRY)&_ZN6S544C52v9Ev,
  (VTBL_ENTRY)&_ZN6S544C53v10Ev,
  (VTBL_ENTRY)&_ZN6S544C53v11Ev,
  (VTBL_ENTRY)&_ZN6S544C53v12Ev,
  (VTBL_ENTRY)&_ZN6S544C53v13Ev,
  (VTBL_ENTRY)&_ZN6S544C53v14Ev,
  (VTBL_ENTRY)&_ZN6S544C53v15Ev,
  (VTBL_ENTRY)&_ZN6S544C53v16Ev,
  (VTBL_ENTRY)&_ZN6S544C53v17Ev,
  (VTBL_ENTRY)&_ZN6S544C53v18Ev,
  (VTBL_ENTRY)&_ZN6S544C53v19Ev,
  (VTBL_ENTRY)&_ZN6S544C53v20Ev,
  (VTBL_ENTRY)&_ZN6S544C53v21Ev,
  (VTBL_ENTRY)&_ZN6S544C53v22Ev,
  (VTBL_ENTRY)&_ZN6S544C53v23Ev,
  (VTBL_ENTRY)&_ZN6S544C53v24Ev,
  (VTBL_ENTRY)&_ZN6S544C53v25Ev,
  (VTBL_ENTRY)&_ZN6S544C53v26Ev,
  (VTBL_ENTRY)&_ZN6S544C53v27Ev,
  (VTBL_ENTRY)&_ZN6S544C53v28Ev,
  (VTBL_ENTRY)&_ZN6S544C53v29Ev,
  (VTBL_ENTRY)&_ZN6S544C53v30Ev,
  (VTBL_ENTRY)&_ZN6S544C53v31Ev,
  (VTBL_ENTRY)&_ZN6S544C53v32Ev,
  (VTBL_ENTRY)&_ZN6S544C53v33Ev,
  (VTBL_ENTRY)&_ZN6S544C53v34Ev,
  (VTBL_ENTRY)&_ZN6S544C53v35Ev,
  (VTBL_ENTRY)&_ZN6S544C53v36Ev,
  (VTBL_ENTRY)&_ZN6S544C53v37Ev,
  (VTBL_ENTRY)&_ZN6S544C53v38Ev,
  (VTBL_ENTRY)&_ZN6S544C53v39Ev,
  (VTBL_ENTRY)&_ZN6S544C53v40Ev,
  (VTBL_ENTRY)&_ZN6S544C53v41Ev,
  (VTBL_ENTRY)&_ZN6S544C53v42Ev,
  (VTBL_ENTRY)&_ZN6S544C53v43Ev,
  (VTBL_ENTRY)&_ZN6S544C53v44Ev,
  (VTBL_ENTRY)&_ZN6S544C53v45Ev,
  (VTBL_ENTRY)&_ZN6S544C53v46Ev,
  (VTBL_ENTRY)&_ZN6S544C53v47Ev,
  (VTBL_ENTRY)&_ZN6S544C53v48Ev,
  (VTBL_ENTRY)&_ZN6S544C53v49Ev,
  (VTBL_ENTRY)&_ZN6S544C53v50Ev,
  (VTBL_ENTRY)&_ZN6S544C53v51Ev,
  (VTBL_ENTRY)&_ZN6S544C53v52Ev,
  (VTBL_ENTRY)&_ZN6S544C53v53Ev,
  (VTBL_ENTRY)&_ZN6S544C53v54Ev,
  (VTBL_ENTRY)&_ZN6S544C53v55Ev,
  (VTBL_ENTRY)&_ZN6S544C53v56Ev,
  (VTBL_ENTRY)&_ZN6S544C53v57Ev,
  (VTBL_ENTRY)&_ZN6S544C53v58Ev,
  (VTBL_ENTRY)&_ZN6S544C53v59Ev,
  (VTBL_ENTRY)&_ZN6S544C53v60Ev,
  (VTBL_ENTRY)&_ZN6S544C53v61Ev,
  (VTBL_ENTRY)&_ZN6S544C53v62Ev,
  (VTBL_ENTRY)&_ZN6S544C53v63Ev,
  (VTBL_ENTRY)&_ZN6S544C53v64Ev,
  (VTBL_ENTRY)&_ZN6S544C53v65Ev,
  (VTBL_ENTRY)&_ZN6S544C53v66Ev,
  (VTBL_ENTRY)&_ZN6S544C53v67Ev,
  (VTBL_ENTRY)&_ZN6S544C43v69Ev,
  (VTBL_ENTRY)&_ZN6S544C43v70Ev,
  (VTBL_ENTRY)&_ZN6S544C43v71Ev,
  (VTBL_ENTRY)&_ZN6S544C43v72Ev,
  (VTBL_ENTRY)&_ZN6S544C33v76Ev,
  (VTBL_ENTRY)&_ZN6S544C33v77Ev,
  (VTBL_ENTRY)&_ZN6S544C33v78Ev,
  (VTBL_ENTRY)&_ZN6S544C33v79Ev,
  (VTBL_ENTRY)&_ZN6S544C33v80Ev,
  (VTBL_ENTRY)&_ZN6S544C33v81Ev,
  (VTBL_ENTRY)&_ZN6S544C33v82Ev,
  (VTBL_ENTRY)&_ZN6S544C33v83Ev,
  (VTBL_ENTRY)&_ZN6S544C33v84Ev,
  (VTBL_ENTRY)&_ZN6S544C33v85Ev,
  (VTBL_ENTRY)&_ZN6S544C33v86Ev,
  (VTBL_ENTRY)&_ZN6S544C33v87Ev,
  (VTBL_ENTRY)&_ZN6S544C33v88Ev,
  (VTBL_ENTRY)&_ZN6S544C33v89Ev,
  (VTBL_ENTRY)&_ZN6S544C33v90Ev,
  (VTBL_ENTRY)&_ZN6S544C33v91Ev,
  (VTBL_ENTRY)&_ZN6S544C33v92Ev,
  (VTBL_ENTRY)&_ZN6S544C33v93Ev,
  (VTBL_ENTRY)&_ZN6S544C33v94Ev,
  (VTBL_ENTRY)&_ZN6S544C33v95Ev,
  (VTBL_ENTRY)&_ZN6S544C33v96Ev,
  (VTBL_ENTRY)&_ZN6S544C23v97Ev,
  (VTBL_ENTRY)&_ZN6S544C23v98Ev,
  (VTBL_ENTRY)&_ZN6S544C23v99Ev,
  (VTBL_ENTRY)&_ZN6S544C24v100Ev,
  (VTBL_ENTRY)&_ZN6S544C24v101Ev,
  (VTBL_ENTRY)&_ZN6S544C24v102Ev,
  (VTBL_ENTRY)&_ZN6S544C24v103Ev,
  (VTBL_ENTRY)&_ZN6S544C24v104Ev,
  (VTBL_ENTRY)&_ZN6S544C24v105Ev,
  (VTBL_ENTRY)&_ZN6S544C12v1Ev,
  (VTBL_ENTRY)&_ZN6S544C12v2Ev,
  (VTBL_ENTRY)&_ZN6S544C12v3Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI6S544C1[0]),
  (VTBL_ENTRY)&_ZN6S544C73v68Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI6S544C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N6S544C1D1Ev,_ZThn64_N6S544C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N6S544C1D0Ev,_ZThn64_N6S544C1D0Ev),
  (VTBL_ENTRY)&_ZN6S544C83v73Ev,
  (VTBL_ENTRY)&_ZN6S544C83v74Ev,
  (VTBL_ENTRY)&_ZN6S544C83v75Ev,
};
extern VTBL_ENTRY _ZTI6S544C1[];
extern  VTBL_ENTRY _ZTV6S544C1[];
Class_Descriptor cd_S544C1 = {  "S544C1", // class name
  bases_S544C1, 6,
  &(vtc_S544C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(616,468), // object size
  NSPAIRA(_ZTI6S544C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S544C1),115, //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  S1567C4  {
  int s1567c4f0;
  __tsi64 s1567c4f1;
  void *s1567c4f2[4];
  int s1567c4f3[2];
  void *s1567c4f4;
  ::S1566C14_nt s1567c4f5;
  void *s1567c4f6[2];
  virtual  ~S1567C4(); // _ZN7S1567C4D1Ev
  virtual void  v8(); // _ZN7S1567C42v8Ev
  virtual void  v9(); // _ZN7S1567C42v9Ev
  virtual void  v10(); // _ZN7S1567C43v10Ev
  virtual void  v11(); // _ZN7S1567C43v11Ev
  virtual void  v12(); // _ZN7S1567C43v12Ev
  virtual void  v13(); // _ZN7S1567C43v13Ev
  virtual void  v14(); // _ZN7S1567C43v14Ev
  virtual void  v15(); // _ZN7S1567C43v15Ev
  virtual void  v16(); // _ZN7S1567C43v16Ev
  virtual void  v17(); // _ZN7S1567C43v17Ev
  virtual void  v18(); // _ZN7S1567C43v18Ev
  virtual void  v19(); // _ZN7S1567C43v19Ev
  virtual void  v20(); // _ZN7S1567C43v20Ev
  virtual void  v21(); // _ZN7S1567C43v21Ev
  virtual void  v22(); // _ZN7S1567C43v22Ev
  virtual void  v23(); // _ZN7S1567C43v23Ev
  virtual void  v24(); // _ZN7S1567C43v24Ev
  virtual void  v25(); // _ZN7S1567C43v25Ev
  virtual void  v26(); // _ZN7S1567C43v26Ev
  virtual void  v27(); // _ZN7S1567C43v27Ev
  virtual void  v28(); // _ZN7S1567C43v28Ev
  virtual void  v29(); // _ZN7S1567C43v29Ev
  virtual void  v30(); // _ZN7S1567C43v30Ev
  virtual void  v31(); // _ZN7S1567C43v31Ev
  virtual void  v32(); // _ZN7S1567C43v32Ev
  virtual void  v33(); // _ZN7S1567C43v33Ev
  virtual void  v34(); // _ZN7S1567C43v34Ev
  virtual void  v35(); // _ZN7S1567C43v35Ev
  virtual void  v36(); // _ZN7S1567C43v36Ev
  virtual void  v37(); // _ZN7S1567C43v37Ev
  virtual void  v38(); // _ZN7S1567C43v38Ev
  virtual void  v39(); // _ZN7S1567C43v39Ev
  virtual void  v40(); // _ZN7S1567C43v40Ev
  virtual void  v41(); // _ZN7S1567C43v41Ev
  virtual void  v42(); // _ZN7S1567C43v42Ev
  virtual void  v43(); // _ZN7S1567C43v43Ev
  virtual void  v44(); // _ZN7S1567C43v44Ev
  virtual void  v45(); // _ZN7S1567C43v45Ev
  virtual void  v46(); // _ZN7S1567C43v46Ev
  virtual void  v47(); // _ZN7S1567C43v47Ev
  virtual void  v48(); // _ZN7S1567C43v48Ev
  virtual void  v49(); // _ZN7S1567C43v49Ev
  virtual void  v50(); // _ZN7S1567C43v50Ev
  virtual void  v51(); // _ZN7S1567C43v51Ev
  virtual void  v52(); // _ZN7S1567C43v52Ev
  virtual void  v53(); // _ZN7S1567C43v53Ev
  virtual void  v54(); // _ZN7S1567C43v54Ev
  virtual void  v55(); // _ZN7S1567C43v55Ev
  virtual void  v56(); // _ZN7S1567C43v56Ev
  virtual void  v57(); // _ZN7S1567C43v57Ev
  virtual void  v58(); // _ZN7S1567C43v58Ev
  virtual void  v59(); // _ZN7S1567C43v59Ev
  virtual void  v60(); // _ZN7S1567C43v60Ev
  virtual void  v61(); // _ZN7S1567C43v61Ev
  virtual void  v62(); // _ZN7S1567C43v62Ev
  virtual void  v63(); // _ZN7S1567C43v63Ev
  virtual void  v64(); // _ZN7S1567C43v64Ev
  virtual void  v65(); // _ZN7S1567C43v65Ev
  virtual void  v66(); // _ZN7S1567C43v66Ev
  virtual void  v67(); // _ZN7S1567C43v67Ev
  virtual void  v68(); // _ZN7S1567C43v68Ev
  virtual void  v69(); // _ZN7S1567C43v69Ev
  virtual void  v70(); // _ZN7S1567C43v70Ev
  virtual void  v71(); // _ZN7S1567C43v71Ev
  S1567C4(); // tgen
};
//SIG(-1 S1567C4) 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]}


 S1567C4 ::~S1567C4(){ note_dtor("S1567C4", this);}
void  S1567C4 ::v8(){vfunc_called(this, "_ZN7S1567C42v8Ev");}
void  S1567C4 ::v9(){vfunc_called(this, "_ZN7S1567C42v9Ev");}
void  S1567C4 ::v10(){vfunc_called(this, "_ZN7S1567C43v10Ev");}
void  S1567C4 ::v11(){vfunc_called(this, "_ZN7S1567C43v11Ev");}
void  S1567C4 ::v12(){vfunc_called(this, "_ZN7S1567C43v12Ev");}
void  S1567C4 ::v13(){vfunc_called(this, "_ZN7S1567C43v13Ev");}
void  S1567C4 ::v14(){vfunc_called(this, "_ZN7S1567C43v14Ev");}
void  S1567C4 ::v15(){vfunc_called(this, "_ZN7S1567C43v15Ev");}
void  S1567C4 ::v16(){vfunc_called(this, "_ZN7S1567C43v16Ev");}
void  S1567C4 ::v17(){vfunc_called(this, "_ZN7S1567C43v17Ev");}
void  S1567C4 ::v18(){vfunc_called(this, "_ZN7S1567C43v18Ev");}
void  S1567C4 ::v19(){vfunc_called(this, "_ZN7S1567C43v19Ev");}
void  S1567C4 ::v20(){vfunc_called(this, "_ZN7S1567C43v20Ev");}
void  S1567C4 ::v21(){vfunc_called(this, "_ZN7S1567C43v21Ev");}
void  S1567C4 ::v22(){vfunc_called(this, "_ZN7S1567C43v22Ev");}
void  S1567C4 ::v23(){vfunc_called(this, "_ZN7S1567C43v23Ev");}
void  S1567C4 ::v24(){vfunc_called(this, "_ZN7S1567C43v24Ev");}
void  S1567C4 ::v25(){vfunc_called(this, "_ZN7S1567C43v25Ev");}
void  S1567C4 ::v26(){vfunc_called(this, "_ZN7S1567C43v26Ev");}
void  S1567C4 ::v27(){vfunc_called(this, "_ZN7S1567C43v27Ev");}
void  S1567C4 ::v28(){vfunc_called(this, "_ZN7S1567C43v28Ev");}
void  S1567C4 ::v29(){vfunc_called(this, "_ZN7S1567C43v29Ev");}
void  S1567C4 ::v30(){vfunc_called(this, "_ZN7S1567C43v30Ev");}
void  S1567C4 ::v31(){vfunc_called(this, "_ZN7S1567C43v31Ev");}
void  S1567C4 ::v32(){vfunc_called(this, "_ZN7S1567C43v32Ev");}
void  S1567C4 ::v33(){vfunc_called(this, "_ZN7S1567C43v33Ev");}
void  S1567C4 ::v34(){vfunc_called(this, "_ZN7S1567C43v34Ev");}
void  S1567C4 ::v35(){vfunc_called(this, "_ZN7S1567C43v35Ev");}
void  S1567C4 ::v36(){vfunc_called(this, "_ZN7S1567C43v36Ev");}
void  S1567C4 ::v37(){vfunc_called(this, "_ZN7S1567C43v37Ev");}
void  S1567C4 ::v38(){vfunc_called(this, "_ZN7S1567C43v38Ev");}
void  S1567C4 ::v39(){vfunc_called(this, "_ZN7S1567C43v39Ev");}
void  S1567C4 ::v40(){vfunc_called(this, "_ZN7S1567C43v40Ev");}
void  S1567C4 ::v41(){vfunc_called(this, "_ZN7S1567C43v41Ev");}
void  S1567C4 ::v42(){vfunc_called(this, "_ZN7S1567C43v42Ev");}
void  S1567C4 ::v43(){vfunc_called(this, "_ZN7S1567C43v43Ev");}
void  S1567C4 ::v44(){vfunc_called(this, "_ZN7S1567C43v44Ev");}
void  S1567C4 ::v45(){vfunc_called(this, "_ZN7S1567C43v45Ev");}
void  S1567C4 ::v46(){vfunc_called(this, "_ZN7S1567C43v46Ev");}
void  S1567C4 ::v47(){vfunc_called(this, "_ZN7S1567C43v47Ev");}
void  S1567C4 ::v48(){vfunc_called(this, "_ZN7S1567C43v48Ev");}
void  S1567C4 ::v49(){vfunc_called(this, "_ZN7S1567C43v49Ev");}
void  S1567C4 ::v50(){vfunc_called(this, "_ZN7S1567C43v50Ev");}
void  S1567C4 ::v51(){vfunc_called(this, "_ZN7S1567C43v51Ev");}
void  S1567C4 ::v52(){vfunc_called(this, "_ZN7S1567C43v52Ev");}
void  S1567C4 ::v53(){vfunc_called(this, "_ZN7S1567C43v53Ev");}
void  S1567C4 ::v54(){vfunc_called(this, "_ZN7S1567C43v54Ev");}
void  S1567C4 ::v55(){vfunc_called(this, "_ZN7S1567C43v55Ev");}
void  S1567C4 ::v56(){vfunc_called(this, "_ZN7S1567C43v56Ev");}
void  S1567C4 ::v57(){vfunc_called(this, "_ZN7S1567C43v57Ev");}
void  S1567C4 ::v58(){vfunc_called(this, "_ZN7S1567C43v58Ev");}
void  S1567C4 ::v59(){vfunc_called(this, "_ZN7S1567C43v59Ev");}
void  S1567C4 ::v60(){vfunc_called(this, "_ZN7S1567C43v60Ev");}
void  S1567C4 ::v61(){vfunc_called(this, "_ZN7S1567C43v61Ev");}
void  S1567C4 ::v62(){vfunc_called(this, "_ZN7S1567C43v62Ev");}
void  S1567C4 ::v63(){vfunc_called(this, "_ZN7S1567C43v63Ev");}
void  S1567C4 ::v64(){vfunc_called(this, "_ZN7S1567C43v64Ev");}
void  S1567C4 ::v65(){vfunc_called(this, "_ZN7S1567C43v65Ev");}
void  S1567C4 ::v66(){vfunc_called(this, "_ZN7S1567C43v66Ev");}
void  S1567C4 ::v67(){vfunc_called(this, "_ZN7S1567C43v67Ev");}
void  S1567C4 ::v68(){vfunc_called(this, "_ZN7S1567C43v68Ev");}
void  S1567C4 ::v69(){vfunc_called(this, "_ZN7S1567C43v69Ev");}
void  S1567C4 ::v70(){vfunc_called(this, "_ZN7S1567C43v70Ev");}
void  S1567C4 ::v71(){vfunc_called(this, "_ZN7S1567C43v71Ev");}
S1567C4 ::S1567C4(){ note_ctor("S1567C4", this);} // tgen

static void Test_S1567C4()
{
  extern Class_Descriptor cd_S1567C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1567C4, buf);
    S1567C4 *dp, &lv = *(dp=new (buf) S1567C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1567C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1567C4)");
    check_field_offset(lv, s1567c4f0, ABISELECT(8,4), "S1567C4.s1567c4f0");
    check_field_offset(lv, s1567c4f1, ABISELECT(16,8), "S1567C4.s1567c4f1");
    check_field_offset(lv, s1567c4f2, ABISELECT(24,16), "S1567C4.s1567c4f2");
    check_field_offset(lv, s1567c4f3, ABISELECT(56,32), "S1567C4.s1567c4f3");
    check_field_offset(lv, s1567c4f4, ABISELECT(64,40), "S1567C4.s1567c4f4");
    check_field_offset(lv, s1567c4f5, ABISELECT(72,44), "S1567C4.s1567c4f5");
    check_field_offset(lv, s1567c4f6, ABISELECT(80,52), "S1567C4.s1567c4f6");
    test_class_info(&lv, &cd_S1567C4);
    dp->~S1567C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1567C4(Test_S1567C4, "S1567C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1567C4C1Ev();
extern void _ZN7S1567C4D1Ev();
Name_Map name_map_S1567C4[] = {
  NSPAIR(_ZN7S1567C4C1Ev),
  NSPAIR(_ZN7S1567C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1567C4[];
extern void _ZN7S1567C4D1Ev();
extern void _ZN7S1567C4D0Ev();
extern void _ZN7S1567C42v8Ev();
extern void _ZN7S1567C42v9Ev();
extern void _ZN7S1567C43v10Ev();
extern void _ZN7S1567C43v11Ev();
extern void _ZN7S1567C43v12Ev();
extern void _ZN7S1567C43v13Ev();
extern void _ZN7S1567C43v14Ev();
extern void _ZN7S1567C43v15Ev();
extern void _ZN7S1567C43v16Ev();
extern void _ZN7S1567C43v17Ev();
extern void _ZN7S1567C43v18Ev();
extern void _ZN7S1567C43v19Ev();
extern void _ZN7S1567C43v20Ev();
extern void _ZN7S1567C43v21Ev();
extern void _ZN7S1567C43v22Ev();
extern void _ZN7S1567C43v23Ev();
extern void _ZN7S1567C43v24Ev();
extern void _ZN7S1567C43v25Ev();
extern void _ZN7S1567C43v26Ev();
extern void _ZN7S1567C43v27Ev();
extern void _ZN7S1567C43v28Ev();
extern void _ZN7S1567C43v29Ev();
extern void _ZN7S1567C43v30Ev();
extern void _ZN7S1567C43v31Ev();
extern void _ZN7S1567C43v32Ev();
extern void _ZN7S1567C43v33Ev();
extern void _ZN7S1567C43v34Ev();
extern void _ZN7S1567C43v35Ev();
extern void _ZN7S1567C43v36Ev();
extern void _ZN7S1567C43v37Ev();
extern void _ZN7S1567C43v38Ev();
extern void _ZN7S1567C43v39Ev();
extern void _ZN7S1567C43v40Ev();
extern void _ZN7S1567C43v41Ev();
extern void _ZN7S1567C43v42Ev();
extern void _ZN7S1567C43v43Ev();
extern void _ZN7S1567C43v44Ev();
extern void _ZN7S1567C43v45Ev();
extern void _ZN7S1567C43v46Ev();
extern void _ZN7S1567C43v47Ev();
extern void _ZN7S1567C43v48Ev();
extern void _ZN7S1567C43v49Ev();
extern void _ZN7S1567C43v50Ev();
extern void _ZN7S1567C43v51Ev();
extern void _ZN7S1567C43v52Ev();
extern void _ZN7S1567C43v53Ev();
extern void _ZN7S1567C43v54Ev();
extern void _ZN7S1567C43v55Ev();
extern void _ZN7S1567C43v56Ev();
extern void _ZN7S1567C43v57Ev();
extern void _ZN7S1567C43v58Ev();
extern void _ZN7S1567C43v59Ev();
extern void _ZN7S1567C43v60Ev();
extern void _ZN7S1567C43v61Ev();
extern void _ZN7S1567C43v62Ev();
extern void _ZN7S1567C43v63Ev();
extern void _ZN7S1567C43v64Ev();
extern void _ZN7S1567C43v65Ev();
extern void _ZN7S1567C43v66Ev();
extern void _ZN7S1567C43v67Ev();
extern void _ZN7S1567C43v68Ev();
extern void _ZN7S1567C43v69Ev();
extern void _ZN7S1567C43v70Ev();
extern void _ZN7S1567C43v71Ev();
static  VTBL_ENTRY vtc_S1567C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1567C4[0]),
  (VTBL_ENTRY)&_ZN7S1567C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1567C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1567C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1567C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v71Ev,
};
extern VTBL_ENTRY _ZTI7S1567C4[];
extern  VTBL_ENTRY _ZTV7S1567C4[];
Class_Descriptor cd_S1567C4 = {  "S1567C4", // class name
  0,0,//no base classes
  &(vtc_S1567C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1567C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1567C4),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  S1567C6  {
  virtual void  v72(); // _ZN7S1567C63v72Ev
  ~S1567C6(); // tgen
  S1567C6(); // tgen
};
//SIG(-1 S1567C6) C1{ v1}


void  S1567C6 ::v72(){vfunc_called(this, "_ZN7S1567C63v72Ev");}
S1567C6 ::~S1567C6(){ note_dtor("S1567C6", this);} // tgen
S1567C6 ::S1567C6(){ note_ctor("S1567C6", this);} // tgen

static void Test_S1567C6()
{
  extern Class_Descriptor cd_S1567C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1567C6, buf);
    S1567C6 *dp, &lv = *(dp=new (buf) S1567C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1567C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1567C6)");
    test_class_info(&lv, &cd_S1567C6);
    dp->~S1567C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1567C6(Test_S1567C6, "S1567C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1567C6C1Ev();
extern void _ZN7S1567C6D1Ev();
Name_Map name_map_S1567C6[] = {
  NSPAIR(_ZN7S1567C6C1Ev),
  NSPAIR(_ZN7S1567C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1567C6[];
extern void _ZN7S1567C63v72Ev();
static  VTBL_ENTRY vtc_S1567C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1567C6[0]),
  (VTBL_ENTRY)&_ZN7S1567C63v72Ev,
};
extern VTBL_ENTRY _ZTI7S1567C6[];
extern  VTBL_ENTRY _ZTV7S1567C6[];
Class_Descriptor cd_S1567C6 = {  "S1567C6", // class name
  0,0,//no base classes
  &(vtc_S1567C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1567C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1567C6),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  S1567C3  : S1567C4 , S1567C6 {
  virtual  ~S1567C3(); // _ZN7S1567C3D1Ev
  virtual void  v73(); // _ZN7S1567C33v73Ev
  virtual void  v74(); // _ZN7S1567C33v74Ev
  virtual void  v75(); // _ZN7S1567C33v75Ev
  virtual void  v76(); // _ZN7S1567C33v76Ev
  S1567C3(); // tgen
};
//SIG(-1 S1567C3) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} BC4{ v69} vd v1 v2 v3 v4}


 S1567C3 ::~S1567C3(){ note_dtor("S1567C3", this);}
void  S1567C3 ::v73(){vfunc_called(this, "_ZN7S1567C33v73Ev");}
void  S1567C3 ::v74(){vfunc_called(this, "_ZN7S1567C33v74Ev");}
void  S1567C3 ::v75(){vfunc_called(this, "_ZN7S1567C33v75Ev");}
void  S1567C3 ::v76(){vfunc_called(this, "_ZN7S1567C33v76Ev");}
S1567C3 ::S1567C3(){ note_ctor("S1567C3", this);} // tgen

static void Test_S1567C3()
{
  extern Class_Descriptor cd_S1567C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1567C3, buf);
    S1567C3 *dp, &lv = *(dp=new (buf) S1567C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1567C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1567C3)");
    check_base_class_offset(lv, (S1567C4*), 0, "S1567C3");
    check_base_class_offset(lv, (S1567C6*), ABISELECT(96,60), "S1567C3");
    test_class_info(&lv, &cd_S1567C3);
    dp->~S1567C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1567C3(Test_S1567C3, "S1567C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1567C3C1Ev();
extern void _ZN7S1567C3D1Ev();
Name_Map name_map_S1567C3[] = {
  NSPAIR(_ZN7S1567C3C1Ev),
  NSPAIR(_ZN7S1567C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1567C4;
extern VTBL_ENTRY _ZTI7S1567C4[];
extern  VTBL_ENTRY _ZTV7S1567C4[];
extern Class_Descriptor cd_S1567C6;
extern VTBL_ENTRY _ZTI7S1567C6[];
extern  VTBL_ENTRY _ZTV7S1567C6[];
static Base_Class bases_S1567C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1567C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S1567C6,    ABISELECT(96,60), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1567C3[];
extern void _ZN7S1567C3D1Ev();
extern void _ZN7S1567C3D0Ev();
extern void _ZN7S1567C42v8Ev();
extern void _ZN7S1567C42v9Ev();
extern void _ZN7S1567C43v10Ev();
extern void _ZN7S1567C43v11Ev();
extern void _ZN7S1567C43v12Ev();
extern void _ZN7S1567C43v13Ev();
extern void _ZN7S1567C43v14Ev();
extern void _ZN7S1567C43v15Ev();
extern void _ZN7S1567C43v16Ev();
extern void _ZN7S1567C43v17Ev();
extern void _ZN7S1567C43v18Ev();
extern void _ZN7S1567C43v19Ev();
extern void _ZN7S1567C43v20Ev();
extern void _ZN7S1567C43v21Ev();
extern void _ZN7S1567C43v22Ev();
extern void _ZN7S1567C43v23Ev();
extern void _ZN7S1567C43v24Ev();
extern void _ZN7S1567C43v25Ev();
extern void _ZN7S1567C43v26Ev();
extern void _ZN7S1567C43v27Ev();
extern void _ZN7S1567C43v28Ev();
extern void _ZN7S1567C43v29Ev();
extern void _ZN7S1567C43v30Ev();
extern void _ZN7S1567C43v31Ev();
extern void _ZN7S1567C43v32Ev();
extern void _ZN7S1567C43v33Ev();
extern void _ZN7S1567C43v34Ev();
extern void _ZN7S1567C43v35Ev();
extern void _ZN7S1567C43v36Ev();
extern void _ZN7S1567C43v37Ev();
extern void _ZN7S1567C43v38Ev();
extern void _ZN7S1567C43v39Ev();
extern void _ZN7S1567C43v40Ev();
extern void _ZN7S1567C43v41Ev();
extern void _ZN7S1567C43v42Ev();
extern void _ZN7S1567C43v43Ev();
extern void _ZN7S1567C43v44Ev();
extern void _ZN7S1567C43v45Ev();
extern void _ZN7S1567C43v46Ev();
extern void _ZN7S1567C43v47Ev();
extern void _ZN7S1567C43v48Ev();
extern void _ZN7S1567C43v49Ev();
extern void _ZN7S1567C43v50Ev();
extern void _ZN7S1567C43v51Ev();
extern void _ZN7S1567C43v52Ev();
extern void _ZN7S1567C43v53Ev();
extern void _ZN7S1567C43v54Ev();
extern void _ZN7S1567C43v55Ev();
extern void _ZN7S1567C43v56Ev();
extern void _ZN7S1567C43v57Ev();
extern void _ZN7S1567C43v58Ev();
extern void _ZN7S1567C43v59Ev();
extern void _ZN7S1567C43v60Ev();
extern void _ZN7S1567C43v61Ev();
extern void _ZN7S1567C43v62Ev();
extern void _ZN7S1567C43v63Ev();
extern void _ZN7S1567C43v64Ev();
extern void _ZN7S1567C43v65Ev();
extern void _ZN7S1567C43v66Ev();
extern void _ZN7S1567C43v67Ev();
extern void _ZN7S1567C43v68Ev();
extern void _ZN7S1567C43v69Ev();
extern void _ZN7S1567C43v70Ev();
extern void _ZN7S1567C43v71Ev();
extern void _ZN7S1567C33v73Ev();
extern void _ZN7S1567C33v74Ev();
extern void _ZN7S1567C33v75Ev();
extern void _ZN7S1567C33v76Ev();
extern void _ZN7S1567C63v72Ev();
static  VTBL_ENTRY vtc_S1567C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1567C3[0]),
  (VTBL_ENTRY)&_ZN7S1567C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1567C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1567C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1567C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1567C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1567C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1567C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1567C33v76Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1567C3[0]),
  (VTBL_ENTRY)&_ZN7S1567C63v72Ev,
};
extern VTBL_ENTRY _ZTI7S1567C3[];
extern  VTBL_ENTRY _ZTV7S1567C3[];
Class_Descriptor cd_S1567C3 = {  "S1567C3", // class name
  bases_S1567C3, 2,
  &(vtc_S1567C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1567C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1567C3),75, //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  S1567C7  {
  virtual  ~S1567C7(); // _ZN7S1567C7D1Ev
  virtual void  v77(); // _ZN7S1567C73v77Ev
  virtual void  v78(); // _ZN7S1567C73v78Ev
  virtual void  v79(); // _ZN7S1567C73v79Ev
  S1567C7(); // tgen
};
//SIG(-1 S1567C7) C1{ vd v1 v2 v3}


 S1567C7 ::~S1567C7(){ note_dtor("S1567C7", this);}
void  S1567C7 ::v77(){vfunc_called(this, "_ZN7S1567C73v77Ev");}
void  S1567C7 ::v78(){vfunc_called(this, "_ZN7S1567C73v78Ev");}
void  S1567C7 ::v79(){vfunc_called(this, "_ZN7S1567C73v79Ev");}
S1567C7 ::S1567C7(){ note_ctor("S1567C7", this);} // tgen

static void Test_S1567C7()
{
  extern Class_Descriptor cd_S1567C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1567C7, buf);
    S1567C7 *dp, &lv = *(dp=new (buf) S1567C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1567C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1567C7)");
    test_class_info(&lv, &cd_S1567C7);
    dp->~S1567C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1567C7(Test_S1567C7, "S1567C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1567C7C1Ev();
extern void _ZN7S1567C7D1Ev();
Name_Map name_map_S1567C7[] = {
  NSPAIR(_ZN7S1567C7C1Ev),
  NSPAIR(_ZN7S1567C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1567C7[];
extern void _ZN7S1567C7D1Ev();
extern void _ZN7S1567C7D0Ev();
extern void _ZN7S1567C73v77Ev();
extern void _ZN7S1567C73v78Ev();
extern void _ZN7S1567C73v79Ev();
static  VTBL_ENTRY vtc_S1567C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1567C7[0]),
  (VTBL_ENTRY)&_ZN7S1567C7D1Ev,
  (VTBL_ENTRY)&_ZN7S1567C7D0Ev,
  (VTBL_ENTRY)&_ZN7S1567C73v77Ev,
  (VTBL_ENTRY)&_ZN7S1567C73v78Ev,
  (VTBL_ENTRY)&_ZN7S1567C73v79Ev,
};
extern VTBL_ENTRY _ZTI7S1567C7[];
extern  VTBL_ENTRY _ZTV7S1567C7[];
Class_Descriptor cd_S1567C7 = {  "S1567C7", // class name
  0,0,//no base classes
  &(vtc_S1567C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1567C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1567C7),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  S1567C2  : S1567C3 , S1567C7 {
  ::S1566C29 s1567c2f0;
  void *s1567c2f1[3];
  __tsi64 s1567c2f2;
  int s1567c2f3[12];
  void *s1567c2f4[2];
  int s1567c2f5[3];
  ::S1566C10 s1567c2f6;
  int s1567c2f7[16];
  ::S1566C22_nt s1567c2f8;
  __tsi64 s1567c2f9;
  int s1567c2f10;
  ::S1325C7_nt s1567c2f11;
  void *s1567c2f12;
  ::S1566C30 s1567c2f13;
  virtual  ~S1567C2(); // _ZN7S1567C2D1Ev
  virtual void  v80(); // _ZN7S1567C23v80Ev
  virtual void  v81(); // _ZN7S1567C23v81Ev
  virtual void  v82(); // _ZN7S1567C23v82Ev
  virtual void  v83(); // _ZN7S1567C23v83Ev
  virtual void  v84(); // _ZN7S1567C23v84Ev
  virtual void  v85(); // _ZN7S1567C23v85Ev
  virtual void  v86(); // _ZN7S1567C23v86Ev
  virtual void  v87(); // _ZN7S1567C23v87Ev
  virtual void  v88(); // _ZN7S1567C23v88Ev
  virtual void  v89(); // _ZN7S1567C23v89Ev
  virtual void  v90(); // _ZN7S1567C23v90Ev
  virtual void  v91(); // _ZN7S1567C23v91Ev
  virtual void  v92(); // _ZN7S1567C23v92Ev
  virtual void  v93(); // _ZN7S1567C23v93Ev
  virtual void  v94(); // _ZN7S1567C23v94Ev
  virtual void  v95(); // _ZN7S1567C23v95Ev
  virtual void  v96(); // _ZN7S1567C23v96Ev
  virtual void  v97(); // _ZN7S1567C23v97Ev
  virtual void  v98(); // _ZN7S1567C23v98Ev
  virtual void  v99(); // _ZN7S1567C23v99Ev
  virtual void  v100(); // _ZN7S1567C24v100Ev
  S1567C2(); // tgen
};
//SIG(-1 S1567C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v86} vd v87 v88 v89 v90} BC6{ vd v91 v92 v93} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 FC7{ BC8{ m Fp Fi[2]}} Fp[3] FL Fi[12] Fp[2] Fi[3] FC9{ BC8} Fi[16] FC10{ BC11{ m FC12{ BC8} Fp Fi}} FL Fi FC13{ BC14{ BC15{ BC8}}} Fp FC16{ m Fi[5]}}


 S1567C2 ::~S1567C2(){ note_dtor("S1567C2", this);}
void  S1567C2 ::v80(){vfunc_called(this, "_ZN7S1567C23v80Ev");}
void  S1567C2 ::v81(){vfunc_called(this, "_ZN7S1567C23v81Ev");}
void  S1567C2 ::v82(){vfunc_called(this, "_ZN7S1567C23v82Ev");}
void  S1567C2 ::v83(){vfunc_called(this, "_ZN7S1567C23v83Ev");}
void  S1567C2 ::v84(){vfunc_called(this, "_ZN7S1567C23v84Ev");}
void  S1567C2 ::v85(){vfunc_called(this, "_ZN7S1567C23v85Ev");}
void  S1567C2 ::v86(){vfunc_called(this, "_ZN7S1567C23v86Ev");}
void  S1567C2 ::v87(){vfunc_called(this, "_ZN7S1567C23v87Ev");}
void  S1567C2 ::v88(){vfunc_called(this, "_ZN7S1567C23v88Ev");}
void  S1567C2 ::v89(){vfunc_called(this, "_ZN7S1567C23v89Ev");}
void  S1567C2 ::v90(){vfunc_called(this, "_ZN7S1567C23v90Ev");}
void  S1567C2 ::v91(){vfunc_called(this, "_ZN7S1567C23v91Ev");}
void  S1567C2 ::v92(){vfunc_called(this, "_ZN7S1567C23v92Ev");}
void  S1567C2 ::v93(){vfunc_called(this, "_ZN7S1567C23v93Ev");}
void  S1567C2 ::v94(){vfunc_called(this, "_ZN7S1567C23v94Ev");}
void  S1567C2 ::v95(){vfunc_called(this, "_ZN7S1567C23v95Ev");}
void  S1567C2 ::v96(){vfunc_called(this, "_ZN7S1567C23v96Ev");}
void  S1567C2 ::v97(){vfunc_called(this, "_ZN7S1567C23v97Ev");}
void  S1567C2 ::v98(){vfunc_called(this, "_ZN7S1567C23v98Ev");}
void  S1567C2 ::v99(){vfunc_called(this, "_ZN7S1567C23v99Ev");}
void  S1567C2 ::v100(){vfunc_called(this, "_ZN7S1567C24v100Ev");}
S1567C2 ::S1567C2(){ note_ctor("S1567C2", this);} // tgen

static void Test_S1567C2()
{
  extern Class_Descriptor cd_S1567C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(53,79)];
    init_test(&cd_S1567C2, buf);
    S1567C2 *dp, &lv = *(dp=new (buf) S1567C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,312), "sizeof(S1567C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1567C2)");
    check_base_class_offset(lv, (S1567C4*)(S1567C3*), 0, "S1567C2");
    check_base_class_offset(lv, (S1567C6*)(S1567C3*), ABISELECT(96,60), "S1567C2");
    check_base_class_offset(lv, (S1567C3*), 0, "S1567C2");
    check_base_class_offset(lv, (S1567C7*), ABISELECT(104,64), "S1567C2");
    check_field_offset(lv, s1567c2f0, ABISELECT(112,68), "S1567C2.s1567c2f0");
    check_field_offset(lv, s1567c2f1, ABISELECT(128,80), "S1567C2.s1567c2f1");
    check_field_offset(lv, s1567c2f2, ABISELECT(152,92), "S1567C2.s1567c2f2");
    check_field_offset(lv, s1567c2f3, ABISELECT(160,100), "S1567C2.s1567c2f3");
    check_field_offset(lv, s1567c2f4, ABISELECT(208,148), "S1567C2.s1567c2f4");
    check_field_offset(lv, s1567c2f5, ABISELECT(224,156), "S1567C2.s1567c2f5");
    check_field_offset(lv, s1567c2f6, ABISELECT(240,168), "S1567C2.s1567c2f6");
    check_field_offset(lv, s1567c2f7, ABISELECT(256,180), "S1567C2.s1567c2f7");
    check_field_offset(lv, s1567c2f8, ABISELECT(320,244), "S1567C2.s1567c2f8");
    check_field_offset(lv, s1567c2f9, ABISELECT(352,264), "S1567C2.s1567c2f9");
    check_field_offset(lv, s1567c2f10, ABISELECT(360,272), "S1567C2.s1567c2f10");
    check_field_offset(lv, s1567c2f11, ABISELECT(368,276), "S1567C2.s1567c2f11");
    check_field_offset(lv, s1567c2f12, ABISELECT(384,288), "S1567C2.s1567c2f12");
    check_field_offset(lv, s1567c2f13, ABISELECT(392,292), "S1567C2.s1567c2f13");
    test_class_info(&lv, &cd_S1567C2);
    dp->~S1567C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1567C2(Test_S1567C2, "S1567C2", ABISELECT(416,312));

#else // __cplusplus

extern void _ZN7S1567C2C1Ev();
extern void _ZN7S1567C2D1Ev();
Name_Map name_map_S1567C2[] = {
  NSPAIR(_ZN7S1567C2C1Ev),
  NSPAIR(_ZN7S1567C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1567C4;
extern VTBL_ENTRY _ZTI7S1567C4[];
extern  VTBL_ENTRY _ZTV7S1567C4[];
extern Class_Descriptor cd_S1567C6;
extern VTBL_ENTRY _ZTI7S1567C6[];
extern  VTBL_ENTRY _ZTV7S1567C6[];
extern Class_Descriptor cd_S1567C3;
extern VTBL_ENTRY _ZTI7S1567C3[];
extern  VTBL_ENTRY _ZTV7S1567C3[];
extern Class_Descriptor cd_S1567C7;
extern VTBL_ENTRY _ZTI7S1567C7[];
extern  VTBL_ENTRY _ZTV7S1567C7[];
static Base_Class bases_S1567C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1567C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1567C6,    ABISELECT(96,60), //bcp->offset
    93, //bcp->virtual_function_table_offset
    2, //num_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_S1567C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1567C7,    ABISELECT(104,64), //bcp->offset
    96, //bcp->virtual_function_table_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 _ZTI7S1567C2[];
extern void _ZN7S1567C2D1Ev();
extern void _ZN7S1567C2D0Ev();
extern void _ZN7S1567C42v8Ev();
extern void _ZN7S1567C42v9Ev();
extern void _ZN7S1567C43v10Ev();
extern void _ZN7S1567C43v11Ev();
extern void _ZN7S1567C43v12Ev();
extern void _ZN7S1567C43v13Ev();
extern void _ZN7S1567C43v14Ev();
extern void _ZN7S1567C43v15Ev();
extern void _ZN7S1567C43v16Ev();
extern void _ZN7S1567C43v17Ev();
extern void _ZN7S1567C43v18Ev();
extern void _ZN7S1567C43v19Ev();
extern void _ZN7S1567C43v20Ev();
extern void _ZN7S1567C43v21Ev();
extern void _ZN7S1567C43v22Ev();
extern void _ZN7S1567C43v23Ev();
extern void _ZN7S1567C43v24Ev();
extern void _ZN7S1567C43v25Ev();
extern void _ZN7S1567C43v26Ev();
extern void _ZN7S1567C43v27Ev();
extern void _ZN7S1567C43v28Ev();
extern void _ZN7S1567C43v29Ev();
extern void _ZN7S1567C43v30Ev();
extern void _ZN7S1567C43v31Ev();
extern void _ZN7S1567C43v32Ev();
extern void _ZN7S1567C43v33Ev();
extern void _ZN7S1567C43v34Ev();
extern void _ZN7S1567C43v35Ev();
extern void _ZN7S1567C43v36Ev();
extern void _ZN7S1567C43v37Ev();
extern void _ZN7S1567C43v38Ev();
extern void _ZN7S1567C43v39Ev();
extern void _ZN7S1567C43v40Ev();
extern void _ZN7S1567C43v41Ev();
extern void _ZN7S1567C43v42Ev();
extern void _ZN7S1567C43v43Ev();
extern void _ZN7S1567C43v44Ev();
extern void _ZN7S1567C43v45Ev();
extern void _ZN7S1567C43v46Ev();
extern void _ZN7S1567C43v47Ev();
extern void _ZN7S1567C43v48Ev();
extern void _ZN7S1567C43v49Ev();
extern void _ZN7S1567C43v50Ev();
extern void _ZN7S1567C43v51Ev();
extern void _ZN7S1567C43v52Ev();
extern void _ZN7S1567C43v53Ev();
extern void _ZN7S1567C43v54Ev();
extern void _ZN7S1567C43v55Ev();
extern void _ZN7S1567C43v56Ev();
extern void _ZN7S1567C43v57Ev();
extern void _ZN7S1567C43v58Ev();
extern void _ZN7S1567C43v59Ev();
extern void _ZN7S1567C43v60Ev();
extern void _ZN7S1567C43v61Ev();
extern void _ZN7S1567C43v62Ev();
extern void _ZN7S1567C43v63Ev();
extern void _ZN7S1567C43v64Ev();
extern void _ZN7S1567C43v65Ev();
extern void _ZN7S1567C43v66Ev();
extern void _ZN7S1567C43v67Ev();
extern void _ZN7S1567C43v68Ev();
extern void _ZN7S1567C43v69Ev();
extern void _ZN7S1567C43v70Ev();
extern void _ZN7S1567C43v71Ev();
extern void _ZN7S1567C33v73Ev();
extern void _ZN7S1567C33v74Ev();
extern void _ZN7S1567C33v75Ev();
extern void _ZN7S1567C33v76Ev();
extern void _ZN7S1567C23v80Ev();
extern void _ZN7S1567C23v81Ev();
extern void _ZN7S1567C23v82Ev();
extern void _ZN7S1567C23v83Ev();
extern void _ZN7S1567C23v84Ev();
extern void _ZN7S1567C23v85Ev();
extern void _ZN7S1567C23v86Ev();
extern void _ZN7S1567C23v87Ev();
extern void _ZN7S1567C23v88Ev();
extern void _ZN7S1567C23v89Ev();
extern void _ZN7S1567C23v90Ev();
extern void _ZN7S1567C23v91Ev();
extern void _ZN7S1567C23v92Ev();
extern void _ZN7S1567C23v93Ev();
extern void _ZN7S1567C23v94Ev();
extern void _ZN7S1567C23v95Ev();
extern void _ZN7S1567C23v96Ev();
extern void _ZN7S1567C23v97Ev();
extern void _ZN7S1567C23v98Ev();
extern void _ZN7S1567C23v99Ev();
extern void _ZN7S1567C24v100Ev();
extern void _ZN7S1567C63v72Ev();
extern void ABISELECT(_ZThn104_N7S1567C2D1Ev,_ZThn64_N7S1567C2D1Ev)();
extern void ABISELECT(_ZThn104_N7S1567C2D0Ev,_ZThn64_N7S1567C2D0Ev)();
extern void _ZN7S1567C73v77Ev();
extern void _ZN7S1567C73v78Ev();
extern void _ZN7S1567C73v79Ev();
static  VTBL_ENTRY vtc_S1567C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1567C2[0]),
  (VTBL_ENTRY)&_ZN7S1567C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1567C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1567C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1567C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1567C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1567C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1567C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1567C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v80Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1567C24v100Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1567C2[0]),
  (VTBL_ENTRY)&_ZN7S1567C63v72Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1567C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S1567C2D1Ev,_ZThn64_N7S1567C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S1567C2D0Ev,_ZThn64_N7S1567C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1567C73v77Ev,
  (VTBL_ENTRY)&_ZN7S1567C73v78Ev,
  (VTBL_ENTRY)&_ZN7S1567C73v79Ev,
};
extern VTBL_ENTRY _ZTI7S1567C2[];
extern  VTBL_ENTRY _ZTV7S1567C2[];
Class_Descriptor cd_S1567C2 = {  "S1567C2", // class name
  bases_S1567C2, 4,
  &(vtc_S1567C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,312), // object size
  NSPAIRA(_ZTI7S1567C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1567C2),103, //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  S1567C1  : S1567C2 {
  int s1567c1f0[2];
  ::S1566C32 s1567c1f1;
  void *s1567c1f2;
  virtual  ~S1567C1(); // _ZN7S1567C1D1Ev
  virtual void  v1(); // _ZN7S1567C12v1Ev
  virtual void  v2(); // _ZN7S1567C12v2Ev
  virtual void  v3(); // _ZN7S1567C12v3Ev
  virtual void  v4(); // _ZN7S1567C12v4Ev
  virtual void  v5(); // _ZN7S1567C12v5Ev
  virtual void  v6(); // _ZN7S1567C12v6Ev
  virtual void  v7(); // _ZN7S1567C12v7Ev
  S1567C1(); // tgen
};
//SIG(1 S1567C1) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} BC6{ v72} vd v73 v74 v75 v76} BC7{ vd v77 v78 v79} vd v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 FC8{ BC9{ m Fp Fi[2]}} Fp[3] FL Fi[12] Fp[2] Fi[3] FC10{ BC9} Fi[16] FC11{ BC12{ m FC13{ BC9} Fp Fi}} FL Fi FC14{ BC15{ BC16{ BC9}}} Fp FC17{ m Fi[5]}} vd v1 v2 v3 v4 v5 v6 v7 Fi[2] FC18{ m FC19{ Fc[2] Fs FC20{ Fi} Fc[8]}} Fp}


 S1567C1 ::~S1567C1(){ note_dtor("S1567C1", this);}
void  S1567C1 ::v1(){vfunc_called(this, "_ZN7S1567C12v1Ev");}
void  S1567C1 ::v2(){vfunc_called(this, "_ZN7S1567C12v2Ev");}
void  S1567C1 ::v3(){vfunc_called(this, "_ZN7S1567C12v3Ev");}
void  S1567C1 ::v4(){vfunc_called(this, "_ZN7S1567C12v4Ev");}
void  S1567C1 ::v5(){vfunc_called(this, "_ZN7S1567C12v5Ev");}
void  S1567C1 ::v6(){vfunc_called(this, "_ZN7S1567C12v6Ev");}
void  S1567C1 ::v7(){vfunc_called(this, "_ZN7S1567C12v7Ev");}
S1567C1 ::S1567C1(){ note_ctor("S1567C1", this);} // tgen

static void Test_S1567C1()
{
  extern Class_Descriptor cd_S1567C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(57,86)];
    init_test(&cd_S1567C1, buf);
    S1567C1 *dp, &lv = *(dp=new (buf) S1567C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,340), "sizeof(S1567C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1567C1)");
    check_base_class_offset(lv, (S1567C4*)(S1567C3*)(S1567C2*), 0, "S1567C1");
    check_base_class_offset(lv, (S1567C6*)(S1567C3*)(S1567C2*), ABISELECT(96,60), "S1567C1");
    check_base_class_offset(lv, (S1567C3*)(S1567C2*), 0, "S1567C1");
    check_base_class_offset(lv, (S1567C7*)(S1567C2*), ABISELECT(104,64), "S1567C1");
    check_base_class_offset(lv, (S1567C2*), 0, "S1567C1");
    check_field_offset(lv, s1567c1f0, ABISELECT(412,312), "S1567C1.s1567c1f0");
    check_field_offset(lv, s1567c1f1, ABISELECT(420,320), "S1567C1.s1567c1f1");
    check_field_offset(lv, s1567c1f2, ABISELECT(440,336), "S1567C1.s1567c1f2");
    test_class_info(&lv, &cd_S1567C1);
    dp->~S1567C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1567C1(Test_S1567C1, "S1567C1", ABISELECT(448,340));

#else // __cplusplus

extern void _ZN7S1567C1C1Ev();
extern void _ZN7S1567C1D1Ev();
Name_Map name_map_S1567C1[] = {
  NSPAIR(_ZN7S1567C1C1Ev),
  NSPAIR(_ZN7S1567C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1567C4;
extern VTBL_ENTRY _ZTI7S1567C4[];
extern  VTBL_ENTRY _ZTV7S1567C4[];
extern Class_Descriptor cd_S1567C6;
extern VTBL_ENTRY _ZTI7S1567C6[];
extern  VTBL_ENTRY _ZTV7S1567C6[];
extern Class_Descriptor cd_S1567C3;
extern VTBL_ENTRY _ZTI7S1567C3[];
extern  VTBL_ENTRY _ZTV7S1567C3[];
extern Class_Descriptor cd_S1567C7;
extern VTBL_ENTRY _ZTI7S1567C7[];
extern  VTBL_ENTRY _ZTV7S1567C7[];
extern Class_Descriptor cd_S1567C2;
extern VTBL_ENTRY _ZTI7S1567C2[];
extern  VTBL_ENTRY _ZTV7S1567C2[];
static Base_Class bases_S1567C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1567C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1567C6,    ABISELECT(96,60), //bcp->offset
    100, //bcp->virtual_function_table_offset
    2, //num_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_S1567C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1567C7,    ABISELECT(104,64), //bcp->offset
    103, //bcp->virtual_function_table_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_S1567C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1567C1[];
extern void _ZN7S1567C1D1Ev();
extern void _ZN7S1567C1D0Ev();
extern void _ZN7S1567C42v8Ev();
extern void _ZN7S1567C42v9Ev();
extern void _ZN7S1567C43v10Ev();
extern void _ZN7S1567C43v11Ev();
extern void _ZN7S1567C43v12Ev();
extern void _ZN7S1567C43v13Ev();
extern void _ZN7S1567C43v14Ev();
extern void _ZN7S1567C43v15Ev();
extern void _ZN7S1567C43v16Ev();
extern void _ZN7S1567C43v17Ev();
extern void _ZN7S1567C43v18Ev();
extern void _ZN7S1567C43v19Ev();
extern void _ZN7S1567C43v20Ev();
extern void _ZN7S1567C43v21Ev();
extern void _ZN7S1567C43v22Ev();
extern void _ZN7S1567C43v23Ev();
extern void _ZN7S1567C43v24Ev();
extern void _ZN7S1567C43v25Ev();
extern void _ZN7S1567C43v26Ev();
extern void _ZN7S1567C43v27Ev();
extern void _ZN7S1567C43v28Ev();
extern void _ZN7S1567C43v29Ev();
extern void _ZN7S1567C43v30Ev();
extern void _ZN7S1567C43v31Ev();
extern void _ZN7S1567C43v32Ev();
extern void _ZN7S1567C43v33Ev();
extern void _ZN7S1567C43v34Ev();
extern void _ZN7S1567C43v35Ev();
extern void _ZN7S1567C43v36Ev();
extern void _ZN7S1567C43v37Ev();
extern void _ZN7S1567C43v38Ev();
extern void _ZN7S1567C43v39Ev();
extern void _ZN7S1567C43v40Ev();
extern void _ZN7S1567C43v41Ev();
extern void _ZN7S1567C43v42Ev();
extern void _ZN7S1567C43v43Ev();
extern void _ZN7S1567C43v44Ev();
extern void _ZN7S1567C43v45Ev();
extern void _ZN7S1567C43v46Ev();
extern void _ZN7S1567C43v47Ev();
extern void _ZN7S1567C43v48Ev();
extern void _ZN7S1567C43v49Ev();
extern void _ZN7S1567C43v50Ev();
extern void _ZN7S1567C43v51Ev();
extern void _ZN7S1567C43v52Ev();
extern void _ZN7S1567C43v53Ev();
extern void _ZN7S1567C43v54Ev();
extern void _ZN7S1567C43v55Ev();
extern void _ZN7S1567C43v56Ev();
extern void _ZN7S1567C43v57Ev();
extern void _ZN7S1567C43v58Ev();
extern void _ZN7S1567C43v59Ev();
extern void _ZN7S1567C43v60Ev();
extern void _ZN7S1567C43v61Ev();
extern void _ZN7S1567C43v62Ev();
extern void _ZN7S1567C43v63Ev();
extern void _ZN7S1567C43v64Ev();
extern void _ZN7S1567C43v65Ev();
extern void _ZN7S1567C43v66Ev();
extern void _ZN7S1567C43v67Ev();
extern void _ZN7S1567C43v68Ev();
extern void _ZN7S1567C43v69Ev();
extern void _ZN7S1567C43v70Ev();
extern void _ZN7S1567C43v71Ev();
extern void _ZN7S1567C33v73Ev();
extern void _ZN7S1567C33v74Ev();
extern void _ZN7S1567C33v75Ev();
extern void _ZN7S1567C33v76Ev();
extern void _ZN7S1567C23v80Ev();
extern void _ZN7S1567C23v81Ev();
extern void _ZN7S1567C23v82Ev();
extern void _ZN7S1567C23v83Ev();
extern void _ZN7S1567C23v84Ev();
extern void _ZN7S1567C23v85Ev();
extern void _ZN7S1567C23v86Ev();
extern void _ZN7S1567C23v87Ev();
extern void _ZN7S1567C23v88Ev();
extern void _ZN7S1567C23v89Ev();
extern void _ZN7S1567C23v90Ev();
extern void _ZN7S1567C23v91Ev();
extern void _ZN7S1567C23v92Ev();
extern void _ZN7S1567C23v93Ev();
extern void _ZN7S1567C23v94Ev();
extern void _ZN7S1567C23v95Ev();
extern void _ZN7S1567C23v96Ev();
extern void _ZN7S1567C23v97Ev();
extern void _ZN7S1567C23v98Ev();
extern void _ZN7S1567C23v99Ev();
extern void _ZN7S1567C24v100Ev();
extern void _ZN7S1567C12v1Ev();
extern void _ZN7S1567C12v2Ev();
extern void _ZN7S1567C12v3Ev();
extern void _ZN7S1567C12v4Ev();
extern void _ZN7S1567C12v5Ev();
extern void _ZN7S1567C12v6Ev();
extern void _ZN7S1567C12v7Ev();
extern void _ZN7S1567C63v72Ev();
extern void ABISELECT(_ZThn104_N7S1567C1D1Ev,_ZThn64_N7S1567C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S1567C1D0Ev,_ZThn64_N7S1567C1D0Ev)();
extern void _ZN7S1567C73v77Ev();
extern void _ZN7S1567C73v78Ev();
extern void _ZN7S1567C73v79Ev();
static  VTBL_ENTRY vtc_S1567C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1567C1[0]),
  (VTBL_ENTRY)&_ZN7S1567C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1567C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1567C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1567C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1567C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1567C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1567C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1567C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1567C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v80Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1567C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1567C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1567C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1567C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1567C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1567C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1567C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1567C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1567C12v7Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1567C1[0]),
  (VTBL_ENTRY)&_ZN7S1567C63v72Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1567C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S1567C1D1Ev,_ZThn64_N7S1567C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S1567C1D0Ev,_ZThn64_N7S1567C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1567C73v77Ev,
  (VTBL_ENTRY)&_ZN7S1567C73v78Ev,
  (VTBL_ENTRY)&_ZN7S1567C73v79Ev,
};
extern VTBL_ENTRY _ZTI7S1567C1[];
extern  VTBL_ENTRY _ZTV7S1567C1[];
Class_Descriptor cd_S1567C1 = {  "S1567C1", // class name
  bases_S1567C1, 5,
  &(vtc_S1567C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,340), // object size
  NSPAIRA(_ZTI7S1567C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1567C1),110, //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  S3010C3  {
  int s3010c3f0;
  __tsi64 s3010c3f1;
  void *s3010c3f2[4];
  int s3010c3f3[2];
  void *s3010c3f4;
  ::S1566C14_nt s3010c3f5;
  void *s3010c3f6[2];
  virtual  ~S3010C3(); // _ZN7S3010C3D1Ev
  virtual void  v10(); // _ZN7S3010C33v10Ev
  virtual void  v11(); // _ZN7S3010C33v11Ev
  virtual void  v12(); // _ZN7S3010C33v12Ev
  virtual void  v13(); // _ZN7S3010C33v13Ev
  virtual void  v14(); // _ZN7S3010C33v14Ev
  virtual void  v15(); // _ZN7S3010C33v15Ev
  virtual void  v16(); // _ZN7S3010C33v16Ev
  virtual void  v17(); // _ZN7S3010C33v17Ev
  virtual void  v18(); // _ZN7S3010C33v18Ev
  virtual void  v19(); // _ZN7S3010C33v19Ev
  virtual void  v20(); // _ZN7S3010C33v20Ev
  virtual void  v21(); // _ZN7S3010C33v21Ev
  virtual void  v22(); // _ZN7S3010C33v22Ev
  virtual void  v23(); // _ZN7S3010C33v23Ev
  virtual void  v24(); // _ZN7S3010C33v24Ev
  virtual void  v25(); // _ZN7S3010C33v25Ev
  virtual void  v26(); // _ZN7S3010C33v26Ev
  virtual void  v27(); // _ZN7S3010C33v27Ev
  virtual void  v28(); // _ZN7S3010C33v28Ev
  virtual void  v29(); // _ZN7S3010C33v29Ev
  virtual void  v30(); // _ZN7S3010C33v30Ev
  virtual void  v31(); // _ZN7S3010C33v31Ev
  virtual void  v32(); // _ZN7S3010C33v32Ev
  virtual void  v33(); // _ZN7S3010C33v33Ev
  virtual void  v34(); // _ZN7S3010C33v34Ev
  virtual void  v35(); // _ZN7S3010C33v35Ev
  virtual void  v36(); // _ZN7S3010C33v36Ev
  virtual void  v37(); // _ZN7S3010C33v37Ev
  virtual void  v38(); // _ZN7S3010C33v38Ev
  virtual void  v39(); // _ZN7S3010C33v39Ev
  virtual void  v40(); // _ZN7S3010C33v40Ev
  virtual void  v41(); // _ZN7S3010C33v41Ev
  virtual void  v42(); // _ZN7S3010C33v42Ev
  virtual void  v43(); // _ZN7S3010C33v43Ev
  virtual void  v44(); // _ZN7S3010C33v44Ev
  virtual void  v45(); // _ZN7S3010C33v45Ev
  virtual void  v46(); // _ZN7S3010C33v46Ev
  virtual void  v47(); // _ZN7S3010C33v47Ev
  virtual void  v48(); // _ZN7S3010C33v48Ev
  virtual void  v49(); // _ZN7S3010C33v49Ev
  virtual void  v50(); // _ZN7S3010C33v50Ev
  virtual void  v51(); // _ZN7S3010C33v51Ev
  virtual void  v52(); // _ZN7S3010C33v52Ev
  virtual void  v53(); // _ZN7S3010C33v53Ev
  virtual void  v54(); // _ZN7S3010C33v54Ev
  virtual void  v55(); // _ZN7S3010C33v55Ev
  virtual void  v56(); // _ZN7S3010C33v56Ev
  virtual void  v57(); // _ZN7S3010C33v57Ev
  virtual void  v58(); // _ZN7S3010C33v58Ev
  virtual void  v59(); // _ZN7S3010C33v59Ev
  virtual void  v60(); // _ZN7S3010C33v60Ev
  virtual void  v61(); // _ZN7S3010C33v61Ev
  virtual void  v62(); // _ZN7S3010C33v62Ev
  virtual void  v63(); // _ZN7S3010C33v63Ev
  virtual void  v64(); // _ZN7S3010C33v64Ev
  virtual void  v65(); // _ZN7S3010C33v65Ev
  virtual void  v66(); // _ZN7S3010C33v66Ev
  virtual void  v67(); // _ZN7S3010C33v67Ev
  virtual void  v68(); // _ZN7S3010C33v68Ev
  virtual void  v69(); // _ZN7S3010C33v69Ev
  virtual void  v70(); // _ZN7S3010C33v70Ev
  virtual void  v71(); // _ZN7S3010C33v71Ev
  virtual void  v72(); // _ZN7S3010C33v72Ev
  virtual void  v73(); // _ZN7S3010C33v73Ev
  S3010C3(); // tgen
};
//SIG(-1 S3010C3) 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]}


 S3010C3 ::~S3010C3(){ note_dtor("S3010C3", this);}
void  S3010C3 ::v10(){vfunc_called(this, "_ZN7S3010C33v10Ev");}
void  S3010C3 ::v11(){vfunc_called(this, "_ZN7S3010C33v11Ev");}
void  S3010C3 ::v12(){vfunc_called(this, "_ZN7S3010C33v12Ev");}
void  S3010C3 ::v13(){vfunc_called(this, "_ZN7S3010C33v13Ev");}
void  S3010C3 ::v14(){vfunc_called(this, "_ZN7S3010C33v14Ev");}
void  S3010C3 ::v15(){vfunc_called(this, "_ZN7S3010C33v15Ev");}
void  S3010C3 ::v16(){vfunc_called(this, "_ZN7S3010C33v16Ev");}
void  S3010C3 ::v17(){vfunc_called(this, "_ZN7S3010C33v17Ev");}
void  S3010C3 ::v18(){vfunc_called(this, "_ZN7S3010C33v18Ev");}
void  S3010C3 ::v19(){vfunc_called(this, "_ZN7S3010C33v19Ev");}
void  S3010C3 ::v20(){vfunc_called(this, "_ZN7S3010C33v20Ev");}
void  S3010C3 ::v21(){vfunc_called(this, "_ZN7S3010C33v21Ev");}
void  S3010C3 ::v22(){vfunc_called(this, "_ZN7S3010C33v22Ev");}
void  S3010C3 ::v23(){vfunc_called(this, "_ZN7S3010C33v23Ev");}
void  S3010C3 ::v24(){vfunc_called(this, "_ZN7S3010C33v24Ev");}
void  S3010C3 ::v25(){vfunc_called(this, "_ZN7S3010C33v25Ev");}
void  S3010C3 ::v26(){vfunc_called(this, "_ZN7S3010C33v26Ev");}
void  S3010C3 ::v27(){vfunc_called(this, "_ZN7S3010C33v27Ev");}
void  S3010C3 ::v28(){vfunc_called(this, "_ZN7S3010C33v28Ev");}
void  S3010C3 ::v29(){vfunc_called(this, "_ZN7S3010C33v29Ev");}
void  S3010C3 ::v30(){vfunc_called(this, "_ZN7S3010C33v30Ev");}
void  S3010C3 ::v31(){vfunc_called(this, "_ZN7S3010C33v31Ev");}
void  S3010C3 ::v32(){vfunc_called(this, "_ZN7S3010C33v32Ev");}
void  S3010C3 ::v33(){vfunc_called(this, "_ZN7S3010C33v33Ev");}
void  S3010C3 ::v34(){vfunc_called(this, "_ZN7S3010C33v34Ev");}
void  S3010C3 ::v35(){vfunc_called(this, "_ZN7S3010C33v35Ev");}
void  S3010C3 ::v36(){vfunc_called(this, "_ZN7S3010C33v36Ev");}
void  S3010C3 ::v37(){vfunc_called(this, "_ZN7S3010C33v37Ev");}
void  S3010C3 ::v38(){vfunc_called(this, "_ZN7S3010C33v38Ev");}
void  S3010C3 ::v39(){vfunc_called(this, "_ZN7S3010C33v39Ev");}
void  S3010C3 ::v40(){vfunc_called(this, "_ZN7S3010C33v40Ev");}
void  S3010C3 ::v41(){vfunc_called(this, "_ZN7S3010C33v41Ev");}
void  S3010C3 ::v42(){vfunc_called(this, "_ZN7S3010C33v42Ev");}
void  S3010C3 ::v43(){vfunc_called(this, "_ZN7S3010C33v43Ev");}
void  S3010C3 ::v44(){vfunc_called(this, "_ZN7S3010C33v44Ev");}
void  S3010C3 ::v45(){vfunc_called(this, "_ZN7S3010C33v45Ev");}
void  S3010C3 ::v46(){vfunc_called(this, "_ZN7S3010C33v46Ev");}
void  S3010C3 ::v47(){vfunc_called(this, "_ZN7S3010C33v47Ev");}
void  S3010C3 ::v48(){vfunc_called(this, "_ZN7S3010C33v48Ev");}
void  S3010C3 ::v49(){vfunc_called(this, "_ZN7S3010C33v49Ev");}
void  S3010C3 ::v50(){vfunc_called(this, "_ZN7S3010C33v50Ev");}
void  S3010C3 ::v51(){vfunc_called(this, "_ZN7S3010C33v51Ev");}
void  S3010C3 ::v52(){vfunc_called(this, "_ZN7S3010C33v52Ev");}
void  S3010C3 ::v53(){vfunc_called(this, "_ZN7S3010C33v53Ev");}
void  S3010C3 ::v54(){vfunc_called(this, "_ZN7S3010C33v54Ev");}
void  S3010C3 ::v55(){vfunc_called(this, "_ZN7S3010C33v55Ev");}
void  S3010C3 ::v56(){vfunc_called(this, "_ZN7S3010C33v56Ev");}
void  S3010C3 ::v57(){vfunc_called(this, "_ZN7S3010C33v57Ev");}
void  S3010C3 ::v58(){vfunc_called(this, "_ZN7S3010C33v58Ev");}
void  S3010C3 ::v59(){vfunc_called(this, "_ZN7S3010C33v59Ev");}
void  S3010C3 ::v60(){vfunc_called(this, "_ZN7S3010C33v60Ev");}
void  S3010C3 ::v61(){vfunc_called(this, "_ZN7S3010C33v61Ev");}
void  S3010C3 ::v62(){vfunc_called(this, "_ZN7S3010C33v62Ev");}
void  S3010C3 ::v63(){vfunc_called(this, "_ZN7S3010C33v63Ev");}
void  S3010C3 ::v64(){vfunc_called(this, "_ZN7S3010C33v64Ev");}
void  S3010C3 ::v65(){vfunc_called(this, "_ZN7S3010C33v65Ev");}
void  S3010C3 ::v66(){vfunc_called(this, "_ZN7S3010C33v66Ev");}
void  S3010C3 ::v67(){vfunc_called(this, "_ZN7S3010C33v67Ev");}
void  S3010C3 ::v68(){vfunc_called(this, "_ZN7S3010C33v68Ev");}
void  S3010C3 ::v69(){vfunc_called(this, "_ZN7S3010C33v69Ev");}
void  S3010C3 ::v70(){vfunc_called(this, "_ZN7S3010C33v70Ev");}
void  S3010C3 ::v71(){vfunc_called(this, "_ZN7S3010C33v71Ev");}
void  S3010C3 ::v72(){vfunc_called(this, "_ZN7S3010C33v72Ev");}
void  S3010C3 ::v73(){vfunc_called(this, "_ZN7S3010C33v73Ev");}
S3010C3 ::S3010C3(){ note_ctor("S3010C3", this);} // tgen

static void Test_S3010C3()
{
  extern Class_Descriptor cd_S3010C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3010C3, buf);
    S3010C3 *dp, &lv = *(dp=new (buf) S3010C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3010C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3010C3)");
    check_field_offset(lv, s3010c3f0, ABISELECT(8,4), "S3010C3.s3010c3f0");
    check_field_offset(lv, s3010c3f1, ABISELECT(16,8), "S3010C3.s3010c3f1");
    check_field_offset(lv, s3010c3f2, ABISELECT(24,16), "S3010C3.s3010c3f2");
    check_field_offset(lv, s3010c3f3, ABISELECT(56,32), "S3010C3.s3010c3f3");
    check_field_offset(lv, s3010c3f4, ABISELECT(64,40), "S3010C3.s3010c3f4");
    check_field_offset(lv, s3010c3f5, ABISELECT(72,44), "S3010C3.s3010c3f5");
    check_field_offset(lv, s3010c3f6, ABISELECT(80,52), "S3010C3.s3010c3f6");
    test_class_info(&lv, &cd_S3010C3);
    dp->~S3010C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3010C3(Test_S3010C3, "S3010C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3010C3C1Ev();
extern void _ZN7S3010C3D1Ev();
Name_Map name_map_S3010C3[] = {
  NSPAIR(_ZN7S3010C3C1Ev),
  NSPAIR(_ZN7S3010C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3010C3[];
extern void _ZN7S3010C3D1Ev();
extern void _ZN7S3010C3D0Ev();
extern void _ZN7S3010C33v10Ev();
extern void _ZN7S3010C33v11Ev();
extern void _ZN7S3010C33v12Ev();
extern void _ZN7S3010C33v13Ev();
extern void _ZN7S3010C33v14Ev();
extern void _ZN7S3010C33v15Ev();
extern void _ZN7S3010C33v16Ev();
extern void _ZN7S3010C33v17Ev();
extern void _ZN7S3010C33v18Ev();
extern void _ZN7S3010C33v19Ev();
extern void _ZN7S3010C33v20Ev();
extern void _ZN7S3010C33v21Ev();
extern void _ZN7S3010C33v22Ev();
extern void _ZN7S3010C33v23Ev();
extern void _ZN7S3010C33v24Ev();
extern void _ZN7S3010C33v25Ev();
extern void _ZN7S3010C33v26Ev();
extern void _ZN7S3010C33v27Ev();
extern void _ZN7S3010C33v28Ev();
extern void _ZN7S3010C33v29Ev();
extern void _ZN7S3010C33v30Ev();
extern void _ZN7S3010C33v31Ev();
extern void _ZN7S3010C33v32Ev();
extern void _ZN7S3010C33v33Ev();
extern void _ZN7S3010C33v34Ev();
extern void _ZN7S3010C33v35Ev();
extern void _ZN7S3010C33v36Ev();
extern void _ZN7S3010C33v37Ev();
extern void _ZN7S3010C33v38Ev();
extern void _ZN7S3010C33v39Ev();
extern void _ZN7S3010C33v40Ev();
extern void _ZN7S3010C33v41Ev();
extern void _ZN7S3010C33v42Ev();
extern void _ZN7S3010C33v43Ev();
extern void _ZN7S3010C33v44Ev();
extern void _ZN7S3010C33v45Ev();
extern void _ZN7S3010C33v46Ev();
extern void _ZN7S3010C33v47Ev();
extern void _ZN7S3010C33v48Ev();
extern void _ZN7S3010C33v49Ev();
extern void _ZN7S3010C33v50Ev();
extern void _ZN7S3010C33v51Ev();
extern void _ZN7S3010C33v52Ev();
extern void _ZN7S3010C33v53Ev();
extern void _ZN7S3010C33v54Ev();
extern void _ZN7S3010C33v55Ev();
extern void _ZN7S3010C33v56Ev();
extern void _ZN7S3010C33v57Ev();
extern void _ZN7S3010C33v58Ev();
extern void _ZN7S3010C33v59Ev();
extern void _ZN7S3010C33v60Ev();
extern void _ZN7S3010C33v61Ev();
extern void _ZN7S3010C33v62Ev();
extern void _ZN7S3010C33v63Ev();
extern void _ZN7S3010C33v64Ev();
extern void _ZN7S3010C33v65Ev();
extern void _ZN7S3010C33v66Ev();
extern void _ZN7S3010C33v67Ev();
extern void _ZN7S3010C33v68Ev();
extern void _ZN7S3010C33v69Ev();
extern void _ZN7S3010C33v70Ev();
extern void _ZN7S3010C33v71Ev();
extern void _ZN7S3010C33v72Ev();
extern void _ZN7S3010C33v73Ev();
static  VTBL_ENTRY vtc_S3010C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3010C3[0]),
  (VTBL_ENTRY)&_ZN7S3010C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3010C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v73Ev,
};
extern VTBL_ENTRY _ZTI7S3010C3[];
extern  VTBL_ENTRY _ZTV7S3010C3[];
Class_Descriptor cd_S3010C3 = {  "S3010C3", // class name
  0,0,//no base classes
  &(vtc_S3010C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3010C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3010C3),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  S3010C5  {
  virtual void  v74(); // _ZN7S3010C53v74Ev
  ~S3010C5(); // tgen
  S3010C5(); // tgen
};
//SIG(-1 S3010C5) C1{ v1}


void  S3010C5 ::v74(){vfunc_called(this, "_ZN7S3010C53v74Ev");}
S3010C5 ::~S3010C5(){ note_dtor("S3010C5", this);} // tgen
S3010C5 ::S3010C5(){ note_ctor("S3010C5", this);} // tgen

static void Test_S3010C5()
{
  extern Class_Descriptor cd_S3010C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3010C5, buf);
    S3010C5 *dp, &lv = *(dp=new (buf) S3010C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3010C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3010C5)");
    test_class_info(&lv, &cd_S3010C5);
    dp->~S3010C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3010C5(Test_S3010C5, "S3010C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3010C5C1Ev();
extern void _ZN7S3010C5D1Ev();
Name_Map name_map_S3010C5[] = {
  NSPAIR(_ZN7S3010C5C1Ev),
  NSPAIR(_ZN7S3010C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3010C5[];
extern void _ZN7S3010C53v74Ev();
static  VTBL_ENTRY vtc_S3010C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3010C5[0]),
  (VTBL_ENTRY)&_ZN7S3010C53v74Ev,
};
extern VTBL_ENTRY _ZTI7S3010C5[];
extern  VTBL_ENTRY _ZTV7S3010C5[];
Class_Descriptor cd_S3010C5 = {  "S3010C5", // class name
  0,0,//no base classes
  &(vtc_S3010C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3010C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3010C5),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  S3010C2  : S3010C3 , S3010C5 {
  void *s3010c2f0;
  int s3010c2f1[7];
  virtual  ~S3010C2(); // _ZN7S3010C2D1Ev
  virtual void  v75(); // _ZN7S3010C23v75Ev
  virtual void  v76(); // _ZN7S3010C23v76Ev
  virtual void  v77(); // _ZN7S3010C23v77Ev
  virtual void  v78(); // _ZN7S3010C23v78Ev
  S3010C2(); // tgen
};
//SIG(-1 S3010C2) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} BC4{ v69} vd v1 v2 v3 v4 Fp Fi[7]}


 S3010C2 ::~S3010C2(){ note_dtor("S3010C2", this);}
void  S3010C2 ::v75(){vfunc_called(this, "_ZN7S3010C23v75Ev");}
void  S3010C2 ::v76(){vfunc_called(this, "_ZN7S3010C23v76Ev");}
void  S3010C2 ::v77(){vfunc_called(this, "_ZN7S3010C23v77Ev");}
void  S3010C2 ::v78(){vfunc_called(this, "_ZN7S3010C23v78Ev");}
S3010C2 ::S3010C2(){ note_ctor("S3010C2", this);} // tgen

static void Test_S3010C2()
{
  extern Class_Descriptor cd_S3010C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,25)];
    init_test(&cd_S3010C2, buf);
    S3010C2 *dp, &lv = *(dp=new (buf) S3010C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S3010C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3010C2)");
    check_base_class_offset(lv, (S3010C3*), 0, "S3010C2");
    check_base_class_offset(lv, (S3010C5*), ABISELECT(96,60), "S3010C2");
    check_field_offset(lv, s3010c2f0, ABISELECT(104,64), "S3010C2.s3010c2f0");
    check_field_offset(lv, s3010c2f1, ABISELECT(112,68), "S3010C2.s3010c2f1");
    test_class_info(&lv, &cd_S3010C2);
    dp->~S3010C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3010C2(Test_S3010C2, "S3010C2", ABISELECT(144,96));

#else // __cplusplus

extern void _ZN7S3010C2C1Ev();
extern void _ZN7S3010C2D1Ev();
Name_Map name_map_S3010C2[] = {
  NSPAIR(_ZN7S3010C2C1Ev),
  NSPAIR(_ZN7S3010C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3010C3;
extern VTBL_ENTRY _ZTI7S3010C3[];
extern  VTBL_ENTRY _ZTV7S3010C3[];
extern Class_Descriptor cd_S3010C5;
extern VTBL_ENTRY _ZTI7S3010C5[];
extern  VTBL_ENTRY _ZTV7S3010C5[];
static Base_Class bases_S3010C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3010C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3010C5,    ABISELECT(96,60), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3010C2[];
extern void _ZN7S3010C2D1Ev();
extern void _ZN7S3010C2D0Ev();
extern void _ZN7S3010C33v10Ev();
extern void _ZN7S3010C33v11Ev();
extern void _ZN7S3010C33v12Ev();
extern void _ZN7S3010C33v13Ev();
extern void _ZN7S3010C33v14Ev();
extern void _ZN7S3010C33v15Ev();
extern void _ZN7S3010C33v16Ev();
extern void _ZN7S3010C33v17Ev();
extern void _ZN7S3010C33v18Ev();
extern void _ZN7S3010C33v19Ev();
extern void _ZN7S3010C33v20Ev();
extern void _ZN7S3010C33v21Ev();
extern void _ZN7S3010C33v22Ev();
extern void _ZN7S3010C33v23Ev();
extern void _ZN7S3010C33v24Ev();
extern void _ZN7S3010C33v25Ev();
extern void _ZN7S3010C33v26Ev();
extern void _ZN7S3010C33v27Ev();
extern void _ZN7S3010C33v28Ev();
extern void _ZN7S3010C33v29Ev();
extern void _ZN7S3010C33v30Ev();
extern void _ZN7S3010C33v31Ev();
extern void _ZN7S3010C33v32Ev();
extern void _ZN7S3010C33v33Ev();
extern void _ZN7S3010C33v34Ev();
extern void _ZN7S3010C33v35Ev();
extern void _ZN7S3010C33v36Ev();
extern void _ZN7S3010C33v37Ev();
extern void _ZN7S3010C33v38Ev();
extern void _ZN7S3010C33v39Ev();
extern void _ZN7S3010C33v40Ev();
extern void _ZN7S3010C33v41Ev();
extern void _ZN7S3010C33v42Ev();
extern void _ZN7S3010C33v43Ev();
extern void _ZN7S3010C33v44Ev();
extern void _ZN7S3010C33v45Ev();
extern void _ZN7S3010C33v46Ev();
extern void _ZN7S3010C33v47Ev();
extern void _ZN7S3010C33v48Ev();
extern void _ZN7S3010C33v49Ev();
extern void _ZN7S3010C33v50Ev();
extern void _ZN7S3010C33v51Ev();
extern void _ZN7S3010C33v52Ev();
extern void _ZN7S3010C33v53Ev();
extern void _ZN7S3010C33v54Ev();
extern void _ZN7S3010C33v55Ev();
extern void _ZN7S3010C33v56Ev();
extern void _ZN7S3010C33v57Ev();
extern void _ZN7S3010C33v58Ev();
extern void _ZN7S3010C33v59Ev();
extern void _ZN7S3010C33v60Ev();
extern void _ZN7S3010C33v61Ev();
extern void _ZN7S3010C33v62Ev();
extern void _ZN7S3010C33v63Ev();
extern void _ZN7S3010C33v64Ev();
extern void _ZN7S3010C33v65Ev();
extern void _ZN7S3010C33v66Ev();
extern void _ZN7S3010C33v67Ev();
extern void _ZN7S3010C33v68Ev();
extern void _ZN7S3010C33v69Ev();
extern void _ZN7S3010C33v70Ev();
extern void _ZN7S3010C33v71Ev();
extern void _ZN7S3010C33v72Ev();
extern void _ZN7S3010C33v73Ev();
extern void _ZN7S3010C23v75Ev();
extern void _ZN7S3010C23v76Ev();
extern void _ZN7S3010C23v77Ev();
extern void _ZN7S3010C23v78Ev();
extern void _ZN7S3010C53v74Ev();
static  VTBL_ENTRY vtc_S3010C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3010C2[0]),
  (VTBL_ENTRY)&_ZN7S3010C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3010C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3010C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3010C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3010C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3010C23v78Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S3010C2[0]),
  (VTBL_ENTRY)&_ZN7S3010C53v74Ev,
};
extern VTBL_ENTRY _ZTI7S3010C2[];
extern  VTBL_ENTRY _ZTV7S3010C2[];
Class_Descriptor cd_S3010C2 = {  "S3010C2", // class name
  bases_S3010C2, 2,
  &(vtc_S3010C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,96), // object size
  NSPAIRA(_ZTI7S3010C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3010C2),75, //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  S3010C10_nt  {
  void *s3010c10f0[2];
  void  mf3010c10(); // _ZN11S3010C10_nt9mf3010c10Ev
};
//SIG(-1 S3010C10_nt) C1{ m Fp[2]}


void  S3010C10_nt ::mf3010c10(){}

//skip512 S3010C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3010C13_nt  {
  unsigned int s3010c13f0:1;
  unsigned int s3010c13f1:1;
  unsigned int s3010c13f2:1;
  unsigned int s3010c13f3:1;
  int s3010c13f4[6];
  ::S1325C18_nt s3010c13f5;
  char s3010c13f6;
  int s3010c13f7[2];
  ::S1537C14_nt s3010c13f8;
  int s3010c13f9[3];
  unsigned int s3010c13f10:1;
  int s3010c13f11[4];
  ::S1537C14_nt s3010c13f12;
  ::S1537C14_nt s3010c13f13;
  ::S1537C14_nt s3010c13f14;
  int s3010c13f15;
  void  mf3010c13(); // _ZN11S3010C13_nt9mf3010c13Ev
};
//SIG(-1 S3010C13_nt) C1{ m Fi:1 Fi:1 Fi:1 Fi:1 Fi[6] FC2{ m} Fc Fi[2] FC3{ m Fi[3]} Fi[3] Fi:1 Fi[4] FC3 FC3 FC3 Fi}


void  S3010C13_nt ::mf3010c13(){}

//skip512 S3010C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3010C12  {
  ::S3010C13_nt s3010c12f0;
  void *s3010c12f1;
  int s3010c12f2[2];
};
//SIG(-1 S3010C12) C1{ FC2{ m Fi:1 Fi:1 Fi:1 Fi:1 Fi[6] FC3{ m} Fc Fi[2] FC4{ m Fi[3]} Fi[3] Fi:1 Fi[4] FC4 FC4 FC4 Fi} Fp Fi[2]}



static void Test_S3010C12()
{
  {
    init_simple_test("S3010C12");
    static S3010C12 lv;
    check2(sizeof(lv), ABISELECT(144,136), "sizeof(S3010C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3010C12)");
    check_field_offset(lv, s3010c12f0, 0, "S3010C12.s3010c12f0");
    check_field_offset(lv, s3010c12f1, ABISELECT(128,124), "S3010C12.s3010c12f1");
    check_field_offset(lv, s3010c12f2, ABISELECT(136,128), "S3010C12.s3010c12f2");
  }
}
static Arrange_To_Call_Me vS3010C12(Test_S3010C12, "S3010C12", ABISELECT(144,136));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3010C1  : S3010C2 {
  int s3010c1f0;
  void *s3010c1f1;
  ::S1537C5_nt s3010c1f2;
  ::S1537C5_nt s3010c1f3;
  void *s3010c1f4;
  ::S1566C9 s3010c1f5;
  void *s3010c1f6;
  ::S3010C10_nt s3010c1f7;
  ::S1537C14_nt s3010c1f8;
  ::S3010C12 s3010c1f9;
  unsigned int s3010c1f10:1;
  ::S3010C13_nt s3010c1f11;
  int s3010c1f12;
  unsigned int s3010c1f13:1;
  virtual  ~S3010C1(); // _ZN7S3010C1D1Ev
  virtual void  v1(); // _ZN7S3010C12v1Ev
  virtual void  v2(); // _ZN7S3010C12v2Ev
  virtual void  v3(); // _ZN7S3010C12v3Ev
  virtual void  v4(); // _ZN7S3010C12v4Ev
  virtual void  v5(); // _ZN7S3010C12v5Ev
  virtual void  v6(); // _ZN7S3010C12v6Ev
  virtual void  v7(); // _ZN7S3010C12v7Ev
  virtual void  v8(); // _ZN7S3010C12v8Ev
  virtual void  v9(); // _ZN7S3010C12v9Ev
  S3010C1(); // tgen
};
//SIG(1 S3010C1) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v74} vd v75 v76 v77 v78 Fp Fi[7]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fi Fp FC6{ m Fi[2]} FC6 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} Fp FC10{ m Fp[2]} FC11{ m Fi[3]} FC12{ FC13{ m Fi:1 Fi:1 Fi:1 Fi:1 Fi[6] FC14{ m} Fc Fi[2] FC11 Fi[3] Fi:1 Fi[4] FC11 FC11 FC11 Fi} Fp Fi[2]} Fi:1 FC13 Fi Fi:1}


 S3010C1 ::~S3010C1(){ note_dtor("S3010C1", this);}
void  S3010C1 ::v1(){vfunc_called(this, "_ZN7S3010C12v1Ev");}
void  S3010C1 ::v2(){vfunc_called(this, "_ZN7S3010C12v2Ev");}
void  S3010C1 ::v3(){vfunc_called(this, "_ZN7S3010C12v3Ev");}
void  S3010C1 ::v4(){vfunc_called(this, "_ZN7S3010C12v4Ev");}
void  S3010C1 ::v5(){vfunc_called(this, "_ZN7S3010C12v5Ev");}
void  S3010C1 ::v6(){vfunc_called(this, "_ZN7S3010C12v6Ev");}
void  S3010C1 ::v7(){vfunc_called(this, "_ZN7S3010C12v7Ev");}
void  S3010C1 ::v8(){vfunc_called(this, "_ZN7S3010C12v8Ev");}
void  S3010C1 ::v9(){vfunc_called(this, "_ZN7S3010C12v9Ev");}
S3010C1 ::S3010C1(){ note_ctor("S3010C1", this);} // tgen

static void Test_S3010C1()
{
  extern Class_Descriptor cd_S3010C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(65,109)];
    init_test(&cd_S3010C1, buf);
    S3010C1 *dp, &lv = *(dp=new (buf) S3010C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,432), "sizeof(S3010C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3010C1)");
    check_base_class_offset(lv, (S3010C3*)(S3010C2*), 0, "S3010C1");
    check_base_class_offset(lv, (S3010C5*)(S3010C2*), ABISELECT(96,60), "S3010C1");
    check_base_class_offset(lv, (S3010C2*), 0, "S3010C1");
    check_field_offset(lv, s3010c1f0, ABISELECT(140,96), "S3010C1.s3010c1f0");
    check_field_offset(lv, s3010c1f1, ABISELECT(144,100), "S3010C1.s3010c1f1");
    check_field_offset(lv, s3010c1f2, ABISELECT(152,104), "S3010C1.s3010c1f2");
    check_field_offset(lv, s3010c1f3, ABISELECT(160,112), "S3010C1.s3010c1f3");
    check_field_offset(lv, s3010c1f4, ABISELECT(168,120), "S3010C1.s3010c1f4");
    check_field_offset(lv, s3010c1f5, ABISELECT(176,124), "S3010C1.s3010c1f5");
    check_field_offset(lv, s3010c1f6, ABISELECT(192,136), "S3010C1.s3010c1f6");
    check_field_offset(lv, s3010c1f7, ABISELECT(200,140), "S3010C1.s3010c1f7");
    check_field_offset(lv, s3010c1f8, ABISELECT(216,148), "S3010C1.s3010c1f8");
    check_field_offset(lv, s3010c1f9, ABISELECT(232,160), "S3010C1.s3010c1f9");
    set_bf_and_test(lv, s3010c1f10, ABISELECT(376,296), 0, 1, 1, "S3010C1");
    check_field_offset(lv, s3010c1f11, ABISELECT(380,300), "S3010C1.s3010c1f11");
    check_field_offset(lv, s3010c1f12, ABISELECT(504,424), "S3010C1.s3010c1f12");
    set_bf_and_test(lv, s3010c1f13, ABISELECT(508,428), 0, 1, 1, "S3010C1");
    test_class_info(&lv, &cd_S3010C1);
    dp->~S3010C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3010C1(Test_S3010C1, "S3010C1", ABISELECT(512,432));

#else // __cplusplus

extern void _ZN7S3010C1C1Ev();
extern void _ZN7S3010C1D1Ev();
Name_Map name_map_S3010C1[] = {
  NSPAIR(_ZN7S3010C1C1Ev),
  NSPAIR(_ZN7S3010C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3010C3;
extern VTBL_ENTRY _ZTI7S3010C3[];
extern  VTBL_ENTRY _ZTV7S3010C3[];
extern Class_Descriptor cd_S3010C5;
extern VTBL_ENTRY _ZTI7S3010C5[];
extern  VTBL_ENTRY _ZTV7S3010C5[];
extern Class_Descriptor cd_S3010C2;
extern VTBL_ENTRY _ZTI7S3010C2[];
extern  VTBL_ENTRY _ZTV7S3010C2[];
static Base_Class bases_S3010C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3010C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3010C5,    ABISELECT(96,60), //bcp->offset
    81, //bcp->virtual_function_table_offset
    2, //num_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_S3010C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3010C1[];
extern void _ZN7S3010C1D1Ev();
extern void _ZN7S3010C1D0Ev();
extern void _ZN7S3010C33v10Ev();
extern void _ZN7S3010C33v11Ev();
extern void _ZN7S3010C33v12Ev();
extern void _ZN7S3010C33v13Ev();
extern void _ZN7S3010C33v14Ev();
extern void _ZN7S3010C33v15Ev();
extern void _ZN7S3010C33v16Ev();
extern void _ZN7S3010C33v17Ev();
extern void _ZN7S3010C33v18Ev();
extern void _ZN7S3010C33v19Ev();
extern void _ZN7S3010C33v20Ev();
extern void _ZN7S3010C33v21Ev();
extern void _ZN7S3010C33v22Ev();
extern void _ZN7S3010C33v23Ev();
extern void _ZN7S3010C33v24Ev();
extern void _ZN7S3010C33v25Ev();
extern void _ZN7S3010C33v26Ev();
extern void _ZN7S3010C33v27Ev();
extern void _ZN7S3010C33v28Ev();
extern void _ZN7S3010C33v29Ev();
extern void _ZN7S3010C33v30Ev();
extern void _ZN7S3010C33v31Ev();
extern void _ZN7S3010C33v32Ev();
extern void _ZN7S3010C33v33Ev();
extern void _ZN7S3010C33v34Ev();
extern void _ZN7S3010C33v35Ev();
extern void _ZN7S3010C33v36Ev();
extern void _ZN7S3010C33v37Ev();
extern void _ZN7S3010C33v38Ev();
extern void _ZN7S3010C33v39Ev();
extern void _ZN7S3010C33v40Ev();
extern void _ZN7S3010C33v41Ev();
extern void _ZN7S3010C33v42Ev();
extern void _ZN7S3010C33v43Ev();
extern void _ZN7S3010C33v44Ev();
extern void _ZN7S3010C33v45Ev();
extern void _ZN7S3010C33v46Ev();
extern void _ZN7S3010C33v47Ev();
extern void _ZN7S3010C33v48Ev();
extern void _ZN7S3010C33v49Ev();
extern void _ZN7S3010C33v50Ev();
extern void _ZN7S3010C33v51Ev();
extern void _ZN7S3010C33v52Ev();
extern void _ZN7S3010C33v53Ev();
extern void _ZN7S3010C33v54Ev();
extern void _ZN7S3010C33v55Ev();
extern void _ZN7S3010C33v56Ev();
extern void _ZN7S3010C33v57Ev();
extern void _ZN7S3010C33v58Ev();
extern void _ZN7S3010C33v59Ev();
extern void _ZN7S3010C33v60Ev();
extern void _ZN7S3010C33v61Ev();
extern void _ZN7S3010C33v62Ev();
extern void _ZN7S3010C33v63Ev();
extern void _ZN7S3010C33v64Ev();
extern void _ZN7S3010C33v65Ev();
extern void _ZN7S3010C33v66Ev();
extern void _ZN7S3010C33v67Ev();
extern void _ZN7S3010C33v68Ev();
extern void _ZN7S3010C33v69Ev();
extern void _ZN7S3010C33v70Ev();
extern void _ZN7S3010C33v71Ev();
extern void _ZN7S3010C33v72Ev();
extern void _ZN7S3010C33v73Ev();
extern void _ZN7S3010C23v75Ev();
extern void _ZN7S3010C23v76Ev();
extern void _ZN7S3010C23v77Ev();
extern void _ZN7S3010C23v78Ev();
extern void _ZN7S3010C12v1Ev();
extern void _ZN7S3010C12v2Ev();
extern void _ZN7S3010C12v3Ev();
extern void _ZN7S3010C12v4Ev();
extern void _ZN7S3010C12v5Ev();
extern void _ZN7S3010C12v6Ev();
extern void _ZN7S3010C12v7Ev();
extern void _ZN7S3010C12v8Ev();
extern void _ZN7S3010C12v9Ev();
extern void _ZN7S3010C53v74Ev();
static  VTBL_ENTRY vtc_S3010C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3010C1[0]),
  (VTBL_ENTRY)&_ZN7S3010C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3010C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3010C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3010C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3010C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3010C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3010C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3010C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3010C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3010C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3010C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3010C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3010C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3010C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3010C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3010C12v9Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S3010C1[0]),
  (VTBL_ENTRY)&_ZN7S3010C53v74Ev,
};
extern VTBL_ENTRY _ZTI7S3010C1[];
extern  VTBL_ENTRY _ZTV7S3010C1[];
Class_Descriptor cd_S3010C1 = {  "S3010C1", // class name
  bases_S3010C1, 3,
  &(vtc_S3010C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(512,432), // object size
  NSPAIRA(_ZTI7S3010C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3010C1),84, //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  S1316C4  {
  int s1316c4f0;
  __tsi64 s1316c4f1;
  void *s1316c4f2[4];
  int s1316c4f3[2];
  void *s1316c4f4;
  ::S1566C14_nt s1316c4f5;
  void *s1316c4f6[2];
  virtual  ~S1316C4(); // _ZN7S1316C4D1Ev
  virtual void  v15(); // _ZN7S1316C43v15Ev
  virtual void  v16(); // _ZN7S1316C43v16Ev
  virtual void  v17(); // _ZN7S1316C43v17Ev
  virtual void  v18(); // _ZN7S1316C43v18Ev
  virtual void  v19(); // _ZN7S1316C43v19Ev
  virtual void  v20(); // _ZN7S1316C43v20Ev
  virtual void  v21(); // _ZN7S1316C43v21Ev
  virtual void  v22(); // _ZN7S1316C43v22Ev
  virtual void  v23(); // _ZN7S1316C43v23Ev
  virtual void  v24(); // _ZN7S1316C43v24Ev
  virtual void  v25(); // _ZN7S1316C43v25Ev
  virtual void  v26(); // _ZN7S1316C43v26Ev
  virtual void  v27(); // _ZN7S1316C43v27Ev
  virtual void  v28(); // _ZN7S1316C43v28Ev
  virtual void  v29(); // _ZN7S1316C43v29Ev
  virtual void  v30(); // _ZN7S1316C43v30Ev
  virtual void  v31(); // _ZN7S1316C43v31Ev
  virtual void  v32(); // _ZN7S1316C43v32Ev
  virtual void  v33(); // _ZN7S1316C43v33Ev
  virtual void  v34(); // _ZN7S1316C43v34Ev
  virtual void  v35(); // _ZN7S1316C43v35Ev
  virtual void  v36(); // _ZN7S1316C43v36Ev
  virtual void  v37(); // _ZN7S1316C43v37Ev
  virtual void  v38(); // _ZN7S1316C43v38Ev
  virtual void  v39(); // _ZN7S1316C43v39Ev
  virtual void  v40(); // _ZN7S1316C43v40Ev
  virtual void  v41(); // _ZN7S1316C43v41Ev
  virtual void  v42(); // _ZN7S1316C43v42Ev
  virtual void  v43(); // _ZN7S1316C43v43Ev
  virtual void  v44(); // _ZN7S1316C43v44Ev
  virtual void  v45(); // _ZN7S1316C43v45Ev
  virtual void  v46(); // _ZN7S1316C43v46Ev
  virtual void  v47(); // _ZN7S1316C43v47Ev
  virtual void  v48(); // _ZN7S1316C43v48Ev
  virtual void  v49(); // _ZN7S1316C43v49Ev
  virtual void  v50(); // _ZN7S1316C43v50Ev
  virtual void  v51(); // _ZN7S1316C43v51Ev
  virtual void  v52(); // _ZN7S1316C43v52Ev
  virtual void  v53(); // _ZN7S1316C43v53Ev
  virtual void  v54(); // _ZN7S1316C43v54Ev
  virtual void  v55(); // _ZN7S1316C43v55Ev
  virtual void  v56(); // _ZN7S1316C43v56Ev
  virtual void  v57(); // _ZN7S1316C43v57Ev
  virtual void  v58(); // _ZN7S1316C43v58Ev
  virtual void  v59(); // _ZN7S1316C43v59Ev
  virtual void  v60(); // _ZN7S1316C43v60Ev
  virtual void  v61(); // _ZN7S1316C43v61Ev
  virtual void  v62(); // _ZN7S1316C43v62Ev
  virtual void  v63(); // _ZN7S1316C43v63Ev
  virtual void  v64(); // _ZN7S1316C43v64Ev
  virtual void  v65(); // _ZN7S1316C43v65Ev
  virtual void  v66(); // _ZN7S1316C43v66Ev
  virtual void  v67(); // _ZN7S1316C43v67Ev
  virtual void  v68(); // _ZN7S1316C43v68Ev
  virtual void  v69(); // _ZN7S1316C43v69Ev
  virtual void  v70(); // _ZN7S1316C43v70Ev
  virtual void  v71(); // _ZN7S1316C43v71Ev
  virtual void  v72(); // _ZN7S1316C43v72Ev
  virtual void  v73(); // _ZN7S1316C43v73Ev
  virtual void  v74(); // _ZN7S1316C43v74Ev
  virtual void  v75(); // _ZN7S1316C43v75Ev
  virtual void  v76(); // _ZN7S1316C43v76Ev
  virtual void  v77(); // _ZN7S1316C43v77Ev
  virtual void  v78(); // _ZN7S1316C43v78Ev
  S1316C4(); // tgen
};
//SIG(-1 S1316C4) 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]}


 S1316C4 ::~S1316C4(){ note_dtor("S1316C4", this);}
void  S1316C4 ::v15(){vfunc_called(this, "_ZN7S1316C43v15Ev");}
void  S1316C4 ::v16(){vfunc_called(this, "_ZN7S1316C43v16Ev");}
void  S1316C4 ::v17(){vfunc_called(this, "_ZN7S1316C43v17Ev");}
void  S1316C4 ::v18(){vfunc_called(this, "_ZN7S1316C43v18Ev");}
void  S1316C4 ::v19(){vfunc_called(this, "_ZN7S1316C43v19Ev");}
void  S1316C4 ::v20(){vfunc_called(this, "_ZN7S1316C43v20Ev");}
void  S1316C4 ::v21(){vfunc_called(this, "_ZN7S1316C43v21Ev");}
void  S1316C4 ::v22(){vfunc_called(this, "_ZN7S1316C43v22Ev");}
void  S1316C4 ::v23(){vfunc_called(this, "_ZN7S1316C43v23Ev");}
void  S1316C4 ::v24(){vfunc_called(this, "_ZN7S1316C43v24Ev");}
void  S1316C4 ::v25(){vfunc_called(this, "_ZN7S1316C43v25Ev");}
void  S1316C4 ::v26(){vfunc_called(this, "_ZN7S1316C43v26Ev");}
void  S1316C4 ::v27(){vfunc_called(this, "_ZN7S1316C43v27Ev");}
void  S1316C4 ::v28(){vfunc_called(this, "_ZN7S1316C43v28Ev");}
void  S1316C4 ::v29(){vfunc_called(this, "_ZN7S1316C43v29Ev");}
void  S1316C4 ::v30(){vfunc_called(this, "_ZN7S1316C43v30Ev");}
void  S1316C4 ::v31(){vfunc_called(this, "_ZN7S1316C43v31Ev");}
void  S1316C4 ::v32(){vfunc_called(this, "_ZN7S1316C43v32Ev");}
void  S1316C4 ::v33(){vfunc_called(this, "_ZN7S1316C43v33Ev");}
void  S1316C4 ::v34(){vfunc_called(this, "_ZN7S1316C43v34Ev");}
void  S1316C4 ::v35(){vfunc_called(this, "_ZN7S1316C43v35Ev");}
void  S1316C4 ::v36(){vfunc_called(this, "_ZN7S1316C43v36Ev");}
void  S1316C4 ::v37(){vfunc_called(this, "_ZN7S1316C43v37Ev");}
void  S1316C4 ::v38(){vfunc_called(this, "_ZN7S1316C43v38Ev");}
void  S1316C4 ::v39(){vfunc_called(this, "_ZN7S1316C43v39Ev");}
void  S1316C4 ::v40(){vfunc_called(this, "_ZN7S1316C43v40Ev");}
void  S1316C4 ::v41(){vfunc_called(this, "_ZN7S1316C43v41Ev");}
void  S1316C4 ::v42(){vfunc_called(this, "_ZN7S1316C43v42Ev");}
void  S1316C4 ::v43(){vfunc_called(this, "_ZN7S1316C43v43Ev");}
void  S1316C4 ::v44(){vfunc_called(this, "_ZN7S1316C43v44Ev");}
void  S1316C4 ::v45(){vfunc_called(this, "_ZN7S1316C43v45Ev");}
void  S1316C4 ::v46(){vfunc_called(this, "_ZN7S1316C43v46Ev");}
void  S1316C4 ::v47(){vfunc_called(this, "_ZN7S1316C43v47Ev");}
void  S1316C4 ::v48(){vfunc_called(this, "_ZN7S1316C43v48Ev");}
void  S1316C4 ::v49(){vfunc_called(this, "_ZN7S1316C43v49Ev");}
void  S1316C4 ::v50(){vfunc_called(this, "_ZN7S1316C43v50Ev");}
void  S1316C4 ::v51(){vfunc_called(this, "_ZN7S1316C43v51Ev");}
void  S1316C4 ::v52(){vfunc_called(this, "_ZN7S1316C43v52Ev");}
void  S1316C4 ::v53(){vfunc_called(this, "_ZN7S1316C43v53Ev");}
void  S1316C4 ::v54(){vfunc_called(this, "_ZN7S1316C43v54Ev");}
void  S1316C4 ::v55(){vfunc_called(this, "_ZN7S1316C43v55Ev");}
void  S1316C4 ::v56(){vfunc_called(this, "_ZN7S1316C43v56Ev");}
void  S1316C4 ::v57(){vfunc_called(this, "_ZN7S1316C43v57Ev");}
void  S1316C4 ::v58(){vfunc_called(this, "_ZN7S1316C43v58Ev");}
void  S1316C4 ::v59(){vfunc_called(this, "_ZN7S1316C43v59Ev");}
void  S1316C4 ::v60(){vfunc_called(this, "_ZN7S1316C43v60Ev");}
void  S1316C4 ::v61(){vfunc_called(this, "_ZN7S1316C43v61Ev");}
void  S1316C4 ::v62(){vfunc_called(this, "_ZN7S1316C43v62Ev");}
void  S1316C4 ::v63(){vfunc_called(this, "_ZN7S1316C43v63Ev");}
void  S1316C4 ::v64(){vfunc_called(this, "_ZN7S1316C43v64Ev");}
void  S1316C4 ::v65(){vfunc_called(this, "_ZN7S1316C43v65Ev");}
void  S1316C4 ::v66(){vfunc_called(this, "_ZN7S1316C43v66Ev");}
void  S1316C4 ::v67(){vfunc_called(this, "_ZN7S1316C43v67Ev");}
void  S1316C4 ::v68(){vfunc_called(this, "_ZN7S1316C43v68Ev");}
void  S1316C4 ::v69(){vfunc_called(this, "_ZN7S1316C43v69Ev");}
void  S1316C4 ::v70(){vfunc_called(this, "_ZN7S1316C43v70Ev");}
void  S1316C4 ::v71(){vfunc_called(this, "_ZN7S1316C43v71Ev");}
void  S1316C4 ::v72(){vfunc_called(this, "_ZN7S1316C43v72Ev");}
void  S1316C4 ::v73(){vfunc_called(this, "_ZN7S1316C43v73Ev");}
void  S1316C4 ::v74(){vfunc_called(this, "_ZN7S1316C43v74Ev");}
void  S1316C4 ::v75(){vfunc_called(this, "_ZN7S1316C43v75Ev");}
void  S1316C4 ::v76(){vfunc_called(this, "_ZN7S1316C43v76Ev");}
void  S1316C4 ::v77(){vfunc_called(this, "_ZN7S1316C43v77Ev");}
void  S1316C4 ::v78(){vfunc_called(this, "_ZN7S1316C43v78Ev");}
S1316C4 ::S1316C4(){ note_ctor("S1316C4", this);} // tgen

static void Test_S1316C4()
{
  extern Class_Descriptor cd_S1316C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1316C4, buf);
    S1316C4 *dp, &lv = *(dp=new (buf) S1316C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1316C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1316C4)");
    check_field_offset(lv, s1316c4f0, ABISELECT(8,4), "S1316C4.s1316c4f0");
    check_field_offset(lv, s1316c4f1, ABISELECT(16,8), "S1316C4.s1316c4f1");
    check_field_offset(lv, s1316c4f2, ABISELECT(24,16), "S1316C4.s1316c4f2");
    check_field_offset(lv, s1316c4f3, ABISELECT(56,32), "S1316C4.s1316c4f3");
    check_field_offset(lv, s1316c4f4, ABISELECT(64,40), "S1316C4.s1316c4f4");
    check_field_offset(lv, s1316c4f5, ABISELECT(72,44), "S1316C4.s1316c4f5");
    check_field_offset(lv, s1316c4f6, ABISELECT(80,52), "S1316C4.s1316c4f6");
    test_class_info(&lv, &cd_S1316C4);
    dp->~S1316C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1316C4(Test_S1316C4, "S1316C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1316C4C1Ev();
extern void _ZN7S1316C4D1Ev();
Name_Map name_map_S1316C4[] = {
  NSPAIR(_ZN7S1316C4C1Ev),
  NSPAIR(_ZN7S1316C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1316C4[];
extern void _ZN7S1316C4D1Ev();
extern void _ZN7S1316C4D0Ev();
extern void _ZN7S1316C43v15Ev();
extern void _ZN7S1316C43v16Ev();
extern void _ZN7S1316C43v17Ev();
extern void _ZN7S1316C43v18Ev();
extern void _ZN7S1316C43v19Ev();
extern void _ZN7S1316C43v20Ev();
extern void _ZN7S1316C43v21Ev();
extern void _ZN7S1316C43v22Ev();
extern void _ZN7S1316C43v23Ev();
extern void _ZN7S1316C43v24Ev();
extern void _ZN7S1316C43v25Ev();
extern void _ZN7S1316C43v26Ev();
extern void _ZN7S1316C43v27Ev();
extern void _ZN7S1316C43v28Ev();
extern void _ZN7S1316C43v29Ev();
extern void _ZN7S1316C43v30Ev();
extern void _ZN7S1316C43v31Ev();
extern void _ZN7S1316C43v32Ev();
extern void _ZN7S1316C43v33Ev();
extern void _ZN7S1316C43v34Ev();
extern void _ZN7S1316C43v35Ev();
extern void _ZN7S1316C43v36Ev();
extern void _ZN7S1316C43v37Ev();
extern void _ZN7S1316C43v38Ev();
extern void _ZN7S1316C43v39Ev();
extern void _ZN7S1316C43v40Ev();
extern void _ZN7S1316C43v41Ev();
extern void _ZN7S1316C43v42Ev();
extern void _ZN7S1316C43v43Ev();
extern void _ZN7S1316C43v44Ev();
extern void _ZN7S1316C43v45Ev();
extern void _ZN7S1316C43v46Ev();
extern void _ZN7S1316C43v47Ev();
extern void _ZN7S1316C43v48Ev();
extern void _ZN7S1316C43v49Ev();
extern void _ZN7S1316C43v50Ev();
extern void _ZN7S1316C43v51Ev();
extern void _ZN7S1316C43v52Ev();
extern void _ZN7S1316C43v53Ev();
extern void _ZN7S1316C43v54Ev();
extern void _ZN7S1316C43v55Ev();
extern void _ZN7S1316C43v56Ev();
extern void _ZN7S1316C43v57Ev();
extern void _ZN7S1316C43v58Ev();
extern void _ZN7S1316C43v59Ev();
extern void _ZN7S1316C43v60Ev();
extern void _ZN7S1316C43v61Ev();
extern void _ZN7S1316C43v62Ev();
extern void _ZN7S1316C43v63Ev();
extern void _ZN7S1316C43v64Ev();
extern void _ZN7S1316C43v65Ev();
extern void _ZN7S1316C43v66Ev();
extern void _ZN7S1316C43v67Ev();
extern void _ZN7S1316C43v68Ev();
extern void _ZN7S1316C43v69Ev();
extern void _ZN7S1316C43v70Ev();
extern void _ZN7S1316C43v71Ev();
extern void _ZN7S1316C43v72Ev();
extern void _ZN7S1316C43v73Ev();
extern void _ZN7S1316C43v74Ev();
extern void _ZN7S1316C43v75Ev();
extern void _ZN7S1316C43v76Ev();
extern void _ZN7S1316C43v77Ev();
extern void _ZN7S1316C43v78Ev();
static  VTBL_ENTRY vtc_S1316C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1316C4[0]),
  (VTBL_ENTRY)&_ZN7S1316C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1316C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v78Ev,
};
extern VTBL_ENTRY _ZTI7S1316C4[];
extern  VTBL_ENTRY _ZTV7S1316C4[];
Class_Descriptor cd_S1316C4 = {  "S1316C4", // class name
  0,0,//no base classes
  &(vtc_S1316C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1316C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1316C4),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  S1316C7  : S1537C8_nt {
};
//SIG(-1 S1316C7) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1316C7()
{
  extern Class_Descriptor cd_S1316C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1316C7, buf);
    S1316C7 &lv = *(new (buf) S1316C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1316C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1316C7)");
    check_base_class_offset(lv, (S1537C8_nt*), 0, "S1316C7");
    test_class_info(&lv, &cd_S1316C7);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1316C7(Test_S1316C7, "S1316C7", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
static Base_Class bases_S1316C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1316C7 = {  "S1316C7", // class name
  bases_S1316C7, 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  S1316C6_nt  : S1316C7 {
  void *s1316c6f0;
};
//SIG(-1 S1316C6_nt) C1{ BC2{ BC3{ m Fp Fi[2]}} Fp}



//skip512 S1316C6_nt

#else // __cplusplus

extern Class_Descriptor cd_S1537C8_nt;
extern Class_Descriptor cd_S1316C7;
static Base_Class bases_S1316C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C8_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_S1316C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S1316C3_nt  : S1316C4 {
  ::S1316C6_nt s1316c3f0;
  ::S1325C21 s1316c3f1;
  virtual  ~S1316C3_nt(); // _ZN10S1316C3_ntD1Ev
  virtual void  v79(); // _ZN10S1316C3_nt3v79Ev
  virtual void  v80(); // _ZN10S1316C3_nt3v80Ev
  virtual void  v81(); // _ZN10S1316C3_nt3v81Ev
  S1316C3_nt(); // tgen
};
//SIG(-1 S1316C3_nt) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 FC4{ BC5{ BC6{ m Fp Fi[2]}} Fp} FC7{ m FC8{ BC9{ BC6}} FC8 Fi FC8 FC10{ BC6} FC8 Fi}}


 S1316C3_nt ::~S1316C3_nt(){ note_dtor("S1316C3_nt", this);}
void  S1316C3_nt ::v79(){vfunc_called(this, "_ZN10S1316C3_nt3v79Ev");}
void  S1316C3_nt ::v80(){vfunc_called(this, "_ZN10S1316C3_nt3v80Ev");}
void  S1316C3_nt ::v81(){vfunc_called(this, "_ZN10S1316C3_nt3v81Ev");}
S1316C3_nt ::S1316C3_nt(){ note_ctor("S1316C3_nt", this);} // tgen

//skip512 S1316C3_nt

#else // __cplusplus

extern void _ZN10S1316C3_ntC1Ev();
extern void _ZN10S1316C3_ntD1Ev();
Name_Map name_map_S1316C3_nt[] = {
  NSPAIR(_ZN10S1316C3_ntC1Ev),
  NSPAIR(_ZN10S1316C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1316C4;
extern VTBL_ENTRY _ZTI7S1316C4[];
extern  VTBL_ENTRY _ZTV7S1316C4[];
static Base_Class bases_S1316C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1316C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI10S1316C3_nt[];
extern void _ZN10S1316C3_ntD1Ev();
extern void _ZN10S1316C3_ntD0Ev();
extern void _ZN7S1316C43v15Ev();
extern void _ZN7S1316C43v16Ev();
extern void _ZN7S1316C43v17Ev();
extern void _ZN7S1316C43v18Ev();
extern void _ZN7S1316C43v19Ev();
extern void _ZN7S1316C43v20Ev();
extern void _ZN7S1316C43v21Ev();
extern void _ZN7S1316C43v22Ev();
extern void _ZN7S1316C43v23Ev();
extern void _ZN7S1316C43v24Ev();
extern void _ZN7S1316C43v25Ev();
extern void _ZN7S1316C43v26Ev();
extern void _ZN7S1316C43v27Ev();
extern void _ZN7S1316C43v28Ev();
extern void _ZN7S1316C43v29Ev();
extern void _ZN7S1316C43v30Ev();
extern void _ZN7S1316C43v31Ev();
extern void _ZN7S1316C43v32Ev();
extern void _ZN7S1316C43v33Ev();
extern void _ZN7S1316C43v34Ev();
extern void _ZN7S1316C43v35Ev();
extern void _ZN7S1316C43v36Ev();
extern void _ZN7S1316C43v37Ev();
extern void _ZN7S1316C43v38Ev();
extern void _ZN7S1316C43v39Ev();
extern void _ZN7S1316C43v40Ev();
extern void _ZN7S1316C43v41Ev();
extern void _ZN7S1316C43v42Ev();
extern void _ZN7S1316C43v43Ev();
extern void _ZN7S1316C43v44Ev();
extern void _ZN7S1316C43v45Ev();
extern void _ZN7S1316C43v46Ev();
extern void _ZN7S1316C43v47Ev();
extern void _ZN7S1316C43v48Ev();
extern void _ZN7S1316C43v49Ev();
extern void _ZN7S1316C43v50Ev();
extern void _ZN7S1316C43v51Ev();
extern void _ZN7S1316C43v52Ev();
extern void _ZN7S1316C43v53Ev();
extern void _ZN7S1316C43v54Ev();
extern void _ZN7S1316C43v55Ev();
extern void _ZN7S1316C43v56Ev();
extern void _ZN7S1316C43v57Ev();
extern void _ZN7S1316C43v58Ev();
extern void _ZN7S1316C43v59Ev();
extern void _ZN7S1316C43v60Ev();
extern void _ZN7S1316C43v61Ev();
extern void _ZN7S1316C43v62Ev();
extern void _ZN7S1316C43v63Ev();
extern void _ZN7S1316C43v64Ev();
extern void _ZN7S1316C43v65Ev();
extern void _ZN7S1316C43v66Ev();
extern void _ZN7S1316C43v67Ev();
extern void _ZN7S1316C43v68Ev();
extern void _ZN7S1316C43v69Ev();
extern void _ZN7S1316C43v70Ev();
extern void _ZN7S1316C43v71Ev();
extern void _ZN7S1316C43v72Ev();
extern void _ZN7S1316C43v73Ev();
extern void _ZN7S1316C43v74Ev();
extern void _ZN7S1316C43v75Ev();
extern void _ZN7S1316C43v76Ev();
extern void _ZN7S1316C43v77Ev();
extern void _ZN7S1316C43v78Ev();
extern void _ZN10S1316C3_nt3v79Ev();
extern void _ZN10S1316C3_nt3v80Ev();
extern void _ZN10S1316C3_nt3v81Ev();
static  VTBL_ENTRY vtc_S1316C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1316C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1316C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1316C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v78Ev,
  (VTBL_ENTRY)&_ZN10S1316C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1316C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1316C3_nt3v81Ev,
};
extern VTBL_ENTRY _ZTI10S1316C3_nt[];
VTBL_ENTRY *P__ZTI10S1316C3_nt = _ZTI10S1316C3_nt; 
extern  VTBL_ENTRY _ZTV10S1316C3_nt[];
Class_Descriptor cd_S1316C3_nt = {  "S1316C3_nt", // class name
  bases_S1316C3_nt, 1,
  &(vtc_S1316C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,144), // object size
  NSPAIRA(_ZTI10S1316C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1316C3_nt),71, //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  S1316C13_nt  {
  virtual void  v82(); // _ZN11S1316C13_nt3v82Ev
  virtual void  v83(); // _ZN11S1316C13_nt3v83Ev
  virtual void  v84(); // _ZN11S1316C13_nt3v84Ev
  virtual void  v85(); // _ZN11S1316C13_nt3v85Ev
  virtual void  v86(); // _ZN11S1316C13_nt3v86Ev
  virtual void  v87(); // _ZN11S1316C13_nt3v87Ev
  virtual void  v88(); // _ZN11S1316C13_nt3v88Ev
  virtual void  v89(); // _ZN11S1316C13_nt3v89Ev
  ~S1316C13_nt(); // tgen
  S1316C13_nt(); // tgen
};
//SIG(-1 S1316C13_nt) C1{ v1 v2 v3 v4 v5 v6 v7 v8}


void  S1316C13_nt ::v82(){vfunc_called(this, "_ZN11S1316C13_nt3v82Ev");}
void  S1316C13_nt ::v83(){vfunc_called(this, "_ZN11S1316C13_nt3v83Ev");}
void  S1316C13_nt ::v84(){vfunc_called(this, "_ZN11S1316C13_nt3v84Ev");}
void  S1316C13_nt ::v85(){vfunc_called(this, "_ZN11S1316C13_nt3v85Ev");}
void  S1316C13_nt ::v86(){vfunc_called(this, "_ZN11S1316C13_nt3v86Ev");}
void  S1316C13_nt ::v87(){vfunc_called(this, "_ZN11S1316C13_nt3v87Ev");}
void  S1316C13_nt ::v88(){vfunc_called(this, "_ZN11S1316C13_nt3v88Ev");}
void  S1316C13_nt ::v89(){vfunc_called(this, "_ZN11S1316C13_nt3v89Ev");}
S1316C13_nt ::~S1316C13_nt(){ note_dtor("S1316C13_nt", this);} // tgen
S1316C13_nt ::S1316C13_nt(){ note_ctor("S1316C13_nt", this);} // tgen

//skip512 S1316C13_nt

#else // __cplusplus

extern void _ZN11S1316C13_ntC1Ev();
extern void _ZN11S1316C13_ntD1Ev();
Name_Map name_map_S1316C13_nt[] = {
  NSPAIR(_ZN11S1316C13_ntC1Ev),
  NSPAIR(_ZN11S1316C13_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S1316C13_nt[];
extern void _ZN11S1316C13_nt3v82Ev();
extern void _ZN11S1316C13_nt3v83Ev();
extern void _ZN11S1316C13_nt3v84Ev();
extern void _ZN11S1316C13_nt3v85Ev();
extern void _ZN11S1316C13_nt3v86Ev();
extern void _ZN11S1316C13_nt3v87Ev();
extern void _ZN11S1316C13_nt3v88Ev();
extern void _ZN11S1316C13_nt3v89Ev();
static  VTBL_ENTRY vtc_S1316C13_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S1316C13_nt[0]),
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v82Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v83Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v84Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v85Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v86Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v87Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v88Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v89Ev,
};
extern VTBL_ENTRY _ZTI11S1316C13_nt[];
VTBL_ENTRY *P__ZTI11S1316C13_nt = _ZTI11S1316C13_nt; 
extern  VTBL_ENTRY _ZTV11S1316C13_nt[];
Class_Descriptor cd_S1316C13_nt = {  "S1316C13_nt", // class name
  0,0,//no base classes
  &(vtc_S1316C13_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S1316C13_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S1316C13_nt),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1316C2  : S1316C3_nt , S1316C13_nt {
  void *s1316c2f0[2];
  int s1316c2f1[3];
  ::S1566C9 s1316c2f2;
  ::S1566C29 s1316c2f3;
  virtual  ~S1316C2(); // _ZN7S1316C2D1Ev
  virtual void  v90(); // _ZN7S1316C23v90Ev
  virtual void  v91(); // _ZN7S1316C23v91Ev
  virtual void  v92(); // _ZN7S1316C23v92Ev
  virtual void  v93(); // _ZN7S1316C23v93Ev
  virtual void  v94(); // _ZN7S1316C23v94Ev
  virtual void  v95(); // _ZN7S1316C23v95Ev
  virtual void  v96(); // _ZN7S1316C23v96Ev
  virtual void  v97(); // _ZN7S1316C23v97Ev
  virtual void  v98(); // _ZN7S1316C23v98Ev
  S1316C2(); // tgen
};
//SIG(-1 S1316C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v74 v75 v76 FC5{ BC6{ BC7{ m Fp Fi[2]}} Fp} FC8{ m FC9{ BC10{ BC7}} FC9 Fi FC9 FC11{ BC7} FC9 Fi}} BC12{ v77 v78 v79 v80 v81 v82 v83 v84} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[2] Fi[3] FC13{ BC14{ BC7}} FC15{ BC7}}


 S1316C2 ::~S1316C2(){ note_dtor("S1316C2", this);}
void  S1316C2 ::v90(){vfunc_called(this, "_ZN7S1316C23v90Ev");}
void  S1316C2 ::v91(){vfunc_called(this, "_ZN7S1316C23v91Ev");}
void  S1316C2 ::v92(){vfunc_called(this, "_ZN7S1316C23v92Ev");}
void  S1316C2 ::v93(){vfunc_called(this, "_ZN7S1316C23v93Ev");}
void  S1316C2 ::v94(){vfunc_called(this, "_ZN7S1316C23v94Ev");}
void  S1316C2 ::v95(){vfunc_called(this, "_ZN7S1316C23v95Ev");}
void  S1316C2 ::v96(){vfunc_called(this, "_ZN7S1316C23v96Ev");}
void  S1316C2 ::v97(){vfunc_called(this, "_ZN7S1316C23v97Ev");}
void  S1316C2 ::v98(){vfunc_called(this, "_ZN7S1316C23v98Ev");}
S1316C2 ::S1316C2(){ note_ctor("S1316C2", this);} // tgen

static void Test_S1316C2()
{
  extern Class_Descriptor cd_S1316C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,49)];
    init_test(&cd_S1316C2, buf);
    S1316C2 *dp, &lv = *(dp=new (buf) S1316C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,192), "sizeof(S1316C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1316C2)");
    check_base_class_offset(lv, (S1316C4*)(S1316C3_nt*), 0, "S1316C2");
    check_base_class_offset(lv, (S1316C3_nt*), 0, "S1316C2");
    check_base_class_offset(lv, (S1316C13_nt*), ABISELECT(216,144), "S1316C2");
    check_field_offset(lv, s1316c2f0, ABISELECT(224,148), "S1316C2.s1316c2f0");
    check_field_offset(lv, s1316c2f1, ABISELECT(240,156), "S1316C2.s1316c2f1");
    check_field_offset(lv, s1316c2f2, ABISELECT(256,168), "S1316C2.s1316c2f2");
    check_field_offset(lv, s1316c2f3, ABISELECT(272,180), "S1316C2.s1316c2f3");
    test_class_info(&lv, &cd_S1316C2);
    dp->~S1316C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1316C2(Test_S1316C2, "S1316C2", ABISELECT(288,192));

#else // __cplusplus

extern void _ZN7S1316C2C1Ev();
extern void _ZN7S1316C2D1Ev();
Name_Map name_map_S1316C2[] = {
  NSPAIR(_ZN7S1316C2C1Ev),
  NSPAIR(_ZN7S1316C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1316C4;
extern VTBL_ENTRY _ZTI7S1316C4[];
extern  VTBL_ENTRY _ZTV7S1316C4[];
extern Class_Descriptor cd_S1316C3_nt;
extern VTBL_ENTRY _ZTI10S1316C3_nt[];
extern  VTBL_ENTRY _ZTV10S1316C3_nt[];
extern Class_Descriptor cd_S1316C13_nt;
extern VTBL_ENTRY _ZTI11S1316C13_nt[];
extern  VTBL_ENTRY _ZTV11S1316C13_nt[];
static Base_Class bases_S1316C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1316C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1316C3_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_S1316C13_nt,    ABISELECT(216,144), //bcp->offset
    80, //bcp->virtual_function_table_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 _ZTI7S1316C2[];
extern void _ZN7S1316C2D1Ev();
extern void _ZN7S1316C2D0Ev();
extern void _ZN7S1316C43v15Ev();
extern void _ZN7S1316C43v16Ev();
extern void _ZN7S1316C43v17Ev();
extern void _ZN7S1316C43v18Ev();
extern void _ZN7S1316C43v19Ev();
extern void _ZN7S1316C43v20Ev();
extern void _ZN7S1316C43v21Ev();
extern void _ZN7S1316C43v22Ev();
extern void _ZN7S1316C43v23Ev();
extern void _ZN7S1316C43v24Ev();
extern void _ZN7S1316C43v25Ev();
extern void _ZN7S1316C43v26Ev();
extern void _ZN7S1316C43v27Ev();
extern void _ZN7S1316C43v28Ev();
extern void _ZN7S1316C43v29Ev();
extern void _ZN7S1316C43v30Ev();
extern void _ZN7S1316C43v31Ev();
extern void _ZN7S1316C43v32Ev();
extern void _ZN7S1316C43v33Ev();
extern void _ZN7S1316C43v34Ev();
extern void _ZN7S1316C43v35Ev();
extern void _ZN7S1316C43v36Ev();
extern void _ZN7S1316C43v37Ev();
extern void _ZN7S1316C43v38Ev();
extern void _ZN7S1316C43v39Ev();
extern void _ZN7S1316C43v40Ev();
extern void _ZN7S1316C43v41Ev();
extern void _ZN7S1316C43v42Ev();
extern void _ZN7S1316C43v43Ev();
extern void _ZN7S1316C43v44Ev();
extern void _ZN7S1316C43v45Ev();
extern void _ZN7S1316C43v46Ev();
extern void _ZN7S1316C43v47Ev();
extern void _ZN7S1316C43v48Ev();
extern void _ZN7S1316C43v49Ev();
extern void _ZN7S1316C43v50Ev();
extern void _ZN7S1316C43v51Ev();
extern void _ZN7S1316C43v52Ev();
extern void _ZN7S1316C43v53Ev();
extern void _ZN7S1316C43v54Ev();
extern void _ZN7S1316C43v55Ev();
extern void _ZN7S1316C43v56Ev();
extern void _ZN7S1316C43v57Ev();
extern void _ZN7S1316C43v58Ev();
extern void _ZN7S1316C43v59Ev();
extern void _ZN7S1316C43v60Ev();
extern void _ZN7S1316C43v61Ev();
extern void _ZN7S1316C43v62Ev();
extern void _ZN7S1316C43v63Ev();
extern void _ZN7S1316C43v64Ev();
extern void _ZN7S1316C43v65Ev();
extern void _ZN7S1316C43v66Ev();
extern void _ZN7S1316C43v67Ev();
extern void _ZN7S1316C43v68Ev();
extern void _ZN7S1316C43v69Ev();
extern void _ZN7S1316C43v70Ev();
extern void _ZN7S1316C43v71Ev();
extern void _ZN7S1316C43v72Ev();
extern void _ZN7S1316C43v73Ev();
extern void _ZN7S1316C43v74Ev();
extern void _ZN7S1316C43v75Ev();
extern void _ZN7S1316C43v76Ev();
extern void _ZN7S1316C43v77Ev();
extern void _ZN7S1316C43v78Ev();
extern void _ZN10S1316C3_nt3v79Ev();
extern void _ZN10S1316C3_nt3v80Ev();
extern void _ZN10S1316C3_nt3v81Ev();
extern void _ZN7S1316C23v90Ev();
extern void _ZN7S1316C23v91Ev();
extern void _ZN7S1316C23v92Ev();
extern void _ZN7S1316C23v93Ev();
extern void _ZN7S1316C23v94Ev();
extern void _ZN7S1316C23v95Ev();
extern void _ZN7S1316C23v96Ev();
extern void _ZN7S1316C23v97Ev();
extern void _ZN7S1316C23v98Ev();
extern void _ZN11S1316C13_nt3v82Ev();
extern void _ZN11S1316C13_nt3v83Ev();
extern void _ZN11S1316C13_nt3v84Ev();
extern void _ZN11S1316C13_nt3v85Ev();
extern void _ZN11S1316C13_nt3v86Ev();
extern void _ZN11S1316C13_nt3v87Ev();
extern void _ZN11S1316C13_nt3v88Ev();
extern void _ZN11S1316C13_nt3v89Ev();
static  VTBL_ENTRY vtc_S1316C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1316C2[0]),
  (VTBL_ENTRY)&_ZN7S1316C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1316C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v78Ev,
  (VTBL_ENTRY)&_ZN10S1316C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1316C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1316C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN7S1316C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1316C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1316C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1316C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1316C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1316C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1316C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1316C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1316C23v98Ev,
  ABISELECT(-216,-144),
  (VTBL_ENTRY)&(_ZTI7S1316C2[0]),
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v82Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v83Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v84Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v85Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v86Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v87Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v88Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v89Ev,
};
extern VTBL_ENTRY _ZTI7S1316C2[];
extern  VTBL_ENTRY _ZTV7S1316C2[];
Class_Descriptor cd_S1316C2 = {  "S1316C2", // class name
  bases_S1316C2, 3,
  &(vtc_S1316C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,192), // object size
  NSPAIRA(_ZTI7S1316C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1316C2),90, //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  S1316C1  : S1316C2 {
  virtual  ~S1316C1(); // _ZN7S1316C1D1Ev
  virtual void  v1(); // _ZN7S1316C12v1Ev
  virtual void  v2(); // _ZN7S1316C12v2Ev
  virtual void  v3(); // _ZN7S1316C12v3Ev
  virtual void  v4(); // _ZN7S1316C12v4Ev
  virtual void  v5(); // _ZN7S1316C12v5Ev
  virtual void  v6(); // _ZN7S1316C12v6Ev
  virtual void  v7(); // _ZN7S1316C12v7Ev
  virtual void  v8(); // _ZN7S1316C12v8Ev
  virtual void  v9(); // _ZN7S1316C12v9Ev
  virtual void  v10(); // _ZN7S1316C13v10Ev
  virtual void  v11(); // _ZN7S1316C13v11Ev
  virtual void  v12(); // _ZN7S1316C13v12Ev
  virtual void  v13(); // _ZN7S1316C13v13Ev
  virtual void  v14(); // _ZN7S1316C13v14Ev
  S1316C1(); // tgen
};
//SIG(1 S1316C1) C1{ BC2{ BC3{ BC4{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 FC6{ BC7{ BC8{ m Fp Fi[2]}} Fp} FC9{ m FC10{ BC11{ BC8}} FC10 Fi FC10 FC12{ BC8} FC10 Fi}} BC13{ v82 v83 v84 v85 v86 v87 v88 v89} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 Fp[2] Fi[3] FC14{ BC15{ BC8}} FC16{ BC8}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14}


 S1316C1 ::~S1316C1(){ note_dtor("S1316C1", this);}
void  S1316C1 ::v1(){vfunc_called(this, "_ZN7S1316C12v1Ev");}
void  S1316C1 ::v2(){vfunc_called(this, "_ZN7S1316C12v2Ev");}
void  S1316C1 ::v3(){vfunc_called(this, "_ZN7S1316C12v3Ev");}
void  S1316C1 ::v4(){vfunc_called(this, "_ZN7S1316C12v4Ev");}
void  S1316C1 ::v5(){vfunc_called(this, "_ZN7S1316C12v5Ev");}
void  S1316C1 ::v6(){vfunc_called(this, "_ZN7S1316C12v6Ev");}
void  S1316C1 ::v7(){vfunc_called(this, "_ZN7S1316C12v7Ev");}
void  S1316C1 ::v8(){vfunc_called(this, "_ZN7S1316C12v8Ev");}
void  S1316C1 ::v9(){vfunc_called(this, "_ZN7S1316C12v9Ev");}
void  S1316C1 ::v10(){vfunc_called(this, "_ZN7S1316C13v10Ev");}
void  S1316C1 ::v11(){vfunc_called(this, "_ZN7S1316C13v11Ev");}
void  S1316C1 ::v12(){vfunc_called(this, "_ZN7S1316C13v12Ev");}
void  S1316C1 ::v13(){vfunc_called(this, "_ZN7S1316C13v13Ev");}
void  S1316C1 ::v14(){vfunc_called(this, "_ZN7S1316C13v14Ev");}
S1316C1 ::S1316C1(){ note_ctor("S1316C1", this);} // tgen

static void Test_S1316C1()
{
  extern Class_Descriptor cd_S1316C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,49)];
    init_test(&cd_S1316C1, buf);
    S1316C1 *dp, &lv = *(dp=new (buf) S1316C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,192), "sizeof(S1316C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1316C1)");
    check_base_class_offset(lv, (S1316C4*)(S1316C3_nt*)(S1316C2*), 0, "S1316C1");
    check_base_class_offset(lv, (S1316C3_nt*)(S1316C2*), 0, "S1316C1");
    check_base_class_offset(lv, (S1316C13_nt*)(S1316C2*), ABISELECT(216,144), "S1316C1");
    check_base_class_offset(lv, (S1316C2*), 0, "S1316C1");
    test_class_info(&lv, &cd_S1316C1);
    dp->~S1316C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1316C1(Test_S1316C1, "S1316C1", ABISELECT(288,192));

#else // __cplusplus

extern void _ZN7S1316C1C1Ev();
extern void _ZN7S1316C1D1Ev();
Name_Map name_map_S1316C1[] = {
  NSPAIR(_ZN7S1316C1C1Ev),
  NSPAIR(_ZN7S1316C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1316C4;
extern VTBL_ENTRY _ZTI7S1316C4[];
extern  VTBL_ENTRY _ZTV7S1316C4[];
extern Class_Descriptor cd_S1316C3_nt;
extern VTBL_ENTRY _ZTI10S1316C3_nt[];
extern  VTBL_ENTRY _ZTV10S1316C3_nt[];
extern Class_Descriptor cd_S1316C13_nt;
extern VTBL_ENTRY _ZTI11S1316C13_nt[];
extern  VTBL_ENTRY _ZTV11S1316C13_nt[];
extern Class_Descriptor cd_S1316C2;
extern VTBL_ENTRY _ZTI7S1316C2[];
extern  VTBL_ENTRY _ZTV7S1316C2[];
static Base_Class bases_S1316C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1316C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1316C3_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
    3, //immediately_derived
  0, 0},
  {&cd_S1316C13_nt,    ABISELECT(216,144), //bcp->offset
    94, //bcp->virtual_function_table_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_S1316C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1316C1[];
extern void _ZN7S1316C1D1Ev();
extern void _ZN7S1316C1D0Ev();
extern void _ZN7S1316C43v15Ev();
extern void _ZN7S1316C43v16Ev();
extern void _ZN7S1316C43v17Ev();
extern void _ZN7S1316C43v18Ev();
extern void _ZN7S1316C43v19Ev();
extern void _ZN7S1316C43v20Ev();
extern void _ZN7S1316C43v21Ev();
extern void _ZN7S1316C43v22Ev();
extern void _ZN7S1316C43v23Ev();
extern void _ZN7S1316C43v24Ev();
extern void _ZN7S1316C43v25Ev();
extern void _ZN7S1316C43v26Ev();
extern void _ZN7S1316C43v27Ev();
extern void _ZN7S1316C43v28Ev();
extern void _ZN7S1316C43v29Ev();
extern void _ZN7S1316C43v30Ev();
extern void _ZN7S1316C43v31Ev();
extern void _ZN7S1316C43v32Ev();
extern void _ZN7S1316C43v33Ev();
extern void _ZN7S1316C43v34Ev();
extern void _ZN7S1316C43v35Ev();
extern void _ZN7S1316C43v36Ev();
extern void _ZN7S1316C43v37Ev();
extern void _ZN7S1316C43v38Ev();
extern void _ZN7S1316C43v39Ev();
extern void _ZN7S1316C43v40Ev();
extern void _ZN7S1316C43v41Ev();
extern void _ZN7S1316C43v42Ev();
extern void _ZN7S1316C43v43Ev();
extern void _ZN7S1316C43v44Ev();
extern void _ZN7S1316C43v45Ev();
extern void _ZN7S1316C43v46Ev();
extern void _ZN7S1316C43v47Ev();
extern void _ZN7S1316C43v48Ev();
extern void _ZN7S1316C43v49Ev();
extern void _ZN7S1316C43v50Ev();
extern void _ZN7S1316C43v51Ev();
extern void _ZN7S1316C43v52Ev();
extern void _ZN7S1316C43v53Ev();
extern void _ZN7S1316C43v54Ev();
extern void _ZN7S1316C43v55Ev();
extern void _ZN7S1316C43v56Ev();
extern void _ZN7S1316C43v57Ev();
extern void _ZN7S1316C43v58Ev();
extern void _ZN7S1316C43v59Ev();
extern void _ZN7S1316C43v60Ev();
extern void _ZN7S1316C43v61Ev();
extern void _ZN7S1316C43v62Ev();
extern void _ZN7S1316C43v63Ev();
extern void _ZN7S1316C43v64Ev();
extern void _ZN7S1316C43v65Ev();
extern void _ZN7S1316C43v66Ev();
extern void _ZN7S1316C43v67Ev();
extern void _ZN7S1316C43v68Ev();
extern void _ZN7S1316C43v69Ev();
extern void _ZN7S1316C43v70Ev();
extern void _ZN7S1316C43v71Ev();
extern void _ZN7S1316C43v72Ev();
extern void _ZN7S1316C43v73Ev();
extern void _ZN7S1316C43v74Ev();
extern void _ZN7S1316C43v75Ev();
extern void _ZN7S1316C43v76Ev();
extern void _ZN7S1316C43v77Ev();
extern void _ZN7S1316C43v78Ev();
extern void _ZN10S1316C3_nt3v79Ev();
extern void _ZN10S1316C3_nt3v80Ev();
extern void _ZN10S1316C3_nt3v81Ev();
extern void _ZN7S1316C23v90Ev();
extern void _ZN7S1316C23v91Ev();
extern void _ZN7S1316C23v92Ev();
extern void _ZN7S1316C23v93Ev();
extern void _ZN7S1316C23v94Ev();
extern void _ZN7S1316C23v95Ev();
extern void _ZN7S1316C23v96Ev();
extern void _ZN7S1316C23v97Ev();
extern void _ZN7S1316C23v98Ev();
extern void _ZN7S1316C12v1Ev();
extern void _ZN7S1316C12v2Ev();
extern void _ZN7S1316C12v3Ev();
extern void _ZN7S1316C12v4Ev();
extern void _ZN7S1316C12v5Ev();
extern void _ZN7S1316C12v6Ev();
extern void _ZN7S1316C12v7Ev();
extern void _ZN7S1316C12v8Ev();
extern void _ZN7S1316C12v9Ev();
extern void _ZN7S1316C13v10Ev();
extern void _ZN7S1316C13v11Ev();
extern void _ZN7S1316C13v12Ev();
extern void _ZN7S1316C13v13Ev();
extern void _ZN7S1316C13v14Ev();
extern void _ZN11S1316C13_nt3v82Ev();
extern void _ZN11S1316C13_nt3v83Ev();
extern void _ZN11S1316C13_nt3v84Ev();
extern void _ZN11S1316C13_nt3v85Ev();
extern void _ZN11S1316C13_nt3v86Ev();
extern void _ZN11S1316C13_nt3v87Ev();
extern void _ZN11S1316C13_nt3v88Ev();
extern void _ZN11S1316C13_nt3v89Ev();
static  VTBL_ENTRY vtc_S1316C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1316C1[0]),
  (VTBL_ENTRY)&_ZN7S1316C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1316C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1316C43v78Ev,
  (VTBL_ENTRY)&_ZN10S1316C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1316C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1316C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN7S1316C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1316C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1316C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1316C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1316C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1316C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1316C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1316C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1316C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1316C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1316C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1316C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1316C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1316C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1316C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1316C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1316C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1316C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1316C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1316C13v11Ev,
  (VTBL_ENTRY)&_ZN7S1316C13v12Ev,
  (VTBL_ENTRY)&_ZN7S1316C13v13Ev,
  (VTBL_ENTRY)&_ZN7S1316C13v14Ev,
  ABISELECT(-216,-144),
  (VTBL_ENTRY)&(_ZTI7S1316C1[0]),
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v82Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v83Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v84Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v85Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v86Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v87Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v88Ev,
  (VTBL_ENTRY)&_ZN11S1316C13_nt3v89Ev,
};
extern VTBL_ENTRY _ZTI7S1316C1[];
extern  VTBL_ENTRY _ZTV7S1316C1[];
Class_Descriptor cd_S1316C1 = {  "S1316C1", // class name
  bases_S1316C1, 4,
  &(vtc_S1316C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,192), // object size
  NSPAIRA(_ZTI7S1316C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1316C1),104, //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  S1314C4  {
  int s1314c4f0;
  __tsi64 s1314c4f1;
  void *s1314c4f2[4];
  int s1314c4f3[2];
  void *s1314c4f4;
  ::S1566C14_nt s1314c4f5;
  void *s1314c4f6[2];
  virtual  ~S1314C4(); // _ZN7S1314C4D1Ev
  virtual void  v14(); // _ZN7S1314C43v14Ev
  virtual void  v15(); // _ZN7S1314C43v15Ev
  virtual void  v16(); // _ZN7S1314C43v16Ev
  virtual void  v17(); // _ZN7S1314C43v17Ev
  virtual void  v18(); // _ZN7S1314C43v18Ev
  virtual void  v19(); // _ZN7S1314C43v19Ev
  virtual void  v20(); // _ZN7S1314C43v20Ev
  virtual void  v21(); // _ZN7S1314C43v21Ev
  virtual void  v22(); // _ZN7S1314C43v22Ev
  virtual void  v23(); // _ZN7S1314C43v23Ev
  virtual void  v24(); // _ZN7S1314C43v24Ev
  virtual void  v25(); // _ZN7S1314C43v25Ev
  virtual void  v26(); // _ZN7S1314C43v26Ev
  virtual void  v27(); // _ZN7S1314C43v27Ev
  virtual void  v28(); // _ZN7S1314C43v28Ev
  virtual void  v29(); // _ZN7S1314C43v29Ev
  virtual void  v30(); // _ZN7S1314C43v30Ev
  virtual void  v31(); // _ZN7S1314C43v31Ev
  virtual void  v32(); // _ZN7S1314C43v32Ev
  virtual void  v33(); // _ZN7S1314C43v33Ev
  virtual void  v34(); // _ZN7S1314C43v34Ev
  virtual void  v35(); // _ZN7S1314C43v35Ev
  virtual void  v36(); // _ZN7S1314C43v36Ev
  virtual void  v37(); // _ZN7S1314C43v37Ev
  virtual void  v38(); // _ZN7S1314C43v38Ev
  virtual void  v39(); // _ZN7S1314C43v39Ev
  virtual void  v40(); // _ZN7S1314C43v40Ev
  virtual void  v41(); // _ZN7S1314C43v41Ev
  virtual void  v42(); // _ZN7S1314C43v42Ev
  virtual void  v43(); // _ZN7S1314C43v43Ev
  virtual void  v44(); // _ZN7S1314C43v44Ev
  virtual void  v45(); // _ZN7S1314C43v45Ev
  virtual void  v46(); // _ZN7S1314C43v46Ev
  virtual void  v47(); // _ZN7S1314C43v47Ev
  virtual void  v48(); // _ZN7S1314C43v48Ev
  virtual void  v49(); // _ZN7S1314C43v49Ev
  virtual void  v50(); // _ZN7S1314C43v50Ev
  virtual void  v51(); // _ZN7S1314C43v51Ev
  virtual void  v52(); // _ZN7S1314C43v52Ev
  virtual void  v53(); // _ZN7S1314C43v53Ev
  virtual void  v54(); // _ZN7S1314C43v54Ev
  virtual void  v55(); // _ZN7S1314C43v55Ev
  virtual void  v56(); // _ZN7S1314C43v56Ev
  virtual void  v57(); // _ZN7S1314C43v57Ev
  virtual void  v58(); // _ZN7S1314C43v58Ev
  virtual void  v59(); // _ZN7S1314C43v59Ev
  virtual void  v60(); // _ZN7S1314C43v60Ev
  virtual void  v61(); // _ZN7S1314C43v61Ev
  virtual void  v62(); // _ZN7S1314C43v62Ev
  virtual void  v63(); // _ZN7S1314C43v63Ev
  virtual void  v64(); // _ZN7S1314C43v64Ev
  virtual void  v65(); // _ZN7S1314C43v65Ev
  virtual void  v66(); // _ZN7S1314C43v66Ev
  virtual void  v67(); // _ZN7S1314C43v67Ev
  virtual void  v68(); // _ZN7S1314C43v68Ev
  virtual void  v69(); // _ZN7S1314C43v69Ev
  virtual void  v70(); // _ZN7S1314C43v70Ev
  virtual void  v71(); // _ZN7S1314C43v71Ev
  virtual void  v72(); // _ZN7S1314C43v72Ev
  virtual void  v73(); // _ZN7S1314C43v73Ev
  virtual void  v74(); // _ZN7S1314C43v74Ev
  virtual void  v75(); // _ZN7S1314C43v75Ev
  virtual void  v76(); // _ZN7S1314C43v76Ev
  virtual void  v77(); // _ZN7S1314C43v77Ev
  S1314C4(); // tgen
};
//SIG(-1 S1314C4) 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]}


 S1314C4 ::~S1314C4(){ note_dtor("S1314C4", this);}
void  S1314C4 ::v14(){vfunc_called(this, "_ZN7S1314C43v14Ev");}
void  S1314C4 ::v15(){vfunc_called(this, "_ZN7S1314C43v15Ev");}
void  S1314C4 ::v16(){vfunc_called(this, "_ZN7S1314C43v16Ev");}
void  S1314C4 ::v17(){vfunc_called(this, "_ZN7S1314C43v17Ev");}
void  S1314C4 ::v18(){vfunc_called(this, "_ZN7S1314C43v18Ev");}
void  S1314C4 ::v19(){vfunc_called(this, "_ZN7S1314C43v19Ev");}
void  S1314C4 ::v20(){vfunc_called(this, "_ZN7S1314C43v20Ev");}
void  S1314C4 ::v21(){vfunc_called(this, "_ZN7S1314C43v21Ev");}
void  S1314C4 ::v22(){vfunc_called(this, "_ZN7S1314C43v22Ev");}
void  S1314C4 ::v23(){vfunc_called(this, "_ZN7S1314C43v23Ev");}
void  S1314C4 ::v24(){vfunc_called(this, "_ZN7S1314C43v24Ev");}
void  S1314C4 ::v25(){vfunc_called(this, "_ZN7S1314C43v25Ev");}
void  S1314C4 ::v26(){vfunc_called(this, "_ZN7S1314C43v26Ev");}
void  S1314C4 ::v27(){vfunc_called(this, "_ZN7S1314C43v27Ev");}
void  S1314C4 ::v28(){vfunc_called(this, "_ZN7S1314C43v28Ev");}
void  S1314C4 ::v29(){vfunc_called(this, "_ZN7S1314C43v29Ev");}
void  S1314C4 ::v30(){vfunc_called(this, "_ZN7S1314C43v30Ev");}
void  S1314C4 ::v31(){vfunc_called(this, "_ZN7S1314C43v31Ev");}
void  S1314C4 ::v32(){vfunc_called(this, "_ZN7S1314C43v32Ev");}
void  S1314C4 ::v33(){vfunc_called(this, "_ZN7S1314C43v33Ev");}
void  S1314C4 ::v34(){vfunc_called(this, "_ZN7S1314C43v34Ev");}
void  S1314C4 ::v35(){vfunc_called(this, "_ZN7S1314C43v35Ev");}
void  S1314C4 ::v36(){vfunc_called(this, "_ZN7S1314C43v36Ev");}
void  S1314C4 ::v37(){vfunc_called(this, "_ZN7S1314C43v37Ev");}
void  S1314C4 ::v38(){vfunc_called(this, "_ZN7S1314C43v38Ev");}
void  S1314C4 ::v39(){vfunc_called(this, "_ZN7S1314C43v39Ev");}
void  S1314C4 ::v40(){vfunc_called(this, "_ZN7S1314C43v40Ev");}
void  S1314C4 ::v41(){vfunc_called(this, "_ZN7S1314C43v41Ev");}
void  S1314C4 ::v42(){vfunc_called(this, "_ZN7S1314C43v42Ev");}
void  S1314C4 ::v43(){vfunc_called(this, "_ZN7S1314C43v43Ev");}
void  S1314C4 ::v44(){vfunc_called(this, "_ZN7S1314C43v44Ev");}
void  S1314C4 ::v45(){vfunc_called(this, "_ZN7S1314C43v45Ev");}
void  S1314C4 ::v46(){vfunc_called(this, "_ZN7S1314C43v46Ev");}
void  S1314C4 ::v47(){vfunc_called(this, "_ZN7S1314C43v47Ev");}
void  S1314C4 ::v48(){vfunc_called(this, "_ZN7S1314C43v48Ev");}
void  S1314C4 ::v49(){vfunc_called(this, "_ZN7S1314C43v49Ev");}
void  S1314C4 ::v50(){vfunc_called(this, "_ZN7S1314C43v50Ev");}
void  S1314C4 ::v51(){vfunc_called(this, "_ZN7S1314C43v51Ev");}
void  S1314C4 ::v52(){vfunc_called(this, "_ZN7S1314C43v52Ev");}
void  S1314C4 ::v53(){vfunc_called(this, "_ZN7S1314C43v53Ev");}
void  S1314C4 ::v54(){vfunc_called(this, "_ZN7S1314C43v54Ev");}
void  S1314C4 ::v55(){vfunc_called(this, "_ZN7S1314C43v55Ev");}
void  S1314C4 ::v56(){vfunc_called(this, "_ZN7S1314C43v56Ev");}
void  S1314C4 ::v57(){vfunc_called(this, "_ZN7S1314C43v57Ev");}
void  S1314C4 ::v58(){vfunc_called(this, "_ZN7S1314C43v58Ev");}
void  S1314C4 ::v59(){vfunc_called(this, "_ZN7S1314C43v59Ev");}
void  S1314C4 ::v60(){vfunc_called(this, "_ZN7S1314C43v60Ev");}
void  S1314C4 ::v61(){vfunc_called(this, "_ZN7S1314C43v61Ev");}
void  S1314C4 ::v62(){vfunc_called(this, "_ZN7S1314C43v62Ev");}
void  S1314C4 ::v63(){vfunc_called(this, "_ZN7S1314C43v63Ev");}
void  S1314C4 ::v64(){vfunc_called(this, "_ZN7S1314C43v64Ev");}
void  S1314C4 ::v65(){vfunc_called(this, "_ZN7S1314C43v65Ev");}
void  S1314C4 ::v66(){vfunc_called(this, "_ZN7S1314C43v66Ev");}
void  S1314C4 ::v67(){vfunc_called(this, "_ZN7S1314C43v67Ev");}
void  S1314C4 ::v68(){vfunc_called(this, "_ZN7S1314C43v68Ev");}
void  S1314C4 ::v69(){vfunc_called(this, "_ZN7S1314C43v69Ev");}
void  S1314C4 ::v70(){vfunc_called(this, "_ZN7S1314C43v70Ev");}
void  S1314C4 ::v71(){vfunc_called(this, "_ZN7S1314C43v71Ev");}
void  S1314C4 ::v72(){vfunc_called(this, "_ZN7S1314C43v72Ev");}
void  S1314C4 ::v73(){vfunc_called(this, "_ZN7S1314C43v73Ev");}
void  S1314C4 ::v74(){vfunc_called(this, "_ZN7S1314C43v74Ev");}
void  S1314C4 ::v75(){vfunc_called(this, "_ZN7S1314C43v75Ev");}
void  S1314C4 ::v76(){vfunc_called(this, "_ZN7S1314C43v76Ev");}
void  S1314C4 ::v77(){vfunc_called(this, "_ZN7S1314C43v77Ev");}
S1314C4 ::S1314C4(){ note_ctor("S1314C4", this);} // tgen

static void Test_S1314C4()
{
  extern Class_Descriptor cd_S1314C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1314C4, buf);
    S1314C4 *dp, &lv = *(dp=new (buf) S1314C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1314C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1314C4)");
    check_field_offset(lv, s1314c4f0, ABISELECT(8,4), "S1314C4.s1314c4f0");
    check_field_offset(lv, s1314c4f1, ABISELECT(16,8), "S1314C4.s1314c4f1");
    check_field_offset(lv, s1314c4f2, ABISELECT(24,16), "S1314C4.s1314c4f2");
    check_field_offset(lv, s1314c4f3, ABISELECT(56,32), "S1314C4.s1314c4f3");
    check_field_offset(lv, s1314c4f4, ABISELECT(64,40), "S1314C4.s1314c4f4");
    check_field_offset(lv, s1314c4f5, ABISELECT(72,44), "S1314C4.s1314c4f5");
    check_field_offset(lv, s1314c4f6, ABISELECT(80,52), "S1314C4.s1314c4f6");
    test_class_info(&lv, &cd_S1314C4);
    dp->~S1314C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1314C4(Test_S1314C4, "S1314C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1314C4C1Ev();
extern void _ZN7S1314C4D1Ev();
Name_Map name_map_S1314C4[] = {
  NSPAIR(_ZN7S1314C4C1Ev),
  NSPAIR(_ZN7S1314C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1314C4[];
extern void _ZN7S1314C4D1Ev();
extern void _ZN7S1314C4D0Ev();
extern void _ZN7S1314C43v14Ev();
extern void _ZN7S1314C43v15Ev();
extern void _ZN7S1314C43v16Ev();
extern void _ZN7S1314C43v17Ev();
extern void _ZN7S1314C43v18Ev();
extern void _ZN7S1314C43v19Ev();
extern void _ZN7S1314C43v20Ev();
extern void _ZN7S1314C43v21Ev();
extern void _ZN7S1314C43v22Ev();
extern void _ZN7S1314C43v23Ev();
extern void _ZN7S1314C43v24Ev();
extern void _ZN7S1314C43v25Ev();
extern void _ZN7S1314C43v26Ev();
extern void _ZN7S1314C43v27Ev();
extern void _ZN7S1314C43v28Ev();
extern void _ZN7S1314C43v29Ev();
extern void _ZN7S1314C43v30Ev();
extern void _ZN7S1314C43v31Ev();
extern void _ZN7S1314C43v32Ev();
extern void _ZN7S1314C43v33Ev();
extern void _ZN7S1314C43v34Ev();
extern void _ZN7S1314C43v35Ev();
extern void _ZN7S1314C43v36Ev();
extern void _ZN7S1314C43v37Ev();
extern void _ZN7S1314C43v38Ev();
extern void _ZN7S1314C43v39Ev();
extern void _ZN7S1314C43v40Ev();
extern void _ZN7S1314C43v41Ev();
extern void _ZN7S1314C43v42Ev();
extern void _ZN7S1314C43v43Ev();
extern void _ZN7S1314C43v44Ev();
extern void _ZN7S1314C43v45Ev();
extern void _ZN7S1314C43v46Ev();
extern void _ZN7S1314C43v47Ev();
extern void _ZN7S1314C43v48Ev();
extern void _ZN7S1314C43v49Ev();
extern void _ZN7S1314C43v50Ev();
extern void _ZN7S1314C43v51Ev();
extern void _ZN7S1314C43v52Ev();
extern void _ZN7S1314C43v53Ev();
extern void _ZN7S1314C43v54Ev();
extern void _ZN7S1314C43v55Ev();
extern void _ZN7S1314C43v56Ev();
extern void _ZN7S1314C43v57Ev();
extern void _ZN7S1314C43v58Ev();
extern void _ZN7S1314C43v59Ev();
extern void _ZN7S1314C43v60Ev();
extern void _ZN7S1314C43v61Ev();
extern void _ZN7S1314C43v62Ev();
extern void _ZN7S1314C43v63Ev();
extern void _ZN7S1314C43v64Ev();
extern void _ZN7S1314C43v65Ev();
extern void _ZN7S1314C43v66Ev();
extern void _ZN7S1314C43v67Ev();
extern void _ZN7S1314C43v68Ev();
extern void _ZN7S1314C43v69Ev();
extern void _ZN7S1314C43v70Ev();
extern void _ZN7S1314C43v71Ev();
extern void _ZN7S1314C43v72Ev();
extern void _ZN7S1314C43v73Ev();
extern void _ZN7S1314C43v74Ev();
extern void _ZN7S1314C43v75Ev();
extern void _ZN7S1314C43v76Ev();
extern void _ZN7S1314C43v77Ev();
static  VTBL_ENTRY vtc_S1314C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1314C4[0]),
  (VTBL_ENTRY)&_ZN7S1314C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1314C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v77Ev,
};
extern VTBL_ENTRY _ZTI7S1314C4[];
extern  VTBL_ENTRY _ZTV7S1314C4[];
Class_Descriptor cd_S1314C4 = {  "S1314C4", // class name
  0,0,//no base classes
  &(vtc_S1314C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1314C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1314C4),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  S1314C3  : S1314C4 {
  ::S1316C6_nt s1314c3f0;
  ::S1325C21 s1314c3f1;
  virtual  ~S1314C3(); // _ZN7S1314C3D1Ev
  virtual void  v78(); // _ZN7S1314C33v78Ev
  virtual void  v79(); // _ZN7S1314C33v79Ev
  virtual void  v80(); // _ZN7S1314C33v80Ev
  S1314C3(); // tgen
};
//SIG(-1 S1314C3) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 FC4{ BC5{ BC6{ m Fp Fi[2]}} Fp} FC7{ m FC8{ BC9{ BC6}} FC8 Fi FC8 FC10{ BC6} FC8 Fi}}


 S1314C3 ::~S1314C3(){ note_dtor("S1314C3", this);}
void  S1314C3 ::v78(){vfunc_called(this, "_ZN7S1314C33v78Ev");}
void  S1314C3 ::v79(){vfunc_called(this, "_ZN7S1314C33v79Ev");}
void  S1314C3 ::v80(){vfunc_called(this, "_ZN7S1314C33v80Ev");}
S1314C3 ::S1314C3(){ note_ctor("S1314C3", this);} // tgen

static void Test_S1314C3()
{
  extern Class_Descriptor cd_S1314C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,37)];
    init_test(&cd_S1314C3, buf);
    S1314C3 *dp, &lv = *(dp=new (buf) S1314C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,144), "sizeof(S1314C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1314C3)");
    check_base_class_offset(lv, (S1314C4*), 0, "S1314C3");
    check_field_offset(lv, s1314c3f0, ABISELECT(96,60), "S1314C3.s1314c3f0");
    check_field_offset(lv, s1314c3f1, ABISELECT(120,76), "S1314C3.s1314c3f1");
    test_class_info(&lv, &cd_S1314C3);
    dp->~S1314C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1314C3(Test_S1314C3, "S1314C3", ABISELECT(216,144));

#else // __cplusplus

extern void _ZN7S1314C3C1Ev();
extern void _ZN7S1314C3D1Ev();
Name_Map name_map_S1314C3[] = {
  NSPAIR(_ZN7S1314C3C1Ev),
  NSPAIR(_ZN7S1314C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1314C4;
extern VTBL_ENTRY _ZTI7S1314C4[];
extern  VTBL_ENTRY _ZTV7S1314C4[];
static Base_Class bases_S1314C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1314C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1314C3[];
extern void _ZN7S1314C3D1Ev();
extern void _ZN7S1314C3D0Ev();
extern void _ZN7S1314C43v14Ev();
extern void _ZN7S1314C43v15Ev();
extern void _ZN7S1314C43v16Ev();
extern void _ZN7S1314C43v17Ev();
extern void _ZN7S1314C43v18Ev();
extern void _ZN7S1314C43v19Ev();
extern void _ZN7S1314C43v20Ev();
extern void _ZN7S1314C43v21Ev();
extern void _ZN7S1314C43v22Ev();
extern void _ZN7S1314C43v23Ev();
extern void _ZN7S1314C43v24Ev();
extern void _ZN7S1314C43v25Ev();
extern void _ZN7S1314C43v26Ev();
extern void _ZN7S1314C43v27Ev();
extern void _ZN7S1314C43v28Ev();
extern void _ZN7S1314C43v29Ev();
extern void _ZN7S1314C43v30Ev();
extern void _ZN7S1314C43v31Ev();
extern void _ZN7S1314C43v32Ev();
extern void _ZN7S1314C43v33Ev();
extern void _ZN7S1314C43v34Ev();
extern void _ZN7S1314C43v35Ev();
extern void _ZN7S1314C43v36Ev();
extern void _ZN7S1314C43v37Ev();
extern void _ZN7S1314C43v38Ev();
extern void _ZN7S1314C43v39Ev();
extern void _ZN7S1314C43v40Ev();
extern void _ZN7S1314C43v41Ev();
extern void _ZN7S1314C43v42Ev();
extern void _ZN7S1314C43v43Ev();
extern void _ZN7S1314C43v44Ev();
extern void _ZN7S1314C43v45Ev();
extern void _ZN7S1314C43v46Ev();
extern void _ZN7S1314C43v47Ev();
extern void _ZN7S1314C43v48Ev();
extern void _ZN7S1314C43v49Ev();
extern void _ZN7S1314C43v50Ev();
extern void _ZN7S1314C43v51Ev();
extern void _ZN7S1314C43v52Ev();
extern void _ZN7S1314C43v53Ev();
extern void _ZN7S1314C43v54Ev();
extern void _ZN7S1314C43v55Ev();
extern void _ZN7S1314C43v56Ev();
extern void _ZN7S1314C43v57Ev();
extern void _ZN7S1314C43v58Ev();
extern void _ZN7S1314C43v59Ev();
extern void _ZN7S1314C43v60Ev();
extern void _ZN7S1314C43v61Ev();
extern void _ZN7S1314C43v62Ev();
extern void _ZN7S1314C43v63Ev();
extern void _ZN7S1314C43v64Ev();
extern void _ZN7S1314C43v65Ev();
extern void _ZN7S1314C43v66Ev();
extern void _ZN7S1314C43v67Ev();
extern void _ZN7S1314C43v68Ev();
extern void _ZN7S1314C43v69Ev();
extern void _ZN7S1314C43v70Ev();
extern void _ZN7S1314C43v71Ev();
extern void _ZN7S1314C43v72Ev();
extern void _ZN7S1314C43v73Ev();
extern void _ZN7S1314C43v74Ev();
extern void _ZN7S1314C43v75Ev();
extern void _ZN7S1314C43v76Ev();
extern void _ZN7S1314C43v77Ev();
extern void _ZN7S1314C33v78Ev();
extern void _ZN7S1314C33v79Ev();
extern void _ZN7S1314C33v80Ev();
static  VTBL_ENTRY vtc_S1314C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1314C3[0]),
  (VTBL_ENTRY)&_ZN7S1314C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1314C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1314C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1314C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1314C33v80Ev,
};
extern VTBL_ENTRY _ZTI7S1314C3[];
extern  VTBL_ENTRY _ZTV7S1314C3[];
Class_Descriptor cd_S1314C3 = {  "S1314C3", // class name
  bases_S1314C3, 1,
  &(vtc_S1314C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,144), // object size
  NSPAIRA(_ZTI7S1314C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1314C3),71, //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  S1314C13  {
  virtual void  v81(); // _ZN8S1314C133v81Ev
  virtual void  v82(); // _ZN8S1314C133v82Ev
  virtual void  v83(); // _ZN8S1314C133v83Ev
  virtual void  v84(); // _ZN8S1314C133v84Ev
  virtual void  v85(); // _ZN8S1314C133v85Ev
  virtual void  v86(); // _ZN8S1314C133v86Ev
  virtual void  v87(); // _ZN8S1314C133v87Ev
  virtual void  v88(); // _ZN8S1314C133v88Ev
  ~S1314C13(); // tgen
  S1314C13(); // tgen
};
//SIG(-1 S1314C13) C1{ v1 v2 v3 v4 v5 v6 v7 v8}


void  S1314C13 ::v81(){vfunc_called(this, "_ZN8S1314C133v81Ev");}
void  S1314C13 ::v82(){vfunc_called(this, "_ZN8S1314C133v82Ev");}
void  S1314C13 ::v83(){vfunc_called(this, "_ZN8S1314C133v83Ev");}
void  S1314C13 ::v84(){vfunc_called(this, "_ZN8S1314C133v84Ev");}
void  S1314C13 ::v85(){vfunc_called(this, "_ZN8S1314C133v85Ev");}
void  S1314C13 ::v86(){vfunc_called(this, "_ZN8S1314C133v86Ev");}
void  S1314C13 ::v87(){vfunc_called(this, "_ZN8S1314C133v87Ev");}
void  S1314C13 ::v88(){vfunc_called(this, "_ZN8S1314C133v88Ev");}
S1314C13 ::~S1314C13(){ note_dtor("S1314C13", this);} // tgen
S1314C13 ::S1314C13(){ note_ctor("S1314C13", this);} // tgen

static void Test_S1314C13()
{
  extern Class_Descriptor cd_S1314C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1314C13, buf);
    S1314C13 *dp, &lv = *(dp=new (buf) S1314C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1314C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1314C13)");
    test_class_info(&lv, &cd_S1314C13);
    dp->~S1314C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1314C13(Test_S1314C13, "S1314C13", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S1314C13C1Ev();
extern void _ZN8S1314C13D1Ev();
Name_Map name_map_S1314C13[] = {
  NSPAIR(_ZN8S1314C13C1Ev),
  NSPAIR(_ZN8S1314C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1314C13[];
extern void _ZN8S1314C133v81Ev();
extern void _ZN8S1314C133v82Ev();
extern void _ZN8S1314C133v83Ev();
extern void _ZN8S1314C133v84Ev();
extern void _ZN8S1314C133v85Ev();
extern void _ZN8S1314C133v86Ev();
extern void _ZN8S1314C133v87Ev();
extern void _ZN8S1314C133v88Ev();
static  VTBL_ENTRY vtc_S1314C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1314C13[0]),
  (VTBL_ENTRY)&_ZN8S1314C133v81Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v82Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v83Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v84Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v85Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v86Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v87Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v88Ev,
};
extern VTBL_ENTRY _ZTI8S1314C13[];
extern  VTBL_ENTRY _ZTV8S1314C13[];
Class_Descriptor cd_S1314C13 = {  "S1314C13", // class name
  0,0,//no base classes
  &(vtc_S1314C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S1314C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1314C13),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1314C2  : S1314C3 , S1314C13 {
  void *s1314c2f0[2];
  int s1314c2f1[3];
  ::S1566C9 s1314c2f2;
  ::S1566C29 s1314c2f3;
  virtual  ~S1314C2(); // _ZN7S1314C2D1Ev
  virtual void  v89(); // _ZN7S1314C23v89Ev
  virtual void  v90(); // _ZN7S1314C23v90Ev
  virtual void  v91(); // _ZN7S1314C23v91Ev
  virtual void  v92(); // _ZN7S1314C23v92Ev
  virtual void  v93(); // _ZN7S1314C23v93Ev
  virtual void  v94(); // _ZN7S1314C23v94Ev
  virtual void  v95(); // _ZN7S1314C23v95Ev
  virtual void  v96(); // _ZN7S1314C23v96Ev
  virtual void  v97(); // _ZN7S1314C23v97Ev
  S1314C2(); // tgen
};
//SIG(-1 S1314C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v74 v75 v76 FC5{ BC6{ BC7{ m Fp Fi[2]}} Fp} FC8{ m FC9{ BC10{ BC7}} FC9 Fi FC9 FC11{ BC7} FC9 Fi}} BC12{ v77 v78 v79 v80 v81 v82 v83 v84} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[2] Fi[3] FC13{ BC14{ BC7}} FC15{ BC7}}


 S1314C2 ::~S1314C2(){ note_dtor("S1314C2", this);}
void  S1314C2 ::v89(){vfunc_called(this, "_ZN7S1314C23v89Ev");}
void  S1314C2 ::v90(){vfunc_called(this, "_ZN7S1314C23v90Ev");}
void  S1314C2 ::v91(){vfunc_called(this, "_ZN7S1314C23v91Ev");}
void  S1314C2 ::v92(){vfunc_called(this, "_ZN7S1314C23v92Ev");}
void  S1314C2 ::v93(){vfunc_called(this, "_ZN7S1314C23v93Ev");}
void  S1314C2 ::v94(){vfunc_called(this, "_ZN7S1314C23v94Ev");}
void  S1314C2 ::v95(){vfunc_called(this, "_ZN7S1314C23v95Ev");}
void  S1314C2 ::v96(){vfunc_called(this, "_ZN7S1314C23v96Ev");}
void  S1314C2 ::v97(){vfunc_called(this, "_ZN7S1314C23v97Ev");}
S1314C2 ::S1314C2(){ note_ctor("S1314C2", this);} // tgen

static void Test_S1314C2()
{
  extern Class_Descriptor cd_S1314C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,49)];
    init_test(&cd_S1314C2, buf);
    S1314C2 *dp, &lv = *(dp=new (buf) S1314C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,192), "sizeof(S1314C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1314C2)");
    check_base_class_offset(lv, (S1314C4*)(S1314C3*), 0, "S1314C2");
    check_base_class_offset(lv, (S1314C3*), 0, "S1314C2");
    check_base_class_offset(lv, (S1314C13*), ABISELECT(216,144), "S1314C2");
    check_field_offset(lv, s1314c2f0, ABISELECT(224,148), "S1314C2.s1314c2f0");
    check_field_offset(lv, s1314c2f1, ABISELECT(240,156), "S1314C2.s1314c2f1");
    check_field_offset(lv, s1314c2f2, ABISELECT(256,168), "S1314C2.s1314c2f2");
    check_field_offset(lv, s1314c2f3, ABISELECT(272,180), "S1314C2.s1314c2f3");
    test_class_info(&lv, &cd_S1314C2);
    dp->~S1314C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1314C2(Test_S1314C2, "S1314C2", ABISELECT(288,192));

#else // __cplusplus

extern void _ZN7S1314C2C1Ev();
extern void _ZN7S1314C2D1Ev();
Name_Map name_map_S1314C2[] = {
  NSPAIR(_ZN7S1314C2C1Ev),
  NSPAIR(_ZN7S1314C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1314C4;
extern VTBL_ENTRY _ZTI7S1314C4[];
extern  VTBL_ENTRY _ZTV7S1314C4[];
extern Class_Descriptor cd_S1314C3;
extern VTBL_ENTRY _ZTI7S1314C3[];
extern  VTBL_ENTRY _ZTV7S1314C3[];
extern Class_Descriptor cd_S1314C13;
extern VTBL_ENTRY _ZTI8S1314C13[];
extern  VTBL_ENTRY _ZTV8S1314C13[];
static Base_Class bases_S1314C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1314C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1314C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1314C13,    ABISELECT(216,144), //bcp->offset
    80, //bcp->virtual_function_table_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 _ZTI7S1314C2[];
extern void _ZN7S1314C2D1Ev();
extern void _ZN7S1314C2D0Ev();
extern void _ZN7S1314C43v14Ev();
extern void _ZN7S1314C43v15Ev();
extern void _ZN7S1314C43v16Ev();
extern void _ZN7S1314C43v17Ev();
extern void _ZN7S1314C43v18Ev();
extern void _ZN7S1314C43v19Ev();
extern void _ZN7S1314C43v20Ev();
extern void _ZN7S1314C43v21Ev();
extern void _ZN7S1314C43v22Ev();
extern void _ZN7S1314C43v23Ev();
extern void _ZN7S1314C43v24Ev();
extern void _ZN7S1314C43v25Ev();
extern void _ZN7S1314C43v26Ev();
extern void _ZN7S1314C43v27Ev();
extern void _ZN7S1314C43v28Ev();
extern void _ZN7S1314C43v29Ev();
extern void _ZN7S1314C43v30Ev();
extern void _ZN7S1314C43v31Ev();
extern void _ZN7S1314C43v32Ev();
extern void _ZN7S1314C43v33Ev();
extern void _ZN7S1314C43v34Ev();
extern void _ZN7S1314C43v35Ev();
extern void _ZN7S1314C43v36Ev();
extern void _ZN7S1314C43v37Ev();
extern void _ZN7S1314C43v38Ev();
extern void _ZN7S1314C43v39Ev();
extern void _ZN7S1314C43v40Ev();
extern void _ZN7S1314C43v41Ev();
extern void _ZN7S1314C43v42Ev();
extern void _ZN7S1314C43v43Ev();
extern void _ZN7S1314C43v44Ev();
extern void _ZN7S1314C43v45Ev();
extern void _ZN7S1314C43v46Ev();
extern void _ZN7S1314C43v47Ev();
extern void _ZN7S1314C43v48Ev();
extern void _ZN7S1314C43v49Ev();
extern void _ZN7S1314C43v50Ev();
extern void _ZN7S1314C43v51Ev();
extern void _ZN7S1314C43v52Ev();
extern void _ZN7S1314C43v53Ev();
extern void _ZN7S1314C43v54Ev();
extern void _ZN7S1314C43v55Ev();
extern void _ZN7S1314C43v56Ev();
extern void _ZN7S1314C43v57Ev();
extern void _ZN7S1314C43v58Ev();
extern void _ZN7S1314C43v59Ev();
extern void _ZN7S1314C43v60Ev();
extern void _ZN7S1314C43v61Ev();
extern void _ZN7S1314C43v62Ev();
extern void _ZN7S1314C43v63Ev();
extern void _ZN7S1314C43v64Ev();
extern void _ZN7S1314C43v65Ev();
extern void _ZN7S1314C43v66Ev();
extern void _ZN7S1314C43v67Ev();
extern void _ZN7S1314C43v68Ev();
extern void _ZN7S1314C43v69Ev();
extern void _ZN7S1314C43v70Ev();
extern void _ZN7S1314C43v71Ev();
extern void _ZN7S1314C43v72Ev();
extern void _ZN7S1314C43v73Ev();
extern void _ZN7S1314C43v74Ev();
extern void _ZN7S1314C43v75Ev();
extern void _ZN7S1314C43v76Ev();
extern void _ZN7S1314C43v77Ev();
extern void _ZN7S1314C33v78Ev();
extern void _ZN7S1314C33v79Ev();
extern void _ZN7S1314C33v80Ev();
extern void _ZN7S1314C23v89Ev();
extern void _ZN7S1314C23v90Ev();
extern void _ZN7S1314C23v91Ev();
extern void _ZN7S1314C23v92Ev();
extern void _ZN7S1314C23v93Ev();
extern void _ZN7S1314C23v94Ev();
extern void _ZN7S1314C23v95Ev();
extern void _ZN7S1314C23v96Ev();
extern void _ZN7S1314C23v97Ev();
extern void _ZN8S1314C133v81Ev();
extern void _ZN8S1314C133v82Ev();
extern void _ZN8S1314C133v83Ev();
extern void _ZN8S1314C133v84Ev();
extern void _ZN8S1314C133v85Ev();
extern void _ZN8S1314C133v86Ev();
extern void _ZN8S1314C133v87Ev();
extern void _ZN8S1314C133v88Ev();
static  VTBL_ENTRY vtc_S1314C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1314C2[0]),
  (VTBL_ENTRY)&_ZN7S1314C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1314C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1314C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1314C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1314C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1314C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1314C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1314C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1314C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1314C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1314C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1314C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1314C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1314C23v97Ev,
  ABISELECT(-216,-144),
  (VTBL_ENTRY)&(_ZTI7S1314C2[0]),
  (VTBL_ENTRY)&_ZN8S1314C133v81Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v82Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v83Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v84Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v85Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v86Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v87Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v88Ev,
};
extern VTBL_ENTRY _ZTI7S1314C2[];
extern  VTBL_ENTRY _ZTV7S1314C2[];
Class_Descriptor cd_S1314C2 = {  "S1314C2", // class name
  bases_S1314C2, 3,
  &(vtc_S1314C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,192), // object size
  NSPAIRA(_ZTI7S1314C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1314C2),90, //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  S1314C1  : S1314C2 {
  virtual  ~S1314C1(); // _ZN7S1314C1D1Ev
  virtual void  v1(); // _ZN7S1314C12v1Ev
  virtual void  v2(); // _ZN7S1314C12v2Ev
  virtual void  v3(); // _ZN7S1314C12v3Ev
  virtual void  v4(); // _ZN7S1314C12v4Ev
  virtual void  v5(); // _ZN7S1314C12v5Ev
  virtual void  v6(); // _ZN7S1314C12v6Ev
  virtual void  v7(); // _ZN7S1314C12v7Ev
  virtual void  v8(); // _ZN7S1314C12v8Ev
  virtual void  v9(); // _ZN7S1314C12v9Ev
  virtual void  v10(); // _ZN7S1314C13v10Ev
  virtual void  v11(); // _ZN7S1314C13v11Ev
  virtual void  v12(); // _ZN7S1314C13v12Ev
  virtual void  v13(); // _ZN7S1314C13v13Ev
  S1314C1(); // tgen
};
//SIG(1 S1314C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v78 v79 v80 FC6{ BC7{ BC8{ m Fp Fi[2]}} Fp} FC9{ m FC10{ BC11{ BC8}} FC10 Fi FC10 FC12{ BC8} FC10 Fi}} BC13{ v81 v82 v83 v84 v85 v86 v87 v88} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 Fp[2] Fi[3] FC14{ BC15{ BC8}} FC16{ BC8}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13}


 S1314C1 ::~S1314C1(){ note_dtor("S1314C1", this);}
void  S1314C1 ::v1(){vfunc_called(this, "_ZN7S1314C12v1Ev");}
void  S1314C1 ::v2(){vfunc_called(this, "_ZN7S1314C12v2Ev");}
void  S1314C1 ::v3(){vfunc_called(this, "_ZN7S1314C12v3Ev");}
void  S1314C1 ::v4(){vfunc_called(this, "_ZN7S1314C12v4Ev");}
void  S1314C1 ::v5(){vfunc_called(this, "_ZN7S1314C12v5Ev");}
void  S1314C1 ::v6(){vfunc_called(this, "_ZN7S1314C12v6Ev");}
void  S1314C1 ::v7(){vfunc_called(this, "_ZN7S1314C12v7Ev");}
void  S1314C1 ::v8(){vfunc_called(this, "_ZN7S1314C12v8Ev");}
void  S1314C1 ::v9(){vfunc_called(this, "_ZN7S1314C12v9Ev");}
void  S1314C1 ::v10(){vfunc_called(this, "_ZN7S1314C13v10Ev");}
void  S1314C1 ::v11(){vfunc_called(this, "_ZN7S1314C13v11Ev");}
void  S1314C1 ::v12(){vfunc_called(this, "_ZN7S1314C13v12Ev");}
void  S1314C1 ::v13(){vfunc_called(this, "_ZN7S1314C13v13Ev");}
S1314C1 ::S1314C1(){ note_ctor("S1314C1", this);} // tgen

static void Test_S1314C1()
{
  extern Class_Descriptor cd_S1314C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,49)];
    init_test(&cd_S1314C1, buf);
    S1314C1 *dp, &lv = *(dp=new (buf) S1314C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,192), "sizeof(S1314C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1314C1)");
    check_base_class_offset(lv, (S1314C4*)(S1314C3*)(S1314C2*), 0, "S1314C1");
    check_base_class_offset(lv, (S1314C3*)(S1314C2*), 0, "S1314C1");
    check_base_class_offset(lv, (S1314C13*)(S1314C2*), ABISELECT(216,144), "S1314C1");
    check_base_class_offset(lv, (S1314C2*), 0, "S1314C1");
    test_class_info(&lv, &cd_S1314C1);
    dp->~S1314C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1314C1(Test_S1314C1, "S1314C1", ABISELECT(288,192));

#else // __cplusplus

extern void _ZN7S1314C1C1Ev();
extern void _ZN7S1314C1D1Ev();
Name_Map name_map_S1314C1[] = {
  NSPAIR(_ZN7S1314C1C1Ev),
  NSPAIR(_ZN7S1314C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1314C4;
extern VTBL_ENTRY _ZTI7S1314C4[];
extern  VTBL_ENTRY _ZTV7S1314C4[];
extern Class_Descriptor cd_S1314C3;
extern VTBL_ENTRY _ZTI7S1314C3[];
extern  VTBL_ENTRY _ZTV7S1314C3[];
extern Class_Descriptor cd_S1314C13;
extern VTBL_ENTRY _ZTI8S1314C13[];
extern  VTBL_ENTRY _ZTV8S1314C13[];
extern Class_Descriptor cd_S1314C2;
extern VTBL_ENTRY _ZTI7S1314C2[];
extern  VTBL_ENTRY _ZTV7S1314C2[];
static Base_Class bases_S1314C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1314C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1314C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1314C13,    ABISELECT(216,144), //bcp->offset
    93, //bcp->virtual_function_table_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_S1314C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1314C1[];
extern void _ZN7S1314C1D1Ev();
extern void _ZN7S1314C1D0Ev();
extern void _ZN7S1314C43v14Ev();
extern void _ZN7S1314C43v15Ev();
extern void _ZN7S1314C43v16Ev();
extern void _ZN7S1314C43v17Ev();
extern void _ZN7S1314C43v18Ev();
extern void _ZN7S1314C43v19Ev();
extern void _ZN7S1314C43v20Ev();
extern void _ZN7S1314C43v21Ev();
extern void _ZN7S1314C43v22Ev();
extern void _ZN7S1314C43v23Ev();
extern void _ZN7S1314C43v24Ev();
extern void _ZN7S1314C43v25Ev();
extern void _ZN7S1314C43v26Ev();
extern void _ZN7S1314C43v27Ev();
extern void _ZN7S1314C43v28Ev();
extern void _ZN7S1314C43v29Ev();
extern void _ZN7S1314C43v30Ev();
extern void _ZN7S1314C43v31Ev();
extern void _ZN7S1314C43v32Ev();
extern void _ZN7S1314C43v33Ev();
extern void _ZN7S1314C43v34Ev();
extern void _ZN7S1314C43v35Ev();
extern void _ZN7S1314C43v36Ev();
extern void _ZN7S1314C43v37Ev();
extern void _ZN7S1314C43v38Ev();
extern void _ZN7S1314C43v39Ev();
extern void _ZN7S1314C43v40Ev();
extern void _ZN7S1314C43v41Ev();
extern void _ZN7S1314C43v42Ev();
extern void _ZN7S1314C43v43Ev();
extern void _ZN7S1314C43v44Ev();
extern void _ZN7S1314C43v45Ev();
extern void _ZN7S1314C43v46Ev();
extern void _ZN7S1314C43v47Ev();
extern void _ZN7S1314C43v48Ev();
extern void _ZN7S1314C43v49Ev();
extern void _ZN7S1314C43v50Ev();
extern void _ZN7S1314C43v51Ev();
extern void _ZN7S1314C43v52Ev();
extern void _ZN7S1314C43v53Ev();
extern void _ZN7S1314C43v54Ev();
extern void _ZN7S1314C43v55Ev();
extern void _ZN7S1314C43v56Ev();
extern void _ZN7S1314C43v57Ev();
extern void _ZN7S1314C43v58Ev();
extern void _ZN7S1314C43v59Ev();
extern void _ZN7S1314C43v60Ev();
extern void _ZN7S1314C43v61Ev();
extern void _ZN7S1314C43v62Ev();
extern void _ZN7S1314C43v63Ev();
extern void _ZN7S1314C43v64Ev();
extern void _ZN7S1314C43v65Ev();
extern void _ZN7S1314C43v66Ev();
extern void _ZN7S1314C43v67Ev();
extern void _ZN7S1314C43v68Ev();
extern void _ZN7S1314C43v69Ev();
extern void _ZN7S1314C43v70Ev();
extern void _ZN7S1314C43v71Ev();
extern void _ZN7S1314C43v72Ev();
extern void _ZN7S1314C43v73Ev();
extern void _ZN7S1314C43v74Ev();
extern void _ZN7S1314C43v75Ev();
extern void _ZN7S1314C43v76Ev();
extern void _ZN7S1314C43v77Ev();
extern void _ZN7S1314C33v78Ev();
extern void _ZN7S1314C33v79Ev();
extern void _ZN7S1314C33v80Ev();
extern void _ZN7S1314C23v89Ev();
extern void _ZN7S1314C23v90Ev();
extern void _ZN7S1314C23v91Ev();
extern void _ZN7S1314C23v92Ev();
extern void _ZN7S1314C23v93Ev();
extern void _ZN7S1314C23v94Ev();
extern void _ZN7S1314C23v95Ev();
extern void _ZN7S1314C23v96Ev();
extern void _ZN7S1314C23v97Ev();
extern void _ZN7S1314C12v1Ev();
extern void _ZN7S1314C12v2Ev();
extern void _ZN7S1314C12v3Ev();
extern void _ZN7S1314C12v4Ev();
extern void _ZN7S1314C12v5Ev();
extern void _ZN7S1314C12v6Ev();
extern void _ZN7S1314C12v7Ev();
extern void _ZN7S1314C12v8Ev();
extern void _ZN7S1314C12v9Ev();
extern void _ZN7S1314C13v10Ev();
extern void _ZN7S1314C13v11Ev();
extern void _ZN7S1314C13v12Ev();
extern void _ZN7S1314C13v13Ev();
extern void _ZN8S1314C133v81Ev();
extern void _ZN8S1314C133v82Ev();
extern void _ZN8S1314C133v83Ev();
extern void _ZN8S1314C133v84Ev();
extern void _ZN8S1314C133v85Ev();
extern void _ZN8S1314C133v86Ev();
extern void _ZN8S1314C133v87Ev();
extern void _ZN8S1314C133v88Ev();
static  VTBL_ENTRY vtc_S1314C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1314C1[0]),
  (VTBL_ENTRY)&_ZN7S1314C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1314C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1314C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1314C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1314C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1314C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1314C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1314C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1314C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1314C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1314C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1314C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1314C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1314C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1314C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1314C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1314C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1314C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1314C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1314C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1314C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1314C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1314C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1314C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1314C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1314C13v11Ev,
  (VTBL_ENTRY)&_ZN7S1314C13v12Ev,
  (VTBL_ENTRY)&_ZN7S1314C13v13Ev,
  ABISELECT(-216,-144),
  (VTBL_ENTRY)&(_ZTI7S1314C1[0]),
  (VTBL_ENTRY)&_ZN8S1314C133v81Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v82Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v83Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v84Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v85Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v86Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v87Ev,
  (VTBL_ENTRY)&_ZN8S1314C133v88Ev,
};
extern VTBL_ENTRY _ZTI7S1314C1[];
extern  VTBL_ENTRY _ZTV7S1314C1[];
Class_Descriptor cd_S1314C1 = {  "S1314C1", // class name
  bases_S1314C1, 4,
  &(vtc_S1314C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,192), // object size
  NSPAIRA(_ZTI7S1314C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1314C1),103, //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  S19426C6_nt  {
  virtual  ~S19426C6_nt(); // _ZN11S19426C6_ntD1Ev
  virtual void  v7(); // _ZN11S19426C6_nt2v7Ev
  S19426C6_nt(); // tgen
};
//SIG(-1 S19426C6_nt) C1{ vd v1}


 S19426C6_nt ::~S19426C6_nt(){ note_dtor("S19426C6_nt", this);}
void  S19426C6_nt ::v7(){vfunc_called(this, "_ZN11S19426C6_nt2v7Ev");}
S19426C6_nt ::S19426C6_nt(){ note_ctor("S19426C6_nt", this);} // tgen

//skip512 S19426C6_nt

#else // __cplusplus

extern void _ZN11S19426C6_ntC1Ev();
extern void _ZN11S19426C6_ntD1Ev();
Name_Map name_map_S19426C6_nt[] = {
  NSPAIR(_ZN11S19426C6_ntC1Ev),
  NSPAIR(_ZN11S19426C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern void _ZN11S19426C6_ntD1Ev();
extern void _ZN11S19426C6_ntD0Ev();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY vtc_S19426C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19426C6_nt[0]),
  (VTBL_ENTRY)&_ZN11S19426C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19426C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
VTBL_ENTRY *P__ZTI11S19426C6_nt = _ZTI11S19426C6_nt; 
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
Class_Descriptor cd_S19426C6_nt = {  "S19426C6_nt", // class name
  0,0,//no base classes
  &(vtc_S19426C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S19426C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S19426C6_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  S19426C5_nt  : S19426C6_nt {
  virtual  ~S19426C5_nt(); // _ZN11S19426C5_ntD1Ev
  virtual void  v8(); // _ZN11S19426C5_nt2v8Ev
  S19426C5_nt(); // tgen
};
//SIG(-1 S19426C5_nt) C1{ BC2{ vd v2} vd v1}


 S19426C5_nt ::~S19426C5_nt(){ note_dtor("S19426C5_nt", this);}
void  S19426C5_nt ::v8(){vfunc_called(this, "_ZN11S19426C5_nt2v8Ev");}
S19426C5_nt ::S19426C5_nt(){ note_ctor("S19426C5_nt", this);} // tgen

//skip512 S19426C5_nt

#else // __cplusplus

extern void _ZN11S19426C5_ntC1Ev();
extern void _ZN11S19426C5_ntD1Ev();
Name_Map name_map_S19426C5_nt[] = {
  NSPAIR(_ZN11S19426C5_ntC1Ev),
  NSPAIR(_ZN11S19426C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
static Base_Class bases_S19426C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19426C6_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 _ZTI11S19426C5_nt[];
extern void _ZN11S19426C5_ntD1Ev();
extern void _ZN11S19426C5_ntD0Ev();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
static  VTBL_ENTRY vtc_S19426C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19426C5_nt[0]),
  (VTBL_ENTRY)&_ZN11S19426C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
VTBL_ENTRY *P__ZTI11S19426C5_nt = _ZTI11S19426C5_nt; 
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
Class_Descriptor cd_S19426C5_nt = {  "S19426C5_nt", // class name
  bases_S19426C5_nt, 1,
  &(vtc_S19426C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S19426C5_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV11S19426C5_nt),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  S19426C4  : S19426C5_nt , S19426C6_nt {
  virtual  ~S19426C4(); // _ZN8S19426C4D1Ev
  virtual void  v9(); // _ZN8S19426C42v9Ev
  virtual void  v10(); // _ZN8S19426C43v10Ev
  S19426C4(); // tgen
};
//SIG(-1 S19426C4) C1{ BC2{ BC3{ vd v3} vd v4} BC3 vd v1 v2}


 S19426C4 ::~S19426C4(){ note_dtor("S19426C4", this);}
void  S19426C4 ::v9(){vfunc_called(this, "_ZN8S19426C42v9Ev");}
void  S19426C4 ::v10(){vfunc_called(this, "_ZN8S19426C43v10Ev");}
S19426C4 ::S19426C4(){ note_ctor("S19426C4", this);} // tgen

static void Test_S19426C4()
{
  extern Class_Descriptor cd_S19426C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19426C4, buf);
    S19426C4 *dp, &lv = *(dp=new (buf) S19426C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19426C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19426C4)");
    check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*), 0, "S19426C4");
    check_base_class_offset(lv, (S19426C5_nt*), 0, "S19426C4");
    /*is_ambiguous_... S19426C4::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*), ABISELECT(8,4), "S19426C4");
    test_class_info(&lv, &cd_S19426C4);
    dp->~S19426C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19426C4(Test_S19426C4, "S19426C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19426C4C1Ev();
extern void _ZN8S19426C4D1Ev();
Name_Map name_map_S19426C4[] = {
  NSPAIR(_ZN8S19426C4C1Ev),
  NSPAIR(_ZN8S19426C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
static Base_Class bases_S19426C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19426C6_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_S19426C5_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_S19426C6_nt,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19426C4[];
extern void _ZN8S19426C4D1Ev();
extern void _ZN8S19426C4D0Ev();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void ABISELECT(_ZThn8_N8S19426C4D1Ev,_ZThn4_N8S19426C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S19426C4D0Ev,_ZThn4_N8S19426C4D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY vtc_S19426C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C4[0]),
  (VTBL_ENTRY)&_ZN8S19426C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19426C4D0Ev,
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19426C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19426C4D1Ev,_ZThn4_N8S19426C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19426C4D0Ev,_ZThn4_N8S19426C4D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
Class_Descriptor cd_S19426C4 = {  "S19426C4", // class name
  bases_S19426C4, 3,
  &(vtc_S19426C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19426C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19426C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19426C3  : virtual S19426C4 , virtual S19426C5_nt {
  int s19426c3f0;
  char s19426c3f1;
  int s19426c3f2;
  virtual  ~S19426C3(); // _ZN8S19426C3D2Ev
  virtual void  v11(); // _ZN8S19426C33v11Ev
  virtual void  v12(); // _ZN8S19426C33v12Ev
  virtual void  v13(); // _ZN8S19426C33v13Ev
  virtual void  v14(); // _ZN8S19426C33v14Ev
  virtual void  v15(); // _ZN8S19426C33v15Ev
  virtual void  v16(); // _ZN8S19426C33v16Ev
  S19426C3(); // tgen
};
//SIG(-1 S19426C3) C1{ VBC2{ BC3{ BC4{ vd v7} vd v8} BC4 vd v9 v10} VBC3 vd v1 v2 v3 v4 v5 v6 Fi Fc Fi}


 S19426C3 ::~S19426C3(){ note_dtor("S19426C3", this);}
void  S19426C3 ::v11(){vfunc_called(this, "_ZN8S19426C33v11Ev");}
void  S19426C3 ::v12(){vfunc_called(this, "_ZN8S19426C33v12Ev");}
void  S19426C3 ::v13(){vfunc_called(this, "_ZN8S19426C33v13Ev");}
void  S19426C3 ::v14(){vfunc_called(this, "_ZN8S19426C33v14Ev");}
void  S19426C3 ::v15(){vfunc_called(this, "_ZN8S19426C33v15Ev");}
void  S19426C3 ::v16(){vfunc_called(this, "_ZN8S19426C33v16Ev");}
S19426C3 ::S19426C3(){ note_ctor("S19426C3", this);} // tgen

static void Test_S19426C3()
{
  extern Class_Descriptor cd_S19426C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19426C3, buf);
    S19426C3 *dp, &lv = *(dp=new (buf) S19426C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19426C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19426C3)");
    check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*), ABISELECT(24,16), "S19426C3");
    check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*), ABISELECT(24,16), "S19426C3");
    /*is_ambiguous_... S19426C4::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*), ABISELECT(32,20), "S19426C3");
    check_base_class_offset(lv, (S19426C4*), ABISELECT(24,16), "S19426C3");
    /*is_ambiguous_... S19426C3::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*), 0, "S19426C3");
    /*is_ambiguous_... S19426C3::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C5_nt*), 0, "S19426C3");
    check_field_offset(lv, s19426c3f0, ABISELECT(8,4), "S19426C3.s19426c3f0");
    check_field_offset(lv, s19426c3f1, ABISELECT(12,8), "S19426C3.s19426c3f1");
    check_field_offset(lv, s19426c3f2, ABISELECT(16,12), "S19426C3.s19426c3f2");
    test_class_info(&lv, &cd_S19426C3);
    dp->~S19426C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19426C3(Test_S19426C3, "S19426C3", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S19426C3C1Ev();
extern void _ZN8S19426C3D2Ev();
Name_Map name_map_S19426C3[] = {
  NSPAIR(_ZN8S19426C3C1Ev),
  NSPAIR(_ZN8S19426C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
static Base_Class bases_S19426C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19426C6_nt,    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, 0},
  {&cd_S19426C5_nt,    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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(32,20), //bcp->offset
    30, //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
    3, //immediately_derived
  0, 0},
  {&cd_S19426C4,    ABISELECT(24,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19426C6_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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19426C3[];
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void _ZN8S19426C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN8S19426C3D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S19426C3D1Ev,_ZThn16_N8S19426C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void ABISELECT(_ZThn24_N8S19426C3D0Ev,_ZThn16_N8S19426C3D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY vtc_S19426C3[] = {
  0,
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV8S19426C3[];
static  VTT_ENTRY vtt_S19426C3[] = {
  {&(_ZTV8S19426C3[7]),  7,35},
  {&(_ZTV8S19426C3[24]),  24,35},
  {&(_ZTV8S19426C3[32]),  32,35},
  {&(_ZTV8S19426C3[7]),  7,35},
};
extern VTBL_ENTRY _ZTI8S19426C3[];
extern  VTBL_ENTRY _ZTV8S19426C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C3[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19426C3D0Ev,_ZThn16_N8S19426C3D0Ev),
  (VTBL_ENTRY)_ZN8S19426C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19426C3D1Ev,_ZThn16_N8S19426C3D1Ev),
  (VTBL_ENTRY)_ZN8S19426C3D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19426C3 = {  "S19426C3", // class name
  bases_S19426C3, 6,
  &(vtc_S19426C3[0]), // expected_vtbl_contents
  &(vtt_S19426C3[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S19426C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19426C3),35, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19426C3),4, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19426C7  : virtual S19426C4 {
  int s19426c7f0[2];
  void *s19426c7f1;
  virtual void  v17(); // _ZN8S19426C73v17Ev
  virtual void  v18(); // _ZN8S19426C73v18Ev
  virtual void  v19(); // _ZN8S19426C73v19Ev
  virtual void  v20(); // _ZN8S19426C73v20Ev
  ~S19426C7(); // tgen
  S19426C7(); // tgen
};
//SIG(-1 S19426C7) C1{ VBC2{ BC3{ BC4{ vd v5} vd v6} BC4 vd v7 v8} v1 v2 v3 v4 Fi[2] Fp}


void  S19426C7 ::v17(){vfunc_called(this, "_ZN8S19426C73v17Ev");}
void  S19426C7 ::v18(){vfunc_called(this, "_ZN8S19426C73v18Ev");}
void  S19426C7 ::v19(){vfunc_called(this, "_ZN8S19426C73v19Ev");}
void  S19426C7 ::v20(){vfunc_called(this, "_ZN8S19426C73v20Ev");}
S19426C7 ::~S19426C7(){ note_dtor("S19426C7", this);} // tgen
S19426C7 ::S19426C7(){ note_ctor("S19426C7", this);} // tgen

static void Test_S19426C7()
{
  extern Class_Descriptor cd_S19426C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19426C7, buf);
    S19426C7 *dp, &lv = *(dp=new (buf) S19426C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19426C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19426C7)");
    check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*), ABISELECT(24,16), "S19426C7");
    check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*), ABISELECT(24,16), "S19426C7");
    /*is_ambiguous_... S19426C4::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*), ABISELECT(32,20), "S19426C7");
    check_base_class_offset(lv, (S19426C4*), ABISELECT(24,16), "S19426C7");
    check_field_offset(lv, s19426c7f0, ABISELECT(8,4), "S19426C7.s19426c7f0");
    check_field_offset(lv, s19426c7f1, ABISELECT(16,12), "S19426C7.s19426c7f1");
    test_class_info(&lv, &cd_S19426C7);
    dp->~S19426C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19426C7(Test_S19426C7, "S19426C7", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S19426C7C1Ev();
extern void _ZN8S19426C7D1Ev();
Name_Map name_map_S19426C7[] = {
  NSPAIR(_ZN8S19426C7C1Ev),
  NSPAIR(_ZN8S19426C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
static Base_Class bases_S19426C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19426C6_nt,    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, 0},
  {&cd_S19426C5_nt,    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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(32,20), //bcp->offset
    22, //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
    3, //immediately_derived
  0, 0},
  {&cd_S19426C4,    ABISELECT(24,16), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19426C7[];
extern void _ZN8S19426C73v17Ev();
extern void _ZN8S19426C73v18Ev();
extern void _ZN8S19426C73v19Ev();
extern void _ZN8S19426C73v20Ev();
extern void _ZN8S19426C7D1Ev();
extern void _ZN8S19426C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19426C7D1Ev,_ZTv0_n12_N8S19426C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S19426C7D1Ev,_ZThn16_N8S19426C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C7D0Ev,_ZTv0_n12_N8S19426C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S19426C7D0Ev,_ZThn16_N8S19426C7D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19426C7D1Ev,_ZTvn4_n12_N8S19426C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C7D0Ev,_ZTvn4_n12_N8S19426C7D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY vtc_S19426C7[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C7[0]),
  (VTBL_ENTRY)&_ZN8S19426C73v17Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v18Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19426C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19426C7D0Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19426C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C7D1Ev,_ZTv0_n12_N8S19426C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C7D0Ev,_ZTv0_n12_N8S19426C7D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19426C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C7D1Ev,_ZTvn4_n12_N8S19426C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C7D0Ev,_ZTvn4_n12_N8S19426C7D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV8S19426C7[];
static  VTT_ENTRY vtt_S19426C7[] = {
  {&(_ZTV8S19426C7[3]),  3,27},
  {&(_ZTV8S19426C7[16]),  16,27},
  {&(_ZTV8S19426C7[24]),  24,27},
};
extern VTBL_ENTRY _ZTI8S19426C7[];
extern  VTBL_ENTRY _ZTV8S19426C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C7[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C7D0Ev,_ZTv0_n12_N8S19426C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19426C7D0Ev,_ZThn16_N8S19426C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C7D1Ev,_ZTv0_n12_N8S19426C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19426C7D1Ev,_ZThn16_N8S19426C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19426C7 = {  "S19426C7", // class name
  bases_S19426C7, 4,
  &(vtc_S19426C7[0]), // expected_vtbl_contents
  &(vtt_S19426C7[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S19426C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19426C7),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19426C7),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S19426C9_nt  {
  void  mf19426c9(); // _ZN11S19426C9_nt9mf19426c9Ev
};
//SIG(1 S19426C9_nt) U1{ m}

#endif // __cplusplus
#ifdef __cplusplus

struct  S19426C8  : S19426C4 , S19426C3 , S19426C6_nt {
  ::S19426C9_nt s19426c8f0;
  virtual void  v21(); // _ZN8S19426C83v21Ev
  virtual void  v22(); // _ZN8S19426C83v22Ev
  ~S19426C8(); // tgen
  S19426C8(); // tgen
};
//SIG(-1 S19426C8) C1{ BC2{ BC3{ BC4{ vd v3} vd v4} BC4 vd v5 v6} BC5{ VBC2 VBC3 vd v7 v8 v9 v10 v11 v12 Fi Fc Fi} BC4 v1 v2 FU6{ m}}


void  S19426C8 ::v21(){vfunc_called(this, "_ZN8S19426C83v21Ev");}
void  S19426C8 ::v22(){vfunc_called(this, "_ZN8S19426C83v22Ev");}
S19426C8 ::~S19426C8(){ note_dtor("S19426C8", this);} // tgen
S19426C8 ::S19426C8(){ note_ctor("S19426C8", this);} // tgen

static void Test_S19426C8()
{
  extern Class_Descriptor cd_S19426C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S19426C8, buf);
    S19426C8 *dp, &lv = *(dp=new (buf) S19426C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S19426C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19426C8)");
    /*is_ambiguous_... S19426C8::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*), 0, "S19426C8");
    /*is_ambiguous_... S19426C8::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*), 0, "S19426C8");
    /*is_ambiguous_... S19426C8::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*), ABISELECT(8,4), "S19426C8");
    /*is_ambiguous_... S19426C8::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C4*), 0, "S19426C8");
    /*is_ambiguous_... S19426C8::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*), ABISELECT(56,32), "S19426C8");
    /*is_ambiguous_... S19426C8::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*), ABISELECT(56,32), "S19426C8");
    /*is_ambiguous_... S19426C8::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*), ABISELECT(64,36), "S19426C8");
    check_base_class_offset(lv, (S19426C4*)(S19426C3*), ABISELECT(56,32), "S19426C8");
    /*is_ambiguous_... S19426C8::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*), ABISELECT(16,8), "S19426C8");
    /*is_ambiguous_... S19426C3::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C3*), ABISELECT(16,8), "S19426C8");
    check_base_class_offset(lv, (S19426C3*), ABISELECT(16,8), "S19426C8");
    /*is_ambiguous_... S19426C8::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*), ABISELECT(40,24), "S19426C8");
    check_field_offset(lv, s19426c8f0, ABISELECT(48,28), "S19426C8.s19426c8f0");
    test_class_info(&lv, &cd_S19426C8);
    dp->~S19426C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19426C8(Test_S19426C8, "S19426C8", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN8S19426C8C1Ev();
extern void _ZN8S19426C8D1Ev();
Name_Map name_map_S19426C8[] = {
  NSPAIR(_ZN8S19426C8C1Ev),
  NSPAIR(_ZN8S19426C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C3;
extern VTBL_ENTRY _ZTI8S19426C3[];
extern  VTBL_ENTRY _ZTV8S19426C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C3[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
static Base_Class bases_S19426C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19426C6_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
    7, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19426C5_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
    8, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19426C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19426C6_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(64,36), //bcp->offset
    52, //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
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19426C4,    ABISELECT(56,32), //bcp->offset
    39, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19426C6_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19426C3,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //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},
  {&cd_S19426C6_nt,    ABISELECT(40,24), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19426C8[];
extern void _ZN8S19426C8D1Ev();
extern void _ZN8S19426C8D0Ev();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN8S19426C83v21Ev();
extern void _ZN8S19426C83v22Ev();
extern void ABISELECT(_ZThn8_N8S19426C8D1Ev,_ZThn4_N8S19426C8D1Ev)();
extern void ABISELECT(_ZThn8_N8S19426C8D0Ev,_ZThn4_N8S19426C8D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19426C8D1Ev,_ZThn8_N8S19426C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19426C8D0Ev,_ZThn8_N8S19426C8D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
extern void ABISELECT(_ZThn40_N8S19426C8D1Ev,_ZThn24_N8S19426C8D1Ev)();
extern void ABISELECT(_ZThn40_N8S19426C8D0Ev,_ZThn24_N8S19426C8D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev)();
extern void ABISELECT(_ZThn56_N8S19426C8D1Ev,_ZThn32_N8S19426C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev)();
extern void ABISELECT(_ZThn56_N8S19426C8D0Ev,_ZThn32_N8S19426C8D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19426C8D1Ev,_ZTvn4_n12_N8S19426C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C8D0Ev,_ZTvn4_n12_N8S19426C8D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY vtc_S19426C8[] = {
  ABISELECT(16,8),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C8[0]),
  (VTBL_ENTRY)&_ZN8S19426C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19426C8D0Ev,
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19426C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19426C83v22Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19426C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19426C8D1Ev,_ZThn4_N8S19426C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19426C8D0Ev,_ZThn4_N8S19426C8D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19426C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19426C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S19426C8D1Ev,_ZThn24_N8S19426C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S19426C8D0Ev,_ZThn24_N8S19426C8D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19426C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19426C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C8D1Ev,_ZTvn4_n12_N8S19426C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C8D0Ev,_ZTvn4_n12_N8S19426C8D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV8S19426C8[];
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void _ZN8S19426C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN8S19426C3D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C3__8S19426C8[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S19426C3D1Ev,_ZThn24_N8S19426C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S19426C3D0Ev,_ZThn24_N8S19426C3D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__8S19426C3__8S19426C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C3__8S19426C8[] = {
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
static  VTT_ENTRY vtt_S19426C8[] = {
  {&(_ZTV8S19426C8[4]),  4,57},
  {&(_tg__ZTV8S19426C3__8S19426C8[7]),  7,17},
  {&(_tg__ZTV8S19426C4__8S19426C3__8S19426C8[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C3__8S19426C8[2]),  2,5},
  {&(_tg__ZTV8S19426C3__8S19426C8[7]),  7,17},
  {&(_ZTV8S19426C8[24]),  24,57},
  {&(_ZTV8S19426C8[46]),  46,57},
  {&(_ZTV8S19426C8[54]),  54,57},
  {&(_ZTV8S19426C8[24]),  24,57},
};
extern VTBL_ENTRY _ZTI8S19426C8[];
extern  VTBL_ENTRY _ZTV8S19426C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C8[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19426C3D0Ev,_ZThn24_N8S19426C3D0Ev),
  (VTBL_ENTRY)_ZN8S19426C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19426C3D1Ev,_ZThn24_N8S19426C3D1Ev),
  (VTBL_ENTRY)_ZN8S19426C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19426C8D0Ev,_ZThn32_N8S19426C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19426C8D0Ev,_ZThn8_N8S19426C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19426C8D1Ev,_ZThn32_N8S19426C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19426C8D1Ev,_ZThn8_N8S19426C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19426C8 = {  "S19426C8", // class name
  bases_S19426C8, 12,
  &(vtc_S19426C8[0]), // expected_vtbl_contents
  &(vtt_S19426C8[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S19426C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19426C8),57, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19426C8),9, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19426C2  : S19426C3 , S19426C7 , virtual S19426C8 {
  virtual void  v23(); // _ZN8S19426C23v23Ev
  ~S19426C2(); // tgen
  S19426C2(); // tgen
};
//SIG(-1 S19426C2) C1{ BC2{ VBC3{ BC4{ BC5{ vd v2} vd v3} BC5 vd v4 v5} VBC4 vd v6 v7 v8 v9 v10 v11 Fi Fc Fi} BC6{ VBC3 v12 v13 v14 v15 Fi[2] Fp} VBC7{ BC3 BC2 BC5 v16 v17 FU8{ m}} v1}


void  S19426C2 ::v23(){vfunc_called(this, "_ZN8S19426C23v23Ev");}
S19426C2 ::~S19426C2(){ note_dtor("S19426C2", this);} // tgen
S19426C2 ::S19426C2(){ note_ctor("S19426C2", this);} // tgen

static void Test_S19426C2()
{
  extern Class_Descriptor cd_S19426C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S19426C2, buf);
    S19426C2 *dp, &lv = *(dp=new (buf) S19426C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S19426C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19426C2)");
    /*is_ambiguous_... S19426C2::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*), ABISELECT(48,32), "S19426C2");
    /*is_ambiguous_... S19426C2::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*), ABISELECT(48,32), "S19426C2");
    /*is_ambiguous_... S19426C2::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*), ABISELECT(56,36), "S19426C2");
    /*is_ambiguous_... S19426C2::S19426C3 */ AMB_check_base_class_offset(lv, (S19426C4*)(S19426C3*), ABISELECT(48,32), "S19426C2");
    check_base_class_offset(lv, (S19426C4*)(S19426C7*), ABISELECT(48,32), "S19426C2");
    check_base_class_offset(lv, (S19426C4*)(S19426C3*)(S19426C8*), ABISELECT(48,32), "S19426C2");
    /*is_ambiguous_... S19426C2::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*), 0, "S19426C2");
    /*is_ambiguous_... S19426C2::S19426C3 */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C3*), 0, "S19426C2");
    /*is_ambiguous_... S19426C3::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C3*)(S19426C8*), 0, "S19426C2");
    /*is_ambiguous_... S19426C2::S19426C3 */ AMB_check_base_class_offset(lv, (S19426C3*), 0, "S19426C2");
    check_base_class_offset(lv, (S19426C7*), ABISELECT(24,16), "S19426C2");
    /*is_ambiguous_... S19426C8::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*)(S19426C8*), ABISELECT(64,40), "S19426C2");
    /*is_ambiguous_... S19426C8::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*)(S19426C8*), ABISELECT(64,40), "S19426C2");
    /*is_ambiguous_... S19426C8::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*)(S19426C8*), ABISELECT(72,44), "S19426C2");
    /*is_ambiguous_... S19426C8::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C4*)(S19426C8*), ABISELECT(64,40), "S19426C2");
    check_base_class_offset(lv, (S19426C3*)(S19426C8*), ABISELECT(80,48), "S19426C2");
    /*is_ambiguous_... S19426C8::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C8*), ABISELECT(104,64), "S19426C2");
    check_base_class_offset(lv, (S19426C8*), ABISELECT(64,40), "S19426C2");
    test_class_info(&lv, &cd_S19426C2);
    dp->~S19426C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19426C2(Test_S19426C2, "S19426C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN8S19426C2C1Ev();
extern void _ZN8S19426C2D1Ev();
Name_Map name_map_S19426C2[] = {
  NSPAIR(_ZN8S19426C2C1Ev),
  NSPAIR(_ZN8S19426C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C3;
extern VTBL_ENTRY _ZTI8S19426C3[];
extern  VTBL_ENTRY _ZTV8S19426C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C3[];
extern Class_Descriptor cd_S19426C7;
extern VTBL_ENTRY _ZTI8S19426C7[];
extern  VTBL_ENTRY _ZTV8S19426C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C7[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
extern Class_Descriptor cd_S19426C3;
extern VTBL_ENTRY _ZTI8S19426C3[];
extern  VTBL_ENTRY _ZTV8S19426C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C3[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C8;
extern VTBL_ENTRY _ZTI8S19426C8[];
extern  VTBL_ENTRY _ZTV8S19426C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C8[];
static Base_Class bases_S19426C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19426C6_nt,    ABISELECT(48,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
    1, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(56,36), //bcp->offset
    41, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19426C4,    ABISELECT(48,32), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19426C6_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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19426C3,    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
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19426C7,    ABISELECT(24,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19426C6_nt,    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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    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
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(72,44), //bcp->offset
    71, //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
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19426C4,    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
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19426C3,    ABISELECT(80,48), //bcp->offset
    76, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(104,64), //bcp->offset
    93, //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
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19426C8,    ABISELECT(64,40), //bcp->offset
    46, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19426C2[];
extern void ABISELECT(_ZTv0_n24_N8S19426C2D1Ev,_ZTv0_n12_N8S19426C2D1Ev)();
extern void _ZN8S19426C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C2D0Ev,_ZTv0_n12_N8S19426C2D0Ev)();
extern void _ZN8S19426C2D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
extern void _ZN8S19426C23v23Ev();
extern void _ZN8S19426C73v17Ev();
extern void _ZN8S19426C73v18Ev();
extern void _ZN8S19426C73v19Ev();
extern void _ZN8S19426C73v20Ev();
extern void ABISELECT(_ZThn24_N8S19426C2D1Ev,_ZThn16_N8S19426C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S19426C2D0Ev,_ZThn16_N8S19426C2D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19426C2D1Ev,_ZTv0_n12_N8S19426C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S19426C2D1Ev,_ZThn32_N8S19426C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C2D0Ev,_ZTv0_n12_N8S19426C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S19426C2D0Ev,_ZThn32_N8S19426C2D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19426C2D1Ev,_ZTvn4_n12_N8S19426C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C2D0Ev,_ZTvn4_n12_N8S19426C2D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void ABISELECT(_ZTv0_n40_N8S19426C2D1Ev,_ZTv0_n20_N8S19426C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S19426C2D1Ev,_ZThn40_N8S19426C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19426C2D0Ev,_ZTv0_n20_N8S19426C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S19426C2D0Ev,_ZThn40_N8S19426C2D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN8S19426C83v21Ev();
extern void _ZN8S19426C83v22Ev();
extern void ABISELECT(_ZTvn8_n40_N8S19426C2D1Ev,_ZTvn4_n20_N8S19426C2D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S19426C2D0Ev,_ZTvn4_n20_N8S19426C2D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void ABISELECT(_ZTv0_n24_N8S19426C2D1Ev,_ZTv0_n12_N8S19426C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19426C2D1Ev,_ZThn48_N8S19426C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C2D0Ev,_ZTv0_n12_N8S19426C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19426C2D0Ev,_ZThn48_N8S19426C2D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
extern void ABISELECT(_ZTvn40_n40_N8S19426C2D1Ev,_ZTvn24_n20_N8S19426C2D1Ev)();
extern void ABISELECT(_ZTvn40_n40_N8S19426C2D0Ev,_ZTvn24_n20_N8S19426C2D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY vtc_S19426C2[] = {
  ABISELECT(64,40),
  0,
  ABISELECT(48,32),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C2D1Ev,_ZTv0_n12_N8S19426C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C2D0Ev,_ZTv0_n12_N8S19426C2D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19426C23v23Ev,
  ABISELECT(24,16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19426C2[0]),
  (VTBL_ENTRY)&_ZN8S19426C73v17Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v18Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19426C2D1Ev,_ZThn16_N8S19426C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19426C2D0Ev,_ZThn16_N8S19426C2D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19426C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C2D1Ev,_ZTv0_n12_N8S19426C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C2D0Ev,_ZTv0_n12_N8S19426C2D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19426C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C2D1Ev,_ZTvn4_n12_N8S19426C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C2D0Ev,_ZTvn4_n12_N8S19426C2D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  ABISELECT(-16,-8),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19426C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19426C2D1Ev,_ZTv0_n20_N8S19426C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19426C2D0Ev,_ZTv0_n20_N8S19426C2D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19426C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19426C83v22Ev,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S19426C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S19426C2D1Ev,_ZTvn4_n20_N8S19426C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S19426C2D0Ev,_ZTvn4_n20_N8S19426C2D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  ABISELECT(-80,-48),
  ABISELECT(-32,-16),
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S19426C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C2D1Ev,_ZTv0_n12_N8S19426C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C2D0Ev,_ZTv0_n12_N8S19426C2D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI8S19426C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n40_N8S19426C2D1Ev,_ZTvn24_n20_N8S19426C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n40_N8S19426C2D0Ev,_ZTvn24_n20_N8S19426C2D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV8S19426C2[];
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void _ZN8S19426C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN8S19426C3D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C3__8S19426C2[] = {
  0,
  ABISELECT(48,32),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S19426C3D1Ev,_ZThn32_N8S19426C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S19426C3D0Ev,_ZThn32_N8S19426C3D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__8S19426C3__8S19426C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C3__8S19426C2[] = {
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void _ZN8S19426C73v17Ev();
extern void _ZN8S19426C73v18Ev();
extern void _ZN8S19426C73v19Ev();
extern void _ZN8S19426C73v20Ev();
extern void _ZN8S19426C7D1Ev();
extern void _ZN8S19426C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C7__8S19426C2[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C7[0]),
  (VTBL_ENTRY)&_ZN8S19426C73v17Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v18Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19426C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19426C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C7D1Ev,_ZTv0_n12_N8S19426C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S19426C7D1Ev,_ZThn16_N8S19426C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C7D0Ev,_ZTv0_n12_N8S19426C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S19426C7D0Ev,_ZThn16_N8S19426C7D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__8S19426C7__8S19426C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19426C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C7D1Ev,_ZTv0_n12_N8S19426C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C7D0Ev,_ZTv0_n12_N8S19426C7D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19426C7D1Ev,_ZTvn4_n12_N8S19426C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C7D0Ev,_ZTvn4_n12_N8S19426C7D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C7__8S19426C2[] = {
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19426C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C7D1Ev,_ZTvn4_n12_N8S19426C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C7D0Ev,_ZTvn4_n12_N8S19426C7D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void _ZN8S19426C8D1Ev();
extern void _ZN8S19426C8D0Ev();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN8S19426C83v21Ev();
extern void _ZN8S19426C83v22Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C8__8S19426C2[] = {
  ABISELECT(-64,-40),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C8[0]),
  (VTBL_ENTRY)&_ZN8S19426C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19426C8D0Ev,
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19426C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19426C83v22Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void _ZN8S19426C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN8S19426C3D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C38S19426C8__A1__8S19426C2[] = {
  ABISELECT(-80,-48),
  ABISELECT(-32,-16),
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__8S19426C38S19426C8__A1__8S19426C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C38S19426C8__A1__8S19426C2[] = {
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C5_nt__A1__8S19426C38S19426C8__A1__8S19426C2[] = {
  0,
  0,
  ABISELECT(80,48),
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19426C8D1Ev,_ZThn8_N8S19426C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19426C8D0Ev,_ZThn8_N8S19426C8D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C3__8S19426C8__8S19426C2[] = {
  ABISELECT(-80,-48),
  ABISELECT(-32,-16),
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19426C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__A1__8S19426C8__8S19426C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19426C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19426C8D1Ev,_ZTvn4_n12_N8S19426C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C8D0Ev,_ZTvn4_n12_N8S19426C8D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A3__8S19426C8__8S19426C2[] = {
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19426C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C8D1Ev,_ZTvn4_n12_N8S19426C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C8D0Ev,_ZTvn4_n12_N8S19426C8D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C5_nt__A2__8S19426C8__8S19426C2[] = {
  0,
  0,
  ABISELECT(64,40),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI8S19426C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
};
static  VTT_ENTRY vtt_S19426C2[] = {
  {&(_ZTV8S19426C2[8]),  8,98},
  {&(_tg__ZTV8S19426C3__8S19426C2[7]),  7,17},
  {&(_tg__ZTV8S19426C4__8S19426C3__8S19426C2[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C3__8S19426C2[2]),  2,5},
  {&(_tg__ZTV8S19426C3__8S19426C2[7]),  7,17},
  {&(_tg__ZTV8S19426C7__8S19426C2[3]),  3,9},
  {&(_tg__ZTV8S19426C4__8S19426C7__8S19426C2[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C7__8S19426C2[2]),  2,5},
  {&(_ZTV8S19426C2[35]),  35,98},
  {&(_ZTV8S19426C2[43]),  43,98},
  {&(_ZTV8S19426C2[8]),  8,98},
  {&(_ZTV8S19426C2[22]),  22,98},
  {&(_ZTV8S19426C2[63]),  63,98},
  {&(_ZTV8S19426C2[73]),  73,98},
  {&(_ZTV8S19426C2[83]),  83,98},
  {&(_ZTV8S19426C2[95]),  95,98},
  {&(_tg__ZTV8S19426C8__8S19426C2[4]),  4,12},
  {&(_tg__ZTV8S19426C38S19426C8__A1__8S19426C2[7]),  7,17},
  {&(_tg__ZTV8S19426C4__8S19426C38S19426C8__A1__8S19426C2[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C38S19426C8__A1__8S19426C2[2]),  2,5},
  {&(_tg__ZTV11S19426C5_nt__A1__8S19426C38S19426C8__A1__8S19426C2[5]),  5,9},
  {&(_tg__ZTV8S19426C3__8S19426C8__8S19426C2[7]),  7,17},
  {&(_tg__ZTV8S19426C4__A1__8S19426C8__8S19426C2[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A3__8S19426C8__8S19426C2[2]),  2,5},
  {&(_tg__ZTV11S19426C5_nt__A2__8S19426C8__8S19426C2[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S19426C2[];
extern  VTBL_ENTRY _ZTV8S19426C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C2[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19426C8D0Ev,_ZThn8_N8S19426C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19426C8D1Ev,_ZThn8_N8S19426C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C7D0Ev,_ZTv0_n12_N8S19426C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19426C7D0Ev,_ZThn16_N8S19426C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C7D1Ev,_ZTv0_n12_N8S19426C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19426C7D1Ev,_ZThn16_N8S19426C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S19426C3D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19426C3D0Ev,_ZThn32_N8S19426C3D0Ev),
  (VTBL_ENTRY)_ZN8S19426C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S19426C3D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19426C3D1Ev,_ZThn32_N8S19426C3D1Ev),
  (VTBL_ENTRY)_ZN8S19426C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19426C2D0Ev,_ZTv0_n20_N8S19426C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19426C2D0Ev,_ZThn40_N8S19426C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19426C2D1Ev,_ZTv0_n20_N8S19426C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19426C2D1Ev,_ZThn40_N8S19426C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C2D0Ev,_ZTv0_n12_N8S19426C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19426C2D0Ev,_ZThn48_N8S19426C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19426C2D0Ev,_ZThn32_N8S19426C2D0Ev),
  (VTBL_ENTRY)_ZN8S19426C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C2D1Ev,_ZTv0_n12_N8S19426C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19426C2D1Ev,_ZThn48_N8S19426C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19426C2D1Ev,_ZThn32_N8S19426C2D1Ev),
  (VTBL_ENTRY)_ZN8S19426C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19426C2 = {  "S19426C2", // class name
  bases_S19426C2, 15,
  &(vtc_S19426C2[0]), // expected_vtbl_contents
  &(vtt_S19426C2[0]), // expected_vtt_contents
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI8S19426C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19426C2),98, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19426C2),25, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19426C11  {
  virtual void  v24(); // _ZN9S19426C113v24Ev
  virtual void  v25(); // _ZN9S19426C113v25Ev
  virtual void  v26(); // _ZN9S19426C113v26Ev
  virtual void  v27(); // _ZN9S19426C113v27Ev
  virtual void  v28(); // _ZN9S19426C113v28Ev
  virtual void  v29(); // _ZN9S19426C113v29Ev
  virtual void  v30(); // _ZN9S19426C113v30Ev
  virtual void  v31(); // _ZN9S19426C113v31Ev
  ~S19426C11(); // tgen
  S19426C11(); // tgen
};
//SIG(-1 S19426C11) C1{ v1 v2 v3 v4 v5 v6 v7 v8}


void  S19426C11 ::v24(){vfunc_called(this, "_ZN9S19426C113v24Ev");}
void  S19426C11 ::v25(){vfunc_called(this, "_ZN9S19426C113v25Ev");}
void  S19426C11 ::v26(){vfunc_called(this, "_ZN9S19426C113v26Ev");}
void  S19426C11 ::v27(){vfunc_called(this, "_ZN9S19426C113v27Ev");}
void  S19426C11 ::v28(){vfunc_called(this, "_ZN9S19426C113v28Ev");}
void  S19426C11 ::v29(){vfunc_called(this, "_ZN9S19426C113v29Ev");}
void  S19426C11 ::v30(){vfunc_called(this, "_ZN9S19426C113v30Ev");}
void  S19426C11 ::v31(){vfunc_called(this, "_ZN9S19426C113v31Ev");}
S19426C11 ::~S19426C11(){ note_dtor("S19426C11", this);} // tgen
S19426C11 ::S19426C11(){ note_ctor("S19426C11", this);} // tgen

static void Test_S19426C11()
{
  extern Class_Descriptor cd_S19426C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19426C11, buf);
    S19426C11 *dp, &lv = *(dp=new (buf) S19426C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19426C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19426C11)");
    test_class_info(&lv, &cd_S19426C11);
    dp->~S19426C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19426C11(Test_S19426C11, "S19426C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19426C11C1Ev();
extern void _ZN9S19426C11D1Ev();
Name_Map name_map_S19426C11[] = {
  NSPAIR(_ZN9S19426C11C1Ev),
  NSPAIR(_ZN9S19426C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19426C11[];
extern void _ZN9S19426C113v24Ev();
extern void _ZN9S19426C113v25Ev();
extern void _ZN9S19426C113v26Ev();
extern void _ZN9S19426C113v27Ev();
extern void _ZN9S19426C113v28Ev();
extern void _ZN9S19426C113v29Ev();
extern void _ZN9S19426C113v30Ev();
extern void _ZN9S19426C113v31Ev();
static  VTBL_ENTRY vtc_S19426C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C11[0]),
  (VTBL_ENTRY)&_ZN9S19426C113v24Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v25Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v31Ev,
};
extern VTBL_ENTRY _ZTI9S19426C11[];
extern  VTBL_ENTRY _ZTV9S19426C11[];
Class_Descriptor cd_S19426C11 = {  "S19426C11", // class name
  0,0,//no base classes
  &(vtc_S19426C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19426C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19426C11),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19426C10  : virtual S19426C11 {
  virtual  ~S19426C10(); // _ZN9S19426C10D2Ev
  virtual void  v32(); // _ZN9S19426C103v32Ev
  virtual void  v33(); // _ZN9S19426C103v33Ev
  virtual void  v34(); // _ZN9S19426C103v34Ev
  virtual void  v35(); // _ZN9S19426C103v35Ev
  virtual void  v36(); // _ZN9S19426C103v36Ev
  virtual void  v37(); // _ZN9S19426C103v37Ev
  virtual void  v38(); // _ZN9S19426C103v38Ev
  virtual void  v39(); // _ZN9S19426C103v39Ev
  virtual void  v40(); // _ZN9S19426C103v40Ev
  virtual void  v41(); // _ZN9S19426C103v41Ev
  S19426C10(); // tgen
};
//SIG(-1 S19426C10) C1{ VBC2{ v11 v12 v13 v14 v15 v16 v17 v18} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S19426C10 ::~S19426C10(){ note_dtor("S19426C10", this);}
void  S19426C10 ::v32(){vfunc_called(this, "_ZN9S19426C103v32Ev");}
void  S19426C10 ::v33(){vfunc_called(this, "_ZN9S19426C103v33Ev");}
void  S19426C10 ::v34(){vfunc_called(this, "_ZN9S19426C103v34Ev");}
void  S19426C10 ::v35(){vfunc_called(this, "_ZN9S19426C103v35Ev");}
void  S19426C10 ::v36(){vfunc_called(this, "_ZN9S19426C103v36Ev");}
void  S19426C10 ::v37(){vfunc_called(this, "_ZN9S19426C103v37Ev");}
void  S19426C10 ::v38(){vfunc_called(this, "_ZN9S19426C103v38Ev");}
void  S19426C10 ::v39(){vfunc_called(this, "_ZN9S19426C103v39Ev");}
void  S19426C10 ::v40(){vfunc_called(this, "_ZN9S19426C103v40Ev");}
void  S19426C10 ::v41(){vfunc_called(this, "_ZN9S19426C103v41Ev");}
S19426C10 ::S19426C10(){ note_ctor("S19426C10", this);} // tgen

static void Test_S19426C10()
{
  extern Class_Descriptor cd_S19426C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19426C10, buf);
    S19426C10 *dp, &lv = *(dp=new (buf) S19426C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19426C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19426C10)");
    check_base_class_offset(lv, (S19426C11*), 0, "S19426C10");
    test_class_info(&lv, &cd_S19426C10);
    dp->~S19426C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19426C10(Test_S19426C10, "S19426C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19426C10C1Ev();
extern void _ZN9S19426C10D2Ev();
Name_Map name_map_S19426C10[] = {
  NSPAIR(_ZN9S19426C10C1Ev),
  NSPAIR(_ZN9S19426C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19426C11;
extern VTBL_ENTRY _ZTI9S19426C11[];
extern  VTBL_ENTRY _ZTV9S19426C11[];
static Base_Class bases_S19426C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19426C11,    0, //bcp->offset
    -1, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19426C10[];
extern void _ZN9S19426C113v24Ev();
extern void _ZN9S19426C113v25Ev();
extern void _ZN9S19426C113v26Ev();
extern void _ZN9S19426C113v27Ev();
extern void _ZN9S19426C113v28Ev();
extern void _ZN9S19426C113v29Ev();
extern void _ZN9S19426C113v30Ev();
extern void _ZN9S19426C113v31Ev();
extern void _ZN9S19426C10D1Ev();
extern void _ZN9S19426C10D0Ev();
extern void _ZN9S19426C103v32Ev();
extern void _ZN9S19426C103v33Ev();
extern void _ZN9S19426C103v34Ev();
extern void _ZN9S19426C103v35Ev();
extern void _ZN9S19426C103v36Ev();
extern void _ZN9S19426C103v37Ev();
extern void _ZN9S19426C103v38Ev();
extern void _ZN9S19426C103v39Ev();
extern void _ZN9S19426C103v40Ev();
extern void _ZN9S19426C103v41Ev();
static  VTBL_ENTRY vtc_S19426C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C10[0]),
  (VTBL_ENTRY)&_ZN9S19426C113v24Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v25Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v31Ev,
  (VTBL_ENTRY)&_ZN9S19426C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19426C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v32Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v33Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v34Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v35Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v36Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v37Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v38Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v39Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v40Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v41Ev,
};
extern VTBL_ENTRY _ZTV9S19426C10[];
static  VTT_ENTRY vtt_S19426C10[] = {
  {&(_ZTV9S19426C10[11]),  11,31},
  {&(_ZTV9S19426C10[11]),  11,31},
};
extern VTBL_ENTRY _ZTI9S19426C10[];
extern  VTBL_ENTRY _ZTV9S19426C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19426C10[];
Class_Descriptor cd_S19426C10 = {  "S19426C10", // class name
  bases_S19426C10, 1,
  &(vtc_S19426C10[0]), // expected_vtbl_contents
  &(vtt_S19426C10[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19426C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19426C10),31, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19426C10),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  S19426C14  : S19426C4 {
  ::S19426C4 s19426c14f0;
  ::S19426C6_nt s19426c14f1;
  virtual  ~S19426C14(); // _ZN9S19426C14D1Ev
  virtual void  v42(); // _ZN9S19426C143v42Ev
  virtual void  v43(); // _ZN9S19426C143v43Ev
  virtual void  v44(); // _ZN9S19426C143v44Ev
  virtual void  v45(); // _ZN9S19426C143v45Ev
  virtual void  v46(); // _ZN9S19426C143v46Ev
  S19426C14(); // tgen
};
//SIG(-1 S19426C14) C1{ BC2{ BC3{ BC4{ vd v6} vd v7} BC4 vd v8 v9} vd v1 v2 v3 v4 v5 FC2 FC4}


 S19426C14 ::~S19426C14(){ note_dtor("S19426C14", this);}
void  S19426C14 ::v42(){vfunc_called(this, "_ZN9S19426C143v42Ev");}
void  S19426C14 ::v43(){vfunc_called(this, "_ZN9S19426C143v43Ev");}
void  S19426C14 ::v44(){vfunc_called(this, "_ZN9S19426C143v44Ev");}
void  S19426C14 ::v45(){vfunc_called(this, "_ZN9S19426C143v45Ev");}
void  S19426C14 ::v46(){vfunc_called(this, "_ZN9S19426C143v46Ev");}
S19426C14 ::S19426C14(){ note_ctor("S19426C14", this);} // tgen

static void Test_S19426C14()
{
  extern Class_Descriptor cd_S19426C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19426C14, buf);
    S19426C14 *dp, &lv = *(dp=new (buf) S19426C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19426C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19426C14)");
    check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*), 0, "S19426C14");
    check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*), 0, "S19426C14");
    /*is_ambiguous_... S19426C4::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*), ABISELECT(8,4), "S19426C14");
    check_base_class_offset(lv, (S19426C4*), 0, "S19426C14");
    check_field_offset(lv, s19426c14f0, ABISELECT(16,8), "S19426C14.s19426c14f0");
    check_field_offset(lv, s19426c14f1, ABISELECT(32,16), "S19426C14.s19426c14f1");
    test_class_info(&lv, &cd_S19426C14);
    dp->~S19426C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19426C14(Test_S19426C14, "S19426C14", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S19426C14C1Ev();
extern void _ZN9S19426C14D1Ev();
Name_Map name_map_S19426C14[] = {
  NSPAIR(_ZN9S19426C14C1Ev),
  NSPAIR(_ZN9S19426C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
static Base_Class bases_S19426C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19426C6_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_S19426C5_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
    3, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(8,4), //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19426C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S19426C14[];
extern void _ZN9S19426C14D1Ev();
extern void _ZN9S19426C14D0Ev();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN9S19426C143v42Ev();
extern void _ZN9S19426C143v43Ev();
extern void _ZN9S19426C143v44Ev();
extern void _ZN9S19426C143v45Ev();
extern void _ZN9S19426C143v46Ev();
extern void ABISELECT(_ZThn8_N9S19426C14D1Ev,_ZThn4_N9S19426C14D1Ev)();
extern void ABISELECT(_ZThn8_N9S19426C14D0Ev,_ZThn4_N9S19426C14D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY vtc_S19426C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C14[0]),
  (VTBL_ENTRY)&_ZN9S19426C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19426C14D0Ev,
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v45Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v46Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19426C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19426C14D1Ev,_ZThn4_N9S19426C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19426C14D0Ev,_ZThn4_N9S19426C14D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI9S19426C14[];
extern  VTBL_ENTRY _ZTV9S19426C14[];
Class_Descriptor cd_S19426C14 = {  "S19426C14", // class name
  bases_S19426C14, 4,
  &(vtc_S19426C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S19426C14),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19426C14),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  S19426C13  : virtual S19426C5_nt , virtual S19426C14 , virtual S19426C3 , S19426C6_nt {
  short s19426c13f0;
  virtual  ~S19426C13(); // _ZN9S19426C13D2Ev
  virtual void  v47(); // _ZN9S19426C133v47Ev
  virtual void  v48(); // _ZN9S19426C133v48Ev
  virtual void  v49(); // _ZN9S19426C133v49Ev
  virtual void  v50(); // _ZN9S19426C133v50Ev
  virtual void  v51(); // _ZN9S19426C133v51Ev
  virtual void  v52(); // _ZN9S19426C133v52Ev
  virtual void  v53(); // _ZN9S19426C133v53Ev
  virtual void  v54(); // _ZN9S19426C133v54Ev
  virtual void  v55(); // _ZN9S19426C133v55Ev
  S19426C13(); // tgen
};
//SIG(-1 S19426C13) C1{ VBC2{ BC3{ vd v10} vd v11} VBC4{ BC5{ BC2 BC3 vd v12 v13} vd v14 v15 v16 v17 v18 FC5 FC3} VBC6{ VBC5 VBC2 vd v19 v20 v21 v22 v23 v24 Fi Fc Fi} BC3 vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fs}


 S19426C13 ::~S19426C13(){ note_dtor("S19426C13", this);}
void  S19426C13 ::v47(){vfunc_called(this, "_ZN9S19426C133v47Ev");}
void  S19426C13 ::v48(){vfunc_called(this, "_ZN9S19426C133v48Ev");}
void  S19426C13 ::v49(){vfunc_called(this, "_ZN9S19426C133v49Ev");}
void  S19426C13 ::v50(){vfunc_called(this, "_ZN9S19426C133v50Ev");}
void  S19426C13 ::v51(){vfunc_called(this, "_ZN9S19426C133v51Ev");}
void  S19426C13 ::v52(){vfunc_called(this, "_ZN9S19426C133v52Ev");}
void  S19426C13 ::v53(){vfunc_called(this, "_ZN9S19426C133v53Ev");}
void  S19426C13 ::v54(){vfunc_called(this, "_ZN9S19426C133v54Ev");}
void  S19426C13 ::v55(){vfunc_called(this, "_ZN9S19426C133v55Ev");}
S19426C13 ::S19426C13(){ note_ctor("S19426C13", this);} // tgen

static void Test_S19426C13()
{
  extern Class_Descriptor cd_S19426C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S19426C13, buf);
    S19426C13 *dp, &lv = *(dp=new (buf) S19426C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S19426C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19426C13)");
    /*is_ambiguous_... S19426C13::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*), ABISELECT(56,28), "S19426C13");
    /*is_ambiguous_... S19426C13::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C5_nt*), ABISELECT(56,28), "S19426C13");
    /*is_ambiguous_... S19426C3::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C3*), ABISELECT(56,28), "S19426C13");
    check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*)(S19426C14*), ABISELECT(16,8), "S19426C13");
    check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*)(S19426C14*), ABISELECT(16,8), "S19426C13");
    /*is_ambiguous_... S19426C4::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*)(S19426C14*), ABISELECT(24,12), "S19426C13");
    check_base_class_offset(lv, (S19426C4*)(S19426C14*), ABISELECT(16,8), "S19426C13");
    check_base_class_offset(lv, (S19426C14*), ABISELECT(16,8), "S19426C13");
    /*is_ambiguous_... S19426C13::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*), ABISELECT(80,44), "S19426C13");
    /*is_ambiguous_... S19426C13::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*), ABISELECT(80,44), "S19426C13");
    /*is_ambiguous_... S19426C13::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*), ABISELECT(88,48), "S19426C13");
    check_base_class_offset(lv, (S19426C4*)(S19426C3*), ABISELECT(80,44), "S19426C13");
    check_base_class_offset(lv, (S19426C3*), ABISELECT(56,28), "S19426C13");
    /*is_ambiguous_... S19426C13::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*), 0, "S19426C13");
    check_field_offset(lv, s19426c13f0, ABISELECT(8,4), "S19426C13.s19426c13f0");
    test_class_info(&lv, &cd_S19426C13);
    dp->~S19426C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19426C13(Test_S19426C13, "S19426C13", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN9S19426C13C1Ev();
extern void _ZN9S19426C13D2Ev();
Name_Map name_map_S19426C13[] = {
  NSPAIR(_ZN9S19426C13C1Ev),
  NSPAIR(_ZN9S19426C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
extern Class_Descriptor cd_S19426C14;
extern VTBL_ENTRY _ZTI9S19426C14[];
extern  VTBL_ENTRY _ZTV9S19426C14[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
extern Class_Descriptor cd_S19426C3;
extern VTBL_ENTRY _ZTI8S19426C3[];
extern  VTBL_ENTRY _ZTV8S19426C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C3[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
static Base_Class bases_S19426C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19426C6_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    ABISELECT(56,28), //bcp->offset
    -1, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19426C6_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(24,12), //bcp->offset
    41, //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
    5, //immediately_derived
  0, 0},
  {&cd_S19426C4,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19426C14,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19426C6_nt,    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
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    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
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(88,48), //bcp->offset
    82, //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
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19426C4,    ABISELECT(80,44), //bcp->offset
    69, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19426C3,    ABISELECT(56,28), //bcp->offset
    46, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19426C6_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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19426C13[];
extern void _ZN9S19426C13D1Ev();
extern void _ZN9S19426C13D0Ev();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN9S19426C133v47Ev();
extern void _ZN9S19426C133v48Ev();
extern void _ZN9S19426C133v49Ev();
extern void _ZN9S19426C133v50Ev();
extern void _ZN9S19426C133v51Ev();
extern void _ZN9S19426C133v52Ev();
extern void _ZN9S19426C133v53Ev();
extern void _ZN9S19426C133v54Ev();
extern void _ZN9S19426C133v55Ev();
extern void ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19426C13D1Ev,_ZThn8_N9S19426C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev)();
extern void ABISELECT(_ZThn16_N9S19426C13D0Ev,_ZThn8_N9S19426C13D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN9S19426C143v42Ev();
extern void _ZN9S19426C143v43Ev();
extern void _ZN9S19426C143v44Ev();
extern void _ZN9S19426C143v45Ev();
extern void _ZN9S19426C143v46Ev();
extern void ABISELECT(_ZTvn8_n24_N9S19426C13D1Ev,_ZTvn4_n12_N9S19426C13D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C13D0Ev,_ZTvn4_n12_N9S19426C13D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev)();
extern void ABISELECT(_ZThn56_N9S19426C13D1Ev,_ZThn28_N9S19426C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev)();
extern void ABISELECT(_ZThn56_N9S19426C13D0Ev,_ZThn28_N9S19426C13D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
extern void ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev)();
extern void ABISELECT(_ZThn80_N9S19426C13D1Ev,_ZThn44_N9S19426C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev)();
extern void ABISELECT(_ZThn80_N9S19426C13D0Ev,_ZThn44_N9S19426C13D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void ABISELECT(_ZTvn8_n24_N9S19426C13D1Ev,_ZTvn4_n12_N9S19426C13D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C13D0Ev,_ZTvn4_n12_N9S19426C13D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY vtc_S19426C13[] = {
  ABISELECT(80,44),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&_ZN9S19426C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19426C13D0Ev,
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v47Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v48Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v49Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v50Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v51Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v52Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v53Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v54Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v55Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v45Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v46Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C13D1Ev,_ZTvn4_n12_N9S19426C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C13D0Ev,_ZTvn4_n12_N9S19426C13D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C13D1Ev,_ZTvn4_n12_N9S19426C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C13D0Ev,_ZTvn4_n12_N9S19426C13D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV9S19426C13[];
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void _ZN8S19426C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN8S19426C3D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C3__9S19426C13[] = {
  0,
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S19426C3D1Ev,_ZThn16_N8S19426C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void ABISELECT(_ZThn24_N8S19426C3D0Ev,_ZThn16_N8S19426C3D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__8S19426C3__9S19426C13[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C3__9S19426C13[] = {
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
static  VTT_ENTRY vtt_S19426C13[] = {
  {&(_ZTV9S19426C13[6]),  6,87},
  {&(_ZTV9S19426C13[59]),  59,87},
  {&(_ZTV9S19426C13[30]),  30,87},
  {&(_ZTV9S19426C13[43]),  43,87},
  {&(_ZTV9S19426C13[59]),  59,87},
  {&(_ZTV9S19426C13[76]),  76,87},
  {&(_ZTV9S19426C13[84]),  84,87},
  {&(_tg__ZTV8S19426C3__9S19426C13[7]),  7,17},
  {&(_tg__ZTV8S19426C4__8S19426C3__9S19426C13[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C3__9S19426C13[2]),  2,5},
  {&(_tg__ZTV8S19426C3__9S19426C13[7]),  7,17},
};
extern VTBL_ENTRY _ZTI9S19426C13[];
extern  VTBL_ENTRY _ZTV9S19426C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19426C13[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19426C3D0Ev,_ZThn16_N8S19426C3D0Ev),
  (VTBL_ENTRY)_ZN8S19426C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19426C3D1Ev,_ZThn16_N8S19426C3D1Ev),
  (VTBL_ENTRY)_ZN8S19426C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19426C13D0Ev,_ZThn44_N9S19426C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19426C13D0Ev,_ZThn28_N9S19426C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19426C13D0Ev,_ZThn8_N9S19426C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19426C13D1Ev,_ZThn44_N9S19426C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19426C13D1Ev,_ZThn28_N9S19426C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19426C13D1Ev,_ZThn8_N9S19426C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19426C13 = {  "S19426C13", // class name
  bases_S19426C13, 13,
  &(vtc_S19426C13[0]), // expected_vtbl_contents
  &(vtt_S19426C13[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI9S19426C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19426C13),87, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19426C13),11, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19426C16  {
  int s19426c16f0;
  virtual  ~S19426C16(); // _ZN9S19426C16D1Ev
  virtual void  v56(); // _ZN9S19426C163v56Ev
  virtual void  v57(); // _ZN9S19426C163v57Ev
  virtual void  v58(); // _ZN9S19426C163v58Ev
  virtual void  v59(); // _ZN9S19426C163v59Ev
  virtual void  v60(); // _ZN9S19426C163v60Ev
  virtual void  v61(); // _ZN9S19426C163v61Ev
  S19426C16(); // tgen
};
//SIG(-1 S19426C16) C1{ vd v1 v2 v3 v4 v5 v6 Fi}


 S19426C16 ::~S19426C16(){ note_dtor("S19426C16", this);}
void  S19426C16 ::v56(){vfunc_called(this, "_ZN9S19426C163v56Ev");}
void  S19426C16 ::v57(){vfunc_called(this, "_ZN9S19426C163v57Ev");}
void  S19426C16 ::v58(){vfunc_called(this, "_ZN9S19426C163v58Ev");}
void  S19426C16 ::v59(){vfunc_called(this, "_ZN9S19426C163v59Ev");}
void  S19426C16 ::v60(){vfunc_called(this, "_ZN9S19426C163v60Ev");}
void  S19426C16 ::v61(){vfunc_called(this, "_ZN9S19426C163v61Ev");}
S19426C16 ::S19426C16(){ note_ctor("S19426C16", this);} // tgen

static void Test_S19426C16()
{
  extern Class_Descriptor cd_S19426C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19426C16, buf);
    S19426C16 *dp, &lv = *(dp=new (buf) S19426C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19426C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19426C16)");
    check_field_offset(lv, s19426c16f0, ABISELECT(8,4), "S19426C16.s19426c16f0");
    test_class_info(&lv, &cd_S19426C16);
    dp->~S19426C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19426C16(Test_S19426C16, "S19426C16", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19426C16C1Ev();
extern void _ZN9S19426C16D1Ev();
Name_Map name_map_S19426C16[] = {
  NSPAIR(_ZN9S19426C16C1Ev),
  NSPAIR(_ZN9S19426C16D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19426C16[];
extern void _ZN9S19426C16D1Ev();
extern void _ZN9S19426C16D0Ev();
extern void _ZN9S19426C163v56Ev();
extern void _ZN9S19426C163v57Ev();
extern void _ZN9S19426C163v58Ev();
extern void _ZN9S19426C163v59Ev();
extern void _ZN9S19426C163v60Ev();
extern void _ZN9S19426C163v61Ev();
static  VTBL_ENTRY vtc_S19426C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C16[0]),
  (VTBL_ENTRY)&_ZN9S19426C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19426C16D0Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v56Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v57Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v58Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v59Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v60Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v61Ev,
};
extern VTBL_ENTRY _ZTI9S19426C16[];
extern  VTBL_ENTRY _ZTV9S19426C16[];
Class_Descriptor cd_S19426C16 = {  "S19426C16", // class name
  0,0,//no base classes
  &(vtc_S19426C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19426C16),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19426C16),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19426C17  : virtual S19426C4 , virtual S19426C5_nt , virtual S19426C14 , virtual S19426C3 , virtual S19426C6_nt {
  virtual void  v62(); // _ZN9S19426C173v62Ev
  virtual void  v63(); // _ZN9S19426C173v63Ev
  virtual void  v64(); // _ZN9S19426C173v64Ev
  ~S19426C17(); // tgen
  S19426C17(); // tgen
};
//SIG(-1 S19426C17) C1{ VBC2{ BC3{ BC4{ vd v4} vd v5} BC4 vd v6 v7} VBC3 VBC5{ BC2 vd v8 v9 v10 v11 v12 FC2 FC4} VBC6{ VBC2 VBC3 vd v13 v14 v15 v16 v17 v18 Fi Fc Fi} VBC4 v1 v2 v3}


void  S19426C17 ::v62(){vfunc_called(this, "_ZN9S19426C173v62Ev");}
void  S19426C17 ::v63(){vfunc_called(this, "_ZN9S19426C173v63Ev");}
void  S19426C17 ::v64(){vfunc_called(this, "_ZN9S19426C173v64Ev");}
S19426C17 ::~S19426C17(){ note_dtor("S19426C17", this);} // tgen
S19426C17 ::S19426C17(){ note_ctor("S19426C17", this);} // tgen

static void Test_S19426C17()
{
  extern Class_Descriptor cd_S19426C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S19426C17, buf);
    S19426C17 *dp, &lv = *(dp=new (buf) S19426C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S19426C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19426C17)");
    /*is_ambiguous_... S19426C17::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*), ABISELECT(8,4), "S19426C17");
    /*is_ambiguous_... S19426C17::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*), ABISELECT(8,4), "S19426C17");
    /*is_ambiguous_... S19426C17::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*), ABISELECT(16,8), "S19426C17");
    /*is_ambiguous_... S19426C17::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C4*), ABISELECT(8,4), "S19426C17");
    check_base_class_offset(lv, (S19426C4*)(S19426C3*), ABISELECT(8,4), "S19426C17");
    /*is_ambiguous_... S19426C17::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*), ABISELECT(64,32), "S19426C17");
    /*is_ambiguous_... S19426C17::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C5_nt*), ABISELECT(64,32), "S19426C17");
    /*is_ambiguous_... S19426C3::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C3*), ABISELECT(64,32), "S19426C17");
    check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*)(S19426C14*), ABISELECT(24,12), "S19426C17");
    check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*)(S19426C14*), ABISELECT(24,12), "S19426C17");
    /*is_ambiguous_... S19426C4::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*)(S19426C14*), ABISELECT(32,16), "S19426C17");
    check_base_class_offset(lv, (S19426C4*)(S19426C14*), ABISELECT(24,12), "S19426C17");
    check_base_class_offset(lv, (S19426C14*), ABISELECT(24,12), "S19426C17");
    check_base_class_offset(lv, (S19426C3*), ABISELECT(64,32), "S19426C17");
    /*is_ambiguous_... S19426C17::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*), 0, "S19426C17");
    test_class_info(&lv, &cd_S19426C17);
    dp->~S19426C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19426C17(Test_S19426C17, "S19426C17", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN9S19426C17C1Ev();
extern void _ZN9S19426C17D1Ev();
Name_Map name_map_S19426C17[] = {
  NSPAIR(_ZN9S19426C17C1Ev),
  NSPAIR(_ZN9S19426C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
extern Class_Descriptor cd_S19426C14;
extern VTBL_ENTRY _ZTI9S19426C14[];
extern  VTBL_ENTRY _ZTV9S19426C14[];
extern Class_Descriptor cd_S19426C3;
extern VTBL_ENTRY _ZTI8S19426C3[];
extern  VTBL_ENTRY _ZTV8S19426C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C3[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
static Base_Class bases_S19426C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19426C6_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(16,8), //bcp->offset
    28, //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
    3, //immediately_derived
  0, 0},
  {&cd_S19426C4,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19426C6_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19426C6_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(32,16), //bcp->offset
    56, //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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19426C4,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19426C14,    ABISELECT(24,12), //bcp->offset
    33, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19426C3,    ABISELECT(64,32), //bcp->offset
    61, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19426C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19426C17[];
extern void ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev)();
extern void _ZN9S19426C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev)();
extern void _ZN9S19426C17D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN9S19426C173v62Ev();
extern void _ZN9S19426C173v63Ev();
extern void _ZN9S19426C173v64Ev();
extern void ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZThn8_N9S19426C17D1Ev,_ZThn4_N9S19426C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev)();
extern void ABISELECT(_ZThn8_N9S19426C17D0Ev,_ZThn4_N9S19426C17D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void ABISELECT(_ZTvn8_n24_N9S19426C17D1Ev,_ZTvn4_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C17D0Ev,_ZTvn4_n12_N9S19426C17D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZThn24_N9S19426C17D1Ev,_ZThn12_N9S19426C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev)();
extern void ABISELECT(_ZThn24_N9S19426C17D0Ev,_ZThn12_N9S19426C17D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN9S19426C143v42Ev();
extern void _ZN9S19426C143v43Ev();
extern void _ZN9S19426C143v44Ev();
extern void _ZN9S19426C143v45Ev();
extern void _ZN9S19426C143v46Ev();
extern void ABISELECT(_ZTvn8_n24_N9S19426C17D1Ev,_ZTvn4_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C17D0Ev,_ZTvn4_n12_N9S19426C17D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZThn64_N9S19426C17D1Ev,_ZThn32_N9S19426C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev)();
extern void ABISELECT(_ZThn64_N9S19426C17D0Ev,_ZThn32_N9S19426C17D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY vtc_S19426C17[] = {
  0,
  ABISELECT(64,32),
  ABISELECT(24,12),
  ABISELECT(64,32),
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v62Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v63Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v64Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C17D1Ev,_ZTvn4_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C17D0Ev,_ZTvn4_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v45Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v46Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C17D1Ev,_ZTvn4_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C17D0Ev,_ZTvn4_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern VTBL_ENTRY _ZTV9S19426C17[];
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void _ZN8S19426C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN8S19426C3D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C3__9S19426C17[] = {
  0,
  ABISELECT(-56,-28),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__8S19426C3__9S19426C17[] = {
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C3__9S19426C17[] = {
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
static  VTT_ENTRY vtt_S19426C17[] = {
  {&(_ZTV9S19426C17[9]),  9,84},
  {&(_ZTV9S19426C17[22]),  22,84},
  {&(_ZTV9S19426C17[30]),  30,84},
  {&(_ZTV9S19426C17[74]),  74,84},
  {&(_ZTV9S19426C17[45]),  45,84},
  {&(_ZTV9S19426C17[58]),  58,84},
  {&(_ZTV9S19426C17[74]),  74,84},
  {&(_ZTV9S19426C17[9]),  9,84},
  {&(_tg__ZTV8S19426C3__9S19426C17[7]),  7,17},
  {&(_tg__ZTV8S19426C4__8S19426C3__9S19426C17[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C3__9S19426C17[2]),  2,5},
  {&(_tg__ZTV8S19426C3__9S19426C17[7]),  7,17},
};
extern VTBL_ENTRY _ZTI9S19426C17[];
extern  VTBL_ENTRY _ZTV9S19426C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19426C17[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S19426C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S19426C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19426C17D0Ev,_ZThn32_N9S19426C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19426C17D0Ev,_ZThn12_N9S19426C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19426C17D0Ev,_ZThn4_N9S19426C17D0Ev),
  (VTBL_ENTRY)_ZN9S19426C17D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19426C17D1Ev,_ZThn32_N9S19426C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19426C17D1Ev,_ZThn12_N9S19426C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19426C17D1Ev,_ZThn4_N9S19426C17D1Ev),
  (VTBL_ENTRY)_ZN9S19426C17D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19426C17 = {  "S19426C17", // class name
  bases_S19426C17, 13,
  &(vtc_S19426C17[0]), // expected_vtbl_contents
  &(vtt_S19426C17[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI9S19426C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19426C17),84, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19426C17),12, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19426C18  : virtual S19426C14 , virtual S19426C11 , virtual S19426C6_nt {
  virtual  ~S19426C18(); // _ZN9S19426C18D2Ev
  virtual void  v65(); // _ZN9S19426C183v65Ev
  S19426C18(); // tgen
};
//SIG(-1 S19426C18) C1{ VBC2{ BC3{ BC4{ BC5{ vd v2} vd v3} BC5 vd v4 v5} vd v6 v7 v8 v9 v10 FC3 FC5} VBC6{ v11 v12 v13 v14 v15 v16 v17 v18} VBC5 vd v1}


 S19426C18 ::~S19426C18(){ note_dtor("S19426C18", this);}
void  S19426C18 ::v65(){vfunc_called(this, "_ZN9S19426C183v65Ev");}
S19426C18 ::S19426C18(){ note_ctor("S19426C18", this);} // tgen

static void Test_S19426C18()
{
  extern Class_Descriptor cd_S19426C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19426C18, buf);
    S19426C18 *dp, &lv = *(dp=new (buf) S19426C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19426C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19426C18)");
    check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*)(S19426C14*), ABISELECT(8,4), "S19426C18");
    check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*)(S19426C14*), ABISELECT(8,4), "S19426C18");
    /*is_ambiguous_... S19426C4::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*)(S19426C14*), ABISELECT(16,8), "S19426C18");
    check_base_class_offset(lv, (S19426C4*)(S19426C14*), ABISELECT(8,4), "S19426C18");
    check_base_class_offset(lv, (S19426C14*), ABISELECT(8,4), "S19426C18");
    check_base_class_offset(lv, (S19426C11*), 0, "S19426C18");
    /*is_ambiguous_... S19426C18::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*), ABISELECT(48,24), "S19426C18");
    test_class_info(&lv, &cd_S19426C18);
    dp->~S19426C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19426C18(Test_S19426C18, "S19426C18", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN9S19426C18C1Ev();
extern void _ZN9S19426C18D2Ev();
Name_Map name_map_S19426C18[] = {
  NSPAIR(_ZN9S19426C18C1Ev),
  NSPAIR(_ZN9S19426C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
extern Class_Descriptor cd_S19426C14;
extern VTBL_ENTRY _ZTI9S19426C14[];
extern  VTBL_ENTRY _ZTV9S19426C14[];
extern Class_Descriptor cd_S19426C11;
extern VTBL_ENTRY _ZTI9S19426C11[];
extern  VTBL_ENTRY _ZTV9S19426C11[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
static Base_Class bases_S19426C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19426C6_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(16,8), //bcp->offset
    47, //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
    3, //immediately_derived
  0, 0},
  {&cd_S19426C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19426C14,    ABISELECT(8,4), //bcp->offset
    24, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19426C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19426C6_nt,    ABISELECT(48,24), //bcp->offset
    52, //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 _ZTI9S19426C18[];
extern void _ZN9S19426C113v24Ev();
extern void _ZN9S19426C113v25Ev();
extern void _ZN9S19426C113v26Ev();
extern void _ZN9S19426C113v27Ev();
extern void _ZN9S19426C113v28Ev();
extern void _ZN9S19426C113v29Ev();
extern void _ZN9S19426C113v30Ev();
extern void _ZN9S19426C113v31Ev();
extern void _ZN9S19426C18D1Ev();
extern void _ZN9S19426C18D0Ev();
extern void _ZN9S19426C183v65Ev();
extern void ABISELECT(_ZTv0_n24_N9S19426C18D1Ev,_ZTv0_n12_N9S19426C18D1Ev)();
extern void ABISELECT(_ZThn8_N9S19426C18D1Ev,_ZThn4_N9S19426C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C18D0Ev,_ZTv0_n12_N9S19426C18D0Ev)();
extern void ABISELECT(_ZThn8_N9S19426C18D0Ev,_ZThn4_N9S19426C18D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN9S19426C143v42Ev();
extern void _ZN9S19426C143v43Ev();
extern void _ZN9S19426C143v44Ev();
extern void _ZN9S19426C143v45Ev();
extern void _ZN9S19426C143v46Ev();
extern void ABISELECT(_ZTvn8_n24_N9S19426C18D1Ev,_ZTvn4_n12_N9S19426C18D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C18D0Ev,_ZTvn4_n12_N9S19426C18D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void ABISELECT(_ZTv0_n24_N9S19426C18D1Ev,_ZTv0_n12_N9S19426C18D1Ev)();
extern void ABISELECT(_ZThn48_N9S19426C18D1Ev,_ZThn24_N9S19426C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C18D0Ev,_ZTv0_n12_N9S19426C18D0Ev)();
extern void ABISELECT(_ZThn48_N9S19426C18D0Ev,_ZThn24_N9S19426C18D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY vtc_S19426C18[] = {
  ABISELECT(48,24),
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C18[0]),
  (VTBL_ENTRY)&_ZN9S19426C113v24Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v25Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v31Ev,
  (VTBL_ENTRY)&_ZN9S19426C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19426C18D0Ev,
  (VTBL_ENTRY)&_ZN9S19426C183v65Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19426C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C18D1Ev,_ZTv0_n12_N9S19426C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C18D0Ev,_ZTv0_n12_N9S19426C18D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v45Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v46Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19426C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C18D1Ev,_ZTvn4_n12_N9S19426C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C18D0Ev,_ZTvn4_n12_N9S19426C18D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19426C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C18D1Ev,_ZTv0_n12_N9S19426C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C18D0Ev,_ZTv0_n12_N9S19426C18D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV9S19426C18[];
static  VTT_ENTRY vtt_S19426C18[] = {
  {&(_ZTV9S19426C18[13]),  13,59},
  {&(_ZTV9S19426C18[36]),  36,59},
  {&(_ZTV9S19426C18[49]),  49,59},
  {&(_ZTV9S19426C18[13]),  13,59},
  {&(_ZTV9S19426C18[56]),  56,59},
};
extern VTBL_ENTRY _ZTI9S19426C18[];
extern  VTBL_ENTRY _ZTV9S19426C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19426C18[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C18D0Ev,_ZTv0_n12_N9S19426C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19426C18D0Ev,_ZThn24_N9S19426C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19426C18D0Ev,_ZThn4_N9S19426C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C18D1Ev,_ZTv0_n12_N9S19426C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19426C18D1Ev,_ZThn24_N9S19426C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19426C18D1Ev,_ZThn4_N9S19426C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19426C18 = {  "S19426C18", // class name
  bases_S19426C18, 7,
  &(vtc_S19426C18[0]), // expected_vtbl_contents
  &(vtt_S19426C18[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI9S19426C18),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19426C18),59, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19426C18),5, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19426C15  : virtual S19426C16 , virtual S19426C4 , S19426C17 , S19426C18 {
  void *s19426c15f0;
  int s19426c15f1;
  char s19426c15f2;
  virtual void  v66(); // _ZN9S19426C153v66Ev
  virtual void  v67(); // _ZN9S19426C153v67Ev
  ~S19426C15(); // tgen
  S19426C15(); // tgen
};
//SIG(-1 S19426C15) C1{ VBC2{ vd v3 v4 v5 v6 v7 v8 Fi} VBC3{ BC4{ BC5{ vd v9} vd v10} BC5 vd v11 v12} BC6{ VBC3 VBC4 VBC7{ BC3 vd v13 v14 v15 v16 v17 FC3 FC5} VBC8{ VBC3 VBC4 vd v18 v19 v20 v21 v22 v23 Fi Fc Fi} VBC5 v24 v25 v26} BC9{ VBC7 VBC10{ v27 v28 v29 v30 v31 v32 v33 v34} VBC5 vd v35} v1 v2 Fp Fi Fc}


void  S19426C15 ::v66(){vfunc_called(this, "_ZN9S19426C153v66Ev");}
void  S19426C15 ::v67(){vfunc_called(this, "_ZN9S19426C153v67Ev");}
S19426C15 ::~S19426C15(){ note_dtor("S19426C15", this);} // tgen
S19426C15 ::S19426C15(){ note_ctor("S19426C15", this);} // tgen

static void Test_S19426C15()
{
  extern Class_Descriptor cd_S19426C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,19)];
    init_test(&cd_S19426C15, buf);
    S19426C15 *dp, &lv = *(dp=new (buf) S19426C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,72), "sizeof(S19426C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19426C15)");
    check_base_class_offset(lv, (S19426C16*), ABISELECT(32,20), "S19426C15");
    /*is_ambiguous_... S19426C15::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*), ABISELECT(48,28), "S19426C15");
    /*is_ambiguous_... S19426C15::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*), ABISELECT(48,28), "S19426C15");
    /*is_ambiguous_... S19426C15::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*), ABISELECT(56,32), "S19426C15");
    /*is_ambiguous_... S19426C15::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C4*), ABISELECT(48,28), "S19426C15");
    /*is_ambiguous_... S19426C17::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C4*)(S19426C17*), ABISELECT(48,28), "S19426C15");
    check_base_class_offset(lv, (S19426C4*)(S19426C3*), ABISELECT(48,28), "S19426C15");
    /*is_ambiguous_... S19426C15::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*), ABISELECT(104,56), "S19426C15");
    /*is_ambiguous_... S19426C17::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C17*), ABISELECT(104,56), "S19426C15");
    /*is_ambiguous_... S19426C3::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C3*), ABISELECT(104,56), "S19426C15");
    check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*)(S19426C14*), ABISELECT(64,36), "S19426C15");
    check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*)(S19426C14*), ABISELECT(64,36), "S19426C15");
    /*is_ambiguous_... S19426C4::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*)(S19426C14*), ABISELECT(72,40), "S19426C15");
    check_base_class_offset(lv, (S19426C4*)(S19426C14*), ABISELECT(64,36), "S19426C15");
    check_base_class_offset(lv, (S19426C14*)(S19426C17*), ABISELECT(64,36), "S19426C15");
    check_base_class_offset(lv, (S19426C14*)(S19426C18*), ABISELECT(64,36), "S19426C15");
    check_base_class_offset(lv, (S19426C3*)(S19426C17*), ABISELECT(104,56), "S19426C15");
    /*is_ambiguous_... S19426C17::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C17*), 0, "S19426C15");
    /*is_ambiguous_... S19426C18::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C18*), 0, "S19426C15");
    check_base_class_offset(lv, (S19426C17*), 0, "S19426C15");
    check_base_class_offset(lv, (S19426C11*)(S19426C18*), ABISELECT(8,4), "S19426C15");
    check_base_class_offset(lv, (S19426C18*), ABISELECT(8,4), "S19426C15");
    check_field_offset(lv, s19426c15f0, ABISELECT(16,8), "S19426C15.s19426c15f0");
    check_field_offset(lv, s19426c15f1, ABISELECT(24,12), "S19426C15.s19426c15f1");
    check_field_offset(lv, s19426c15f2, ABISELECT(28,16), "S19426C15.s19426c15f2");
    test_class_info(&lv, &cd_S19426C15);
    dp->~S19426C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19426C15(Test_S19426C15, "S19426C15", ABISELECT(128,72));

#else // __cplusplus

extern void _ZN9S19426C15C1Ev();
extern void _ZN9S19426C15D1Ev();
Name_Map name_map_S19426C15[] = {
  NSPAIR(_ZN9S19426C15C1Ev),
  NSPAIR(_ZN9S19426C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19426C16;
extern VTBL_ENTRY _ZTI9S19426C16[];
extern  VTBL_ENTRY _ZTV9S19426C16[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
extern Class_Descriptor cd_S19426C14;
extern VTBL_ENTRY _ZTI9S19426C14[];
extern  VTBL_ENTRY _ZTV9S19426C14[];
extern Class_Descriptor cd_S19426C3;
extern VTBL_ENTRY _ZTI8S19426C3[];
extern  VTBL_ENTRY _ZTV8S19426C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C3[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C17;
extern VTBL_ENTRY _ZTI9S19426C17[];
extern  VTBL_ENTRY _ZTV9S19426C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19426C17[];
extern Class_Descriptor cd_S19426C11;
extern VTBL_ENTRY _ZTI9S19426C11[];
extern  VTBL_ENTRY _ZTV9S19426C11[];
extern Class_Descriptor cd_S19426C18;
extern VTBL_ENTRY _ZTI9S19426C18[];
extern  VTBL_ENTRY _ZTV9S19426C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19426C18[];
static Base_Class bases_S19426C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19426C16,    ABISELECT(32,20), //bcp->offset
    43, //bcp->virtual_function_table_offset
    9, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19426C6_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(56,32), //bcp->offset
    73, //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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19426C4,    ABISELECT(48,28), //bcp->offset
    60, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19426C6_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19426C6_nt,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    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
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(72,40), //bcp->offset
    101, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19426C4,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19426C14,    ABISELECT(64,36), //bcp->offset
    78, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19426C3,    ABISELECT(104,56), //bcp->offset
    106, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19426C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19426C17,    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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19426C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19426C18,    ABISELECT(8,4), //bcp->offset
    19, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19426C15[];
extern void ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev)();
extern void _ZN9S19426C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev)();
extern void _ZN9S19426C15D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN9S19426C173v62Ev();
extern void _ZN9S19426C173v63Ev();
extern void _ZN9S19426C173v64Ev();
extern void _ZN9S19426C153v66Ev();
extern void _ZN9S19426C153v67Ev();
extern void _ZN9S19426C113v24Ev();
extern void _ZN9S19426C113v25Ev();
extern void _ZN9S19426C113v26Ev();
extern void _ZN9S19426C113v27Ev();
extern void _ZN9S19426C113v28Ev();
extern void _ZN9S19426C113v29Ev();
extern void _ZN9S19426C113v30Ev();
extern void _ZN9S19426C113v31Ev();
extern void ABISELECT(_ZThn8_N9S19426C15D1Ev,_ZThn4_N9S19426C15D1Ev)();
extern void ABISELECT(_ZThn8_N9S19426C15D0Ev,_ZThn4_N9S19426C15D0Ev)();
extern void _ZN9S19426C183v65Ev();
extern void ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZThn32_N9S19426C15D1Ev,_ZThn20_N9S19426C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev)();
extern void ABISELECT(_ZThn32_N9S19426C15D0Ev,_ZThn20_N9S19426C15D0Ev)() __attribute__((weak));
extern void _ZN9S19426C163v56Ev();
extern void _ZN9S19426C163v57Ev();
extern void _ZN9S19426C163v58Ev();
extern void _ZN9S19426C163v59Ev();
extern void _ZN9S19426C163v60Ev();
extern void _ZN9S19426C163v61Ev();
extern void ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZThn48_N9S19426C15D1Ev,_ZThn28_N9S19426C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev)();
extern void ABISELECT(_ZThn48_N9S19426C15D0Ev,_ZThn28_N9S19426C15D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void ABISELECT(_ZTvn8_n24_N9S19426C15D1Ev,_ZTvn4_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C15D0Ev,_ZTvn4_n12_N9S19426C15D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZThn64_N9S19426C15D1Ev,_ZThn36_N9S19426C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev)();
extern void ABISELECT(_ZThn64_N9S19426C15D0Ev,_ZThn36_N9S19426C15D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN9S19426C143v42Ev();
extern void _ZN9S19426C143v43Ev();
extern void _ZN9S19426C143v44Ev();
extern void _ZN9S19426C143v45Ev();
extern void _ZN9S19426C143v46Ev();
extern void ABISELECT(_ZTvn8_n24_N9S19426C15D1Ev,_ZTvn4_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C15D0Ev,_ZTvn4_n12_N9S19426C15D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZThn104_N9S19426C15D1Ev,_ZThn56_N9S19426C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev)();
extern void ABISELECT(_ZThn104_N9S19426C15D0Ev,_ZThn56_N9S19426C15D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY vtc_S19426C15[] = {
  ABISELECT(8,4),
  ABISELECT(32,20),
  0,
  ABISELECT(104,56),
  ABISELECT(64,36),
  ABISELECT(104,56),
  ABISELECT(48,28),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v62Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v63Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v64Ev,
  (VTBL_ENTRY)&_ZN9S19426C153v66Ev,
  (VTBL_ENTRY)&_ZN9S19426C153v67Ev,
  ABISELECT(-8,-4),
  0,
  ABISELECT(56,32),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&_ZN9S19426C113v24Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v25Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v31Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19426C15D1Ev,_ZThn4_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19426C15D0Ev,_ZThn4_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19426C183v65Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19426C163v56Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v57Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v58Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v59Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v60Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v61Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C15D1Ev,_ZTvn4_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C15D0Ev,_ZTvn4_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v45Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v46Ev,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C15D1Ev,_ZTvn4_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C15D0Ev,_ZTvn4_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  0,
  0,
  ABISELECT(-104,-56),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern VTBL_ENTRY _ZTV9S19426C15[];
extern void ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev)();
extern void _ZN9S19426C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev)();
extern void _ZN9S19426C17D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN9S19426C173v62Ev();
extern void _ZN9S19426C173v63Ev();
extern void _ZN9S19426C173v64Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C17__9S19426C15[] = {
  0,
  ABISELECT(104,56),
  ABISELECT(64,36),
  ABISELECT(104,56),
  ABISELECT(48,28),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v62Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v63Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v64Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZThn48_N9S19426C17D1Ev,_ZThn28_N9S19426C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev)();
extern void ABISELECT(_ZThn48_N9S19426C17D0Ev,_ZThn28_N9S19426C17D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__9S19426C17__9S19426C15[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C17D1Ev,_ZTvn4_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C17D0Ev,_ZTvn4_n12_N9S19426C17D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__9S19426C17__9S19426C15[] = {
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C17D1Ev,_ZTvn4_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C17D0Ev,_ZTvn4_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZThn104_N9S19426C17D1Ev,_ZThn56_N9S19426C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev)();
extern void ABISELECT(_ZThn104_N9S19426C17D0Ev,_ZThn56_N9S19426C17D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C3__9S19426C17__9S19426C15[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  0,
  0,
  ABISELECT(-104,-56),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZThn64_N9S19426C17D1Ev,_ZThn36_N9S19426C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev)();
extern void ABISELECT(_ZThn64_N9S19426C17D0Ev,_ZThn36_N9S19426C17D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN9S19426C143v42Ev();
extern void _ZN9S19426C143v43Ev();
extern void _ZN9S19426C143v44Ev();
extern void _ZN9S19426C143v45Ev();
extern void _ZN9S19426C143v46Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C14__9S19426C17__9S19426C15[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v45Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v46Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C17D1Ev,_ZTvn4_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C17D0Ev,_ZTvn4_n12_N9S19426C17D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C49S19426C14__A4__9S19426C17__9S19426C15[] = {
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C17D1Ev,_ZTvn4_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C17D0Ev,_ZTvn4_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void _ZN9S19426C113v24Ev();
extern void _ZN9S19426C113v25Ev();
extern void _ZN9S19426C113v26Ev();
extern void _ZN9S19426C113v27Ev();
extern void _ZN9S19426C113v28Ev();
extern void _ZN9S19426C113v29Ev();
extern void _ZN9S19426C113v30Ev();
extern void _ZN9S19426C113v31Ev();
extern void _ZN9S19426C18D1Ev();
extern void _ZN9S19426C18D0Ev();
extern void _ZN9S19426C183v65Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C18__9S19426C15[] = {
  ABISELECT(-8,-4),
  0,
  ABISELECT(56,32),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C18[0]),
  (VTBL_ENTRY)&_ZN9S19426C113v24Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v25Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v31Ev,
  (VTBL_ENTRY)&_ZN9S19426C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19426C18D0Ev,
  (VTBL_ENTRY)&_ZN9S19426C183v65Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C18D1Ev,_ZTv0_n12_N9S19426C18D1Ev)();
extern void ABISELECT(_ZThn56_N9S19426C18D1Ev,_ZThn32_N9S19426C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C18D0Ev,_ZTv0_n12_N9S19426C18D0Ev)();
extern void ABISELECT(_ZThn56_N9S19426C18D0Ev,_ZThn32_N9S19426C18D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN9S19426C143v42Ev();
extern void _ZN9S19426C143v43Ev();
extern void _ZN9S19426C143v44Ev();
extern void _ZN9S19426C143v45Ev();
extern void _ZN9S19426C143v46Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C14__9S19426C18__9S19426C15[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI9S19426C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C18D1Ev,_ZTv0_n12_N9S19426C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C18D0Ev,_ZTv0_n12_N9S19426C18D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v45Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v46Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C18D1Ev,_ZTvn4_n12_N9S19426C18D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C18D0Ev,_ZTvn4_n12_N9S19426C18D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C49S19426C14__A1__9S19426C18__9S19426C15[] = {
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19426C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C18D1Ev,_ZTvn4_n12_N9S19426C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C18D0Ev,_ZTvn4_n12_N9S19426C18D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C18D1Ev,_ZTv0_n12_N9S19426C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C18D0Ev,_ZTv0_n12_N9S19426C18D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt__A2__9S19426C18__9S19426C15[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S19426C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C18D1Ev,_ZTv0_n12_N9S19426C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C18D0Ev,_ZTv0_n12_N9S19426C18D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void _ZN8S19426C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN8S19426C3D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C3__9S19426C15[] = {
  0,
  ABISELECT(-56,-28),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__8S19426C3__9S19426C15[] = {
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C3__9S19426C15[] = {
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
static  VTT_ENTRY vtt_S19426C15[] = {
  {&(_ZTV9S19426C15[11]),  11,129},
  {&(_tg__ZTV9S19426C17__9S19426C15[9]),  9,15},
  {&(_tg__ZTV8S19426C4__9S19426C17__9S19426C15[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__9S19426C17__9S19426C15[2]),  2,5},
  {&(_tg__ZTV8S19426C3__9S19426C17__9S19426C15[13]),  13,23},
  {&(_tg__ZTV9S19426C14__9S19426C17__9S19426C15[12]),  12,23},
  {&(_tg__ZTV11S19426C6_nt8S19426C49S19426C14__A4__9S19426C17__9S19426C15[2]),  2,5},
  {&(_tg__ZTV8S19426C3__9S19426C17__9S19426C15[13]),  13,23},
  {&(_tg__ZTV9S19426C17__9S19426C15[9]),  9,15},
  {&(_tg__ZTV9S19426C18__9S19426C15[13]),  13,24},
  {&(_tg__ZTV9S19426C14__9S19426C18__9S19426C15[12]),  12,23},
  {&(_tg__ZTV11S19426C6_nt8S19426C49S19426C14__A1__9S19426C18__9S19426C15[2]),  2,5},
  {&(_tg__ZTV9S19426C18__9S19426C15[13]),  13,24},
  {&(_tg__ZTV11S19426C6_nt__A2__9S19426C18__9S19426C15[4]),  4,7},
  {&(_ZTV9S19426C15[52]),  52,129},
  {&(_ZTV9S19426C15[67]),  67,129},
  {&(_ZTV9S19426C15[75]),  75,129},
  {&(_ZTV9S19426C15[119]),  119,129},
  {&(_ZTV9S19426C15[90]),  90,129},
  {&(_ZTV9S19426C15[103]),  103,129},
  {&(_ZTV9S19426C15[119]),  119,129},
  {&(_ZTV9S19426C15[11]),  11,129},
  {&(_ZTV9S19426C15[32]),  32,129},
  {&(_ZTV9S19426C15[32]),  32,129},
  {&(_tg__ZTV8S19426C3__9S19426C15[7]),  7,17},
  {&(_tg__ZTV8S19426C4__8S19426C3__9S19426C15[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C3__9S19426C15[2]),  2,5},
  {&(_tg__ZTV8S19426C3__9S19426C15[7]),  7,17},
};
extern VTBL_ENTRY _ZTI9S19426C15[];
extern  VTBL_ENTRY _ZTV9S19426C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19426C15[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S19426C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S19426C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C18D0Ev,_ZTv0_n12_N9S19426C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19426C18D0Ev,_ZThn32_N9S19426C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C18D1Ev,_ZTv0_n12_N9S19426C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19426C18D1Ev,_ZThn32_N9S19426C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19426C17D0Ev,_ZThn36_N9S19426C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19426C17D0Ev,_ZThn56_N9S19426C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19426C17D0Ev,_ZThn28_N9S19426C17D0Ev),
  (VTBL_ENTRY)_ZN9S19426C17D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19426C17D1Ev,_ZThn36_N9S19426C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19426C17D1Ev,_ZThn56_N9S19426C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19426C17D1Ev,_ZThn28_N9S19426C17D1Ev),
  (VTBL_ENTRY)_ZN9S19426C17D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19426C15D0Ev,_ZThn56_N9S19426C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19426C15D0Ev,_ZThn36_N9S19426C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19426C15D0Ev,_ZThn28_N9S19426C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19426C15D0Ev,_ZThn20_N9S19426C15D0Ev),
  (VTBL_ENTRY)_ZN9S19426C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19426C15D1Ev,_ZThn56_N9S19426C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19426C15D1Ev,_ZThn36_N9S19426C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19426C15D1Ev,_ZThn28_N9S19426C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19426C15D1Ev,_ZThn20_N9S19426C15D1Ev),
  (VTBL_ENTRY)_ZN9S19426C15D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19426C15 = {  "S19426C15", // class name
  bases_S19426C15, 17,
  &(vtc_S19426C15[0]), // expected_vtbl_contents
  &(vtt_S19426C15[0]), // expected_vtt_contents
  ABISELECT(128,72), // object size
  NSPAIRA(_ZTI9S19426C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19426C15),129, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19426C15),28, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19426C12  : virtual S19426C13 , S19426C7 , virtual S19426C15 , S19426C4 {
  int s19426c12f0;
  void *s19426c12f1;
  virtual  ~S19426C12(); // _ZN9S19426C12D2Ev
  S19426C12(); // tgen
};
//SIG(-1 S19426C12) C1{ VBC2{ VBC3{ BC4{ vd v1} vd v2} VBC5{ BC6{ BC3 BC4 vd v3 v4} vd v5 v6 v7 v8 v9 FC6 FC4} VBC7{ VBC6 VBC3 vd v10 v11 v12 v13 v14 v15 Fi Fc Fi} BC4 vd v16 v17 v18 v19 v20 v21 v22 v23 v24 Fs} BC8{ VBC6 v25 v26 v27 v28 Fi[2] Fp} VBC9{ VBC10{ vd v29 v30 v31 v32 v33 v34 Fi} VBC6 BC11{ VBC6 VBC3 VBC5 VBC7 VBC4 v35 v36 v37} BC12{ VBC5 VBC13{ v38 v39 v40 v41 v42 v43 v44 v45} VBC4 vd v46} v47 v48 Fp Fi Fc} BC6 vd Fi Fp}


 S19426C12 ::~S19426C12(){ note_dtor("S19426C12", this);}
S19426C12 ::S19426C12(){ note_ctor("S19426C12", this);} // tgen

static void Test_S19426C12()
{
  extern Class_Descriptor cd_S19426C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,29)];
    init_test(&cd_S19426C12, buf);
    S19426C12 *dp, &lv = *(dp=new (buf) S19426C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,112), "sizeof(S19426C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19426C12)");
    /*is_ambiguous_... S19426C12::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*), ABISELECT(112,60), "S19426C12");
    /*is_ambiguous_... S19426C13::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C13*), ABISELECT(112,60), "S19426C12");
    /*is_ambiguous_... S19426C3::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C3*), ABISELECT(112,60), "S19426C12");
    /*is_ambiguous_... S19426C17::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C17*)(S19426C15*), ABISELECT(112,60), "S19426C12");
    check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*)(S19426C14*), ABISELECT(72,40), "S19426C12");
    check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*)(S19426C14*), ABISELECT(72,40), "S19426C12");
    /*is_ambiguous_... S19426C4::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*)(S19426C14*), ABISELECT(80,44), "S19426C12");
    check_base_class_offset(lv, (S19426C4*)(S19426C14*), ABISELECT(72,40), "S19426C12");
    check_base_class_offset(lv, (S19426C14*)(S19426C13*), ABISELECT(72,40), "S19426C12");
    check_base_class_offset(lv, (S19426C14*)(S19426C17*)(S19426C15*), ABISELECT(72,40), "S19426C12");
    check_base_class_offset(lv, (S19426C14*)(S19426C18*)(S19426C15*), ABISELECT(72,40), "S19426C12");
    /*is_ambiguous_... S19426C12::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*), ABISELECT(136,76), "S19426C12");
    /*is_ambiguous_... S19426C12::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*), ABISELECT(136,76), "S19426C12");
    /*is_ambiguous_... S19426C12::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*), ABISELECT(144,80), "S19426C12");
    check_base_class_offset(lv, (S19426C4*)(S19426C3*), ABISELECT(136,76), "S19426C12");
    check_base_class_offset(lv, (S19426C4*)(S19426C7*), ABISELECT(136,76), "S19426C12");
    /*is_ambiguous_... S19426C15::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C4*)(S19426C15*), ABISELECT(136,76), "S19426C12");
    /*is_ambiguous_... S19426C17::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C4*)(S19426C17*)(S19426C15*), ABISELECT(136,76), "S19426C12");
    check_base_class_offset(lv, (S19426C3*)(S19426C13*), ABISELECT(112,60), "S19426C12");
    check_base_class_offset(lv, (S19426C3*)(S19426C17*)(S19426C15*), ABISELECT(112,60), "S19426C12");
    /*is_ambiguous_... S19426C13::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C13*), ABISELECT(56,32), "S19426C12");
    check_base_class_offset(lv, (S19426C13*), ABISELECT(56,32), "S19426C12");
    check_base_class_offset(lv, (S19426C7*), 0, "S19426C12");
    check_base_class_offset(lv, (S19426C16*)(S19426C15*), ABISELECT(184,104), "S19426C12");
    /*is_ambiguous_... S19426C17::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C17*)(S19426C15*), ABISELECT(152,84), "S19426C12");
    /*is_ambiguous_... S19426C18::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C18*)(S19426C15*), ABISELECT(152,84), "S19426C12");
    check_base_class_offset(lv, (S19426C17*)(S19426C15*), ABISELECT(152,84), "S19426C12");
    check_base_class_offset(lv, (S19426C11*)(S19426C18*)(S19426C15*), ABISELECT(160,88), "S19426C12");
    check_base_class_offset(lv, (S19426C18*)(S19426C15*), ABISELECT(160,88), "S19426C12");
    check_base_class_offset(lv, (S19426C15*), ABISELECT(152,84), "S19426C12");
    /*is_ambiguous_... S19426C12::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*), ABISELECT(24,16), "S19426C12");
    /*is_ambiguous_... S19426C12::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*), ABISELECT(24,16), "S19426C12");
    /*is_ambiguous_... S19426C12::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*), ABISELECT(32,20), "S19426C12");
    /*is_ambiguous_... S19426C12::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C4*), ABISELECT(24,16), "S19426C12");
    check_field_offset(lv, s19426c12f0, ABISELECT(40,24), "S19426C12.s19426c12f0");
    check_field_offset(lv, s19426c12f1, ABISELECT(48,28), "S19426C12.s19426c12f1");
    test_class_info(&lv, &cd_S19426C12);
    dp->~S19426C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19426C12(Test_S19426C12, "S19426C12", ABISELECT(200,112));

#else // __cplusplus

extern void _ZN9S19426C12C1Ev();
extern void _ZN9S19426C12D2Ev();
Name_Map name_map_S19426C12[] = {
  NSPAIR(_ZN9S19426C12C1Ev),
  NSPAIR(_ZN9S19426C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
extern Class_Descriptor cd_S19426C14;
extern VTBL_ENTRY _ZTI9S19426C14[];
extern  VTBL_ENTRY _ZTV9S19426C14[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
extern Class_Descriptor cd_S19426C3;
extern VTBL_ENTRY _ZTI8S19426C3[];
extern  VTBL_ENTRY _ZTV8S19426C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C3[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C13;
extern VTBL_ENTRY _ZTI9S19426C13[];
extern  VTBL_ENTRY _ZTV9S19426C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19426C13[];
extern Class_Descriptor cd_S19426C7;
extern VTBL_ENTRY _ZTI8S19426C7[];
extern  VTBL_ENTRY _ZTV8S19426C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C7[];
extern Class_Descriptor cd_S19426C16;
extern VTBL_ENTRY _ZTI9S19426C16[];
extern  VTBL_ENTRY _ZTV9S19426C16[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C17;
extern VTBL_ENTRY _ZTI9S19426C17[];
extern  VTBL_ENTRY _ZTV9S19426C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19426C17[];
extern Class_Descriptor cd_S19426C11;
extern VTBL_ENTRY _ZTI9S19426C11[];
extern  VTBL_ENTRY _ZTV9S19426C11[];
extern Class_Descriptor cd_S19426C18;
extern VTBL_ENTRY _ZTI9S19426C18[];
extern  VTBL_ENTRY _ZTV9S19426C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19426C18[];
extern Class_Descriptor cd_S19426C15;
extern VTBL_ENTRY _ZTI9S19426C15[];
extern  VTBL_ENTRY _ZTV9S19426C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19426C15[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
static Base_Class bases_S19426C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19426C6_nt,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    11, //immediately_derived
  0, 1},
  {&cd_S19426C6_nt,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    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
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(80,44), //bcp->offset
    82, //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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19426C4,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19426C14,    ABISELECT(72,40), //bcp->offset
    59, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19426C6_nt,    ABISELECT(136,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
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    ABISELECT(136,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
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(144,80), //bcp->offset
    123, //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
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19426C4,    ABISELECT(136,76), //bcp->offset
    110, //bcp->virtual_function_table_offset
    7, //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
    11, //immediately_derived
  0, 1},
  {&cd_S19426C3,    ABISELECT(112,60), //bcp->offset
    87, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19426C6_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19426C13,    ABISELECT(56,32), //bcp->offset
    30, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19426C7,    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
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19426C16,    ABISELECT(184,104), //bcp->offset
    177, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S19426C6_nt,    ABISELECT(152,84), //bcp->offset
    -1, //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
    16, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19426C17,    ABISELECT(152,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19426C11,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19426C18,    ABISELECT(160,88), //bcp->offset
    153, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19426C15,    ABISELECT(152,84), //bcp->offset
    128, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19426C6_nt,    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
    22, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    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
    23, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(32,20), //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
    24, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19426C4,    ABISELECT(24,16), //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
    25, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19426C12[];
extern void _ZN8S19426C73v17Ev();
extern void _ZN8S19426C73v18Ev();
extern void _ZN8S19426C73v19Ev();
extern void _ZN8S19426C73v20Ev();
extern void _ZN9S19426C12D1Ev();
extern void _ZN9S19426C12D0Ev();
extern void ABISELECT(_ZThn24_N9S19426C12D1Ev,_ZThn16_N9S19426C12D1Ev)();
extern void ABISELECT(_ZThn24_N9S19426C12D0Ev,_ZThn16_N9S19426C12D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void ABISELECT(_ZThn32_N9S19426C12D1Ev,_ZThn20_N9S19426C12D1Ev)();
extern void ABISELECT(_ZThn32_N9S19426C12D0Ev,_ZThn20_N9S19426C12D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void ABISELECT(_ZTv0_n56_N9S19426C12D1Ev,_ZTv0_n28_N9S19426C12D1Ev)();
extern void ABISELECT(_ZThn56_N9S19426C12D1Ev,_ZThn32_N9S19426C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19426C12D0Ev,_ZTv0_n28_N9S19426C12D0Ev)();
extern void ABISELECT(_ZThn56_N9S19426C12D0Ev,_ZThn32_N9S19426C12D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN9S19426C133v47Ev();
extern void _ZN9S19426C133v48Ev();
extern void _ZN9S19426C133v49Ev();
extern void _ZN9S19426C133v50Ev();
extern void _ZN9S19426C133v51Ev();
extern void _ZN9S19426C133v52Ev();
extern void _ZN9S19426C133v53Ev();
extern void _ZN9S19426C133v54Ev();
extern void _ZN9S19426C133v55Ev();
extern void ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev)();
extern void ABISELECT(_ZThn72_N9S19426C12D1Ev,_ZThn40_N9S19426C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev)();
extern void ABISELECT(_ZThn72_N9S19426C12D0Ev,_ZThn40_N9S19426C12D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN9S19426C143v42Ev();
extern void _ZN9S19426C143v43Ev();
extern void _ZN9S19426C143v44Ev();
extern void _ZN9S19426C143v45Ev();
extern void _ZN9S19426C143v46Ev();
extern void ABISELECT(_ZTvn8_n24_N9S19426C12D1Ev,_ZTvn4_n12_N9S19426C12D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C12D0Ev,_ZTvn4_n12_N9S19426C12D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev)();
extern void ABISELECT(_ZThn112_N9S19426C12D1Ev,_ZThn60_N9S19426C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev)();
extern void ABISELECT(_ZThn112_N9S19426C12D0Ev,_ZThn60_N9S19426C12D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
extern void ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev)();
extern void ABISELECT(_ZThn136_N9S19426C12D1Ev,_ZThn76_N9S19426C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev)();
extern void ABISELECT(_ZThn136_N9S19426C12D0Ev,_ZThn76_N9S19426C12D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void ABISELECT(_ZTvn8_n24_N9S19426C12D1Ev,_ZTvn4_n12_N9S19426C12D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C12D0Ev,_ZTvn4_n12_N9S19426C12D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev)();
extern void ABISELECT(_ZThn152_N9S19426C12D1Ev,_ZThn84_N9S19426C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev)();
extern void ABISELECT(_ZThn152_N9S19426C12D0Ev,_ZThn84_N9S19426C12D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN9S19426C173v62Ev();
extern void _ZN9S19426C173v63Ev();
extern void _ZN9S19426C173v64Ev();
extern void _ZN9S19426C153v66Ev();
extern void _ZN9S19426C153v67Ev();
extern void _ZN9S19426C113v24Ev();
extern void _ZN9S19426C113v25Ev();
extern void _ZN9S19426C113v26Ev();
extern void _ZN9S19426C113v27Ev();
extern void _ZN9S19426C113v28Ev();
extern void _ZN9S19426C113v29Ev();
extern void _ZN9S19426C113v30Ev();
extern void _ZN9S19426C113v31Ev();
extern void ABISELECT(_ZTvn8_n24_N9S19426C12D1Ev,_ZTvn4_n12_N9S19426C12D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C12D0Ev,_ZTvn4_n12_N9S19426C12D0Ev)();
extern void _ZN9S19426C183v65Ev();
extern void ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev)();
extern void ABISELECT(_ZThn184_N9S19426C12D1Ev,_ZThn104_N9S19426C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev)();
extern void ABISELECT(_ZThn184_N9S19426C12D0Ev,_ZThn104_N9S19426C12D0Ev)() __attribute__((weak));
extern void _ZN9S19426C163v56Ev();
extern void _ZN9S19426C163v57Ev();
extern void _ZN9S19426C163v58Ev();
extern void _ZN9S19426C163v59Ev();
extern void _ZN9S19426C163v60Ev();
extern void _ZN9S19426C163v61Ev();
static  VTBL_ENTRY vtc_S19426C12[] = {
  ABISELECT(160,88),
  ABISELECT(152,84),
  ABISELECT(184,104),
  ABISELECT(152,84),
  ABISELECT(112,60),
  ABISELECT(72,40),
  ABISELECT(112,60),
  ABISELECT(56,32),
  ABISELECT(136,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&_ZN8S19426C73v17Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v18Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v20Ev,
  (VTBL_ENTRY)&_ZN9S19426C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19426C12D0Ev,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S19426C12D1Ev,_ZThn16_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S19426C12D0Ev,_ZThn16_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N9S19426C12D1Ev,_ZThn20_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N9S19426C12D0Ev,_ZThn20_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(80,44),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(56,28),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19426C12D1Ev,_ZTv0_n28_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19426C12D0Ev,_ZTv0_n28_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v47Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v48Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v49Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v50Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v51Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v52Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v53Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v54Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v55Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v45Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v46Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C12D1Ev,_ZTvn4_n12_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C12D0Ev,_ZTvn4_n12_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  0,
  0,
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-76),
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C12D1Ev,_ZTvn4_n12_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C12D0Ev,_ZTvn4_n12_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(32,20),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-80,-44),
  ABISELECT(-40,-24),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-152,-84),
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v62Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v63Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v64Ev,
  (VTBL_ENTRY)&_ZN9S19426C153v66Ev,
  (VTBL_ENTRY)&_ZN9S19426C153v67Ev,
  ABISELECT(-8,-4),
  0,
  ABISELECT(-88,-48),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&_ZN9S19426C113v24Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v25Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v31Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C12D1Ev,_ZTvn4_n12_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C12D0Ev,_ZTvn4_n12_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19426C183v65Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-104),
  ABISELECT(-184,-104),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19426C163v56Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v57Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v58Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v59Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v60Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v61Ev,
};
extern VTBL_ENTRY _ZTV9S19426C12[];
extern void _ZN8S19426C73v17Ev();
extern void _ZN8S19426C73v18Ev();
extern void _ZN8S19426C73v19Ev();
extern void _ZN8S19426C73v20Ev();
extern void _ZN8S19426C7D1Ev();
extern void _ZN8S19426C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C7__9S19426C12[] = {
  ABISELECT(136,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C7[0]),
  (VTBL_ENTRY)&_ZN8S19426C73v17Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v18Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19426C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19426C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C7D1Ev,_ZTv0_n12_N8S19426C7D1Ev)();
extern void ABISELECT(_ZThn136_N8S19426C7D1Ev,_ZThn76_N8S19426C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C7D0Ev,_ZTv0_n12_N8S19426C7D0Ev)();
extern void ABISELECT(_ZThn136_N8S19426C7D0Ev,_ZThn76_N8S19426C7D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__8S19426C7__9S19426C12[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-136,-76),
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI8S19426C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C7D1Ev,_ZTv0_n12_N8S19426C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C7D0Ev,_ZTv0_n12_N8S19426C7D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19426C7D1Ev,_ZTvn4_n12_N8S19426C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C7D0Ev,_ZTvn4_n12_N8S19426C7D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C7__9S19426C12[] = {
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI8S19426C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C7D1Ev,_ZTvn4_n12_N8S19426C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C7D0Ev,_ZTvn4_n12_N8S19426C7D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void _ZN9S19426C13D1Ev();
extern void _ZN9S19426C13D0Ev();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN9S19426C133v47Ev();
extern void _ZN9S19426C133v48Ev();
extern void _ZN9S19426C133v49Ev();
extern void _ZN9S19426C133v50Ev();
extern void _ZN9S19426C133v51Ev();
extern void _ZN9S19426C133v52Ev();
extern void _ZN9S19426C133v53Ev();
extern void _ZN9S19426C133v54Ev();
extern void _ZN9S19426C133v55Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C13__9S19426C12[] = {
  ABISELECT(80,44),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&_ZN9S19426C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19426C13D0Ev,
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v47Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v48Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v49Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v50Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v51Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v52Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v53Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v54Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v55Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev)();
extern void ABISELECT(_ZThn56_N9S19426C13D1Ev,_ZThn28_N9S19426C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev)();
extern void ABISELECT(_ZThn56_N9S19426C13D0Ev,_ZThn28_N9S19426C13D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C3__9S19426C13__9S19426C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19426C13D1Ev,_ZThn8_N9S19426C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev)();
extern void ABISELECT(_ZThn16_N9S19426C13D0Ev,_ZThn8_N9S19426C13D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN9S19426C143v42Ev();
extern void _ZN9S19426C143v43Ev();
extern void _ZN9S19426C143v44Ev();
extern void _ZN9S19426C143v45Ev();
extern void _ZN9S19426C143v46Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C14__9S19426C13__9S19426C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v45Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v46Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C13D1Ev,_ZTvn4_n12_N9S19426C13D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C13D0Ev,_ZTvn4_n12_N9S19426C13D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C49S19426C14__A2__9S19426C13__9S19426C12[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C13D1Ev,_ZTvn4_n12_N9S19426C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C13D0Ev,_ZTvn4_n12_N9S19426C13D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev)();
extern void ABISELECT(_ZThn80_N9S19426C13D1Ev,_ZThn44_N9S19426C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev)();
extern void ABISELECT(_ZThn80_N9S19426C13D0Ev,_ZThn44_N9S19426C13D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__A1__9S19426C13__9S19426C12[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C13D1Ev,_ZTvn4_n12_N9S19426C13D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C13D0Ev,_ZTvn4_n12_N9S19426C13D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A4__9S19426C13__9S19426C12[] = {
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C13D1Ev,_ZTvn4_n12_N9S19426C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C13D0Ev,_ZTvn4_n12_N9S19426C13D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void _ZN8S19426C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN8S19426C3D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C3__9S19426C12[] = {
  0,
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S19426C3D1Ev,_ZThn16_N8S19426C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void ABISELECT(_ZThn24_N8S19426C3D0Ev,_ZThn16_N8S19426C3D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__8S19426C3__9S19426C12[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C3__9S19426C12[] = {
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev)();
extern void _ZN9S19426C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev)();
extern void _ZN9S19426C15D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN9S19426C173v62Ev();
extern void _ZN9S19426C173v63Ev();
extern void _ZN9S19426C173v64Ev();
extern void _ZN9S19426C153v66Ev();
extern void _ZN9S19426C153v67Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C15__9S19426C12[] = {
  ABISELECT(8,4),
  ABISELECT(32,20),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-80,-44),
  ABISELECT(-40,-24),
  ABISELECT(-16,-8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v62Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v63Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v64Ev,
  (VTBL_ENTRY)&_ZN9S19426C153v66Ev,
  (VTBL_ENTRY)&_ZN9S19426C153v67Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev)();
extern void _ZN9S19426C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev)();
extern void _ZN9S19426C17D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN9S19426C173v62Ev();
extern void _ZN9S19426C173v63Ev();
extern void _ZN9S19426C173v64Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C179S19426C15__9S19426C12[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-80,-44),
  ABISELECT(-40,-24),
  ABISELECT(-16,-8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v62Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v63Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v64Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__9S19426C179S19426C15__9S19426C12[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C17D1Ev,_ZTvn4_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C17D0Ev,_ZTvn4_n12_N9S19426C17D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__9S19426C179S19426C15__9S19426C12[] = {
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C17D1Ev,_ZTvn4_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C17D0Ev,_ZTvn4_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C3__9S19426C179S19426C15__9S19426C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN9S19426C143v42Ev();
extern void _ZN9S19426C143v43Ev();
extern void _ZN9S19426C143v44Ev();
extern void _ZN9S19426C143v45Ev();
extern void _ZN9S19426C143v46Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C14__9S19426C179S19426C15__9S19426C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,44),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v45Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v46Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C17D1Ev,_ZTvn4_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C17D0Ev,_ZTvn4_n12_N9S19426C17D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C49S19426C14__A4__9S19426C179S19426C15__9S19426C12[] = {
  ABISELECT(72,40),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C17D1Ev,_ZTvn4_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C17D0Ev,_ZTvn4_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void _ZN9S19426C113v24Ev();
extern void _ZN9S19426C113v25Ev();
extern void _ZN9S19426C113v26Ev();
extern void _ZN9S19426C113v27Ev();
extern void _ZN9S19426C113v28Ev();
extern void _ZN9S19426C113v29Ev();
extern void _ZN9S19426C113v30Ev();
extern void _ZN9S19426C113v31Ev();
extern void _ZN9S19426C18D1Ev();
extern void _ZN9S19426C18D0Ev();
extern void _ZN9S19426C183v65Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C189S19426C15__9S19426C12[] = {
  ABISELECT(-8,-4),
  0,
  ABISELECT(-88,-48),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C18[0]),
  (VTBL_ENTRY)&_ZN9S19426C113v24Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v25Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v31Ev,
  (VTBL_ENTRY)&_ZN9S19426C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19426C18D0Ev,
  (VTBL_ENTRY)&_ZN9S19426C183v65Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C18D1Ev,_ZTv0_n12_N9S19426C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C18D0Ev,_ZTv0_n12_N9S19426C18D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN9S19426C143v42Ev();
extern void _ZN9S19426C143v43Ev();
extern void _ZN9S19426C143v44Ev();
extern void _ZN9S19426C143v45Ev();
extern void _ZN9S19426C143v46Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C14__9S19426C189S19426C15__9S19426C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI9S19426C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C18D1Ev,_ZTv0_n12_N9S19426C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C18D0Ev,_ZTv0_n12_N9S19426C18D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v45Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v46Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C18D1Ev,_ZTvn4_n12_N9S19426C18D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C18D0Ev,_ZTvn4_n12_N9S19426C18D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C49S19426C14__A1__9S19426C189S19426C15__9S19426C12[] = {
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI9S19426C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C18D1Ev,_ZTvn4_n12_N9S19426C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C18D0Ev,_ZTvn4_n12_N9S19426C18D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C18D1Ev,_ZTv0_n12_N9S19426C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C18D0Ev,_ZTv0_n12_N9S19426C18D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt__A2__9S19426C189S19426C15__9S19426C12[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S19426C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C18D1Ev,_ZTv0_n12_N9S19426C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C18D0Ev,_ZTv0_n12_N9S19426C18D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZThn32_N9S19426C15D1Ev,_ZThn20_N9S19426C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev)();
extern void ABISELECT(_ZThn32_N9S19426C15D0Ev,_ZThn20_N9S19426C15D0Ev)() __attribute__((weak));
extern void _ZN9S19426C163v56Ev();
extern void _ZN9S19426C163v57Ev();
extern void _ZN9S19426C163v58Ev();
extern void _ZN9S19426C163v59Ev();
extern void _ZN9S19426C163v60Ev();
extern void _ZN9S19426C163v61Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C16__9S19426C15__9S19426C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19426C163v56Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v57Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v58Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v59Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v60Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v61Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__9S19426C15__9S19426C12[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C15D1Ev,_ZTvn4_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C15D0Ev,_ZTvn4_n12_N9S19426C15D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__9S19426C15__9S19426C12[] = {
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C15D1Ev,_ZTvn4_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C15D0Ev,_ZTvn4_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C3__9S19426C15__9S19426C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN9S19426C143v42Ev();
extern void _ZN9S19426C143v43Ev();
extern void _ZN9S19426C143v44Ev();
extern void _ZN9S19426C143v45Ev();
extern void _ZN9S19426C143v46Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C14__9S19426C15__9S19426C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,44),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v45Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v46Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C15D1Ev,_ZTvn4_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C15D0Ev,_ZTvn4_n12_N9S19426C15D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C49S19426C14__A4__9S19426C15__9S19426C12[] = {
  ABISELECT(72,40),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C15D1Ev,_ZTvn4_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C15D0Ev,_ZTvn4_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void _ZN9S19426C113v24Ev();
extern void _ZN9S19426C113v25Ev();
extern void _ZN9S19426C113v26Ev();
extern void _ZN9S19426C113v27Ev();
extern void _ZN9S19426C113v28Ev();
extern void _ZN9S19426C113v29Ev();
extern void _ZN9S19426C113v30Ev();
extern void _ZN9S19426C113v31Ev();
extern void ABISELECT(_ZThn8_N9S19426C15D1Ev,_ZThn4_N9S19426C15D1Ev)();
extern void ABISELECT(_ZThn8_N9S19426C15D0Ev,_ZThn4_N9S19426C15D0Ev)();
extern void _ZN9S19426C183v65Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C18__9S19426C15__9S19426C12[] = {
  ABISELECT(-8,-4),
  0,
  ABISELECT(-88,-48),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&_ZN9S19426C113v24Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v25Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v31Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19426C15D1Ev,_ZThn4_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19426C15D0Ev,_ZThn4_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19426C183v65Ev,
};
static  VTT_ENTRY vtt_S19426C12[] = {
  {&(_ZTV9S19426C12[11]),  11,194},
  {&(_tg__ZTV8S19426C7__9S19426C12[3]),  3,9},
  {&(_tg__ZTV8S19426C4__8S19426C7__9S19426C12[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C7__9S19426C12[2]),  2,5},
  {&(_ZTV9S19426C12[47]),  47,194},
  {&(_ZTV9S19426C12[100]),  100,194},
  {&(_ZTV9S19426C12[71]),  71,194},
  {&(_ZTV9S19426C12[84]),  84,194},
  {&(_ZTV9S19426C12[100]),  100,194},
  {&(_ZTV9S19426C12[117]),  117,194},
  {&(_ZTV9S19426C12[125]),  125,194},
  {&(_ZTV9S19426C12[145]),  145,194},
  {&(_ZTV9S19426C12[186]),  186,194},
  {&(_ZTV9S19426C12[145]),  145,194},
  {&(_ZTV9S19426C12[166]),  166,194},
  {&(_ZTV9S19426C12[166]),  166,194},
  {&(_tg__ZTV9S19426C13__9S19426C12[6]),  6,18},
  {&(_tg__ZTV8S19426C3__9S19426C13__9S19426C12[13]),  13,23},
  {&(_tg__ZTV9S19426C14__9S19426C13__9S19426C12[12]),  12,23},
  {&(_tg__ZTV11S19426C6_nt8S19426C49S19426C14__A2__9S19426C13__9S19426C12[2]),  2,5},
  {&(_tg__ZTV8S19426C3__9S19426C13__9S19426C12[13]),  13,23},
  {&(_tg__ZTV8S19426C4__A1__9S19426C13__9S19426C12[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A4__9S19426C13__9S19426C12[2]),  2,5},
  {&(_tg__ZTV8S19426C3__9S19426C12[7]),  7,17},
  {&(_tg__ZTV8S19426C4__8S19426C3__9S19426C12[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C3__9S19426C12[2]),  2,5},
  {&(_tg__ZTV8S19426C3__9S19426C12[7]),  7,17},
  {&(_tg__ZTV9S19426C15__9S19426C12[11]),  11,19},
  {&(_tg__ZTV9S19426C179S19426C15__9S19426C12[9]),  9,15},
  {&(_tg__ZTV8S19426C4__9S19426C179S19426C15__9S19426C12[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__9S19426C179S19426C15__9S19426C12[2]),  2,5},
  {&(_tg__ZTV8S19426C3__9S19426C179S19426C15__9S19426C12[13]),  13,23},
  {&(_tg__ZTV9S19426C14__9S19426C179S19426C15__9S19426C12[12]),  12,23},
  {&(_tg__ZTV11S19426C6_nt8S19426C49S19426C14__A4__9S19426C179S19426C15__9S19426C12[2]),  2,5},
  {&(_tg__ZTV8S19426C3__9S19426C179S19426C15__9S19426C12[13]),  13,23},
  {&(_tg__ZTV9S19426C179S19426C15__9S19426C12[9]),  9,15},
  {&(_tg__ZTV9S19426C189S19426C15__9S19426C12[13]),  13,24},
  {&(_tg__ZTV9S19426C14__9S19426C189S19426C15__9S19426C12[12]),  12,23},
  {&(_tg__ZTV11S19426C6_nt8S19426C49S19426C14__A1__9S19426C189S19426C15__9S19426C12[2]),  2,5},
  {&(_tg__ZTV9S19426C189S19426C15__9S19426C12[13]),  13,24},
  {&(_tg__ZTV11S19426C6_nt__A2__9S19426C189S19426C15__9S19426C12[4]),  4,7},
  {&(_tg__ZTV9S19426C16__9S19426C15__9S19426C12[9]),  9,17},
  {&(_tg__ZTV8S19426C4__9S19426C15__9S19426C12[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__9S19426C15__9S19426C12[2]),  2,5},
  {&(_tg__ZTV8S19426C3__9S19426C15__9S19426C12[13]),  13,23},
  {&(_tg__ZTV9S19426C14__9S19426C15__9S19426C12[12]),  12,23},
  {&(_tg__ZTV11S19426C6_nt8S19426C49S19426C14__A4__9S19426C15__9S19426C12[2]),  2,5},
  {&(_tg__ZTV8S19426C3__9S19426C15__9S19426C12[13]),  13,23},
  {&(_tg__ZTV9S19426C15__9S19426C12[11]),  11,19},
  {&(_tg__ZTV9S19426C18__9S19426C15__9S19426C12[13]),  13,24},
  {&(_tg__ZTV9S19426C18__9S19426C15__9S19426C12[13]),  13,24},
};
extern VTBL_ENTRY _ZTI9S19426C12[];
extern  VTBL_ENTRY _ZTV9S19426C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19426C12[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev), // 
  (VTBL_ENTRY)_ZN9S19426C17D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev), // 
  (VTBL_ENTRY)_ZN9S19426C17D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19426C15D0Ev,_ZThn20_N9S19426C15D0Ev),
  (VTBL_ENTRY)_ZN9S19426C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19426C15D1Ev,_ZThn20_N9S19426C15D1Ev),
  (VTBL_ENTRY)_ZN9S19426C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19426C3D0Ev,_ZThn16_N8S19426C3D0Ev),
  (VTBL_ENTRY)_ZN8S19426C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19426C3D1Ev,_ZThn16_N8S19426C3D1Ev),
  (VTBL_ENTRY)_ZN8S19426C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19426C13D0Ev,_ZThn44_N9S19426C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19426C13D0Ev,_ZThn8_N9S19426C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19426C13D0Ev,_ZThn28_N9S19426C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19426C13D1Ev,_ZThn44_N9S19426C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19426C13D1Ev,_ZThn8_N9S19426C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19426C13D1Ev,_ZThn28_N9S19426C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C7D0Ev,_ZTv0_n12_N8S19426C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19426C7D0Ev,_ZThn76_N8S19426C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C7D1Ev,_ZTv0_n12_N8S19426C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19426C7D1Ev,_ZThn76_N8S19426C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19426C12D0Ev,_ZThn104_N9S19426C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19426C12D0Ev,_ZThn84_N9S19426C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19426C12D0Ev,_ZThn76_N9S19426C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19426C12D0Ev,_ZThn60_N9S19426C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19426C12D0Ev,_ZThn40_N9S19426C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19426C12D1Ev,_ZThn104_N9S19426C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19426C12D1Ev,_ZThn84_N9S19426C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19426C12D1Ev,_ZThn76_N9S19426C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19426C12D1Ev,_ZThn60_N9S19426C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19426C12D1Ev,_ZThn40_N9S19426C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19426C12D0Ev,_ZTv0_n28_N9S19426C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19426C12D0Ev,_ZThn32_N9S19426C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19426C12D1Ev,_ZTv0_n28_N9S19426C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19426C12D1Ev,_ZThn32_N9S19426C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19426C12 = {  "S19426C12", // class name
  bases_S19426C12, 25,
  &(vtc_S19426C12[0]), // expected_vtbl_contents
  &(vtt_S19426C12[0]), // expected_vtt_contents
  ABISELECT(200,112), // object size
  NSPAIRA(_ZTI9S19426C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19426C12),194, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19426C12),51, //virtual table table var
  25, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19426C1  : virtual S19426C2 , S19426C10 , S19426C12 {
  int s19426c1f0;
  virtual void  v1(); // _ZN8S19426C12v1Ev
  virtual void  v2(); // _ZN8S19426C12v2Ev
  virtual void  v3(); // _ZN8S19426C12v3Ev
  virtual void  v4(); // _ZN8S19426C12v4Ev
  virtual void  v5(); // _ZN8S19426C12v5Ev
  virtual void  v6(); // _ZN8S19426C12v6Ev
  ~S19426C1(); // tgen
  S19426C1(); // tgen
};
//SIG(1 S19426C1) C1{ VBC2{ BC3{ VBC4{ BC5{ BC6{ vd v7} vd v8} BC6 vd v9 v10} VBC5 vd v11 v12 v13 v14 v15 v16 Fi Fc Fi} BC7{ VBC4 v17 v18 v19 v20 Fi[2] Fp} VBC8{ BC4 BC3 BC6 v21 v22 FU9{ m}} v23} BC10{ VBC11{ v24 v25 v26 v27 v28 v29 v30 v31} vd v32 v33 v34 v35 v36 v37 v38 v39 v40 v41} BC12{ VBC13{ VBC5 VBC14{ BC4 vd v42 v43 v44 v45 v46 FC4 FC6} VBC3 BC6 vd v47 v48 v49 v50 v51 v52 v53 v54 v55 Fs} BC7 VBC15{ VBC16{ vd v56 v57 v58 v59 v60 v61 Fi} VBC4 BC17{ VBC4 VBC5 VBC14 VBC3 VBC6 v62 v63 v64} BC18{ VBC14 VBC11 VBC6 vd v65} v66 v67 Fp Fi Fc} BC4 vd Fi Fp} v1 v2 v3 v4 v5 v6 Fi}


void  S19426C1 ::v1(){vfunc_called(this, "_ZN8S19426C12v1Ev");}
void  S19426C1 ::v2(){vfunc_called(this, "_ZN8S19426C12v2Ev");}
void  S19426C1 ::v3(){vfunc_called(this, "_ZN8S19426C12v3Ev");}
void  S19426C1 ::v4(){vfunc_called(this, "_ZN8S19426C12v4Ev");}
void  S19426C1 ::v5(){vfunc_called(this, "_ZN8S19426C12v5Ev");}
void  S19426C1 ::v6(){vfunc_called(this, "_ZN8S19426C12v6Ev");}
S19426C1 ::~S19426C1(){ note_dtor("S19426C1", this);} // tgen
S19426C1 ::S19426C1(){ note_ctor("S19426C1", this);} // tgen

static void Test_S19426C1()
{
  extern Class_Descriptor cd_S19426C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,47)];
    init_test(&cd_S19426C1, buf);
    S19426C1 *dp, &lv = *(dp=new (buf) S19426C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,184), "sizeof(S19426C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19426C1)");
    /*is_ambiguous_... S19426C1::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*), ABISELECT(120,72), "S19426C1");
    /*is_ambiguous_... S19426C1::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*), ABISELECT(120,72), "S19426C1");
    /*is_ambiguous_... S19426C1::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*), ABISELECT(128,76), "S19426C1");
    /*is_ambiguous_... S19426C2::S19426C3 */ AMB_check_base_class_offset(lv, (S19426C4*)(S19426C3*)(S19426C2*), ABISELECT(120,72), "S19426C1");
    check_base_class_offset(lv, (S19426C4*)(S19426C7*)(S19426C2*), ABISELECT(120,72), "S19426C1");
    check_base_class_offset(lv, (S19426C4*)(S19426C3*)(S19426C8*), ABISELECT(120,72), "S19426C1");
    /*is_ambiguous_... S19426C1::S19426C3 */ AMB_check_base_class_offset(lv, (S19426C4*)(S19426C3*), ABISELECT(120,72), "S19426C1");
    check_base_class_offset(lv, (S19426C4*)(S19426C7*)(S19426C12*), ABISELECT(120,72), "S19426C1");
    /*is_ambiguous_... S19426C15::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C4*)(S19426C15*), ABISELECT(120,72), "S19426C1");
    /*is_ambiguous_... S19426C17::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C4*)(S19426C17*)(S19426C15*), ABISELECT(120,72), "S19426C1");
    /*is_ambiguous_... S19426C1::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*), ABISELECT(72,40), "S19426C1");
    /*is_ambiguous_... S19426C2::S19426C3 */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C3*)(S19426C2*), ABISELECT(72,40), "S19426C1");
    /*is_ambiguous_... S19426C3::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C3*)(S19426C8*), ABISELECT(72,40), "S19426C1");
    /*is_ambiguous_... S19426C13::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C13*), ABISELECT(72,40), "S19426C1");
    /*is_ambiguous_... S19426C1::S19426C3 */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C3*), ABISELECT(72,40), "S19426C1");
    /*is_ambiguous_... S19426C17::S19426C5_nt */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C17*)(S19426C15*), ABISELECT(72,40), "S19426C1");
    /*is_ambiguous_... S19426C2::S19426C3 */ AMB_check_base_class_offset(lv, (S19426C3*)(S19426C2*), ABISELECT(72,40), "S19426C1");
    check_base_class_offset(lv, (S19426C7*)(S19426C2*), ABISELECT(96,56), "S19426C1");
    /*is_ambiguous_... S19426C8::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*)(S19426C8*), ABISELECT(136,80), "S19426C1");
    /*is_ambiguous_... S19426C8::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*)(S19426C8*), ABISELECT(136,80), "S19426C1");
    /*is_ambiguous_... S19426C8::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*)(S19426C8*), ABISELECT(144,84), "S19426C1");
    /*is_ambiguous_... S19426C8::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C4*)(S19426C8*), ABISELECT(136,80), "S19426C1");
    check_base_class_offset(lv, (S19426C3*)(S19426C8*), ABISELECT(152,88), "S19426C1");
    /*is_ambiguous_... S19426C8::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C8*), ABISELECT(176,104), "S19426C1");
    check_base_class_offset(lv, (S19426C8*)(S19426C2*), ABISELECT(136,80), "S19426C1");
    check_base_class_offset(lv, (S19426C2*), ABISELECT(72,40), "S19426C1");
    check_base_class_offset(lv, (S19426C11*)(S19426C10*), 0, "S19426C1");
    check_base_class_offset(lv, (S19426C11*)(S19426C18*)(S19426C15*), 0, "S19426C1");
    check_base_class_offset(lv, (S19426C10*), 0, "S19426C1");
    check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*)(S19426C14*), ABISELECT(208,120), "S19426C1");
    check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*)(S19426C14*), ABISELECT(208,120), "S19426C1");
    /*is_ambiguous_... S19426C4::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*)(S19426C14*), ABISELECT(216,124), "S19426C1");
    check_base_class_offset(lv, (S19426C4*)(S19426C14*), ABISELECT(208,120), "S19426C1");
    check_base_class_offset(lv, (S19426C14*)(S19426C13*), ABISELECT(208,120), "S19426C1");
    check_base_class_offset(lv, (S19426C14*)(S19426C17*)(S19426C15*), ABISELECT(208,120), "S19426C1");
    check_base_class_offset(lv, (S19426C14*)(S19426C18*)(S19426C15*), ABISELECT(208,120), "S19426C1");
    check_base_class_offset(lv, (S19426C3*)(S19426C13*), ABISELECT(248,140), "S19426C1");
    check_base_class_offset(lv, (S19426C3*)(S19426C17*)(S19426C15*), ABISELECT(248,140), "S19426C1");
    /*is_ambiguous_... S19426C13::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C13*), ABISELECT(192,112), "S19426C1");
    check_base_class_offset(lv, (S19426C13*)(S19426C12*), ABISELECT(192,112), "S19426C1");
    check_base_class_offset(lv, (S19426C7*)(S19426C12*), ABISELECT(8,4), "S19426C1");
    check_base_class_offset(lv, (S19426C16*)(S19426C15*), ABISELECT(304,176), "S19426C1");
    /*is_ambiguous_... S19426C17::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C17*)(S19426C15*), ABISELECT(272,156), "S19426C1");
    /*is_ambiguous_... S19426C18::S19426C6_nt */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C18*)(S19426C15*), ABISELECT(272,156), "S19426C1");
    check_base_class_offset(lv, (S19426C17*)(S19426C15*), ABISELECT(272,156), "S19426C1");
    check_base_class_offset(lv, (S19426C18*)(S19426C15*), ABISELECT(280,160), "S19426C1");
    check_base_class_offset(lv, (S19426C15*)(S19426C12*), ABISELECT(272,156), "S19426C1");
    /*is_ambiguous_... S19426C12::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C5_nt*)(S19426C4*)(S19426C12*), ABISELECT(32,20), "S19426C1");
    /*is_ambiguous_... S19426C12::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C5_nt*)(S19426C4*)(S19426C12*), ABISELECT(32,20), "S19426C1");
    /*is_ambiguous_... S19426C12::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C6_nt*)(S19426C4*)(S19426C12*), ABISELECT(40,24), "S19426C1");
    /*is_ambiguous_... S19426C12::S19426C4 */ AMB_check_base_class_offset(lv, (S19426C4*)(S19426C12*), ABISELECT(32,20), "S19426C1");
    check_base_class_offset(lv, (S19426C12*), ABISELECT(8,4), "S19426C1");
    check_field_offset(lv, s19426c1f0, ABISELECT(64,36), "S19426C1.s19426c1f0");
    test_class_info(&lv, &cd_S19426C1);
    dp->~S19426C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19426C1(Test_S19426C1, "S19426C1", ABISELECT(320,184));

#else // __cplusplus

extern void _ZN8S19426C1C1Ev();
extern void _ZN8S19426C1D1Ev();
Name_Map name_map_S19426C1[] = {
  NSPAIR(_ZN8S19426C1C1Ev),
  NSPAIR(_ZN8S19426C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C3;
extern VTBL_ENTRY _ZTI8S19426C3[];
extern  VTBL_ENTRY _ZTV8S19426C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C3[];
extern Class_Descriptor cd_S19426C7;
extern VTBL_ENTRY _ZTI8S19426C7[];
extern  VTBL_ENTRY _ZTV8S19426C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C7[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
extern Class_Descriptor cd_S19426C3;
extern VTBL_ENTRY _ZTI8S19426C3[];
extern  VTBL_ENTRY _ZTV8S19426C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C3[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C8;
extern VTBL_ENTRY _ZTI8S19426C8[];
extern  VTBL_ENTRY _ZTV8S19426C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C8[];
extern Class_Descriptor cd_S19426C2;
extern VTBL_ENTRY _ZTI8S19426C2[];
extern  VTBL_ENTRY _ZTV8S19426C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C2[];
extern Class_Descriptor cd_S19426C11;
extern VTBL_ENTRY _ZTI9S19426C11[];
extern  VTBL_ENTRY _ZTV9S19426C11[];
extern Class_Descriptor cd_S19426C10;
extern VTBL_ENTRY _ZTI9S19426C10[];
extern  VTBL_ENTRY _ZTV9S19426C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19426C10[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
extern Class_Descriptor cd_S19426C14;
extern VTBL_ENTRY _ZTI9S19426C14[];
extern  VTBL_ENTRY _ZTV9S19426C14[];
extern Class_Descriptor cd_S19426C3;
extern VTBL_ENTRY _ZTI8S19426C3[];
extern  VTBL_ENTRY _ZTV8S19426C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C3[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C13;
extern VTBL_ENTRY _ZTI9S19426C13[];
extern  VTBL_ENTRY _ZTV9S19426C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19426C13[];
extern Class_Descriptor cd_S19426C7;
extern VTBL_ENTRY _ZTI8S19426C7[];
extern  VTBL_ENTRY _ZTV8S19426C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C7[];
extern Class_Descriptor cd_S19426C16;
extern VTBL_ENTRY _ZTI9S19426C16[];
extern  VTBL_ENTRY _ZTV9S19426C16[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C17;
extern VTBL_ENTRY _ZTI9S19426C17[];
extern  VTBL_ENTRY _ZTV9S19426C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19426C17[];
extern Class_Descriptor cd_S19426C18;
extern VTBL_ENTRY _ZTI9S19426C18[];
extern  VTBL_ENTRY _ZTV9S19426C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19426C18[];
extern Class_Descriptor cd_S19426C15;
extern VTBL_ENTRY _ZTI9S19426C15[];
extern  VTBL_ENTRY _ZTV9S19426C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19426C15[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C5_nt;
extern VTBL_ENTRY _ZTI11S19426C5_nt[];
extern  VTBL_ENTRY _ZTV11S19426C5_nt[];
extern Class_Descriptor cd_S19426C6_nt;
extern VTBL_ENTRY _ZTI11S19426C6_nt[];
extern  VTBL_ENTRY _ZTV11S19426C6_nt[];
extern Class_Descriptor cd_S19426C4;
extern VTBL_ENTRY _ZTI8S19426C4[];
extern  VTBL_ENTRY _ZTV8S19426C4[];
extern Class_Descriptor cd_S19426C12;
extern VTBL_ENTRY _ZTI9S19426C12[];
extern  VTBL_ENTRY _ZTV9S19426C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19426C12[];
static Base_Class bases_S19426C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19426C6_nt,    ABISELECT(120,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
  0, 0},
  {&cd_S19426C5_nt,    ABISELECT(120,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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(128,76), //bcp->offset
    129, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19426C4,    ABISELECT(120,72), //bcp->offset
    116, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19426C6_nt,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19426C3,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19426C7,    ABISELECT(96,56), //bcp->offset
    107, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(136,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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    ABISELECT(136,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
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(144,84), //bcp->offset
    159, //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
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19426C4,    ABISELECT(136,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
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19426C3,    ABISELECT(152,88), //bcp->offset
    164, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(176,104), //bcp->offset
    181, //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
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19426C8,    ABISELECT(136,80), //bcp->offset
    134, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19426C2,    ABISELECT(72,40), //bcp->offset
    77, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19426C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19426C10,    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
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19426C6_nt,    ABISELECT(208,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
    18, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    ABISELECT(208,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
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(216,124), //bcp->offset
    238, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19426C4,    ABISELECT(208,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
    21, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19426C14,    ABISELECT(208,120), //bcp->offset
    215, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19426C3,    ABISELECT(248,140), //bcp->offset
    243, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19426C6_nt,    ABISELECT(192,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
    24, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19426C13,    ABISELECT(192,112), //bcp->offset
    186, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S19426C7,    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
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19426C16,    ABISELECT(304,176), //bcp->offset
    315, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S19426C6_nt,    ABISELECT(272,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S19426C17,    ABISELECT(272,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19426C18,    ABISELECT(280,160), //bcp->offset
    291, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    84, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19426C15,    ABISELECT(272,156), //bcp->offset
    266, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S19426C6_nt,    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
    33, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19426C5_nt,    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
    34, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19426C6_nt,    ABISELECT(40,24), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19426C4,    ABISELECT(32,20), //bcp->offset
    64, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19426C12,    ABISELECT(8,4), //bcp->offset
    47, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19426C1[];
extern void _ZN9S19426C113v24Ev();
extern void _ZN9S19426C113v25Ev();
extern void _ZN9S19426C113v26Ev();
extern void _ZN9S19426C113v27Ev();
extern void _ZN9S19426C113v28Ev();
extern void _ZN9S19426C113v29Ev();
extern void _ZN9S19426C113v30Ev();
extern void _ZN9S19426C113v31Ev();
extern void _ZN8S19426C1D1Ev();
extern void _ZN8S19426C1D0Ev();
extern void _ZN9S19426C103v32Ev();
extern void _ZN9S19426C103v33Ev();
extern void _ZN9S19426C103v34Ev();
extern void _ZN9S19426C103v35Ev();
extern void _ZN9S19426C103v36Ev();
extern void _ZN9S19426C103v37Ev();
extern void _ZN9S19426C103v38Ev();
extern void _ZN9S19426C103v39Ev();
extern void _ZN9S19426C103v40Ev();
extern void _ZN9S19426C103v41Ev();
extern void _ZN8S19426C12v1Ev();
extern void _ZN8S19426C12v2Ev();
extern void _ZN8S19426C12v3Ev();
extern void _ZN8S19426C12v4Ev();
extern void _ZN8S19426C12v5Ev();
extern void _ZN8S19426C12v6Ev();
extern void _ZN8S19426C73v17Ev();
extern void _ZN8S19426C73v18Ev();
extern void _ZN8S19426C73v19Ev();
extern void _ZN8S19426C73v20Ev();
extern void ABISELECT(_ZThn8_N8S19426C1D1Ev,_ZThn4_N8S19426C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19426C1D0Ev,_ZThn4_N8S19426C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S19426C1D1Ev,_ZThn20_N8S19426C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19426C1D0Ev,_ZThn20_N8S19426C1D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void ABISELECT(_ZThn40_N8S19426C1D1Ev,_ZThn24_N8S19426C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S19426C1D0Ev,_ZThn24_N8S19426C1D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void ABISELECT(_ZTv0_n24_N8S19426C1D1Ev,_ZTv0_n12_N8S19426C1D1Ev)();
extern void ABISELECT(_ZThn72_N8S19426C1D1Ev,_ZThn40_N8S19426C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C1D0Ev,_ZTv0_n12_N8S19426C1D0Ev)();
extern void ABISELECT(_ZThn72_N8S19426C1D0Ev,_ZThn40_N8S19426C1D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
extern void _ZN8S19426C23v23Ev();
extern void _ZN8S19426C73v17Ev();
extern void _ZN8S19426C73v18Ev();
extern void _ZN8S19426C73v19Ev();
extern void _ZN8S19426C73v20Ev();
extern void ABISELECT(_ZTvn24_n24_N8S19426C1D1Ev,_ZTvn16_n12_N8S19426C1D1Ev)();
extern void ABISELECT(_ZTvn24_n24_N8S19426C1D0Ev,_ZTvn16_n12_N8S19426C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19426C1D1Ev,_ZTv0_n12_N8S19426C1D1Ev)();
extern void ABISELECT(_ZThn120_N8S19426C1D1Ev,_ZThn72_N8S19426C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C1D0Ev,_ZTv0_n12_N8S19426C1D0Ev)();
extern void ABISELECT(_ZThn120_N8S19426C1D0Ev,_ZThn72_N8S19426C1D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19426C1D1Ev,_ZTvn4_n12_N8S19426C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C1D0Ev,_ZTvn4_n12_N8S19426C1D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void ABISELECT(_ZTv0_n40_N8S19426C1D1Ev,_ZTv0_n20_N8S19426C1D1Ev)();
extern void ABISELECT(_ZThn136_N8S19426C1D1Ev,_ZThn80_N8S19426C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19426C1D0Ev,_ZTv0_n20_N8S19426C1D0Ev)();
extern void ABISELECT(_ZThn136_N8S19426C1D0Ev,_ZThn80_N8S19426C1D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN8S19426C83v21Ev();
extern void _ZN8S19426C83v22Ev();
extern void ABISELECT(_ZTvn8_n40_N8S19426C1D1Ev,_ZTvn4_n20_N8S19426C1D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S19426C1D0Ev,_ZTvn4_n20_N8S19426C1D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void ABISELECT(_ZTv0_n24_N8S19426C1D1Ev,_ZTv0_n12_N8S19426C1D1Ev)();
extern void ABISELECT(_ZThn152_N8S19426C1D1Ev,_ZThn88_N8S19426C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C1D0Ev,_ZTv0_n12_N8S19426C1D0Ev)();
extern void ABISELECT(_ZThn152_N8S19426C1D0Ev,_ZThn88_N8S19426C1D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
extern void ABISELECT(_ZTvn40_n40_N8S19426C1D1Ev,_ZTvn24_n20_N8S19426C1D1Ev)();
extern void ABISELECT(_ZTvn40_n40_N8S19426C1D0Ev,_ZTvn24_n20_N8S19426C1D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void ABISELECT(_ZTv0_n56_N8S19426C1D1Ev,_ZTv0_n28_N8S19426C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S19426C1D1Ev,_ZThn112_N8S19426C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19426C1D0Ev,_ZTv0_n28_N8S19426C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S19426C1D0Ev,_ZThn112_N8S19426C1D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN9S19426C133v47Ev();
extern void _ZN9S19426C133v48Ev();
extern void _ZN9S19426C133v49Ev();
extern void _ZN9S19426C133v50Ev();
extern void _ZN9S19426C133v51Ev();
extern void _ZN9S19426C133v52Ev();
extern void _ZN9S19426C133v53Ev();
extern void _ZN9S19426C133v54Ev();
extern void _ZN9S19426C133v55Ev();
extern void ABISELECT(_ZTv0_n24_N8S19426C1D1Ev,_ZTv0_n12_N8S19426C1D1Ev)();
extern void ABISELECT(_ZThn208_N8S19426C1D1Ev,_ZThn120_N8S19426C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C1D0Ev,_ZTv0_n12_N8S19426C1D0Ev)();
extern void ABISELECT(_ZThn208_N8S19426C1D0Ev,_ZThn120_N8S19426C1D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN9S19426C143v42Ev();
extern void _ZN9S19426C143v43Ev();
extern void _ZN9S19426C143v44Ev();
extern void _ZN9S19426C143v45Ev();
extern void _ZN9S19426C143v46Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19426C1D1Ev,_ZTvn4_n12_N8S19426C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C1D0Ev,_ZTvn4_n12_N8S19426C1D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void ABISELECT(_ZTv0_n24_N8S19426C1D1Ev,_ZTv0_n12_N8S19426C1D1Ev)();
extern void ABISELECT(_ZThn248_N8S19426C1D1Ev,_ZThn140_N8S19426C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C1D0Ev,_ZTv0_n12_N8S19426C1D0Ev)();
extern void ABISELECT(_ZThn248_N8S19426C1D0Ev,_ZThn140_N8S19426C1D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S19426C1D1Ev,_ZTv0_n12_N8S19426C1D1Ev)();
extern void ABISELECT(_ZThn272_N8S19426C1D1Ev,_ZThn156_N8S19426C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C1D0Ev,_ZTv0_n12_N8S19426C1D0Ev)();
extern void ABISELECT(_ZThn272_N8S19426C1D0Ev,_ZThn156_N8S19426C1D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN9S19426C173v62Ev();
extern void _ZN9S19426C173v63Ev();
extern void _ZN9S19426C173v64Ev();
extern void _ZN9S19426C153v66Ev();
extern void _ZN9S19426C153v67Ev();
extern void _ZN9S19426C113v24Ev();
extern void _ZN9S19426C113v25Ev();
extern void _ZN9S19426C113v26Ev();
extern void _ZN9S19426C113v27Ev();
extern void _ZN9S19426C113v28Ev();
extern void _ZN9S19426C113v29Ev();
extern void _ZN9S19426C113v30Ev();
extern void _ZN9S19426C113v31Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19426C1D1Ev,_ZTvn4_n12_N8S19426C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C1D0Ev,_ZTvn4_n12_N8S19426C1D0Ev)();
extern void _ZN9S19426C183v65Ev();
extern void ABISELECT(_ZTv0_n24_N8S19426C1D1Ev,_ZTv0_n12_N8S19426C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S19426C1D1Ev,_ZThn176_N8S19426C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C1D0Ev,_ZTv0_n12_N8S19426C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S19426C1D0Ev,_ZThn176_N8S19426C1D0Ev)() __attribute__((weak));
extern void _ZN9S19426C163v56Ev();
extern void _ZN9S19426C163v57Ev();
extern void _ZN9S19426C163v58Ev();
extern void _ZN9S19426C163v59Ev();
extern void _ZN9S19426C163v60Ev();
extern void _ZN9S19426C163v61Ev();
static  VTBL_ENTRY vtc_S19426C1[] = {
  ABISELECT(272,156),
  ABISELECT(304,176),
  ABISELECT(272,156),
  ABISELECT(248,140),
  ABISELECT(208,120),
  ABISELECT(192,112),
  ABISELECT(136,80),
  ABISELECT(72,40),
  ABISELECT(120,72),
  ABISELECT(72,40),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&_ZN9S19426C113v24Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v25Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v31Ev,
  (VTBL_ENTRY)&_ZN8S19426C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19426C1D0Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v32Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v33Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v34Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v35Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v36Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v37Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v38Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v39Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v40Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v41Ev,
  (VTBL_ENTRY)&_ZN8S19426C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19426C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19426C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19426C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19426C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19426C12v6Ev,
  ABISELECT(-8,-4),
  ABISELECT(264,152),
  ABISELECT(296,172),
  ABISELECT(264,152),
  ABISELECT(240,136),
  ABISELECT(200,116),
  ABISELECT(64,36),
  ABISELECT(184,108),
  ABISELECT(112,68),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&_ZN8S19426C73v17Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v18Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19426C1D1Ev,_ZThn4_N8S19426C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19426C1D0Ev,_ZThn4_N8S19426C1D0Ev),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19426C1D1Ev,_ZThn20_N8S19426C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19426C1D0Ev,_ZThn20_N8S19426C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S19426C1D1Ev,_ZThn24_N8S19426C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S19426C1D0Ev,_ZThn24_N8S19426C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  ABISELECT(24,16),
  ABISELECT(24,16),
  ABISELECT(24,16),
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,40),
  0,
  ABISELECT(48,32),
  0,
  0,
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C1D1Ev,_ZTv0_n12_N8S19426C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C1D0Ev,_ZTv0_n12_N8S19426C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19426C23v23Ev,
  ABISELECT(24,16),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&_ZN8S19426C73v17Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v18Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n24_N8S19426C1D1Ev,_ZTvn16_n12_N8S19426C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n24_N8S19426C1D0Ev,_ZTvn16_n12_N8S19426C1D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-120,-72),
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C1D1Ev,_ZTv0_n12_N8S19426C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C1D0Ev,_ZTv0_n12_N8S19426C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C1D1Ev,_ZTvn4_n12_N8S19426C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C1D0Ev,_ZTvn4_n12_N8S19426C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-80),
  ABISELECT(-64,-40),
  ABISELECT(-16,-8),
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19426C1D1Ev,_ZTv0_n20_N8S19426C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19426C1D0Ev,_ZTv0_n20_N8S19426C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19426C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19426C83v22Ev,
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S19426C1D1Ev,_ZTvn4_n20_N8S19426C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S19426C1D0Ev,_ZTvn4_n20_N8S19426C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  ABISELECT(-80,-48),
  ABISELECT(-32,-16),
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  ABISELECT(-152,-88),
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C1D1Ev,_ZTv0_n12_N8S19426C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C1D0Ev,_ZTv0_n12_N8S19426C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n40_N8S19426C1D1Ev,_ZTvn24_n20_N8S19426C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n40_N8S19426C1D0Ev,_ZTvn24_n20_N8S19426C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(-72,-40),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-120,-72),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19426C1D1Ev,_ZTv0_n28_N8S19426C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19426C1D0Ev,_ZTv0_n28_N8S19426C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v47Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v48Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v49Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v50Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v51Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v52Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v53Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v54Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v55Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-120),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C1D1Ev,_ZTv0_n12_N8S19426C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C1D0Ev,_ZTv0_n12_N8S19426C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v45Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v46Ev,
  ABISELECT(-216,-124),
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C1D1Ev,_ZTvn4_n12_N8S19426C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C1D0Ev,_ZTvn4_n12_N8S19426C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-100),
  ABISELECT(-128,-68),
  ABISELECT(-176,-100),
  ABISELECT(-176,-100),
  ABISELECT(-248,-140),
  ABISELECT(-248,-140),
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C1D1Ev,_ZTv0_n12_N8S19426C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C1D0Ev,_ZTv0_n12_N8S19426C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-272,-156),
  ABISELECT(32,20),
  0,
  ABISELECT(-24,-16),
  ABISELECT(-64,-36),
  ABISELECT(-200,-116),
  ABISELECT(-152,-84),
  0,
  ABISELECT(-272,-156),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C1D1Ev,_ZTv0_n12_N8S19426C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C1D0Ev,_ZTv0_n12_N8S19426C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v62Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v63Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v64Ev,
  (VTBL_ENTRY)&_ZN9S19426C153v66Ev,
  (VTBL_ENTRY)&_ZN9S19426C153v67Ev,
  ABISELECT(-8,-4),
  ABISELECT(-280,-160),
  ABISELECT(-72,-40),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&_ZN9S19426C113v24Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v25Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v31Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C1D1Ev,_ZTvn4_n12_N8S19426C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C1D0Ev,_ZTvn4_n12_N8S19426C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19426C183v65Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S19426C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C1D1Ev,_ZTv0_n12_N8S19426C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C1D0Ev,_ZTv0_n12_N8S19426C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19426C163v56Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v57Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v58Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v59Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v60Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v61Ev,
};
extern VTBL_ENTRY _ZTV8S19426C1[];
extern void _ZN9S19426C113v24Ev();
extern void _ZN9S19426C113v25Ev();
extern void _ZN9S19426C113v26Ev();
extern void _ZN9S19426C113v27Ev();
extern void _ZN9S19426C113v28Ev();
extern void _ZN9S19426C113v29Ev();
extern void _ZN9S19426C113v30Ev();
extern void _ZN9S19426C113v31Ev();
extern void _ZN9S19426C10D1Ev();
extern void _ZN9S19426C10D0Ev();
extern void _ZN9S19426C103v32Ev();
extern void _ZN9S19426C103v33Ev();
extern void _ZN9S19426C103v34Ev();
extern void _ZN9S19426C103v35Ev();
extern void _ZN9S19426C103v36Ev();
extern void _ZN9S19426C103v37Ev();
extern void _ZN9S19426C103v38Ev();
extern void _ZN9S19426C103v39Ev();
extern void _ZN9S19426C103v40Ev();
extern void _ZN9S19426C103v41Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C10__8S19426C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C10[0]),
  (VTBL_ENTRY)&_ZN9S19426C113v24Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v25Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v31Ev,
  (VTBL_ENTRY)&_ZN9S19426C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19426C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v32Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v33Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v34Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v35Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v36Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v37Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v38Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v39Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v40Ev,
  (VTBL_ENTRY)&_ZN9S19426C103v41Ev,
};
extern void _ZN8S19426C73v17Ev();
extern void _ZN8S19426C73v18Ev();
extern void _ZN8S19426C73v19Ev();
extern void _ZN8S19426C73v20Ev();
extern void _ZN9S19426C12D1Ev();
extern void _ZN9S19426C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C12__8S19426C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(264,152),
  ABISELECT(296,172),
  ABISELECT(264,152),
  ABISELECT(240,136),
  ABISELECT(200,116),
  ABISELECT(64,36),
  ABISELECT(184,108),
  ABISELECT(112,68),
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&_ZN8S19426C73v17Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v18Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v20Ev,
  (VTBL_ENTRY)&_ZN9S19426C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19426C12D0Ev,
};
extern void _ZN8S19426C73v17Ev();
extern void _ZN8S19426C73v18Ev();
extern void _ZN8S19426C73v19Ev();
extern void _ZN8S19426C73v20Ev();
extern void _ZN8S19426C7D1Ev();
extern void _ZN8S19426C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C79S19426C12__A1__8S19426C1[] = {
  ABISELECT(112,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C7[0]),
  (VTBL_ENTRY)&_ZN8S19426C73v17Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v18Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19426C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19426C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C7D1Ev,_ZTv0_n12_N8S19426C7D1Ev)();
extern void ABISELECT(_ZThn112_N8S19426C7D1Ev,_ZThn68_N8S19426C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C7D0Ev,_ZTv0_n12_N8S19426C7D0Ev)();
extern void ABISELECT(_ZThn112_N8S19426C7D0Ev,_ZThn68_N8S19426C7D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__8S19426C79S19426C12__A1__8S19426C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S19426C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C7D1Ev,_ZTv0_n12_N8S19426C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C7D0Ev,_ZTv0_n12_N8S19426C7D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19426C7D1Ev,_ZTvn4_n12_N8S19426C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C7D0Ev,_ZTvn4_n12_N8S19426C7D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C79S19426C12__A1__8S19426C1[] = {
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI8S19426C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C7D1Ev,_ZTvn4_n12_N8S19426C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C7D0Ev,_ZTvn4_n12_N8S19426C7D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n56_N9S19426C12D1Ev,_ZTv0_n28_N9S19426C12D1Ev)();
extern void ABISELECT(_ZThn184_N9S19426C12D1Ev,_ZThn108_N9S19426C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19426C12D0Ev,_ZTv0_n28_N9S19426C12D0Ev)();
extern void ABISELECT(_ZThn184_N9S19426C12D0Ev,_ZThn108_N9S19426C12D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN9S19426C133v47Ev();
extern void _ZN9S19426C133v48Ev();
extern void _ZN9S19426C133v49Ev();
extern void _ZN9S19426C133v50Ev();
extern void _ZN9S19426C133v51Ev();
extern void _ZN9S19426C133v52Ev();
extern void _ZN9S19426C133v53Ev();
extern void _ZN9S19426C133v54Ev();
extern void _ZN9S19426C133v55Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C13__9S19426C12__8S19426C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-108),
  ABISELECT(-72,-40),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-120,-72),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19426C12D1Ev,_ZTv0_n28_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19426C12D0Ev,_ZTv0_n28_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v47Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v48Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v49Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v50Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v51Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v52Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v53Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v54Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v55Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev)();
extern void ABISELECT(_ZThn64_N9S19426C12D1Ev,_ZThn36_N9S19426C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev)();
extern void ABISELECT(_ZThn64_N9S19426C12D0Ev,_ZThn36_N9S19426C12D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C5_nt__9S19426C12__8S19426C1[] = {
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev)();
extern void ABISELECT(_ZThn200_N9S19426C12D1Ev,_ZThn116_N9S19426C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev)();
extern void ABISELECT(_ZThn200_N9S19426C12D0Ev,_ZThn116_N9S19426C12D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN9S19426C143v42Ev();
extern void _ZN9S19426C143v43Ev();
extern void _ZN9S19426C143v44Ev();
extern void _ZN9S19426C143v45Ev();
extern void _ZN9S19426C143v46Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C14__9S19426C12__8S19426C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-200,-116),
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v45Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v46Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C12D1Ev,_ZTvn4_n12_N9S19426C12D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C12D0Ev,_ZTvn4_n12_N9S19426C12D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C49S19426C14__A2__9S19426C12__8S19426C1[] = {
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C12D1Ev,_ZTvn4_n12_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C12D0Ev,_ZTvn4_n12_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev)();
extern void ABISELECT(_ZThn240_N9S19426C12D1Ev,_ZThn136_N9S19426C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev)();
extern void ABISELECT(_ZThn240_N9S19426C12D0Ev,_ZThn136_N9S19426C12D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C3__9S19426C12__8S19426C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-100),
  ABISELECT(-128,-68),
  ABISELECT(-176,-100),
  ABISELECT(-176,-100),
  ABISELECT(-240,-136),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev)();
extern void ABISELECT(_ZThn112_N9S19426C12D1Ev,_ZThn68_N9S19426C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev)();
extern void ABISELECT(_ZThn112_N9S19426C12D0Ev,_ZThn68_N9S19426C12D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__A1__9S19426C12__8S19426C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C12D1Ev,_ZTvn4_n12_N9S19426C12D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C12D0Ev,_ZTvn4_n12_N9S19426C12D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A4__9S19426C12__8S19426C1[] = {
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C12D1Ev,_ZTvn4_n12_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C12D0Ev,_ZTvn4_n12_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev)();
extern void ABISELECT(_ZThn264_N9S19426C12D1Ev,_ZThn152_N9S19426C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev)();
extern void ABISELECT(_ZThn264_N9S19426C12D0Ev,_ZThn152_N9S19426C12D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN9S19426C173v62Ev();
extern void _ZN9S19426C173v63Ev();
extern void _ZN9S19426C173v64Ev();
extern void _ZN9S19426C153v66Ev();
extern void _ZN9S19426C153v67Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C15__9S19426C12__8S19426C1[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-272,-156),
  ABISELECT(32,20),
  0,
  ABISELECT(-24,-16),
  ABISELECT(-64,-36),
  ABISELECT(-200,-116),
  ABISELECT(-152,-84),
  0,
  ABISELECT(-264,-152),
  ABISELECT(-264,-152),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v62Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v63Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v64Ev,
  (VTBL_ENTRY)&_ZN9S19426C153v66Ev,
  (VTBL_ENTRY)&_ZN9S19426C153v67Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev)();
extern void ABISELECT(_ZThn296_N9S19426C12D1Ev,_ZThn172_N9S19426C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev)();
extern void ABISELECT(_ZThn296_N9S19426C12D0Ev,_ZThn172_N9S19426C12D0Ev)() __attribute__((weak));
extern void _ZN9S19426C163v56Ev();
extern void _ZN9S19426C163v57Ev();
extern void _ZN9S19426C163v58Ev();
extern void _ZN9S19426C163v59Ev();
extern void _ZN9S19426C163v60Ev();
extern void _ZN9S19426C163v61Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C16__9S19426C12__8S19426C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-296,-172),
  ABISELECT(-296,-172),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19426C163v56Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v57Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v58Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v59Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v60Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v61Ev,
};
extern void _ZN9S19426C113v24Ev();
extern void _ZN9S19426C113v25Ev();
extern void _ZN9S19426C113v26Ev();
extern void _ZN9S19426C113v27Ev();
extern void _ZN9S19426C113v28Ev();
extern void _ZN9S19426C113v29Ev();
extern void _ZN9S19426C113v30Ev();
extern void _ZN9S19426C113v31Ev();
extern void ABISELECT(_ZTvn8_n24_N9S19426C12D1Ev,_ZTvn4_n12_N9S19426C12D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C12D0Ev,_ZTvn4_n12_N9S19426C12D0Ev)();
extern void _ZN9S19426C183v65Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C189S19426C15__9S19426C12__8S19426C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-280,-160),
  ABISELECT(-72,-40),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&_ZN9S19426C113v24Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v25Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v31Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C12D1Ev,_ZTvn4_n12_N9S19426C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C12D0Ev,_ZTvn4_n12_N9S19426C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19426C183v65Ev,
};
extern void _ZN9S19426C113v24Ev();
extern void _ZN9S19426C113v25Ev();
extern void _ZN9S19426C113v26Ev();
extern void _ZN9S19426C113v27Ev();
extern void _ZN9S19426C113v28Ev();
extern void _ZN9S19426C113v29Ev();
extern void _ZN9S19426C113v30Ev();
extern void _ZN9S19426C113v31Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C11__9S19426C12__8S19426C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S19426C12[0]),
  (VTBL_ENTRY)&_ZN9S19426C113v24Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v25Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v31Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C2D1Ev,_ZTv0_n12_N8S19426C2D1Ev)();
extern void _ZN8S19426C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C2D0Ev,_ZTv0_n12_N8S19426C2D0Ev)();
extern void _ZN8S19426C2D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
extern void _ZN8S19426C23v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C2__8S19426C1[] = {
  ABISELECT(64,40),
  0,
  ABISELECT(48,32),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C2D1Ev,_ZTv0_n12_N8S19426C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C2D0Ev,_ZTv0_n12_N8S19426C2D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19426C23v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void _ZN8S19426C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN8S19426C3D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C38S19426C2__8S19426C1[] = {
  0,
  ABISELECT(48,32),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S19426C3D1Ev,_ZThn32_N8S19426C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S19426C3D0Ev,_ZThn32_N8S19426C3D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__8S19426C38S19426C2__8S19426C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C38S19426C2__8S19426C1[] = {
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void _ZN8S19426C73v17Ev();
extern void _ZN8S19426C73v18Ev();
extern void _ZN8S19426C73v19Ev();
extern void _ZN8S19426C73v20Ev();
extern void _ZN8S19426C7D1Ev();
extern void _ZN8S19426C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C78S19426C2__8S19426C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C7[0]),
  (VTBL_ENTRY)&_ZN8S19426C73v17Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v18Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19426C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19426C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C7D1Ev,_ZTv0_n12_N8S19426C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S19426C7D1Ev,_ZThn16_N8S19426C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C7D0Ev,_ZTv0_n12_N8S19426C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S19426C7D0Ev,_ZThn16_N8S19426C7D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__8S19426C78S19426C2__8S19426C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19426C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C7D1Ev,_ZTv0_n12_N8S19426C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C7D0Ev,_ZTv0_n12_N8S19426C7D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19426C7D1Ev,_ZTvn4_n12_N8S19426C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C7D0Ev,_ZTvn4_n12_N8S19426C7D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C78S19426C2__8S19426C1[] = {
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19426C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C7D1Ev,_ZTvn4_n12_N8S19426C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C7D0Ev,_ZTvn4_n12_N8S19426C7D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C2D1Ev,_ZTv0_n12_N8S19426C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S19426C2D1Ev,_ZThn32_N8S19426C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C2D0Ev,_ZTv0_n12_N8S19426C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S19426C2D0Ev,_ZThn32_N8S19426C2D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__8S19426C2__8S19426C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19426C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C2D1Ev,_ZTv0_n12_N8S19426C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C2D0Ev,_ZTv0_n12_N8S19426C2D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19426C2D1Ev,_ZTvn4_n12_N8S19426C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C2D0Ev,_ZTvn4_n12_N8S19426C2D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C2__8S19426C1[] = {
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19426C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C2D1Ev,_ZTvn4_n12_N8S19426C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C2D0Ev,_ZTvn4_n12_N8S19426C2D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void _ZN8S19426C73v17Ev();
extern void _ZN8S19426C73v18Ev();
extern void _ZN8S19426C73v19Ev();
extern void _ZN8S19426C73v20Ev();
extern void ABISELECT(_ZThn24_N8S19426C2D1Ev,_ZThn16_N8S19426C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S19426C2D0Ev,_ZThn16_N8S19426C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19426C7__8S19426C2__8S19426C1[] = {
  ABISELECT(24,16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19426C2[0]),
  (VTBL_ENTRY)&_ZN8S19426C73v17Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v18Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19426C73v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19426C2D1Ev,_ZThn16_N8S19426C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19426C2D0Ev,_ZThn16_N8S19426C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19426C2D1Ev,_ZTv0_n20_N8S19426C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S19426C2D1Ev,_ZThn40_N8S19426C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19426C2D0Ev,_ZTv0_n20_N8S19426C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S19426C2D0Ev,_ZThn40_N8S19426C2D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN8S19426C83v21Ev();
extern void _ZN8S19426C83v22Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C8__8S19426C2__8S19426C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  ABISELECT(-16,-8),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19426C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19426C2D1Ev,_ZTv0_n20_N8S19426C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19426C2D0Ev,_ZTv0_n20_N8S19426C2D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19426C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19426C83v22Ev,
};
extern void ABISELECT(_ZTvn8_n40_N8S19426C2D1Ev,_ZTvn4_n20_N8S19426C2D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S19426C2D0Ev,_ZTvn4_n20_N8S19426C2D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C48S19426C8__A4__8S19426C2__8S19426C1[] = {
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S19426C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S19426C2D1Ev,_ZTvn4_n20_N8S19426C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S19426C2D0Ev,_ZTvn4_n20_N8S19426C2D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C2D1Ev,_ZTv0_n12_N8S19426C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19426C2D1Ev,_ZThn48_N8S19426C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C2D0Ev,_ZTv0_n12_N8S19426C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19426C2D0Ev,_ZThn48_N8S19426C2D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C38S19426C8__A1__8S19426C2__8S19426C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(-32,-16),
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S19426C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C2D1Ev,_ZTv0_n12_N8S19426C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C2D0Ev,_ZTv0_n12_N8S19426C2D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTvn40_n40_N8S19426C2D1Ev,_ZTvn24_n20_N8S19426C2D1Ev)();
extern void ABISELECT(_ZTvn40_n40_N8S19426C2D0Ev,_ZTvn24_n20_N8S19426C2D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C8__A5__8S19426C2__8S19426C1[] = {
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI8S19426C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n40_N8S19426C2D1Ev,_ZTvn24_n20_N8S19426C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n40_N8S19426C2D0Ev,_ZTvn24_n20_N8S19426C2D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void _ZN8S19426C8D1Ev();
extern void _ZN8S19426C8D0Ev();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN8S19426C83v21Ev();
extern void _ZN8S19426C83v22Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C8__8S19426C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C8[0]),
  (VTBL_ENTRY)&_ZN8S19426C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19426C8D0Ev,
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19426C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19426C83v22Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void _ZN8S19426C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN8S19426C3D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C38S19426C8__A1__8S19426C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(-32,-16),
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__8S19426C38S19426C8__A1__8S19426C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C38S19426C8__A1__8S19426C1[] = {
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C5_nt__A1__8S19426C38S19426C8__A1__8S19426C1[] = {
  0,
  0,
  ABISELECT(80,48),
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19426C8D1Ev,_ZThn8_N8S19426C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19426C8D0Ev,_ZThn8_N8S19426C8D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C3__8S19426C8__8S19426C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(-32,-16),
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19426C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__A1__8S19426C8__8S19426C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19426C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19426C8D1Ev,_ZTvn4_n12_N8S19426C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C8D0Ev,_ZTvn4_n12_N8S19426C8D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A3__8S19426C8__8S19426C1[] = {
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19426C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C8D1Ev,_ZTvn4_n12_N8S19426C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C8D0Ev,_ZTvn4_n12_N8S19426C8D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C5_nt__A2__8S19426C8__8S19426C1[] = {
  0,
  0,
  ABISELECT(64,40),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI8S19426C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
};
extern void _ZN9S19426C13D1Ev();
extern void _ZN9S19426C13D0Ev();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN9S19426C133v47Ev();
extern void _ZN9S19426C133v48Ev();
extern void _ZN9S19426C133v49Ev();
extern void _ZN9S19426C133v50Ev();
extern void _ZN9S19426C133v51Ev();
extern void _ZN9S19426C133v52Ev();
extern void _ZN9S19426C133v53Ev();
extern void _ZN9S19426C133v54Ev();
extern void _ZN9S19426C133v55Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C13__8S19426C1[] = {
  ABISELECT(-72,-40),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-120,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&_ZN9S19426C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19426C13D0Ev,
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v47Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v48Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v49Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v50Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v51Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v52Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v53Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v54Ev,
  (VTBL_ENTRY)&_ZN9S19426C133v55Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C5_nt__9S19426C13__8S19426C1[] = {
  0,
  0,
  ABISELECT(120,72),
  ABISELECT(120,72),
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19426C13D1Ev,_ZThn8_N9S19426C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev)();
extern void ABISELECT(_ZThn16_N9S19426C13D0Ev,_ZThn8_N9S19426C13D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN9S19426C143v42Ev();
extern void _ZN9S19426C143v43Ev();
extern void _ZN9S19426C143v44Ev();
extern void _ZN9S19426C143v45Ev();
extern void _ZN9S19426C143v46Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C14__9S19426C13__8S19426C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v45Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v46Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C13D1Ev,_ZTvn4_n12_N9S19426C13D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C13D0Ev,_ZTvn4_n12_N9S19426C13D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C49S19426C14__A2__9S19426C13__8S19426C1[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C13D1Ev,_ZTvn4_n12_N9S19426C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C13D0Ev,_ZTvn4_n12_N9S19426C13D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev)();
extern void ABISELECT(_ZThn56_N9S19426C13D1Ev,_ZThn28_N9S19426C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev)();
extern void ABISELECT(_ZThn56_N9S19426C13D0Ev,_ZThn28_N9S19426C13D0Ev)() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C3__9S19426C13__8S19426C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-100),
  ABISELECT(-128,-68),
  ABISELECT(-176,-100),
  ABISELECT(-176,-100),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__A1__9S19426C13__8S19426C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(72,40),
  ABISELECT(72,40),
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C13D1Ev,_ZTvn4_n12_N9S19426C13D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C13D0Ev,_ZTvn4_n12_N9S19426C13D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A4__9S19426C13__8S19426C1[] = {
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI9S19426C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C13D1Ev,_ZTvn4_n12_N9S19426C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C13D0Ev,_ZTvn4_n12_N9S19426C13D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void _ZN8S19426C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN8S19426C3D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C3__A2__8S19426C1[] = {
  ABISELECT(-176,-100),
  ABISELECT(-128,-68),
  ABISELECT(-176,-100),
  ABISELECT(-176,-100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__8S19426C3__A2__8S19426C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(128,68),
  ABISELECT(128,68),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C3__A2__8S19426C1[] = {
  ABISELECT(120,64),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D1Ev,_ZTvn4_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19426C3D0Ev,_ZTvn4_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C5_nt__A1__8S19426C3__A2__8S19426C1[] = {
  0,
  0,
  ABISELECT(176,100),
  ABISELECT(176,100),
  (VTBL_ENTRY)&(_ZTI8S19426C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev)();
extern void _ZN9S19426C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev)();
extern void _ZN9S19426C15D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN9S19426C173v62Ev();
extern void _ZN9S19426C173v63Ev();
extern void _ZN9S19426C173v64Ev();
extern void _ZN9S19426C153v66Ev();
extern void _ZN9S19426C153v67Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C15__8S19426C1[] = {
  ABISELECT(-272,-156),
  ABISELECT(32,20),
  0,
  ABISELECT(-24,-16),
  ABISELECT(-64,-36),
  ABISELECT(-200,-116),
  ABISELECT(-152,-84),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v62Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v63Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v64Ev,
  (VTBL_ENTRY)&_ZN9S19426C153v66Ev,
  (VTBL_ENTRY)&_ZN9S19426C153v67Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev)();
extern void _ZN9S19426C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev)();
extern void _ZN9S19426C17D0Ev() __attribute__((weak));
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN9S19426C173v62Ev();
extern void _ZN9S19426C173v63Ev();
extern void _ZN9S19426C173v64Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C179S19426C15__8S19426C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-64,-36),
  ABISELECT(-200,-116),
  ABISELECT(-152,-84),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v62Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v63Ev,
  (VTBL_ENTRY)&_ZN9S19426C173v64Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__9S19426C179S19426C15__8S19426C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(152,84),
  ABISELECT(152,84),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C17D1Ev,_ZTvn4_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C17D0Ev,_ZTvn4_n12_N9S19426C17D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__9S19426C179S19426C15__8S19426C1[] = {
  ABISELECT(144,80),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C17D1Ev,_ZTvn4_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C17D0Ev,_ZTvn4_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C5_nt__A1__9S19426C179S19426C15__8S19426C1[] = {
  0,
  0,
  ABISELECT(200,116),
  ABISELECT(200,116),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN9S19426C143v42Ev();
extern void _ZN9S19426C143v43Ev();
extern void _ZN9S19426C143v44Ev();
extern void _ZN9S19426C143v45Ev();
extern void _ZN9S19426C143v46Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C14__9S19426C179S19426C15__8S19426C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v45Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v46Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C17D1Ev,_ZTvn4_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C17D0Ev,_ZTvn4_n12_N9S19426C17D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C49S19426C14__A4__9S19426C179S19426C15__8S19426C1[] = {
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C17D1Ev,_ZTvn4_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C17D0Ev,_ZTvn4_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C3__9S19426C179S19426C15__8S19426C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-100),
  ABISELECT(-128,-68),
  ABISELECT(-176,-100),
  ABISELECT(-176,-100),
  ABISELECT(24,16),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S19426C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void _ZN9S19426C113v24Ev();
extern void _ZN9S19426C113v25Ev();
extern void _ZN9S19426C113v26Ev();
extern void _ZN9S19426C113v27Ev();
extern void _ZN9S19426C113v28Ev();
extern void _ZN9S19426C113v29Ev();
extern void _ZN9S19426C113v30Ev();
extern void _ZN9S19426C113v31Ev();
extern void _ZN9S19426C18D1Ev();
extern void _ZN9S19426C18D0Ev();
extern void _ZN9S19426C183v65Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C189S19426C15__8S19426C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-280,-160),
  ABISELECT(-72,-40),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  0,
  (VTBL_ENTRY)&(_ZTI9S19426C18[0]),
  (VTBL_ENTRY)&_ZN9S19426C113v24Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v25Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v31Ev,
  (VTBL_ENTRY)&_ZN9S19426C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19426C18D0Ev,
  (VTBL_ENTRY)&_ZN9S19426C183v65Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C18D1Ev,_ZTv0_n12_N9S19426C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C18D0Ev,_ZTv0_n12_N9S19426C18D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN9S19426C143v42Ev();
extern void _ZN9S19426C143v43Ev();
extern void _ZN9S19426C143v44Ev();
extern void _ZN9S19426C143v45Ev();
extern void _ZN9S19426C143v46Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C14__9S19426C189S19426C15__8S19426C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(72,40),
  ABISELECT(72,40),
  (VTBL_ENTRY)&(_ZTI9S19426C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C18D1Ev,_ZTv0_n12_N9S19426C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C18D0Ev,_ZTv0_n12_N9S19426C18D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v45Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v46Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C18D1Ev,_ZTvn4_n12_N9S19426C18D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C18D0Ev,_ZTvn4_n12_N9S19426C18D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C49S19426C14__A1__9S19426C189S19426C15__8S19426C1[] = {
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI9S19426C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C18D1Ev,_ZTvn4_n12_N9S19426C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C18D0Ev,_ZTvn4_n12_N9S19426C18D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void _ZN9S19426C113v24Ev();
extern void _ZN9S19426C113v25Ev();
extern void _ZN9S19426C113v26Ev();
extern void _ZN9S19426C113v27Ev();
extern void _ZN9S19426C113v28Ev();
extern void _ZN9S19426C113v29Ev();
extern void _ZN9S19426C113v30Ev();
extern void _ZN9S19426C113v31Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C11__9S19426C189S19426C15__8S19426C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(280,160),
  (VTBL_ENTRY)&(_ZTI9S19426C18[0]),
  (VTBL_ENTRY)&_ZN9S19426C113v24Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v25Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v31Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C18D1Ev,_ZTv0_n12_N9S19426C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C18D0Ev,_ZTv0_n12_N9S19426C18D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt__A2__9S19426C189S19426C15__8S19426C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S19426C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C18D1Ev,_ZTv0_n12_N9S19426C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C18D0Ev,_ZTv0_n12_N9S19426C18D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZThn32_N9S19426C15D1Ev,_ZThn20_N9S19426C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev)();
extern void ABISELECT(_ZThn32_N9S19426C15D0Ev,_ZThn20_N9S19426C15D0Ev)() __attribute__((weak));
extern void _ZN9S19426C163v56Ev();
extern void _ZN9S19426C163v57Ev();
extern void _ZN9S19426C163v58Ev();
extern void _ZN9S19426C163v59Ev();
extern void _ZN9S19426C163v60Ev();
extern void _ZN9S19426C163v61Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C16__9S19426C15__8S19426C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19426C163v56Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v57Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v58Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v59Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v60Ev,
  (VTBL_ENTRY)&_ZN9S19426C163v61Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C4__9S19426C15__8S19426C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(152,84),
  ABISELECT(152,84),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C15D1Ev,_ZTvn4_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C15D0Ev,_ZTvn4_n12_N9S19426C15D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C4__A1__9S19426C15__8S19426C1[] = {
  ABISELECT(144,80),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C15D1Ev,_ZTvn4_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C15D0Ev,_ZTvn4_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C5_nt__A1__9S19426C15__8S19426C1[] = {
  0,
  0,
  ABISELECT(200,116),
  ABISELECT(200,116),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C42v9Ev();
extern void _ZN8S19426C43v10Ev();
extern void _ZN9S19426C143v42Ev();
extern void _ZN9S19426C143v43Ev();
extern void _ZN9S19426C143v44Ev();
extern void _ZN9S19426C143v45Ev();
extern void _ZN9S19426C143v46Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C14__9S19426C15__8S19426C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19426C43v10Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v45Ev,
  (VTBL_ENTRY)&_ZN9S19426C143v46Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S19426C15D1Ev,_ZTvn4_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S19426C15D0Ev,_ZTvn4_n12_N9S19426C15D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19426C6_nt8S19426C49S19426C14__A4__9S19426C15__8S19426C1[] = {
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C15D1Ev,_ZTvn4_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S19426C15D0Ev,_ZTvn4_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev)();
extern void _ZN11S19426C6_nt2v7Ev();
extern void _ZN11S19426C5_nt2v8Ev();
extern void _ZN8S19426C33v11Ev();
extern void _ZN8S19426C33v12Ev();
extern void _ZN8S19426C33v13Ev();
extern void _ZN8S19426C33v14Ev();
extern void _ZN8S19426C33v15Ev();
extern void _ZN8S19426C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19426C3__9S19426C15__8S19426C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-100),
  ABISELECT(-128,-68),
  ABISELECT(-176,-100),
  ABISELECT(-176,-100),
  ABISELECT(24,16),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN11S19426C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19426C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19426C33v16Ev,
};
extern void _ZN9S19426C113v24Ev();
extern void _ZN9S19426C113v25Ev();
extern void _ZN9S19426C113v26Ev();
extern void _ZN9S19426C113v27Ev();
extern void _ZN9S19426C113v28Ev();
extern void _ZN9S19426C113v29Ev();
extern void _ZN9S19426C113v30Ev();
extern void _ZN9S19426C113v31Ev();
extern void ABISELECT(_ZThn8_N9S19426C15D1Ev,_ZThn4_N9S19426C15D1Ev)();
extern void ABISELECT(_ZThn8_N9S19426C15D0Ev,_ZThn4_N9S19426C15D0Ev)();
extern void _ZN9S19426C183v65Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C18__9S19426C15__8S19426C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-280,-160),
  ABISELECT(-72,-40),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-280,-160),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&_ZN9S19426C113v24Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v25Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v31Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19426C15D1Ev,_ZThn4_N9S19426C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19426C15D0Ev,_ZThn4_N9S19426C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19426C183v65Ev,
};
extern void _ZN9S19426C113v24Ev();
extern void _ZN9S19426C113v25Ev();
extern void _ZN9S19426C113v26Ev();
extern void _ZN9S19426C113v27Ev();
extern void _ZN9S19426C113v28Ev();
extern void _ZN9S19426C113v29Ev();
extern void _ZN9S19426C113v30Ev();
extern void _ZN9S19426C113v31Ev();
static  VTBL_ENTRY _tg__ZTV9S19426C11__9S19426C15__8S19426C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(272,156),
  (VTBL_ENTRY)&(_ZTI9S19426C15[0]),
  (VTBL_ENTRY)&_ZN9S19426C113v24Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v25Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19426C113v31Ev,
};
static  VTT_ENTRY vtt_S19426C1[] = {
  {&(_ZTV8S19426C1[21]),  21,332},
  {&(_tg__ZTV9S19426C10__8S19426C1[11]),  11,31},
  {&(_tg__ZTV9S19426C10__8S19426C1[11]),  11,31},
  {&(_tg__ZTV9S19426C12__8S19426C1[11]),  11,17},
  {&(_tg__ZTV8S19426C79S19426C12__A1__8S19426C1[3]),  3,9},
  {&(_tg__ZTV8S19426C4__8S19426C79S19426C12__A1__8S19426C1[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C79S19426C12__A1__8S19426C1[2]),  2,5},
  {&(_tg__ZTV9S19426C13__9S19426C12__8S19426C1[17]),  17,29},
  {&(_tg__ZTV11S19426C5_nt__9S19426C12__8S19426C1[5]),  5,9},
  {&(_tg__ZTV9S19426C14__9S19426C12__8S19426C1[12]),  12,23},
  {&(_tg__ZTV11S19426C6_nt8S19426C49S19426C14__A2__9S19426C12__8S19426C1[2]),  2,5},
  {&(_tg__ZTV8S19426C3__9S19426C12__8S19426C1[13]),  13,23},
  {&(_tg__ZTV8S19426C4__A1__9S19426C12__8S19426C1[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A4__9S19426C12__8S19426C1[2]),  2,5},
  {&(_tg__ZTV9S19426C15__9S19426C12__8S19426C1[17]),  17,25},
  {&(_tg__ZTV9S19426C16__9S19426C12__8S19426C1[9]),  9,17},
  {&(_tg__ZTV9S19426C15__9S19426C12__8S19426C1[17]),  17,25},
  {&(_tg__ZTV9S19426C189S19426C15__9S19426C12__8S19426C1[13]),  13,24},
  {&(_tg__ZTV9S19426C11__9S19426C12__8S19426C1[10]),  10,18},
  {&(_ZTV8S19426C1[96]),  96,332},
  {&(_ZTV8S19426C1[123]),  123,332},
  {&(_ZTV8S19426C1[131]),  131,332},
  {&(_ZTV8S19426C1[96]),  96,332},
  {&(_ZTV8S19426C1[110]),  110,332},
  {&(_ZTV8S19426C1[151]),  151,332},
  {&(_ZTV8S19426C1[161]),  161,332},
  {&(_ZTV8S19426C1[171]),  171,332},
  {&(_ZTV8S19426C1[183]),  183,332},
  {&(_ZTV8S19426C1[21]),  21,332},
  {&(_ZTV8S19426C1[58]),  58,332},
  {&(_ZTV8S19426C1[203]),  203,332},
  {&(_ZTV8S19426C1[227]),  227,332},
  {&(_ZTV8S19426C1[240]),  240,332},
  {&(_ZTV8S19426C1[256]),  256,332},
  {&(_ZTV8S19426C1[283]),  283,332},
  {&(_ZTV8S19426C1[324]),  324,332},
  {&(_ZTV8S19426C1[283]),  283,332},
  {&(_ZTV8S19426C1[304]),  304,332},
  {&(_tg__ZTV8S19426C2__8S19426C1[8]),  8,19},
  {&(_tg__ZTV8S19426C38S19426C2__8S19426C1[7]),  7,17},
  {&(_tg__ZTV8S19426C4__8S19426C38S19426C2__8S19426C1[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C38S19426C2__8S19426C1[2]),  2,5},
  {&(_tg__ZTV8S19426C38S19426C2__8S19426C1[7]),  7,17},
  {&(_tg__ZTV8S19426C78S19426C2__8S19426C1[3]),  3,9},
  {&(_tg__ZTV8S19426C4__8S19426C78S19426C2__8S19426C1[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C78S19426C2__8S19426C1[2]),  2,5},
  {&(_tg__ZTV8S19426C4__8S19426C2__8S19426C1[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C2__8S19426C1[2]),  2,5},
  {&(_tg__ZTV8S19426C2__8S19426C1[8]),  8,19},
  {&(_tg__ZTV8S19426C7__8S19426C2__8S19426C1[3]),  3,9},
  {&(_tg__ZTV8S19426C8__8S19426C2__8S19426C1[17]),  17,25},
  {&(_tg__ZTV11S19426C6_nt8S19426C48S19426C8__A4__8S19426C2__8S19426C1[2]),  2,5},
  {&(_tg__ZTV8S19426C38S19426C8__A1__8S19426C2__8S19426C1[7]),  7,17},
  {&(_tg__ZTV11S19426C6_nt8S19426C8__A5__8S19426C2__8S19426C1[2]),  2,5},
  {&(_tg__ZTV8S19426C8__8S19426C1[4]),  4,12},
  {&(_tg__ZTV8S19426C38S19426C8__A1__8S19426C1[7]),  7,17},
  {&(_tg__ZTV8S19426C4__8S19426C38S19426C8__A1__8S19426C1[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C38S19426C8__A1__8S19426C1[2]),  2,5},
  {&(_tg__ZTV11S19426C5_nt__A1__8S19426C38S19426C8__A1__8S19426C1[5]),  5,9},
  {&(_tg__ZTV8S19426C3__8S19426C8__8S19426C1[7]),  7,17},
  {&(_tg__ZTV8S19426C4__A1__8S19426C8__8S19426C1[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A3__8S19426C8__8S19426C1[2]),  2,5},
  {&(_tg__ZTV11S19426C5_nt__A2__8S19426C8__8S19426C1[5]),  5,9},
  {&(_tg__ZTV9S19426C13__8S19426C1[6]),  6,18},
  {&(_tg__ZTV11S19426C5_nt__9S19426C13__8S19426C1[5]),  5,9},
  {&(_tg__ZTV9S19426C14__9S19426C13__8S19426C1[12]),  12,23},
  {&(_tg__ZTV11S19426C6_nt8S19426C49S19426C14__A2__9S19426C13__8S19426C1[2]),  2,5},
  {&(_tg__ZTV8S19426C3__9S19426C13__8S19426C1[13]),  13,23},
  {&(_tg__ZTV8S19426C4__A1__9S19426C13__8S19426C1[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A4__9S19426C13__8S19426C1[2]),  2,5},
  {&(_tg__ZTV8S19426C3__A2__8S19426C1[7]),  7,17},
  {&(_tg__ZTV8S19426C4__8S19426C3__A2__8S19426C1[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__8S19426C3__A2__8S19426C1[2]),  2,5},
  {&(_tg__ZTV11S19426C5_nt__A1__8S19426C3__A2__8S19426C1[5]),  5,9},
  {&(_tg__ZTV9S19426C15__8S19426C1[11]),  11,19},
  {&(_tg__ZTV9S19426C179S19426C15__8S19426C1[9]),  9,15},
  {&(_tg__ZTV8S19426C4__9S19426C179S19426C15__8S19426C1[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__9S19426C179S19426C15__8S19426C1[2]),  2,5},
  {&(_tg__ZTV11S19426C5_nt__A1__9S19426C179S19426C15__8S19426C1[5]),  5,9},
  {&(_tg__ZTV9S19426C14__9S19426C179S19426C15__8S19426C1[12]),  12,23},
  {&(_tg__ZTV11S19426C6_nt8S19426C49S19426C14__A4__9S19426C179S19426C15__8S19426C1[2]),  2,5},
  {&(_tg__ZTV8S19426C3__9S19426C179S19426C15__8S19426C1[13]),  13,23},
  {&(_tg__ZTV9S19426C179S19426C15__8S19426C1[9]),  9,15},
  {&(_tg__ZTV9S19426C189S19426C15__8S19426C1[13]),  13,24},
  {&(_tg__ZTV9S19426C14__9S19426C189S19426C15__8S19426C1[12]),  12,23},
  {&(_tg__ZTV11S19426C6_nt8S19426C49S19426C14__A1__9S19426C189S19426C15__8S19426C1[2]),  2,5},
  {&(_tg__ZTV9S19426C11__9S19426C189S19426C15__8S19426C1[10]),  10,18},
  {&(_tg__ZTV11S19426C6_nt__A2__9S19426C189S19426C15__8S19426C1[4]),  4,7},
  {&(_tg__ZTV9S19426C16__9S19426C15__8S19426C1[9]),  9,17},
  {&(_tg__ZTV8S19426C4__9S19426C15__8S19426C1[7]),  7,13},
  {&(_tg__ZTV11S19426C6_nt8S19426C4__A1__9S19426C15__8S19426C1[2]),  2,5},
  {&(_tg__ZTV11S19426C5_nt__A1__9S19426C15__8S19426C1[5]),  5,9},
  {&(_tg__ZTV9S19426C14__9S19426C15__8S19426C1[12]),  12,23},
  {&(_tg__ZTV11S19426C6_nt8S19426C49S19426C14__A4__9S19426C15__8S19426C1[2]),  2,5},
  {&(_tg__ZTV8S19426C3__9S19426C15__8S19426C1[13]),  13,23},
  {&(_tg__ZTV9S19426C15__8S19426C1[11]),  11,19},
  {&(_tg__ZTV9S19426C18__9S19426C15__8S19426C1[13]),  13,24},
  {&(_tg__ZTV9S19426C11__9S19426C15__8S19426C1[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S19426C1[];
extern  VTBL_ENTRY _ZTV8S19426C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19426C1[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C17D0Ev,_ZTv0_n12_N9S19426C17D0Ev), // 
  (VTBL_ENTRY)_ZN9S19426C17D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C17D1Ev,_ZTv0_n12_N9S19426C17D1Ev), // 
  (VTBL_ENTRY)_ZN9S19426C17D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C15D0Ev,_ZTv0_n12_N9S19426C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19426C15D0Ev,_ZThn20_N9S19426C15D0Ev),
  (VTBL_ENTRY)_ZN9S19426C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C15D1Ev,_ZTv0_n12_N9S19426C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19426C15D1Ev,_ZThn20_N9S19426C15D1Ev),
  (VTBL_ENTRY)_ZN9S19426C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C13D0Ev,_ZTv0_n12_N9S19426C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19426C13D0Ev,_ZThn28_N9S19426C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19426C13D0Ev,_ZThn8_N9S19426C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C13D1Ev,_ZTv0_n12_N9S19426C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19426C13D1Ev,_ZThn28_N9S19426C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19426C13D1Ev,_ZThn8_N9S19426C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C8D0Ev,_ZTv0_n12_N8S19426C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19426C8D0Ev,_ZThn8_N8S19426C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C8D1Ev,_ZTv0_n12_N8S19426C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19426C8D1Ev,_ZThn8_N8S19426C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19426C2D0Ev,_ZTv0_n20_N8S19426C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19426C2D0Ev,_ZThn40_N8S19426C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19426C2D1Ev,_ZTv0_n20_N8S19426C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19426C2D1Ev,_ZThn40_N8S19426C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C3D0Ev,_ZTv0_n12_N8S19426C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S19426C3D0Ev,
  (VTBL_ENTRY)_ZN8S19426C3D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19426C3D0Ev,_ZThn32_N8S19426C3D0Ev),
  (VTBL_ENTRY)_ZN8S19426C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C3D1Ev,_ZTv0_n12_N8S19426C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S19426C3D1Ev,
  (VTBL_ENTRY)_ZN8S19426C3D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19426C3D1Ev,_ZThn32_N8S19426C3D1Ev),
  (VTBL_ENTRY)_ZN8S19426C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C2D0Ev,_ZTv0_n12_N8S19426C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19426C2D0Ev,_ZThn48_N8S19426C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19426C2D0Ev,_ZThn32_N8S19426C2D0Ev),
  (VTBL_ENTRY)_ZN8S19426C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C2D1Ev,_ZTv0_n12_N8S19426C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19426C2D1Ev,_ZThn48_N8S19426C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19426C2D1Ev,_ZThn32_N8S19426C2D1Ev),
  (VTBL_ENTRY)_ZN8S19426C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C12D0Ev,_ZTv0_n12_N9S19426C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N9S19426C12D0Ev,_ZThn172_N9S19426C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N9S19426C12D0Ev,_ZThn152_N9S19426C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19426C12D0Ev,_ZThn68_N9S19426C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19426C12D0Ev,_ZThn136_N9S19426C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S19426C12D0Ev,_ZThn116_N9S19426C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19426C12D0Ev,_ZThn36_N9S19426C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19426C12D1Ev,_ZTv0_n12_N9S19426C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N9S19426C12D1Ev,_ZThn172_N9S19426C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N9S19426C12D1Ev,_ZThn152_N9S19426C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19426C12D1Ev,_ZThn68_N9S19426C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19426C12D1Ev,_ZThn136_N9S19426C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S19426C12D1Ev,_ZThn116_N9S19426C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19426C12D1Ev,_ZThn36_N9S19426C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19426C12D0Ev,_ZTv0_n28_N9S19426C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19426C12D0Ev,_ZThn108_N9S19426C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19426C12D1Ev,_ZTv0_n28_N9S19426C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19426C12D1Ev,_ZThn108_N9S19426C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C7D0Ev,_ZTv0_n12_N8S19426C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19426C7D0Ev,_ZThn16_N8S19426C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19426C7D0Ev,_ZThn68_N8S19426C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C7D1Ev,_ZTv0_n12_N8S19426C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19426C7D1Ev,_ZThn16_N8S19426C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19426C7D1Ev,_ZThn68_N8S19426C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19426C1D0Ev,_ZTv0_n28_N8S19426C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19426C1D0Ev,_ZThn112_N8S19426C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19426C1D1Ev,_ZTv0_n28_N8S19426C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19426C1D1Ev,_ZThn112_N8S19426C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19426C1D0Ev,_ZTv0_n20_N8S19426C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19426C1D0Ev,_ZThn80_N8S19426C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19426C1D1Ev,_ZTv0_n20_N8S19426C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19426C1D1Ev,_ZThn80_N8S19426C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C1D0Ev,_ZTv0_n12_N8S19426C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19426C1D0Ev,_ZThn176_N8S19426C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19426C1D0Ev,_ZThn156_N8S19426C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19426C1D0Ev,_ZThn140_N8S19426C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19426C1D0Ev,_ZThn120_N8S19426C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19426C1D0Ev,_ZThn88_N8S19426C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19426C1D0Ev,_ZThn72_N8S19426C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19426C1D0Ev,_ZThn40_N8S19426C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19426C1D1Ev,_ZTv0_n12_N8S19426C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19426C1D1Ev,_ZThn176_N8S19426C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19426C1D1Ev,_ZThn156_N8S19426C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19426C1D1Ev,_ZThn140_N8S19426C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19426C1D1Ev,_ZThn120_N8S19426C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19426C1D1Ev,_ZThn88_N8S19426C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19426C1D1Ev,_ZThn72_N8S19426C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19426C1D1Ev,_ZThn40_N8S19426C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19426C1 = {  "S19426C1", // class name
  bases_S19426C1, 37,
  &(vtc_S19426C1[0]), // expected_vtbl_contents
  &(vtt_S19426C1[0]), // expected_vtt_contents
  ABISELECT(320,184), // object size
  NSPAIRA(_ZTI8S19426C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19426C1),332, //virtual function table var
  21, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19426C1),98, //virtual table table var
  37, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4304C3_nt  {
  virtual  ~S4304C3_nt(); // _ZN10S4304C3_ntD1Ev
  virtual void  v19(); // _ZN10S4304C3_nt3v19Ev
  virtual void  v20(); // _ZN10S4304C3_nt3v20Ev
  virtual void  v21(); // _ZN10S4304C3_nt3v21Ev
  virtual void  v22(); // _ZN10S4304C3_nt3v22Ev
  virtual void  v23(); // _ZN10S4304C3_nt3v23Ev
  virtual void  v24(); // _ZN10S4304C3_nt3v24Ev
  virtual void  v25(); // _ZN10S4304C3_nt3v25Ev
  virtual void  v26(); // _ZN10S4304C3_nt3v26Ev
  virtual void  v27(); // _ZN10S4304C3_nt3v27Ev
  virtual void  v28(); // _ZN10S4304C3_nt3v28Ev
  virtual void  v29(); // _ZN10S4304C3_nt3v29Ev
  virtual void  v30(); // _ZN10S4304C3_nt3v30Ev
  virtual void  v31(); // _ZN10S4304C3_nt3v31Ev
  virtual void  v32(); // _ZN10S4304C3_nt3v32Ev
  virtual void  v33(); // _ZN10S4304C3_nt3v33Ev
  virtual void  v34(); // _ZN10S4304C3_nt3v34Ev
  virtual void  v35(); // _ZN10S4304C3_nt3v35Ev
  virtual void  v36(); // _ZN10S4304C3_nt3v36Ev
  virtual void  v37(); // _ZN10S4304C3_nt3v37Ev
  virtual void  v38(); // _ZN10S4304C3_nt3v38Ev
  virtual void  v39(); // _ZN10S4304C3_nt3v39Ev
  virtual void  v40(); // _ZN10S4304C3_nt3v40Ev
  virtual void  v41(); // _ZN10S4304C3_nt3v41Ev
  virtual void  v42(); // _ZN10S4304C3_nt3v42Ev
  virtual void  v43(); // _ZN10S4304C3_nt3v43Ev
  virtual void  v44(); // _ZN10S4304C3_nt3v44Ev
  S4304C3_nt(); // tgen
};
//SIG(-1 S4304C3_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}


 S4304C3_nt ::~S4304C3_nt(){ note_dtor("S4304C3_nt", this);}
void  S4304C3_nt ::v19(){vfunc_called(this, "_ZN10S4304C3_nt3v19Ev");}
void  S4304C3_nt ::v20(){vfunc_called(this, "_ZN10S4304C3_nt3v20Ev");}
void  S4304C3_nt ::v21(){vfunc_called(this, "_ZN10S4304C3_nt3v21Ev");}
void  S4304C3_nt ::v22(){vfunc_called(this, "_ZN10S4304C3_nt3v22Ev");}
void  S4304C3_nt ::v23(){vfunc_called(this, "_ZN10S4304C3_nt3v23Ev");}
void  S4304C3_nt ::v24(){vfunc_called(this, "_ZN10S4304C3_nt3v24Ev");}
void  S4304C3_nt ::v25(){vfunc_called(this, "_ZN10S4304C3_nt3v25Ev");}
void  S4304C3_nt ::v26(){vfunc_called(this, "_ZN10S4304C3_nt3v26Ev");}
void  S4304C3_nt ::v27(){vfunc_called(this, "_ZN10S4304C3_nt3v27Ev");}
void  S4304C3_nt ::v28(){vfunc_called(this, "_ZN10S4304C3_nt3v28Ev");}
void  S4304C3_nt ::v29(){vfunc_called(this, "_ZN10S4304C3_nt3v29Ev");}
void  S4304C3_nt ::v30(){vfunc_called(this, "_ZN10S4304C3_nt3v30Ev");}
void  S4304C3_nt ::v31(){vfunc_called(this, "_ZN10S4304C3_nt3v31Ev");}
void  S4304C3_nt ::v32(){vfunc_called(this, "_ZN10S4304C3_nt3v32Ev");}
void  S4304C3_nt ::v33(){vfunc_called(this, "_ZN10S4304C3_nt3v33Ev");}
void  S4304C3_nt ::v34(){vfunc_called(this, "_ZN10S4304C3_nt3v34Ev");}
void  S4304C3_nt ::v35(){vfunc_called(this, "_ZN10S4304C3_nt3v35Ev");}
void  S4304C3_nt ::v36(){vfunc_called(this, "_ZN10S4304C3_nt3v36Ev");}
void  S4304C3_nt ::v37(){vfunc_called(this, "_ZN10S4304C3_nt3v37Ev");}
void  S4304C3_nt ::v38(){vfunc_called(this, "_ZN10S4304C3_nt3v38Ev");}
void  S4304C3_nt ::v39(){vfunc_called(this, "_ZN10S4304C3_nt3v39Ev");}
void  S4304C3_nt ::v40(){vfunc_called(this, "_ZN10S4304C3_nt3v40Ev");}
void  S4304C3_nt ::v41(){vfunc_called(this, "_ZN10S4304C3_nt3v41Ev");}
void  S4304C3_nt ::v42(){vfunc_called(this, "_ZN10S4304C3_nt3v42Ev");}
void  S4304C3_nt ::v43(){vfunc_called(this, "_ZN10S4304C3_nt3v43Ev");}
void  S4304C3_nt ::v44(){vfunc_called(this, "_ZN10S4304C3_nt3v44Ev");}
S4304C3_nt ::S4304C3_nt(){ note_ctor("S4304C3_nt", this);} // tgen

//skip512 S4304C3_nt

#else // __cplusplus

extern void _ZN10S4304C3_ntC1Ev();
extern void _ZN10S4304C3_ntD1Ev();
Name_Map name_map_S4304C3_nt[] = {
  NSPAIR(_ZN10S4304C3_ntC1Ev),
  NSPAIR(_ZN10S4304C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4304C3_nt[];
extern void _ZN10S4304C3_ntD1Ev();
extern void _ZN10S4304C3_ntD0Ev();
extern void _ZN10S4304C3_nt3v19Ev();
extern void _ZN10S4304C3_nt3v20Ev();
extern void _ZN10S4304C3_nt3v21Ev();
extern void _ZN10S4304C3_nt3v22Ev();
extern void _ZN10S4304C3_nt3v23Ev();
extern void _ZN10S4304C3_nt3v24Ev();
extern void _ZN10S4304C3_nt3v25Ev();
extern void _ZN10S4304C3_nt3v26Ev();
extern void _ZN10S4304C3_nt3v27Ev();
extern void _ZN10S4304C3_nt3v28Ev();
extern void _ZN10S4304C3_nt3v29Ev();
extern void _ZN10S4304C3_nt3v30Ev();
extern void _ZN10S4304C3_nt3v31Ev();
extern void _ZN10S4304C3_nt3v32Ev();
extern void _ZN10S4304C3_nt3v33Ev();
extern void _ZN10S4304C3_nt3v34Ev();
extern void _ZN10S4304C3_nt3v35Ev();
extern void _ZN10S4304C3_nt3v36Ev();
extern void _ZN10S4304C3_nt3v37Ev();
extern void _ZN10S4304C3_nt3v38Ev();
extern void _ZN10S4304C3_nt3v39Ev();
extern void _ZN10S4304C3_nt3v40Ev();
extern void _ZN10S4304C3_nt3v41Ev();
extern void _ZN10S4304C3_nt3v42Ev();
extern void _ZN10S4304C3_nt3v43Ev();
extern void _ZN10S4304C3_nt3v44Ev();
static  VTBL_ENTRY vtc_S4304C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4304C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4304C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v44Ev,
};
extern VTBL_ENTRY _ZTI10S4304C3_nt[];
VTBL_ENTRY *P__ZTI10S4304C3_nt = _ZTI10S4304C3_nt; 
extern  VTBL_ENTRY _ZTV10S4304C3_nt[];
Class_Descriptor cd_S4304C3_nt = {  "S4304C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4304C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4304C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4304C3_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  S4304C4_nt  {
  int s4304c4f0[2];
};
//SIG(-1 S4304C4_nt) C1{ Fi[2]}



//skip512 S4304C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4304C2_nt  : S4304C3_nt {
  void *s4304c2f0[2];
  int s4304c2f1[4];
  ::S4304C4_nt s4304c2f2;
  void *s4304c2f3;
  char s4304c2f4;
  void *s4304c2f5;
  virtual  ~S4304C2_nt(); // _ZN10S4304C2_ntD1Ev
  virtual void  v45(); // _ZN10S4304C2_nt3v45Ev
  virtual void  v46(); // _ZN10S4304C2_nt3v46Ev
  virtual void  v47(); // _ZN10S4304C2_nt3v47Ev
  virtual void  v48(); // _ZN10S4304C2_nt3v48Ev
  virtual void  v49(); // _ZN10S4304C2_nt3v49Ev
  virtual void  v50(); // _ZN10S4304C2_nt3v50Ev
  virtual void  v51(); // _ZN10S4304C2_nt3v51Ev
  virtual void  v52(); // _ZN10S4304C2_nt3v52Ev
  virtual void  v53(); // _ZN10S4304C2_nt3v53Ev
  virtual void  v54(); // _ZN10S4304C2_nt3v54Ev
  virtual void  v55(); // _ZN10S4304C2_nt3v55Ev
  virtual void  v56(); // _ZN10S4304C2_nt3v56Ev
  virtual void  v57(); // _ZN10S4304C2_nt3v57Ev
  virtual void  v58(); // _ZN10S4304C2_nt3v58Ev
  S4304C2_nt(); // tgen
};
//SIG(-1 S4304C2_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}


 S4304C2_nt ::~S4304C2_nt(){ note_dtor("S4304C2_nt", this);}
void  S4304C2_nt ::v45(){vfunc_called(this, "_ZN10S4304C2_nt3v45Ev");}
void  S4304C2_nt ::v46(){vfunc_called(this, "_ZN10S4304C2_nt3v46Ev");}
void  S4304C2_nt ::v47(){vfunc_called(this, "_ZN10S4304C2_nt3v47Ev");}
void  S4304C2_nt ::v48(){vfunc_called(this, "_ZN10S4304C2_nt3v48Ev");}
void  S4304C2_nt ::v49(){vfunc_called(this, "_ZN10S4304C2_nt3v49Ev");}
void  S4304C2_nt ::v50(){vfunc_called(this, "_ZN10S4304C2_nt3v50Ev");}
void  S4304C2_nt ::v51(){vfunc_called(this, "_ZN10S4304C2_nt3v51Ev");}
void  S4304C2_nt ::v52(){vfunc_called(this, "_ZN10S4304C2_nt3v52Ev");}
void  S4304C2_nt ::v53(){vfunc_called(this, "_ZN10S4304C2_nt3v53Ev");}
void  S4304C2_nt ::v54(){vfunc_called(this, "_ZN10S4304C2_nt3v54Ev");}
void  S4304C2_nt ::v55(){vfunc_called(this, "_ZN10S4304C2_nt3v55Ev");}
void  S4304C2_nt ::v56(){vfunc_called(this, "_ZN10S4304C2_nt3v56Ev");}
void  S4304C2_nt ::v57(){vfunc_called(this, "_ZN10S4304C2_nt3v57Ev");}
void  S4304C2_nt ::v58(){vfunc_called(this, "_ZN10S4304C2_nt3v58Ev");}
S4304C2_nt ::S4304C2_nt(){ note_ctor("S4304C2_nt", this);} // tgen

//skip512 S4304C2_nt

#else // __cplusplus

extern void _ZN10S4304C2_ntC1Ev();
extern void _ZN10S4304C2_ntD1Ev();
Name_Map name_map_S4304C2_nt[] = {
  NSPAIR(_ZN10S4304C2_ntC1Ev),
  NSPAIR(_ZN10S4304C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4304C3_nt;
extern VTBL_ENTRY _ZTI10S4304C3_nt[];
extern  VTBL_ENTRY _ZTV10S4304C3_nt[];
static Base_Class bases_S4304C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4304C3_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 _ZTI10S4304C2_nt[];
extern void _ZN10S4304C2_ntD1Ev();
extern void _ZN10S4304C2_ntD0Ev();
extern void _ZN10S4304C3_nt3v19Ev();
extern void _ZN10S4304C3_nt3v20Ev();
extern void _ZN10S4304C3_nt3v21Ev();
extern void _ZN10S4304C3_nt3v22Ev();
extern void _ZN10S4304C3_nt3v23Ev();
extern void _ZN10S4304C3_nt3v24Ev();
extern void _ZN10S4304C3_nt3v25Ev();
extern void _ZN10S4304C3_nt3v26Ev();
extern void _ZN10S4304C3_nt3v27Ev();
extern void _ZN10S4304C3_nt3v28Ev();
extern void _ZN10S4304C3_nt3v29Ev();
extern void _ZN10S4304C3_nt3v30Ev();
extern void _ZN10S4304C3_nt3v31Ev();
extern void _ZN10S4304C3_nt3v32Ev();
extern void _ZN10S4304C3_nt3v33Ev();
extern void _ZN10S4304C3_nt3v34Ev();
extern void _ZN10S4304C3_nt3v35Ev();
extern void _ZN10S4304C3_nt3v36Ev();
extern void _ZN10S4304C3_nt3v37Ev();
extern void _ZN10S4304C3_nt3v38Ev();
extern void _ZN10S4304C3_nt3v39Ev();
extern void _ZN10S4304C3_nt3v40Ev();
extern void _ZN10S4304C3_nt3v41Ev();
extern void _ZN10S4304C3_nt3v42Ev();
extern void _ZN10S4304C3_nt3v43Ev();
extern void _ZN10S4304C3_nt3v44Ev();
extern void _ZN10S4304C2_nt3v45Ev();
extern void _ZN10S4304C2_nt3v46Ev();
extern void _ZN10S4304C2_nt3v47Ev();
extern void _ZN10S4304C2_nt3v48Ev();
extern void _ZN10S4304C2_nt3v49Ev();
extern void _ZN10S4304C2_nt3v50Ev();
extern void _ZN10S4304C2_nt3v51Ev();
extern void _ZN10S4304C2_nt3v52Ev();
extern void _ZN10S4304C2_nt3v53Ev();
extern void _ZN10S4304C2_nt3v54Ev();
extern void _ZN10S4304C2_nt3v55Ev();
extern void _ZN10S4304C2_nt3v56Ev();
extern void _ZN10S4304C2_nt3v57Ev();
extern void _ZN10S4304C2_nt3v58Ev();
static  VTBL_ENTRY vtc_S4304C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4304C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4304C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v58Ev,
};
extern VTBL_ENTRY _ZTI10S4304C2_nt[];
VTBL_ENTRY *P__ZTI10S4304C2_nt = _ZTI10S4304C2_nt; 
extern  VTBL_ENTRY _ZTV10S4304C2_nt[];
Class_Descriptor cd_S4304C2_nt = {  "S4304C2_nt", // class name
  bases_S4304C2_nt, 1,
  &(vtc_S4304C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI10S4304C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4304C2_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  S4304C5_nt  {
  void *s4304c5f0;
  char s4304c5f1[32];
  int s4304c5f2[6];
  char s4304c5f3;
  int s4304c5f4[2];
  virtual  ~S4304C5_nt(); // _ZN10S4304C5_ntD1Ev
  virtual void  v59(); // _ZN10S4304C5_nt3v59Ev
  virtual void  v60(); // _ZN10S4304C5_nt3v60Ev
  S4304C5_nt(); // tgen
};
//SIG(-1 S4304C5_nt) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4304C5_nt ::~S4304C5_nt(){ note_dtor("S4304C5_nt", this);}
void  S4304C5_nt ::v59(){vfunc_called(this, "_ZN10S4304C5_nt3v59Ev");}
void  S4304C5_nt ::v60(){vfunc_called(this, "_ZN10S4304C5_nt3v60Ev");}
S4304C5_nt ::S4304C5_nt(){ note_ctor("S4304C5_nt", this);} // tgen

//skip512 S4304C5_nt

#else // __cplusplus

extern void _ZN10S4304C5_ntC1Ev();
extern void _ZN10S4304C5_ntD1Ev();
Name_Map name_map_S4304C5_nt[] = {
  NSPAIR(_ZN10S4304C5_ntC1Ev),
  NSPAIR(_ZN10S4304C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4304C5_nt[];
extern void _ZN10S4304C5_ntD1Ev();
extern void _ZN10S4304C5_ntD0Ev();
extern void _ZN10S4304C5_nt3v59Ev();
extern void _ZN10S4304C5_nt3v60Ev();
static  VTBL_ENTRY vtc_S4304C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4304C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S4304C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4304C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4304C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S4304C5_nt3v60Ev,
};
extern VTBL_ENTRY _ZTI10S4304C5_nt[];
VTBL_ENTRY *P__ZTI10S4304C5_nt = _ZTI10S4304C5_nt; 
extern  VTBL_ENTRY _ZTV10S4304C5_nt[];
Class_Descriptor cd_S4304C5_nt = {  "S4304C5_nt", // class name
  0,0,//no base classes
  &(vtc_S4304C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI10S4304C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4304C5_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  S4304C6_nt  {
  virtual  ~S4304C6_nt(); // _ZN10S4304C6_ntD1Ev
  virtual void  v61(); // _ZN10S4304C6_nt3v61Ev
  virtual void  v62(); // _ZN10S4304C6_nt3v62Ev
  virtual void  v63(); // _ZN10S4304C6_nt3v63Ev
  virtual void  v64(); // _ZN10S4304C6_nt3v64Ev
  virtual void  v65(); // _ZN10S4304C6_nt3v65Ev
  virtual void  v66(); // _ZN10S4304C6_nt3v66Ev
  S4304C6_nt(); // tgen
};
//SIG(-1 S4304C6_nt) C1{ vd v1 v2 v3 v4 v5 v6}


 S4304C6_nt ::~S4304C6_nt(){ note_dtor("S4304C6_nt", this);}
void  S4304C6_nt ::v61(){vfunc_called(this, "_ZN10S4304C6_nt3v61Ev");}
void  S4304C6_nt ::v62(){vfunc_called(this, "_ZN10S4304C6_nt3v62Ev");}
void  S4304C6_nt ::v63(){vfunc_called(this, "_ZN10S4304C6_nt3v63Ev");}
void  S4304C6_nt ::v64(){vfunc_called(this, "_ZN10S4304C6_nt3v64Ev");}
void  S4304C6_nt ::v65(){vfunc_called(this, "_ZN10S4304C6_nt3v65Ev");}
void  S4304C6_nt ::v66(){vfunc_called(this, "_ZN10S4304C6_nt3v66Ev");}
S4304C6_nt ::S4304C6_nt(){ note_ctor("S4304C6_nt", this);} // tgen

//skip512 S4304C6_nt

#else // __cplusplus

extern void _ZN10S4304C6_ntC1Ev();
extern void _ZN10S4304C6_ntD1Ev();
Name_Map name_map_S4304C6_nt[] = {
  NSPAIR(_ZN10S4304C6_ntC1Ev),
  NSPAIR(_ZN10S4304C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4304C6_nt[];
extern void _ZN10S4304C6_ntD1Ev();
extern void _ZN10S4304C6_ntD0Ev();
extern void _ZN10S4304C6_nt3v61Ev();
extern void _ZN10S4304C6_nt3v62Ev();
extern void _ZN10S4304C6_nt3v63Ev();
extern void _ZN10S4304C6_nt3v64Ev();
extern void _ZN10S4304C6_nt3v65Ev();
extern void _ZN10S4304C6_nt3v66Ev();
static  VTBL_ENTRY vtc_S4304C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4304C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S4304C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4304C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4304C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S4304C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S4304C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S4304C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S4304C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S4304C6_nt3v66Ev,
};
extern VTBL_ENTRY _ZTI10S4304C6_nt[];
VTBL_ENTRY *P__ZTI10S4304C6_nt = _ZTI10S4304C6_nt; 
extern  VTBL_ENTRY _ZTV10S4304C6_nt[];
Class_Descriptor cd_S4304C6_nt = {  "S4304C6_nt", // class name
  0,0,//no base classes
  &(vtc_S4304C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4304C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4304C6_nt),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4304C7  {
  virtual  ~S4304C7(); // _ZN7S4304C7D1Ev
  virtual void  v67(); // _ZN7S4304C73v67Ev
  virtual void  v68(); // _ZN7S4304C73v68Ev
  virtual void  v69(); // _ZN7S4304C73v69Ev
  S4304C7(); // tgen
};
//SIG(-1 S4304C7) C1{ vd v1 v2 v3}


 S4304C7 ::~S4304C7(){ note_dtor("S4304C7", this);}
void  S4304C7 ::v67(){vfunc_called(this, "_ZN7S4304C73v67Ev");}
void  S4304C7 ::v68(){vfunc_called(this, "_ZN7S4304C73v68Ev");}
void  S4304C7 ::v69(){vfunc_called(this, "_ZN7S4304C73v69Ev");}
S4304C7 ::S4304C7(){ note_ctor("S4304C7", this);} // tgen

static void Test_S4304C7()
{
  extern Class_Descriptor cd_S4304C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4304C7, buf);
    S4304C7 *dp, &lv = *(dp=new (buf) S4304C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4304C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4304C7)");
    test_class_info(&lv, &cd_S4304C7);
    dp->~S4304C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4304C7(Test_S4304C7, "S4304C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4304C7C1Ev();
extern void _ZN7S4304C7D1Ev();
Name_Map name_map_S4304C7[] = {
  NSPAIR(_ZN7S4304C7C1Ev),
  NSPAIR(_ZN7S4304C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4304C7[];
extern void _ZN7S4304C7D1Ev();
extern void _ZN7S4304C7D0Ev();
extern void _ZN7S4304C73v67Ev();
extern void _ZN7S4304C73v68Ev();
extern void _ZN7S4304C73v69Ev();
static  VTBL_ENTRY vtc_S4304C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4304C7[0]),
  (VTBL_ENTRY)&_ZN7S4304C7D1Ev,
  (VTBL_ENTRY)&_ZN7S4304C7D0Ev,
  (VTBL_ENTRY)&_ZN7S4304C73v67Ev,
  (VTBL_ENTRY)&_ZN7S4304C73v68Ev,
  (VTBL_ENTRY)&_ZN7S4304C73v69Ev,
};
extern VTBL_ENTRY _ZTI7S4304C7[];
extern  VTBL_ENTRY _ZTV7S4304C7[];
Class_Descriptor cd_S4304C7 = {  "S4304C7", // class name
  0,0,//no base classes
  &(vtc_S4304C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4304C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4304C7),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  S4304C8_nt  {
  void *s4304c8f0;
  int s4304c8f1;
  void  mf4304c8(); // _ZN10S4304C8_nt8mf4304c8Ev
};
//SIG(-1 S4304C8_nt) C1{ m Fp Fi}


void  S4304C8_nt ::mf4304c8(){}

//skip512 S4304C8_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S4304C8_nt[];
VTBL_ENTRY *P__ZTI10S4304C8_nt = _ZTI10S4304C8_nt; 
Class_Descriptor cd_S4304C8_nt = {  "S4304C8_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S4304C8_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  S4304C9_nt  {
  long s4304c9f0;
  __tsi64 s4304c9f1;
  long s4304c9f2;
  int s4304c9f3;
  long s4304c9f4[3];
  __tsi64 s4304c9f5[2];
  long s4304c9f6;
};
//SIG(-1 S4304C9_nt) C1{ Fl FL Fl Fi Fl[3] FL[2] Fl}



//skip512 S4304C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4304C10_nt  {
  long s4304c10f0;
  __tsi64 s4304c10f1[2];
  long s4304c10f2;
  __tsi64 s4304c10f3;
  short s4304c10f4[2];
  char s4304c10f5[2];
  long s4304c10f6[9];
  short s4304c10f7[4];
};
//SIG(-1 S4304C10_nt) C1{ Fl FL[2] Fl FL Fs[2] Fc[2] Fl[9] Fs[4]}



//skip512 S4304C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4304C1  : S4304C2_nt , S4304C5_nt , S4304C6_nt , S4304C7 , S4304C8_nt {
  void *s4304c1f0[2];
  long s4304c1f1;
  __tsi64 s4304c1f2;
  int s4304c1f3;
  __tsi64 s4304c1f4[3];
  char s4304c1f5;
  int s4304c1f6;
  ::S4304C9_nt s4304c1f7;
  ::S4304C10_nt s4304c1f8;
  void *s4304c1f9[2];
  int s4304c1f10[34];
  long s4304c1f11;
  void *s4304c1f12[2];
  virtual  ~S4304C1(); // _ZN7S4304C1D1Ev
  virtual void  v1(); // _ZN7S4304C12v1Ev
  virtual void  v2(); // _ZN7S4304C12v2Ev
  virtual void  v3(); // _ZN7S4304C12v3Ev
  virtual void  v4(); // _ZN7S4304C12v4Ev
  virtual void  v5(); // _ZN7S4304C12v5Ev
  virtual void  v6(); // _ZN7S4304C12v6Ev
  virtual void  v7(); // _ZN7S4304C12v7Ev
  virtual void  v8(); // _ZN7S4304C12v8Ev
  virtual void  v9(); // _ZN7S4304C12v9Ev
  virtual void  v10(); // _ZN7S4304C13v10Ev
  virtual void  v11(); // _ZN7S4304C13v11Ev
  virtual void  v12(); // _ZN7S4304C13v12Ev
  virtual void  v13(); // _ZN7S4304C13v13Ev
  virtual void  v14(); // _ZN7S4304C13v14Ev
  virtual void  v15(); // _ZN7S4304C13v15Ev
  virtual void  v16(); // _ZN7S4304C13v16Ev
  virtual void  v17(); // _ZN7S4304C13v17Ev
  virtual void  v18(); // _ZN7S4304C13v18Ev
  S4304C1(); // tgen
};
//SIG(1 S4304C1) C1{ BC2{ BC3{ vd 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} vd v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v59 v60 Fp Fc[32] Fi[6] Fc Fi[2]} BC6{ vd v61 v62 v63 v64 v65 v66} BC7{ vd v67 v68 v69} BC8{ m Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp[2] Fl FL Fi FL[3] Fc Fi FC9{ Fl FL Fl Fi Fl[3] FL[2] Fl} FC10{ Fl FL[2] Fl FL Fs[2] Fc[2] Fl[9] Fs[4]} Fp[2] Fi[34] Fl Fp[2]}


 S4304C1 ::~S4304C1(){ note_dtor("S4304C1", this);}
void  S4304C1 ::v1(){vfunc_called(this, "_ZN7S4304C12v1Ev");}
void  S4304C1 ::v2(){vfunc_called(this, "_ZN7S4304C12v2Ev");}
void  S4304C1 ::v3(){vfunc_called(this, "_ZN7S4304C12v3Ev");}
void  S4304C1 ::v4(){vfunc_called(this, "_ZN7S4304C12v4Ev");}
void  S4304C1 ::v5(){vfunc_called(this, "_ZN7S4304C12v5Ev");}
void  S4304C1 ::v6(){vfunc_called(this, "_ZN7S4304C12v6Ev");}
void  S4304C1 ::v7(){vfunc_called(this, "_ZN7S4304C12v7Ev");}
void  S4304C1 ::v8(){vfunc_called(this, "_ZN7S4304C12v8Ev");}
void  S4304C1 ::v9(){vfunc_called(this, "_ZN7S4304C12v9Ev");}
void  S4304C1 ::v10(){vfunc_called(this, "_ZN7S4304C13v10Ev");}
void  S4304C1 ::v11(){vfunc_called(this, "_ZN7S4304C13v11Ev");}
void  S4304C1 ::v12(){vfunc_called(this, "_ZN7S4304C13v12Ev");}
void  S4304C1 ::v13(){vfunc_called(this, "_ZN7S4304C13v13Ev");}
void  S4304C1 ::v14(){vfunc_called(this, "_ZN7S4304C13v14Ev");}
void  S4304C1 ::v15(){vfunc_called(this, "_ZN7S4304C13v15Ev");}
void  S4304C1 ::v16(){vfunc_called(this, "_ZN7S4304C13v16Ev");}
void  S4304C1 ::v17(){vfunc_called(this, "_ZN7S4304C13v17Ev");}
void  S4304C1 ::v18(){vfunc_called(this, "_ZN7S4304C13v18Ev");}
S4304C1 ::S4304C1(){ note_ctor("S4304C1", this);} // tgen

static void Test_S4304C1()
{
  extern Class_Descriptor cd_S4304C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(82,123)];
    init_test(&cd_S4304C1, buf);
    S4304C1 *dp, &lv = *(dp=new (buf) S4304C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(648,488), "sizeof(S4304C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4304C1)");
    check_base_class_offset(lv, (S4304C3_nt*)(S4304C2_nt*), 0, "S4304C1");
    check_base_class_offset(lv, (S4304C2_nt*), 0, "S4304C1");
    check_base_class_offset(lv, (S4304C5_nt*), ABISELECT(72,48), "S4304C1");
    check_base_class_offset(lv, (S4304C6_nt*), ABISELECT(160,124), "S4304C1");
    check_base_class_offset(lv, (S4304C7*), ABISELECT(168,128), "S4304C1");
    check_base_class_offset(lv, (S4304C8_nt*), ABISELECT(176,132), "S4304C1");
    check_field_offset(lv, s4304c1f0, ABISELECT(192,140), "S4304C1.s4304c1f0");
    check_field_offset(lv, s4304c1f1, ABISELECT(208,148), "S4304C1.s4304c1f1");
    check_field_offset(lv, s4304c1f2, ABISELECT(216,152), "S4304C1.s4304c1f2");
    check_field_offset(lv, s4304c1f3, ABISELECT(224,160), "S4304C1.s4304c1f3");
    check_field_offset(lv, s4304c1f4, ABISELECT(232,164), "S4304C1.s4304c1f4");
    check_field_offset(lv, s4304c1f5, ABISELECT(256,188), "S4304C1.s4304c1f5");
    check_field_offset(lv, s4304c1f6, ABISELECT(260,192), "S4304C1.s4304c1f6");
    check_field_offset(lv, s4304c1f7, ABISELECT(264,196), "S4304C1.s4304c1f7");
    check_field_offset(lv, s4304c1f8, ABISELECT(344,248), "S4304C1.s4304c1f8");
    check_field_offset(lv, s4304c1f9, ABISELECT(472,332), "S4304C1.s4304c1f9");
    check_field_offset(lv, s4304c1f10, ABISELECT(488,340), "S4304C1.s4304c1f10");
    check_field_offset(lv, s4304c1f11, ABISELECT(624,476), "S4304C1.s4304c1f11");
    check_field_offset(lv, s4304c1f12, ABISELECT(632,480), "S4304C1.s4304c1f12");
    test_class_info(&lv, &cd_S4304C1);
    dp->~S4304C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4304C1(Test_S4304C1, "S4304C1", ABISELECT(648,488));

#else // __cplusplus

extern void _ZN7S4304C1C1Ev();
extern void _ZN7S4304C1D1Ev();
Name_Map name_map_S4304C1[] = {
  NSPAIR(_ZN7S4304C1C1Ev),
  NSPAIR(_ZN7S4304C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4304C3_nt;
extern VTBL_ENTRY _ZTI10S4304C3_nt[];
extern  VTBL_ENTRY _ZTV10S4304C3_nt[];
extern Class_Descriptor cd_S4304C2_nt;
extern VTBL_ENTRY _ZTI10S4304C2_nt[];
extern  VTBL_ENTRY _ZTV10S4304C2_nt[];
extern Class_Descriptor cd_S4304C5_nt;
extern VTBL_ENTRY _ZTI10S4304C5_nt[];
extern  VTBL_ENTRY _ZTV10S4304C5_nt[];
extern Class_Descriptor cd_S4304C6_nt;
extern VTBL_ENTRY _ZTI10S4304C6_nt[];
extern  VTBL_ENTRY _ZTV10S4304C6_nt[];
extern Class_Descriptor cd_S4304C7;
extern VTBL_ENTRY _ZTI7S4304C7[];
extern  VTBL_ENTRY _ZTV7S4304C7[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
static Base_Class bases_S4304C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4304C3_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_S4304C2_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_S4304C5_nt,    ABISELECT(72,48), //bcp->offset
    62, //bcp->virtual_function_table_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_S4304C6_nt,    ABISELECT(160,124), //bcp->offset
    68, //bcp->virtual_function_table_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_S4304C7,    ABISELECT(168,128), //bcp->offset
    78, //bcp->virtual_function_table_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_S4304C8_nt,    ABISELECT(176,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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4304C1[];
extern void _ZN7S4304C1D1Ev();
extern void _ZN7S4304C1D0Ev();
extern void _ZN10S4304C3_nt3v19Ev();
extern void _ZN10S4304C3_nt3v20Ev();
extern void _ZN10S4304C3_nt3v21Ev();
extern void _ZN10S4304C3_nt3v22Ev();
extern void _ZN10S4304C3_nt3v23Ev();
extern void _ZN10S4304C3_nt3v24Ev();
extern void _ZN10S4304C3_nt3v25Ev();
extern void _ZN10S4304C3_nt3v26Ev();
extern void _ZN10S4304C3_nt3v27Ev();
extern void _ZN10S4304C3_nt3v28Ev();
extern void _ZN10S4304C3_nt3v29Ev();
extern void _ZN10S4304C3_nt3v30Ev();
extern void _ZN10S4304C3_nt3v31Ev();
extern void _ZN10S4304C3_nt3v32Ev();
extern void _ZN10S4304C3_nt3v33Ev();
extern void _ZN10S4304C3_nt3v34Ev();
extern void _ZN10S4304C3_nt3v35Ev();
extern void _ZN10S4304C3_nt3v36Ev();
extern void _ZN10S4304C3_nt3v37Ev();
extern void _ZN10S4304C3_nt3v38Ev();
extern void _ZN10S4304C3_nt3v39Ev();
extern void _ZN10S4304C3_nt3v40Ev();
extern void _ZN10S4304C3_nt3v41Ev();
extern void _ZN10S4304C3_nt3v42Ev();
extern void _ZN10S4304C3_nt3v43Ev();
extern void _ZN10S4304C3_nt3v44Ev();
extern void _ZN10S4304C2_nt3v45Ev();
extern void _ZN10S4304C2_nt3v46Ev();
extern void _ZN10S4304C2_nt3v47Ev();
extern void _ZN10S4304C2_nt3v48Ev();
extern void _ZN10S4304C2_nt3v49Ev();
extern void _ZN10S4304C2_nt3v50Ev();
extern void _ZN10S4304C2_nt3v51Ev();
extern void _ZN10S4304C2_nt3v52Ev();
extern void _ZN10S4304C2_nt3v53Ev();
extern void _ZN10S4304C2_nt3v54Ev();
extern void _ZN10S4304C2_nt3v55Ev();
extern void _ZN10S4304C2_nt3v56Ev();
extern void _ZN10S4304C2_nt3v57Ev();
extern void _ZN10S4304C2_nt3v58Ev();
extern void _ZN7S4304C12v1Ev();
extern void _ZN7S4304C12v2Ev();
extern void _ZN7S4304C12v3Ev();
extern void _ZN7S4304C12v4Ev();
extern void _ZN7S4304C12v5Ev();
extern void _ZN7S4304C12v6Ev();
extern void _ZN7S4304C12v7Ev();
extern void _ZN7S4304C12v8Ev();
extern void _ZN7S4304C12v9Ev();
extern void _ZN7S4304C13v10Ev();
extern void _ZN7S4304C13v11Ev();
extern void _ZN7S4304C13v12Ev();
extern void _ZN7S4304C13v13Ev();
extern void _ZN7S4304C13v14Ev();
extern void _ZN7S4304C13v15Ev();
extern void _ZN7S4304C13v16Ev();
extern void _ZN7S4304C13v17Ev();
extern void _ZN7S4304C13v18Ev();
extern void ABISELECT(_ZThn72_N7S4304C1D1Ev,_ZThn48_N7S4304C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4304C1D0Ev,_ZThn48_N7S4304C1D0Ev)();
extern void _ZN10S4304C5_nt3v59Ev();
extern void _ZN10S4304C5_nt3v60Ev();
extern void ABISELECT(_ZThn160_N7S4304C1D1Ev,_ZThn124_N7S4304C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S4304C1D0Ev,_ZThn124_N7S4304C1D0Ev)();
extern void _ZN10S4304C6_nt3v61Ev();
extern void _ZN10S4304C6_nt3v62Ev();
extern void _ZN10S4304C6_nt3v63Ev();
extern void _ZN10S4304C6_nt3v64Ev();
extern void _ZN10S4304C6_nt3v65Ev();
extern void _ZN10S4304C6_nt3v66Ev();
extern void ABISELECT(_ZThn168_N7S4304C1D1Ev,_ZThn128_N7S4304C1D1Ev)();
extern void ABISELECT(_ZThn168_N7S4304C1D0Ev,_ZThn128_N7S4304C1D0Ev)();
extern void _ZN7S4304C73v67Ev();
extern void _ZN7S4304C73v68Ev();
extern void _ZN7S4304C73v69Ev();
static  VTBL_ENTRY vtc_S4304C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4304C1[0]),
  (VTBL_ENTRY)&_ZN7S4304C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4304C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S4304C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S4304C2_nt3v58Ev,
  (VTBL_ENTRY)&_ZN7S4304C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4304C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4304C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4304C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4304C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4304C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4304C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4304C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4304C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4304C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4304C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4304C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4304C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4304C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4304C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4304C13v16Ev,
  (VTBL_ENTRY)&_ZN7S4304C13v17Ev,
  (VTBL_ENTRY)&_ZN7S4304C13v18Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4304C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4304C1D1Ev,_ZThn48_N7S4304C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4304C1D0Ev,_ZThn48_N7S4304C1D0Ev),
  (VTBL_ENTRY)&_ZN10S4304C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S4304C5_nt3v60Ev,
  ABISELECT(-160,-124),
  (VTBL_ENTRY)&(_ZTI7S4304C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4304C1D1Ev,_ZThn124_N7S4304C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4304C1D0Ev,_ZThn124_N7S4304C1D0Ev),
  (VTBL_ENTRY)&_ZN10S4304C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S4304C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S4304C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S4304C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S4304C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S4304C6_nt3v66Ev,
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI7S4304C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4304C1D1Ev,_ZThn128_N7S4304C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4304C1D0Ev,_ZThn128_N7S4304C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4304C73v67Ev,
  (VTBL_ENTRY)&_ZN7S4304C73v68Ev,
  (VTBL_ENTRY)&_ZN7S4304C73v69Ev,
};
extern VTBL_ENTRY _ZTI7S4304C1[];
extern  VTBL_ENTRY _ZTV7S4304C1[];
Class_Descriptor cd_S4304C1 = {  "S4304C1", // class name
  bases_S4304C1, 6,
  &(vtc_S4304C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(648,488), // object size
  NSPAIRA(_ZTI7S4304C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S4304C1),85, //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  S3122C3  {
  int s3122c3f0;
  __tsi64 s3122c3f1;
  void *s3122c3f2[4];
  int s3122c3f3[2];
  void *s3122c3f4;
  ::S1566C14_nt s3122c3f5;
  void *s3122c3f6[2];
  virtual  ~S3122C3(); // _ZN7S3122C3D1Ev
  virtual void  v20(); // _ZN7S3122C33v20Ev
  virtual void  v21(); // _ZN7S3122C33v21Ev
  virtual void  v22(); // _ZN7S3122C33v22Ev
  virtual void  v23(); // _ZN7S3122C33v23Ev
  virtual void  v24(); // _ZN7S3122C33v24Ev
  virtual void  v25(); // _ZN7S3122C33v25Ev
  virtual void  v26(); // _ZN7S3122C33v26Ev
  virtual void  v27(); // _ZN7S3122C33v27Ev
  virtual void  v28(); // _ZN7S3122C33v28Ev
  virtual void  v29(); // _ZN7S3122C33v29Ev
  virtual void  v30(); // _ZN7S3122C33v30Ev
  virtual void  v31(); // _ZN7S3122C33v31Ev
  virtual void  v32(); // _ZN7S3122C33v32Ev
  virtual void  v33(); // _ZN7S3122C33v33Ev
  virtual void  v34(); // _ZN7S3122C33v34Ev
  virtual void  v35(); // _ZN7S3122C33v35Ev
  virtual void  v36(); // _ZN7S3122C33v36Ev
  virtual void  v37(); // _ZN7S3122C33v37Ev
  virtual void  v38(); // _ZN7S3122C33v38Ev
  virtual void  v39(); // _ZN7S3122C33v39Ev
  virtual void  v40(); // _ZN7S3122C33v40Ev
  virtual void  v41(); // _ZN7S3122C33v41Ev
  virtual void  v42(); // _ZN7S3122C33v42Ev
  virtual void  v43(); // _ZN7S3122C33v43Ev
  virtual void  v44(); // _ZN7S3122C33v44Ev
  virtual void  v45(); // _ZN7S3122C33v45Ev
  virtual void  v46(); // _ZN7S3122C33v46Ev
  virtual void  v47(); // _ZN7S3122C33v47Ev
  virtual void  v48(); // _ZN7S3122C33v48Ev
  virtual void  v49(); // _ZN7S3122C33v49Ev
  virtual void  v50(); // _ZN7S3122C33v50Ev
  virtual void  v51(); // _ZN7S3122C33v51Ev
  virtual void  v52(); // _ZN7S3122C33v52Ev
  virtual void  v53(); // _ZN7S3122C33v53Ev
  virtual void  v54(); // _ZN7S3122C33v54Ev
  virtual void  v55(); // _ZN7S3122C33v55Ev
  virtual void  v56(); // _ZN7S3122C33v56Ev
  virtual void  v57(); // _ZN7S3122C33v57Ev
  virtual void  v58(); // _ZN7S3122C33v58Ev
  virtual void  v59(); // _ZN7S3122C33v59Ev
  virtual void  v60(); // _ZN7S3122C33v60Ev
  virtual void  v61(); // _ZN7S3122C33v61Ev
  virtual void  v62(); // _ZN7S3122C33v62Ev
  virtual void  v63(); // _ZN7S3122C33v63Ev
  virtual void  v64(); // _ZN7S3122C33v64Ev
  virtual void  v65(); // _ZN7S3122C33v65Ev
  virtual void  v66(); // _ZN7S3122C33v66Ev
  virtual void  v67(); // _ZN7S3122C33v67Ev
  virtual void  v68(); // _ZN7S3122C33v68Ev
  virtual void  v69(); // _ZN7S3122C33v69Ev
  virtual void  v70(); // _ZN7S3122C33v70Ev
  virtual void  v71(); // _ZN7S3122C33v71Ev
  virtual void  v72(); // _ZN7S3122C33v72Ev
  virtual void  v73(); // _ZN7S3122C33v73Ev
  virtual void  v74(); // _ZN7S3122C33v74Ev
  virtual void  v75(); // _ZN7S3122C33v75Ev
  virtual void  v76(); // _ZN7S3122C33v76Ev
  virtual void  v77(); // _ZN7S3122C33v77Ev
  virtual void  v78(); // _ZN7S3122C33v78Ev
  virtual void  v79(); // _ZN7S3122C33v79Ev
  virtual void  v80(); // _ZN7S3122C33v80Ev
  virtual void  v81(); // _ZN7S3122C33v81Ev
  virtual void  v82(); // _ZN7S3122C33v82Ev
  virtual void  v83(); // _ZN7S3122C33v83Ev
  S3122C3(); // tgen
};
//SIG(-1 S3122C3) 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]}


 S3122C3 ::~S3122C3(){ note_dtor("S3122C3", this);}
void  S3122C3 ::v20(){vfunc_called(this, "_ZN7S3122C33v20Ev");}
void  S3122C3 ::v21(){vfunc_called(this, "_ZN7S3122C33v21Ev");}
void  S3122C3 ::v22(){vfunc_called(this, "_ZN7S3122C33v22Ev");}
void  S3122C3 ::v23(){vfunc_called(this, "_ZN7S3122C33v23Ev");}
void  S3122C3 ::v24(){vfunc_called(this, "_ZN7S3122C33v24Ev");}
void  S3122C3 ::v25(){vfunc_called(this, "_ZN7S3122C33v25Ev");}
void  S3122C3 ::v26(){vfunc_called(this, "_ZN7S3122C33v26Ev");}
void  S3122C3 ::v27(){vfunc_called(this, "_ZN7S3122C33v27Ev");}
void  S3122C3 ::v28(){vfunc_called(this, "_ZN7S3122C33v28Ev");}
void  S3122C3 ::v29(){vfunc_called(this, "_ZN7S3122C33v29Ev");}
void  S3122C3 ::v30(){vfunc_called(this, "_ZN7S3122C33v30Ev");}
void  S3122C3 ::v31(){vfunc_called(this, "_ZN7S3122C33v31Ev");}
void  S3122C3 ::v32(){vfunc_called(this, "_ZN7S3122C33v32Ev");}
void  S3122C3 ::v33(){vfunc_called(this, "_ZN7S3122C33v33Ev");}
void  S3122C3 ::v34(){vfunc_called(this, "_ZN7S3122C33v34Ev");}
void  S3122C3 ::v35(){vfunc_called(this, "_ZN7S3122C33v35Ev");}
void  S3122C3 ::v36(){vfunc_called(this, "_ZN7S3122C33v36Ev");}
void  S3122C3 ::v37(){vfunc_called(this, "_ZN7S3122C33v37Ev");}
void  S3122C3 ::v38(){vfunc_called(this, "_ZN7S3122C33v38Ev");}
void  S3122C3 ::v39(){vfunc_called(this, "_ZN7S3122C33v39Ev");}
void  S3122C3 ::v40(){vfunc_called(this, "_ZN7S3122C33v40Ev");}
void  S3122C3 ::v41(){vfunc_called(this, "_ZN7S3122C33v41Ev");}
void  S3122C3 ::v42(){vfunc_called(this, "_ZN7S3122C33v42Ev");}
void  S3122C3 ::v43(){vfunc_called(this, "_ZN7S3122C33v43Ev");}
void  S3122C3 ::v44(){vfunc_called(this, "_ZN7S3122C33v44Ev");}
void  S3122C3 ::v45(){vfunc_called(this, "_ZN7S3122C33v45Ev");}
void  S3122C3 ::v46(){vfunc_called(this, "_ZN7S3122C33v46Ev");}
void  S3122C3 ::v47(){vfunc_called(this, "_ZN7S3122C33v47Ev");}
void  S3122C3 ::v48(){vfunc_called(this, "_ZN7S3122C33v48Ev");}
void  S3122C3 ::v49(){vfunc_called(this, "_ZN7S3122C33v49Ev");}
void  S3122C3 ::v50(){vfunc_called(this, "_ZN7S3122C33v50Ev");}
void  S3122C3 ::v51(){vfunc_called(this, "_ZN7S3122C33v51Ev");}
void  S3122C3 ::v52(){vfunc_called(this, "_ZN7S3122C33v52Ev");}
void  S3122C3 ::v53(){vfunc_called(this, "_ZN7S3122C33v53Ev");}
void  S3122C3 ::v54(){vfunc_called(this, "_ZN7S3122C33v54Ev");}
void  S3122C3 ::v55(){vfunc_called(this, "_ZN7S3122C33v55Ev");}
void  S3122C3 ::v56(){vfunc_called(this, "_ZN7S3122C33v56Ev");}
void  S3122C3 ::v57(){vfunc_called(this, "_ZN7S3122C33v57Ev");}
void  S3122C3 ::v58(){vfunc_called(this, "_ZN7S3122C33v58Ev");}
void  S3122C3 ::v59(){vfunc_called(this, "_ZN7S3122C33v59Ev");}
void  S3122C3 ::v60(){vfunc_called(this, "_ZN7S3122C33v60Ev");}
void  S3122C3 ::v61(){vfunc_called(this, "_ZN7S3122C33v61Ev");}
void  S3122C3 ::v62(){vfunc_called(this, "_ZN7S3122C33v62Ev");}
void  S3122C3 ::v63(){vfunc_called(this, "_ZN7S3122C33v63Ev");}
void  S3122C3 ::v64(){vfunc_called(this, "_ZN7S3122C33v64Ev");}
void  S3122C3 ::v65(){vfunc_called(this, "_ZN7S3122C33v65Ev");}
void  S3122C3 ::v66(){vfunc_called(this, "_ZN7S3122C33v66Ev");}
void  S3122C3 ::v67(){vfunc_called(this, "_ZN7S3122C33v67Ev");}
void  S3122C3 ::v68(){vfunc_called(this, "_ZN7S3122C33v68Ev");}
void  S3122C3 ::v69(){vfunc_called(this, "_ZN7S3122C33v69Ev");}
void  S3122C3 ::v70(){vfunc_called(this, "_ZN7S3122C33v70Ev");}
void  S3122C3 ::v71(){vfunc_called(this, "_ZN7S3122C33v71Ev");}
void  S3122C3 ::v72(){vfunc_called(this, "_ZN7S3122C33v72Ev");}
void  S3122C3 ::v73(){vfunc_called(this, "_ZN7S3122C33v73Ev");}
void  S3122C3 ::v74(){vfunc_called(this, "_ZN7S3122C33v74Ev");}
void  S3122C3 ::v75(){vfunc_called(this, "_ZN7S3122C33v75Ev");}
void  S3122C3 ::v76(){vfunc_called(this, "_ZN7S3122C33v76Ev");}
void  S3122C3 ::v77(){vfunc_called(this, "_ZN7S3122C33v77Ev");}
void  S3122C3 ::v78(){vfunc_called(this, "_ZN7S3122C33v78Ev");}
void  S3122C3 ::v79(){vfunc_called(this, "_ZN7S3122C33v79Ev");}
void  S3122C3 ::v80(){vfunc_called(this, "_ZN7S3122C33v80Ev");}
void  S3122C3 ::v81(){vfunc_called(this, "_ZN7S3122C33v81Ev");}
void  S3122C3 ::v82(){vfunc_called(this, "_ZN7S3122C33v82Ev");}
void  S3122C3 ::v83(){vfunc_called(this, "_ZN7S3122C33v83Ev");}
S3122C3 ::S3122C3(){ note_ctor("S3122C3", this);} // tgen

static void Test_S3122C3()
{
  extern Class_Descriptor cd_S3122C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3122C3, buf);
    S3122C3 *dp, &lv = *(dp=new (buf) S3122C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3122C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3122C3)");
    check_field_offset(lv, s3122c3f0, ABISELECT(8,4), "S3122C3.s3122c3f0");
    check_field_offset(lv, s3122c3f1, ABISELECT(16,8), "S3122C3.s3122c3f1");
    check_field_offset(lv, s3122c3f2, ABISELECT(24,16), "S3122C3.s3122c3f2");
    check_field_offset(lv, s3122c3f3, ABISELECT(56,32), "S3122C3.s3122c3f3");
    check_field_offset(lv, s3122c3f4, ABISELECT(64,40), "S3122C3.s3122c3f4");
    check_field_offset(lv, s3122c3f5, ABISELECT(72,44), "S3122C3.s3122c3f5");
    check_field_offset(lv, s3122c3f6, ABISELECT(80,52), "S3122C3.s3122c3f6");
    test_class_info(&lv, &cd_S3122C3);
    dp->~S3122C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3122C3(Test_S3122C3, "S3122C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3122C3C1Ev();
extern void _ZN7S3122C3D1Ev();
Name_Map name_map_S3122C3[] = {
  NSPAIR(_ZN7S3122C3C1Ev),
  NSPAIR(_ZN7S3122C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3122C3[];
extern void _ZN7S3122C3D1Ev();
extern void _ZN7S3122C3D0Ev();
extern void _ZN7S3122C33v20Ev();
extern void _ZN7S3122C33v21Ev();
extern void _ZN7S3122C33v22Ev();
extern void _ZN7S3122C33v23Ev();
extern void _ZN7S3122C33v24Ev();
extern void _ZN7S3122C33v25Ev();
extern void _ZN7S3122C33v26Ev();
extern void _ZN7S3122C33v27Ev();
extern void _ZN7S3122C33v28Ev();
extern void _ZN7S3122C33v29Ev();
extern void _ZN7S3122C33v30Ev();
extern void _ZN7S3122C33v31Ev();
extern void _ZN7S3122C33v32Ev();
extern void _ZN7S3122C33v33Ev();
extern void _ZN7S3122C33v34Ev();
extern void _ZN7S3122C33v35Ev();
extern void _ZN7S3122C33v36Ev();
extern void _ZN7S3122C33v37Ev();
extern void _ZN7S3122C33v38Ev();
extern void _ZN7S3122C33v39Ev();
extern void _ZN7S3122C33v40Ev();
extern void _ZN7S3122C33v41Ev();
extern void _ZN7S3122C33v42Ev();
extern void _ZN7S3122C33v43Ev();
extern void _ZN7S3122C33v44Ev();
extern void _ZN7S3122C33v45Ev();
extern void _ZN7S3122C33v46Ev();
extern void _ZN7S3122C33v47Ev();
extern void _ZN7S3122C33v48Ev();
extern void _ZN7S3122C33v49Ev();
extern void _ZN7S3122C33v50Ev();
extern void _ZN7S3122C33v51Ev();
extern void _ZN7S3122C33v52Ev();
extern void _ZN7S3122C33v53Ev();
extern void _ZN7S3122C33v54Ev();
extern void _ZN7S3122C33v55Ev();
extern void _ZN7S3122C33v56Ev();
extern void _ZN7S3122C33v57Ev();
extern void _ZN7S3122C33v58Ev();
extern void _ZN7S3122C33v59Ev();
extern void _ZN7S3122C33v60Ev();
extern void _ZN7S3122C33v61Ev();
extern void _ZN7S3122C33v62Ev();
extern void _ZN7S3122C33v63Ev();
extern void _ZN7S3122C33v64Ev();
extern void _ZN7S3122C33v65Ev();
extern void _ZN7S3122C33v66Ev();
extern void _ZN7S3122C33v67Ev();
extern void _ZN7S3122C33v68Ev();
extern void _ZN7S3122C33v69Ev();
extern void _ZN7S3122C33v70Ev();
extern void _ZN7S3122C33v71Ev();
extern void _ZN7S3122C33v72Ev();
extern void _ZN7S3122C33v73Ev();
extern void _ZN7S3122C33v74Ev();
extern void _ZN7S3122C33v75Ev();
extern void _ZN7S3122C33v76Ev();
extern void _ZN7S3122C33v77Ev();
extern void _ZN7S3122C33v78Ev();
extern void _ZN7S3122C33v79Ev();
extern void _ZN7S3122C33v80Ev();
extern void _ZN7S3122C33v81Ev();
extern void _ZN7S3122C33v82Ev();
extern void _ZN7S3122C33v83Ev();
static  VTBL_ENTRY vtc_S3122C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3122C3[0]),
  (VTBL_ENTRY)&_ZN7S3122C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3122C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v79Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v80Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v81Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v82Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v83Ev,
};
extern VTBL_ENTRY _ZTI7S3122C3[];
extern  VTBL_ENTRY _ZTV7S3122C3[];
Class_Descriptor cd_S3122C3 = {  "S3122C3", // class name
  0,0,//no base classes
  &(vtc_S3122C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3122C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3122C3),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  S3122C2  : S3122C3 {
  int s3122c2f0;
  virtual  ~S3122C2(); // _ZN7S3122C2D1Ev
  virtual void  v84(); // _ZN7S3122C23v84Ev
  virtual void  v85(); // _ZN7S3122C23v85Ev
  virtual void  v86(); // _ZN7S3122C23v86Ev
  virtual void  v87(); // _ZN7S3122C23v87Ev
  virtual void  v88(); // _ZN7S3122C23v88Ev
  virtual void  v89(); // _ZN7S3122C23v89Ev
  virtual void  v90(); // _ZN7S3122C23v90Ev
  virtual void  v91(); // _ZN7S3122C23v91Ev
  virtual void  v92(); // _ZN7S3122C23v92Ev
  virtual void  v93(); // _ZN7S3122C23v93Ev
  virtual void  v94(); // _ZN7S3122C23v94Ev
  virtual void  v95(); // _ZN7S3122C23v95Ev
  virtual void  v96(); // _ZN7S3122C23v96Ev
  virtual void  v97(); // _ZN7S3122C23v97Ev
  virtual void  v98(); // _ZN7S3122C23v98Ev
  virtual void  v99(); // _ZN7S3122C23v99Ev
  virtual void  v100(); // _ZN7S3122C24v100Ev
  S3122C2(); // tgen
};
//SIG(-1 S3122C2) C1{ BC2{ vd 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 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 Fi}


 S3122C2 ::~S3122C2(){ note_dtor("S3122C2", this);}
void  S3122C2 ::v84(){vfunc_called(this, "_ZN7S3122C23v84Ev");}
void  S3122C2 ::v85(){vfunc_called(this, "_ZN7S3122C23v85Ev");}
void  S3122C2 ::v86(){vfunc_called(this, "_ZN7S3122C23v86Ev");}
void  S3122C2 ::v87(){vfunc_called(this, "_ZN7S3122C23v87Ev");}
void  S3122C2 ::v88(){vfunc_called(this, "_ZN7S3122C23v88Ev");}
void  S3122C2 ::v89(){vfunc_called(this, "_ZN7S3122C23v89Ev");}
void  S3122C2 ::v90(){vfunc_called(this, "_ZN7S3122C23v90Ev");}
void  S3122C2 ::v91(){vfunc_called(this, "_ZN7S3122C23v91Ev");}
void  S3122C2 ::v92(){vfunc_called(this, "_ZN7S3122C23v92Ev");}
void  S3122C2 ::v93(){vfunc_called(this, "_ZN7S3122C23v93Ev");}
void  S3122C2 ::v94(){vfunc_called(this, "_ZN7S3122C23v94Ev");}
void  S3122C2 ::v95(){vfunc_called(this, "_ZN7S3122C23v95Ev");}
void  S3122C2 ::v96(){vfunc_called(this, "_ZN7S3122C23v96Ev");}
void  S3122C2 ::v97(){vfunc_called(this, "_ZN7S3122C23v97Ev");}
void  S3122C2 ::v98(){vfunc_called(this, "_ZN7S3122C23v98Ev");}
void  S3122C2 ::v99(){vfunc_called(this, "_ZN7S3122C23v99Ev");}
void  S3122C2 ::v100(){vfunc_called(this, "_ZN7S3122C24v100Ev");}
S3122C2 ::S3122C2(){ note_ctor("S3122C2", this);} // tgen

static void Test_S3122C2()
{
  extern Class_Descriptor cd_S3122C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S3122C2, buf);
    S3122C2 *dp, &lv = *(dp=new (buf) S3122C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S3122C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3122C2)");
    check_base_class_offset(lv, (S3122C3*), 0, "S3122C2");
    check_field_offset(lv, s3122c2f0, ABISELECT(96,60), "S3122C2.s3122c2f0");
    test_class_info(&lv, &cd_S3122C2);
    dp->~S3122C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3122C2(Test_S3122C2, "S3122C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S3122C2C1Ev();
extern void _ZN7S3122C2D1Ev();
Name_Map name_map_S3122C2[] = {
  NSPAIR(_ZN7S3122C2C1Ev),
  NSPAIR(_ZN7S3122C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3122C3;
extern VTBL_ENTRY _ZTI7S3122C3[];
extern  VTBL_ENTRY _ZTV7S3122C3[];
static Base_Class bases_S3122C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3122C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S3122C2[];
extern void _ZN7S3122C2D1Ev();
extern void _ZN7S3122C2D0Ev();
extern void _ZN7S3122C33v20Ev();
extern void _ZN7S3122C33v21Ev();
extern void _ZN7S3122C33v22Ev();
extern void _ZN7S3122C33v23Ev();
extern void _ZN7S3122C33v24Ev();
extern void _ZN7S3122C33v25Ev();
extern void _ZN7S3122C33v26Ev();
extern void _ZN7S3122C33v27Ev();
extern void _ZN7S3122C33v28Ev();
extern void _ZN7S3122C33v29Ev();
extern void _ZN7S3122C33v30Ev();
extern void _ZN7S3122C33v31Ev();
extern void _ZN7S3122C33v32Ev();
extern void _ZN7S3122C33v33Ev();
extern void _ZN7S3122C33v34Ev();
extern void _ZN7S3122C33v35Ev();
extern void _ZN7S3122C33v36Ev();
extern void _ZN7S3122C33v37Ev();
extern void _ZN7S3122C33v38Ev();
extern void _ZN7S3122C33v39Ev();
extern void _ZN7S3122C33v40Ev();
extern void _ZN7S3122C33v41Ev();
extern void _ZN7S3122C33v42Ev();
extern void _ZN7S3122C33v43Ev();
extern void _ZN7S3122C33v44Ev();
extern void _ZN7S3122C33v45Ev();
extern void _ZN7S3122C33v46Ev();
extern void _ZN7S3122C33v47Ev();
extern void _ZN7S3122C33v48Ev();
extern void _ZN7S3122C33v49Ev();
extern void _ZN7S3122C33v50Ev();
extern void _ZN7S3122C33v51Ev();
extern void _ZN7S3122C33v52Ev();
extern void _ZN7S3122C33v53Ev();
extern void _ZN7S3122C33v54Ev();
extern void _ZN7S3122C33v55Ev();
extern void _ZN7S3122C33v56Ev();
extern void _ZN7S3122C33v57Ev();
extern void _ZN7S3122C33v58Ev();
extern void _ZN7S3122C33v59Ev();
extern void _ZN7S3122C33v60Ev();
extern void _ZN7S3122C33v61Ev();
extern void _ZN7S3122C33v62Ev();
extern void _ZN7S3122C33v63Ev();
extern void _ZN7S3122C33v64Ev();
extern void _ZN7S3122C33v65Ev();
extern void _ZN7S3122C33v66Ev();
extern void _ZN7S3122C33v67Ev();
extern void _ZN7S3122C33v68Ev();
extern void _ZN7S3122C33v69Ev();
extern void _ZN7S3122C33v70Ev();
extern void _ZN7S3122C33v71Ev();
extern void _ZN7S3122C33v72Ev();
extern void _ZN7S3122C33v73Ev();
extern void _ZN7S3122C33v74Ev();
extern void _ZN7S3122C33v75Ev();
extern void _ZN7S3122C33v76Ev();
extern void _ZN7S3122C33v77Ev();
extern void _ZN7S3122C33v78Ev();
extern void _ZN7S3122C33v79Ev();
extern void _ZN7S3122C33v80Ev();
extern void _ZN7S3122C33v81Ev();
extern void _ZN7S3122C33v82Ev();
extern void _ZN7S3122C33v83Ev();
extern void _ZN7S3122C23v84Ev();
extern void _ZN7S3122C23v85Ev();
extern void _ZN7S3122C23v86Ev();
extern void _ZN7S3122C23v87Ev();
extern void _ZN7S3122C23v88Ev();
extern void _ZN7S3122C23v89Ev();
extern void _ZN7S3122C23v90Ev();
extern void _ZN7S3122C23v91Ev();
extern void _ZN7S3122C23v92Ev();
extern void _ZN7S3122C23v93Ev();
extern void _ZN7S3122C23v94Ev();
extern void _ZN7S3122C23v95Ev();
extern void _ZN7S3122C23v96Ev();
extern void _ZN7S3122C23v97Ev();
extern void _ZN7S3122C23v98Ev();
extern void _ZN7S3122C23v99Ev();
extern void _ZN7S3122C24v100Ev();
static  VTBL_ENTRY vtc_S3122C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3122C2[0]),
  (VTBL_ENTRY)&_ZN7S3122C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3122C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v79Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v80Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v81Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v82Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v83Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v91Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v92Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v94Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v95Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v96Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v97Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v98Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v99Ev,
  (VTBL_ENTRY)&_ZN7S3122C24v100Ev,
};
extern VTBL_ENTRY _ZTI7S3122C2[];
extern  VTBL_ENTRY _ZTV7S3122C2[];
Class_Descriptor cd_S3122C2 = {  "S3122C2", // class name
  bases_S3122C2, 1,
  &(vtc_S3122C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S3122C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3122C2),85, //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  S3122C1  : S3122C2 {
  ::S4304C8_nt s3122c1f0;
  void *s3122c1f1[3];
  int s3122c1f2[2];
  void *s3122c1f3;
  virtual  ~S3122C1(); // _ZN7S3122C1D1Ev
  virtual void  v1(); // _ZN7S3122C12v1Ev
  virtual void  v2(); // _ZN7S3122C12v2Ev
  virtual void  v3(); // _ZN7S3122C12v3Ev
  virtual void  v4(); // _ZN7S3122C12v4Ev
  virtual void  v5(); // _ZN7S3122C12v5Ev
  virtual void  v6(); // _ZN7S3122C12v6Ev
  virtual void  v7(); // _ZN7S3122C12v7Ev
  virtual void  v8(); // _ZN7S3122C12v8Ev
  virtual void  v9(); // _ZN7S3122C12v9Ev
  virtual void  v10(); // _ZN7S3122C13v10Ev
  virtual void  v11(); // _ZN7S3122C13v11Ev
  virtual void  v12(); // _ZN7S3122C13v12Ev
  virtual void  v13(); // _ZN7S3122C13v13Ev
  virtual void  v14(); // _ZN7S3122C13v14Ev
  virtual void  v15(); // _ZN7S3122C13v15Ev
  virtual void  v16(); // _ZN7S3122C13v16Ev
  virtual void  v17(); // _ZN7S3122C13v17Ev
  virtual void  v18(); // _ZN7S3122C13v18Ev
  virtual void  v19(); // _ZN7S3122C13v19Ev
  S3122C1(); // tgen
};
//SIG(1 S3122C1) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC5{ m Fp Fi} Fp[3] Fi[2] Fp}


 S3122C1 ::~S3122C1(){ note_dtor("S3122C1", this);}
void  S3122C1 ::v1(){vfunc_called(this, "_ZN7S3122C12v1Ev");}
void  S3122C1 ::v2(){vfunc_called(this, "_ZN7S3122C12v2Ev");}
void  S3122C1 ::v3(){vfunc_called(this, "_ZN7S3122C12v3Ev");}
void  S3122C1 ::v4(){vfunc_called(this, "_ZN7S3122C12v4Ev");}
void  S3122C1 ::v5(){vfunc_called(this, "_ZN7S3122C12v5Ev");}
void  S3122C1 ::v6(){vfunc_called(this, "_ZN7S3122C12v6Ev");}
void  S3122C1 ::v7(){vfunc_called(this, "_ZN7S3122C12v7Ev");}
void  S3122C1 ::v8(){vfunc_called(this, "_ZN7S3122C12v8Ev");}
void  S3122C1 ::v9(){vfunc_called(this, "_ZN7S3122C12v9Ev");}
void  S3122C1 ::v10(){vfunc_called(this, "_ZN7S3122C13v10Ev");}
void  S3122C1 ::v11(){vfunc_called(this, "_ZN7S3122C13v11Ev");}
void  S3122C1 ::v12(){vfunc_called(this, "_ZN7S3122C13v12Ev");}
void  S3122C1 ::v13(){vfunc_called(this, "_ZN7S3122C13v13Ev");}
void  S3122C1 ::v14(){vfunc_called(this, "_ZN7S3122C13v14Ev");}
void  S3122C1 ::v15(){vfunc_called(this, "_ZN7S3122C13v15Ev");}
void  S3122C1 ::v16(){vfunc_called(this, "_ZN7S3122C13v16Ev");}
void  S3122C1 ::v17(){vfunc_called(this, "_ZN7S3122C13v17Ev");}
void  S3122C1 ::v18(){vfunc_called(this, "_ZN7S3122C13v18Ev");}
void  S3122C1 ::v19(){vfunc_called(this, "_ZN7S3122C13v19Ev");}
S3122C1 ::S3122C1(){ note_ctor("S3122C1", this);} // tgen

static void Test_S3122C1()
{
  extern Class_Descriptor cd_S3122C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,25)];
    init_test(&cd_S3122C1, buf);
    S3122C1 *dp, &lv = *(dp=new (buf) S3122C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,96), "sizeof(S3122C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3122C1)");
    check_base_class_offset(lv, (S3122C3*)(S3122C2*), 0, "S3122C1");
    check_base_class_offset(lv, (S3122C2*), 0, "S3122C1");
    check_field_offset(lv, s3122c1f0, ABISELECT(104,64), "S3122C1.s3122c1f0");
    check_field_offset(lv, s3122c1f1, ABISELECT(120,72), "S3122C1.s3122c1f1");
    check_field_offset(lv, s3122c1f2, ABISELECT(144,84), "S3122C1.s3122c1f2");
    check_field_offset(lv, s3122c1f3, ABISELECT(152,92), "S3122C1.s3122c1f3");
    test_class_info(&lv, &cd_S3122C1);
    dp->~S3122C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3122C1(Test_S3122C1, "S3122C1", ABISELECT(160,96));

#else // __cplusplus

extern void _ZN7S3122C1C1Ev();
extern void _ZN7S3122C1D1Ev();
Name_Map name_map_S3122C1[] = {
  NSPAIR(_ZN7S3122C1C1Ev),
  NSPAIR(_ZN7S3122C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3122C3;
extern VTBL_ENTRY _ZTI7S3122C3[];
extern  VTBL_ENTRY _ZTV7S3122C3[];
extern Class_Descriptor cd_S3122C2;
extern VTBL_ENTRY _ZTI7S3122C2[];
extern  VTBL_ENTRY _ZTV7S3122C2[];
static Base_Class bases_S3122C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3122C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3122C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3122C1[];
extern void _ZN7S3122C1D1Ev();
extern void _ZN7S3122C1D0Ev();
extern void _ZN7S3122C33v20Ev();
extern void _ZN7S3122C33v21Ev();
extern void _ZN7S3122C33v22Ev();
extern void _ZN7S3122C33v23Ev();
extern void _ZN7S3122C33v24Ev();
extern void _ZN7S3122C33v25Ev();
extern void _ZN7S3122C33v26Ev();
extern void _ZN7S3122C33v27Ev();
extern void _ZN7S3122C33v28Ev();
extern void _ZN7S3122C33v29Ev();
extern void _ZN7S3122C33v30Ev();
extern void _ZN7S3122C33v31Ev();
extern void _ZN7S3122C33v32Ev();
extern void _ZN7S3122C33v33Ev();
extern void _ZN7S3122C33v34Ev();
extern void _ZN7S3122C33v35Ev();
extern void _ZN7S3122C33v36Ev();
extern void _ZN7S3122C33v37Ev();
extern void _ZN7S3122C33v38Ev();
extern void _ZN7S3122C33v39Ev();
extern void _ZN7S3122C33v40Ev();
extern void _ZN7S3122C33v41Ev();
extern void _ZN7S3122C33v42Ev();
extern void _ZN7S3122C33v43Ev();
extern void _ZN7S3122C33v44Ev();
extern void _ZN7S3122C33v45Ev();
extern void _ZN7S3122C33v46Ev();
extern void _ZN7S3122C33v47Ev();
extern void _ZN7S3122C33v48Ev();
extern void _ZN7S3122C33v49Ev();
extern void _ZN7S3122C33v50Ev();
extern void _ZN7S3122C33v51Ev();
extern void _ZN7S3122C33v52Ev();
extern void _ZN7S3122C33v53Ev();
extern void _ZN7S3122C33v54Ev();
extern void _ZN7S3122C33v55Ev();
extern void _ZN7S3122C33v56Ev();
extern void _ZN7S3122C33v57Ev();
extern void _ZN7S3122C33v58Ev();
extern void _ZN7S3122C33v59Ev();
extern void _ZN7S3122C33v60Ev();
extern void _ZN7S3122C33v61Ev();
extern void _ZN7S3122C33v62Ev();
extern void _ZN7S3122C33v63Ev();
extern void _ZN7S3122C33v64Ev();
extern void _ZN7S3122C33v65Ev();
extern void _ZN7S3122C33v66Ev();
extern void _ZN7S3122C33v67Ev();
extern void _ZN7S3122C33v68Ev();
extern void _ZN7S3122C33v69Ev();
extern void _ZN7S3122C33v70Ev();
extern void _ZN7S3122C33v71Ev();
extern void _ZN7S3122C33v72Ev();
extern void _ZN7S3122C33v73Ev();
extern void _ZN7S3122C33v74Ev();
extern void _ZN7S3122C33v75Ev();
extern void _ZN7S3122C33v76Ev();
extern void _ZN7S3122C33v77Ev();
extern void _ZN7S3122C33v78Ev();
extern void _ZN7S3122C33v79Ev();
extern void _ZN7S3122C33v80Ev();
extern void _ZN7S3122C33v81Ev();
extern void _ZN7S3122C33v82Ev();
extern void _ZN7S3122C33v83Ev();
extern void _ZN7S3122C23v84Ev();
extern void _ZN7S3122C23v85Ev();
extern void _ZN7S3122C23v86Ev();
extern void _ZN7S3122C23v87Ev();
extern void _ZN7S3122C23v88Ev();
extern void _ZN7S3122C23v89Ev();
extern void _ZN7S3122C23v90Ev();
extern void _ZN7S3122C23v91Ev();
extern void _ZN7S3122C23v92Ev();
extern void _ZN7S3122C23v93Ev();
extern void _ZN7S3122C23v94Ev();
extern void _ZN7S3122C23v95Ev();
extern void _ZN7S3122C23v96Ev();
extern void _ZN7S3122C23v97Ev();
extern void _ZN7S3122C23v98Ev();
extern void _ZN7S3122C23v99Ev();
extern void _ZN7S3122C24v100Ev();
extern void _ZN7S3122C12v1Ev();
extern void _ZN7S3122C12v2Ev();
extern void _ZN7S3122C12v3Ev();
extern void _ZN7S3122C12v4Ev();
extern void _ZN7S3122C12v5Ev();
extern void _ZN7S3122C12v6Ev();
extern void _ZN7S3122C12v7Ev();
extern void _ZN7S3122C12v8Ev();
extern void _ZN7S3122C12v9Ev();
extern void _ZN7S3122C13v10Ev();
extern void _ZN7S3122C13v11Ev();
extern void _ZN7S3122C13v12Ev();
extern void _ZN7S3122C13v13Ev();
extern void _ZN7S3122C13v14Ev();
extern void _ZN7S3122C13v15Ev();
extern void _ZN7S3122C13v16Ev();
extern void _ZN7S3122C13v17Ev();
extern void _ZN7S3122C13v18Ev();
extern void _ZN7S3122C13v19Ev();
static  VTBL_ENTRY vtc_S3122C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3122C1[0]),
  (VTBL_ENTRY)&_ZN7S3122C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3122C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v79Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v80Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v81Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v82Ev,
  (VTBL_ENTRY)&_ZN7S3122C33v83Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v91Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v92Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v94Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v95Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v96Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v97Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v98Ev,
  (VTBL_ENTRY)&_ZN7S3122C23v99Ev,
  (VTBL_ENTRY)&_ZN7S3122C24v100Ev,
  (VTBL_ENTRY)&_ZN7S3122C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3122C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3122C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3122C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3122C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3122C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3122C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3122C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3122C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3122C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3122C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3122C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3122C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3122C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3122C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3122C13v16Ev,
  (VTBL_ENTRY)&_ZN7S3122C13v17Ev,
  (VTBL_ENTRY)&_ZN7S3122C13v18Ev,
  (VTBL_ENTRY)&_ZN7S3122C13v19Ev,
};
extern VTBL_ENTRY _ZTI7S3122C1[];
extern  VTBL_ENTRY _ZTV7S3122C1[];
Class_Descriptor cd_S3122C1 = {  "S3122C1", // class name
  bases_S3122C1, 2,
  &(vtc_S3122C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,96), // object size
  NSPAIRA(_ZTI7S3122C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3122C1),104, //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  S19252C3  {
  void *s19252c3f0;
  short s19252c3f1;
  long double s19252c3f2;
  virtual void  v1(); // _ZN8S19252C32v1Ev
  ~S19252C3(); // tgen
  S19252C3(); // tgen
};
//SIG(-1 S19252C3) C1{ v1 Fp Fs FD}


void  S19252C3 ::v1(){vfunc_called(this, "_ZN8S19252C32v1Ev");}
S19252C3 ::~S19252C3(){ note_dtor("S19252C3", this);} // tgen
S19252C3 ::S19252C3(){ note_ctor("S19252C3", this);} // tgen

static void Test_S19252C3()
{
  extern Class_Descriptor cd_S19252C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S19252C3, buf);
    S19252C3 *dp, &lv = *(dp=new (buf) S19252C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19252C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19252C3)");
    check_field_offset(lv, s19252c3f0, ABISELECT(8,4), "S19252C3.s19252c3f0");
    check_field_offset(lv, s19252c3f1, ABISELECT(16,8), "S19252C3.s19252c3f1");
    check_field_offset(lv, s19252c3f2, ABISELECT(32,12), "S19252C3.s19252c3f2");
    test_class_info(&lv, &cd_S19252C3);
    dp->~S19252C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19252C3(Test_S19252C3, "S19252C3", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19252C3C1Ev();
extern void _ZN8S19252C3D1Ev();
Name_Map name_map_S19252C3[] = {
  NSPAIR(_ZN8S19252C3C1Ev),
  NSPAIR(_ZN8S19252C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19252C3[];
extern void _ZN8S19252C32v1Ev();
static  VTBL_ENTRY vtc_S19252C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19252C3[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
};
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
Class_Descriptor cd_S19252C3 = {  "S19252C3", // class name
  0,0,//no base classes
  &(vtc_S19252C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19252C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19252C3),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  S19252C5_nt  {
};
//SIG(-1 S19252C5_nt) C1{}



//skip512 S19252C5_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S19252C5_nt[];
VTBL_ENTRY *P__ZTI11S19252C5_nt = _ZTI11S19252C5_nt; 
Class_Descriptor cd_S19252C5_nt = {  "S19252C5_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S19252C5_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  S19252C4  {
  int s19252c4f0;
  char s19252c4f1;
  void *s19252c4f2;
  ::S19252C5_nt s19252c4f3;
  void  mf19252c4(); // _ZN8S19252C49mf19252c4Ev
};
//SIG(-1 S19252C4) C1{ m Fi Fc Fp FC2{}}


void  S19252C4 ::mf19252c4(){}

static void Test_S19252C4()
{
  {
    init_simple_test("S19252C4");
    S19252C4 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S19252C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19252C4)");
    check_field_offset(lv, s19252c4f0, 0, "S19252C4.s19252c4f0");
    check_field_offset(lv, s19252c4f1, 4, "S19252C4.s19252c4f1");
    check_field_offset(lv, s19252c4f2, 8, "S19252C4.s19252c4f2");
    check_field_offset(lv, s19252c4f3, ABISELECT(16,12), "S19252C4.s19252c4f3");
  }
}
static Arrange_To_Call_Me vS19252C4(Test_S19252C4, "S19252C4", ABISELECT(24,16));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19252C4[];
VTBL_ENTRY *P__ZTI8S19252C4 = _ZTI8S19252C4; 
Class_Descriptor cd_S19252C4 = {  "S19252C4", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S19252C4),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

union  S19252C8_nt  {
  void *s19252c8f0;
  void  mf19252c8(); // _ZN11S19252C8_nt9mf19252c8Ev
};
//SIG(1 S19252C8_nt) U1{ m Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S19252C9  {
  void *s19252c9f0;
  void *s19252c9f1;
  long double s19252c9f2[10];
  void *s19252c9f3;
  short s19252c9f4;
  void *s19252c9f5;
  void *s19252c9f6;
  virtual void  v2(); // _ZN8S19252C92v2Ev
  ~S19252C9(); // tgen
  S19252C9(); // tgen
};
//SIG(-1 S19252C9) C1{ v1 Fp[2] FD[10] Fp Fs Fp[2]}


void  S19252C9 ::v2(){vfunc_called(this, "_ZN8S19252C92v2Ev");}
S19252C9 ::~S19252C9(){ note_dtor("S19252C9", this);} // tgen
S19252C9 ::S19252C9(){ note_ctor("S19252C9", this);} // tgen

static void Test_S19252C9()
{
  extern Class_Descriptor cd_S19252C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,38)];
    init_test(&cd_S19252C9, buf);
    S19252C9 *dp, &lv = *(dp=new (buf) S19252C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,148), "sizeof(S19252C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19252C9)");
    check_field_offset(lv, s19252c9f0, ABISELECT(8,4), "S19252C9.s19252c9f0");
    check_field_offset(lv, s19252c9f1, ABISELECT(16,8), "S19252C9.s19252c9f1");
    check_field_offset(lv, s19252c9f2, ABISELECT(32,12), "S19252C9.s19252c9f2");
    check_field_offset(lv, s19252c9f3, ABISELECT(192,132), "S19252C9.s19252c9f3");
    check_field_offset(lv, s19252c9f4, ABISELECT(200,136), "S19252C9.s19252c9f4");
    check_field_offset(lv, s19252c9f5, ABISELECT(208,140), "S19252C9.s19252c9f5");
    check_field_offset(lv, s19252c9f6, ABISELECT(216,144), "S19252C9.s19252c9f6");
    test_class_info(&lv, &cd_S19252C9);
    dp->~S19252C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19252C9(Test_S19252C9, "S19252C9", ABISELECT(224,148));

#else // __cplusplus

extern void _ZN8S19252C9C1Ev();
extern void _ZN8S19252C9D1Ev();
Name_Map name_map_S19252C9[] = {
  NSPAIR(_ZN8S19252C9C1Ev),
  NSPAIR(_ZN8S19252C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19252C9[];
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY vtc_S19252C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19252C9[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
Class_Descriptor cd_S19252C9 = {  "S19252C9", // class name
  0,0,//no base classes
  &(vtc_S19252C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,148), // object size
  NSPAIRA(_ZTI8S19252C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19252C9),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  S19252C7  {
  int s19252c7f0;
  ::S19252C8_nt s19252c7f1;
  short s19252c7f2:16;
  ::S19252C9 s19252c7f3;
  ::S19252C5_nt s19252c7f4;
  virtual  ~S19252C7(); // _ZN8S19252C7D1Ev
  virtual void  v8(); // _ZN8S19252C72v8Ev
  virtual void  v9(); // _ZN8S19252C72v9Ev
  S19252C7(); // tgen
};
//SIG(-1 S19252C7) C1{ vd v1 v2 Fi FU2{ m Fp} Fs:16 FC3{ v3 Fp Fp FD[10] Fp Fs Fp Fp} FC4{}}


 S19252C7 ::~S19252C7(){ note_dtor("S19252C7", this);}
void  S19252C7 ::v8(){vfunc_called(this, "_ZN8S19252C72v8Ev");}
void  S19252C7 ::v9(){vfunc_called(this, "_ZN8S19252C72v9Ev");}
S19252C7 ::S19252C7(){ note_ctor("S19252C7", this);} // tgen

static void Test_S19252C7()
{
  extern Class_Descriptor cd_S19252C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,43)];
    init_test(&cd_S19252C7, buf);
    S19252C7 *dp, &lv = *(dp=new (buf) S19252C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,168), "sizeof(S19252C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19252C7)");
    check_field_offset(lv, s19252c7f0, ABISELECT(8,4), "S19252C7.s19252c7f0");
    check_field_offset(lv, s19252c7f1, ABISELECT(16,8), "S19252C7.s19252c7f1");
    set_bf_and_test(lv, s19252c7f2, ABISELECT(24,12), 0, 16, 1, "S19252C7");
    set_bf_and_test(lv, s19252c7f2, ABISELECT(24,12), 0, 16, hide_sll(1LL<<15), "S19252C7");
    check_field_offset(lv, s19252c7f3, ABISELECT(32,16), "S19252C7.s19252c7f3");
    check_field_offset(lv, s19252c7f4, ABISELECT(256,164), "S19252C7.s19252c7f4");
    test_class_info(&lv, &cd_S19252C7);
    dp->~S19252C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19252C7(Test_S19252C7, "S19252C7", ABISELECT(272,168));

#else // __cplusplus

extern void _ZN8S19252C7C1Ev();
extern void _ZN8S19252C7D1Ev();
Name_Map name_map_S19252C7[] = {
  NSPAIR(_ZN8S19252C7C1Ev),
  NSPAIR(_ZN8S19252C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19252C7[];
extern void _ZN8S19252C7D1Ev();
extern void _ZN8S19252C7D0Ev();
extern void _ZN8S19252C72v8Ev();
extern void _ZN8S19252C72v9Ev();
static  VTBL_ENTRY vtc_S19252C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19252C7[0]),
  (VTBL_ENTRY)&_ZN8S19252C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19252C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19252C72v8Ev,
  (VTBL_ENTRY)&_ZN8S19252C72v9Ev,
};
extern VTBL_ENTRY _ZTI8S19252C7[];
extern  VTBL_ENTRY _ZTV8S19252C7[];
Class_Descriptor cd_S19252C7 = {  "S19252C7", // class name
  0,0,//no base classes
  &(vtc_S19252C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,168), // object size
  NSPAIRA(_ZTI8S19252C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19252C7),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  S19252C6  {
  int s19252c6f0[2];
  short s19252c6f1;
  ::S19252C7 s19252c6f2;
  void  mf19252c6(); // _ZN8S19252C69mf19252c6Ev
};
//SIG(-1 S19252C6) C1{ m Fi[2] Fs FC2{ vd v1 v2 Fi FU3{ m Fp} Fs:16 FC4{ v3 Fp Fp FD[10] Fp Fs Fp Fp} FC5{}}}


void  S19252C6 ::mf19252c6(){}

static void Test_S19252C6()
{
  {
    init_simple_test("S19252C6");
    static S19252C6 lv;
    check2(sizeof(lv), ABISELECT(288,180), "sizeof(S19252C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19252C6)");
    check_field_offset(lv, s19252c6f0, 0, "S19252C6.s19252c6f0");
    check_field_offset(lv, s19252c6f1, 8, "S19252C6.s19252c6f1");
    check_field_offset(lv, s19252c6f2, ABISELECT(16,12), "S19252C6.s19252c6f2");
  }
}
static Arrange_To_Call_Me vS19252C6(Test_S19252C6, "S19252C6", ABISELECT(288,180));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19252C6[];
VTBL_ENTRY *P__ZTI8S19252C6 = _ZTI8S19252C6; 
Class_Descriptor cd_S19252C6 = {  "S19252C6", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(288,180), // object size
  NSPAIRA(_ZTI8S19252C6),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  S19252C2  : S19252C3 , virtual S19252C4 , virtual S19252C6 , S19252C9 {
  int s19252c2f0;
  int s19252c2f1[9];
  long double s19252c2f2;
  ::S19252C8_nt s19252c2f3;
  void *s19252c2f4;
  virtual void  v3(); // _ZN8S19252C22v3Ev
  ~S19252C2(); // tgen
  S19252C2(); // tgen
};
//SIG(-1 S19252C2) C1{ BC2{ v2 Fp Fs FD} VBC3{ m Fi Fc Fp FC4{}} VBC5{ m Fi[2] Fs FC6{ vd v4 v5 Fi FU7{ m Fp} Fs:16 FC8{ v3 Fp Fp FD[10] Fp Fs Fp Fp} FC4}} BC8 v1 Fi Fi[9] FD FU7 Fp}


void  S19252C2 ::v3(){vfunc_called(this, "_ZN8S19252C22v3Ev");}
S19252C2 ::~S19252C2(){ note_dtor("S19252C2", this);} // tgen
S19252C2 ::S19252C2(){ note_ctor("S19252C2", this);} // tgen

static void Test_S19252C2()
{
  extern Class_Descriptor cd_S19252C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(43,108)];
    init_test(&cd_S19252C2, buf);
    S19252C2 *dp, &lv = *(dp=new (buf) S19252C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(672,428), "sizeof(S19252C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19252C2)");
    check_base_class_offset(lv, (S19252C3*), 0, "S19252C2");
    check_base_class_offset(lv, (S19252C4*), ABISELECT(352,232), "S19252C2");
    check_base_class_offset(lv, (S19252C6*), ABISELECT(384,248), "S19252C2");
    check_base_class_offset(lv, (S19252C9*), ABISELECT(48,24), "S19252C2");
    check_field_offset(lv, s19252c2f0, ABISELECT(272,172), "S19252C2.s19252c2f0");
    check_field_offset(lv, s19252c2f1, ABISELECT(276,176), "S19252C2.s19252c2f1");
    check_field_offset(lv, s19252c2f2, ABISELECT(320,212), "S19252C2.s19252c2f2");
    check_field_offset(lv, s19252c2f3, ABISELECT(336,224), "S19252C2.s19252c2f3");
    check_field_offset(lv, s19252c2f4, ABISELECT(344,228), "S19252C2.s19252c2f4");
    test_class_info(&lv, &cd_S19252C2);
    dp->~S19252C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19252C2(Test_S19252C2, "S19252C2", ABISELECT(672,428));

#else // __cplusplus

extern void _ZN8S19252C2C1Ev();
extern void _ZN8S19252C2D1Ev();
Name_Map name_map_S19252C2[] = {
  NSPAIR(_ZN8S19252C2C1Ev),
  NSPAIR(_ZN8S19252C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C4;
extern VTBL_ENTRY _ZTI8S19252C4[];
extern Class_Descriptor cd_S19252C6;
extern VTBL_ENTRY _ZTI8S19252C6[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
static Base_Class bases_S19252C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19252C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19252C4,    ABISELECT(352,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19252C6,    ABISELECT(384,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19252C9,    ABISELECT(48,24), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S19252C2[];
extern void _ZN8S19252C32v1Ev();
extern void _ZN8S19252C22v3Ev();
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY vtc_S19252C2[] = {
  ABISELECT(384,248),
  ABISELECT(352,232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19252C2[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19252C22v3Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19252C2[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern VTBL_ENTRY _ZTV8S19252C2[];
static  VTT_ENTRY vtt_S19252C2[] = {
  {&(_ZTV8S19252C2[4]),  4,9},
};
extern VTBL_ENTRY _ZTI8S19252C2[];
extern  VTBL_ENTRY _ZTV8S19252C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19252C2[];
Class_Descriptor cd_S19252C2 = {  "S19252C2", // class name
  bases_S19252C2, 4,
  &(vtc_S19252C2[0]), // expected_vtbl_contents
  &(vtt_S19252C2[0]), // expected_vtt_contents
  ABISELECT(672,428), // object size
  NSPAIRA(_ZTI8S19252C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19252C2),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19252C2),1, //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  S19252C11  : S19252C3 , S19252C9 {
  int s19252c11f0;
  ::S19252C3 s19252c11f1;
  void *s19252c11f2;
  virtual void  v4(); // _ZN9S19252C112v4Ev
  ~S19252C11(); // tgen
  S19252C11(); // tgen
};
//SIG(-1 S19252C11) C1{ BC2{ v2 Fp Fs FD} BC3{ v3 Fp[2] FD[10] Fp Fs Fp[2]} v1 Fi FC2 Fp}


void  S19252C11 ::v4(){vfunc_called(this, "_ZN9S19252C112v4Ev");}
S19252C11 ::~S19252C11(){ note_dtor("S19252C11", this);} // tgen
S19252C11 ::S19252C11(){ note_ctor("S19252C11", this);} // tgen

static void Test_S19252C11()
{
  extern Class_Descriptor cd_S19252C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,52)];
    init_test(&cd_S19252C11, buf);
    S19252C11 *dp, &lv = *(dp=new (buf) S19252C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,204), "sizeof(S19252C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19252C11)");
    check_base_class_offset(lv, (S19252C3*), 0, "S19252C11");
    check_base_class_offset(lv, (S19252C9*), ABISELECT(48,24), "S19252C11");
    check_field_offset(lv, s19252c11f0, ABISELECT(272,172), "S19252C11.s19252c11f0");
    check_field_offset(lv, s19252c11f1, ABISELECT(288,176), "S19252C11.s19252c11f1");
    check_field_offset(lv, s19252c11f2, ABISELECT(336,200), "S19252C11.s19252c11f2");
    test_class_info(&lv, &cd_S19252C11);
    dp->~S19252C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19252C11(Test_S19252C11, "S19252C11", ABISELECT(352,204));

#else // __cplusplus

extern void _ZN9S19252C11C1Ev();
extern void _ZN9S19252C11D1Ev();
Name_Map name_map_S19252C11[] = {
  NSPAIR(_ZN9S19252C11C1Ev),
  NSPAIR(_ZN9S19252C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
static Base_Class bases_S19252C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19252C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19252C9,    ABISELECT(48,24), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S19252C11[];
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY vtc_S19252C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C11[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19252C11[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern VTBL_ENTRY _ZTI9S19252C11[];
extern  VTBL_ENTRY _ZTV9S19252C11[];
Class_Descriptor cd_S19252C11 = {  "S19252C11", // class name
  bases_S19252C11, 2,
  &(vtc_S19252C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,204), // object size
  NSPAIRA(_ZTI9S19252C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19252C11),7, //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  S19252C13  : S19252C3 , S19252C9 , S19252C11 {
  char s19252c13f0;
  int s19252c13f1;
  __tsi64 s19252c13f2;
  long s19252c13f3;
  __tsi64 s19252c13f4;
  void *s19252c13f5;
  virtual  ~S19252C13(); // _ZN9S19252C13D1Ev
  virtual void  v5(); // _ZN9S19252C132v5Ev
  virtual void  v6(); // _ZN9S19252C132v6Ev
  virtual void  v7(); // _ZN9S19252C132v7Ev
  S19252C13(); // tgen
};
//SIG(-1 S19252C13) C1{ BC2{ v4 Fp Fs FD} BC3{ v5 Fp[2] FD[10] Fp Fs Fp[2]} BC4{ BC2 BC3 v6 Fi FC2 Fp} vd v1 v2 v3 Fc Fi FL Fl FL Fp}


 S19252C13 ::~S19252C13(){ note_dtor("S19252C13", this);}
void  S19252C13 ::v5(){vfunc_called(this, "_ZN9S19252C132v5Ev");}
void  S19252C13 ::v6(){vfunc_called(this, "_ZN9S19252C132v6Ev");}
void  S19252C13 ::v7(){vfunc_called(this, "_ZN9S19252C132v7Ev");}
S19252C13 ::S19252C13(){ note_ctor("S19252C13", this);} // tgen

static void Test_S19252C13()
{
  extern Class_Descriptor cd_S19252C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(42,103)];
    init_test(&cd_S19252C13, buf);
    S19252C13 *dp, &lv = *(dp=new (buf) S19252C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(656,408), "sizeof(S19252C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19252C13)");
    /*is_ambiguous_... S19252C13::S19252C3 */ AMB_check_base_class_offset(lv, (S19252C3*), 0, "S19252C13");
    /*is_ambiguous_... S19252C13::S19252C9 */ AMB_check_base_class_offset(lv, (S19252C9*), ABISELECT(48,24), "S19252C13");
    check_base_class_offset(lv, (S19252C3*)(S19252C11*), ABISELECT(272,172), "S19252C13");
    check_base_class_offset(lv, (S19252C9*)(S19252C11*), ABISELECT(320,196), "S19252C13");
    check_base_class_offset(lv, (S19252C11*), ABISELECT(272,172), "S19252C13");
    check_field_offset(lv, s19252c13f0, ABISELECT(616,376), "S19252C13.s19252c13f0");
    check_field_offset(lv, s19252c13f1, ABISELECT(620,380), "S19252C13.s19252c13f1");
    check_field_offset(lv, s19252c13f2, ABISELECT(624,384), "S19252C13.s19252c13f2");
    check_field_offset(lv, s19252c13f3, ABISELECT(632,392), "S19252C13.s19252c13f3");
    check_field_offset(lv, s19252c13f4, ABISELECT(640,396), "S19252C13.s19252c13f4");
    check_field_offset(lv, s19252c13f5, ABISELECT(648,404), "S19252C13.s19252c13f5");
    test_class_info(&lv, &cd_S19252C13);
    dp->~S19252C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19252C13(Test_S19252C13, "S19252C13", ABISELECT(656,408));

#else // __cplusplus

extern void _ZN9S19252C13C1Ev();
extern void _ZN9S19252C13D1Ev();
Name_Map name_map_S19252C13[] = {
  NSPAIR(_ZN9S19252C13C1Ev),
  NSPAIR(_ZN9S19252C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C11;
extern VTBL_ENTRY _ZTI9S19252C11[];
extern  VTBL_ENTRY _ZTV9S19252C11[];
static Base_Class bases_S19252C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19252C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19252C9,    ABISELECT(48,24), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19252C3,    ABISELECT(272,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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19252C9,    ABISELECT(320,196), //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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19252C11,    ABISELECT(272,172), //bcp->offset
    11, //bcp->virtual_function_table_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 _ZTI9S19252C13[];
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C13D1Ev();
extern void _ZN9S19252C13D0Ev();
extern void _ZN9S19252C132v5Ev();
extern void _ZN9S19252C132v6Ev();
extern void _ZN9S19252C132v7Ev();
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY vtc_S19252C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C13[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19252C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v5Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v6Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v7Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19252C13[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(-272,-172),
  (VTBL_ENTRY)&(_ZTI9S19252C13[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  ABISELECT(-320,-196),
  (VTBL_ENTRY)&(_ZTI9S19252C13[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern VTBL_ENTRY _ZTI9S19252C13[];
extern  VTBL_ENTRY _ZTV9S19252C13[];
Class_Descriptor cd_S19252C13 = {  "S19252C13", // class name
  bases_S19252C13, 5,
  &(vtc_S19252C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(656,408), // object size
  NSPAIRA(_ZTI9S19252C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19252C13),18, //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  S19252C12  : virtual S19252C13 , S19252C3 {
  short s19252c12f0[4];
  int s19252c12f1;
  long double s19252c12f2;
  int s19252c12f3;
  void *s19252c12f4[5];
  __tsi64 s19252c12f5;
  virtual  ~S19252C12(); // _ZN9S19252C12D2Ev
  S19252C12(); // tgen
};
//SIG(-1 S19252C12) C1{ VBC2{ BC3{ v1 Fp Fs FD} BC4{ v2 Fp[2] FD[10] Fp Fs Fp[2]} BC5{ BC3 BC4 v3 Fi FC3 Fp} vd v4 v5 v6 Fc Fi FL Fl FL Fp} BC3 vd Fs[4] Fi FD Fi Fp[5] FL}


 S19252C12 ::~S19252C12(){ note_dtor("S19252C12", this);}
S19252C12 ::S19252C12(){ note_ctor("S19252C12", this);} // tgen

static void Test_S19252C12()
{
  extern Class_Descriptor cd_S19252C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(51,123)];
    init_test(&cd_S19252C12, buf);
    S19252C12 *dp, &lv = *(dp=new (buf) S19252C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(800,488), "sizeof(S19252C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19252C12)");
    /*is_ambiguous_... S19252C13::S19252C3 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C13*), ABISELECT(144,80), "S19252C12");
    /*is_ambiguous_... S19252C13::S19252C9 */ AMB_check_base_class_offset(lv, (S19252C9*)(S19252C13*), ABISELECT(192,104), "S19252C12");
    check_base_class_offset(lv, (S19252C3*)(S19252C11*)(S19252C13*), ABISELECT(416,252), "S19252C12");
    check_base_class_offset(lv, (S19252C9*)(S19252C11*)(S19252C13*), ABISELECT(464,276), "S19252C12");
    check_base_class_offset(lv, (S19252C11*)(S19252C13*), ABISELECT(416,252), "S19252C12");
    check_base_class_offset(lv, (S19252C13*), ABISELECT(144,80), "S19252C12");
    /*is_ambiguous_... S19252C12::S19252C3 */ AMB_check_base_class_offset(lv, (S19252C3*), 0, "S19252C12");
    check_field_offset(lv, s19252c12f0, ABISELECT(48,24), "S19252C12.s19252c12f0");
    check_field_offset(lv, s19252c12f1, ABISELECT(56,32), "S19252C12.s19252c12f1");
    check_field_offset(lv, s19252c12f2, ABISELECT(64,36), "S19252C12.s19252c12f2");
    check_field_offset(lv, s19252c12f3, ABISELECT(80,48), "S19252C12.s19252c12f3");
    check_field_offset(lv, s19252c12f4, ABISELECT(88,52), "S19252C12.s19252c12f4");
    check_field_offset(lv, s19252c12f5, ABISELECT(128,72), "S19252C12.s19252c12f5");
    test_class_info(&lv, &cd_S19252C12);
    dp->~S19252C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19252C12(Test_S19252C12, "S19252C12", ABISELECT(800,488));

#else // __cplusplus

extern void _ZN9S19252C12C1Ev();
extern void _ZN9S19252C12D2Ev();
Name_Map name_map_S19252C12[] = {
  NSPAIR(_ZN9S19252C12C1Ev),
  NSPAIR(_ZN9S19252C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C11;
extern VTBL_ENTRY _ZTI9S19252C11[];
extern  VTBL_ENTRY _ZTV9S19252C11[];
extern Class_Descriptor cd_S19252C13;
extern VTBL_ENTRY _ZTI9S19252C13[];
extern  VTBL_ENTRY _ZTV9S19252C13[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
static Base_Class bases_S19252C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19252C3,    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
    5, //immediately_derived
  0, 0},
  {&cd_S19252C9,    ABISELECT(192,104), //bcp->offset
    21, //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19252C3,    ABISELECT(416,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19252C9,    ABISELECT(464,276), //bcp->offset
    28, //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_S19252C11,    ABISELECT(416,252), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19252C13,    ABISELECT(144,80), //bcp->offset
    6, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19252C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S19252C12[];
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C12D1Ev();
extern void _ZN9S19252C12D0Ev();
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19252C12D1Ev,_ZTv0_n16_N9S19252C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19252C12D1Ev,_ZThn80_N9S19252C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19252C12D0Ev,_ZTv0_n16_N9S19252C12D0Ev)();
extern void ABISELECT(_ZThn144_N9S19252C12D0Ev,_ZThn80_N9S19252C12D0Ev)() __attribute__((weak));
extern void _ZN9S19252C132v5Ev();
extern void _ZN9S19252C132v6Ev();
extern void _ZN9S19252C132v7Ev();
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY vtc_S19252C12[] = {
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19252C12D0Ev,
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-144,-80),
  0,
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C12D1Ev,_ZTv0_n16_N9S19252C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C12D0Ev,_ZTv0_n16_N9S19252C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19252C132v5Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v6Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v7Ev,
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(-416,-252),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  ABISELECT(-464,-276),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern VTBL_ENTRY _ZTV9S19252C12[];
static  VTT_ENTRY vtt_S19252C12[] = {
  {&(_ZTV9S19252C12[3]),  3,31},
  {&(_ZTV9S19252C12[15]),  15,31},
  {&(_ZTV9S19252C12[23]),  23,31},
  {&(_ZTV9S19252C12[26]),  26,31},
  {&(_ZTV9S19252C12[30]),  30,31},
};
extern VTBL_ENTRY _ZTI9S19252C12[];
extern  VTBL_ENTRY _ZTV9S19252C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19252C12[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C12D0Ev,_ZTv0_n16_N9S19252C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19252C12D0Ev,_ZThn80_N9S19252C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C12D1Ev,_ZTv0_n16_N9S19252C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19252C12D1Ev,_ZThn80_N9S19252C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19252C12 = {  "S19252C12", // class name
  bases_S19252C12, 7,
  &(vtc_S19252C12[0]), // expected_vtbl_contents
  &(vtt_S19252C12[0]), // expected_vtt_contents
  ABISELECT(800,488), // object size
  NSPAIRA(_ZTI9S19252C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19252C12),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19252C12),5, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19252C10  : S19252C11 , S19252C4 , virtual S19252C12 , virtual S19252C6 , S19252C9 {
  void *s19252c10f0;
  virtual  ~S19252C10(); // _ZN9S19252C10D2Ev
  S19252C10(); // tgen
};
//SIG(-1 S19252C10) C1{ BC2{ BC3{ v1 Fp Fs FD} BC4{ v2 Fp[2] FD[10] Fp Fs Fp[2]} v3 Fi FC3 Fp} BC5{ m Fi Fc Fp FC6{}} VBC7{ VBC8{ BC3 BC4 BC2 vd v4 v5 v6 Fc Fi FL Fl FL Fp} BC3 vd Fs[4] Fi FD Fi Fp[5] FL} VBC9{ m Fi[2] Fs FC10{ vd v7 v8 Fi FU11{ m Fp} Fs:16 FC4 FC6}} BC4 vd Fp}


 S19252C10 ::~S19252C10(){ note_dtor("S19252C10", this);}
S19252C10 ::S19252C10(){ note_ctor("S19252C10", this);} // tgen

static void Test_S19252C10()
{
  extern Class_Descriptor cd_S19252C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(107,261)];
    init_test(&cd_S19252C10, buf);
    S19252C10 *dp, &lv = *(dp=new (buf) S19252C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1696,1040), "sizeof(S19252C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19252C10)");
    /*is_ambiguous_... S19252C10::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C11*), 0, "S19252C10");
    /*is_ambiguous_... S19252C10::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C9*)(S19252C11*), ABISELECT(48,24), "S19252C10");
    /*is_ambiguous_... S19252C10::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C11*), 0, "S19252C10");
    check_base_class_offset(lv, (S19252C4*), ABISELECT(344,204), "S19252C10");
    /*is_ambiguous_... S19252C13::S19252C3 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C13*), ABISELECT(752,452), "S19252C10");
    /*is_ambiguous_... S19252C13::S19252C9 */ AMB_check_base_class_offset(lv, (S19252C9*)(S19252C13*), ABISELECT(800,476), "S19252C10");
    check_base_class_offset(lv, (S19252C3*)(S19252C11*)(S19252C13*), ABISELECT(1024,624), "S19252C10");
    check_base_class_offset(lv, (S19252C9*)(S19252C11*)(S19252C13*), ABISELECT(1072,648), "S19252C10");
    check_base_class_offset(lv, (S19252C11*)(S19252C13*), ABISELECT(1024,624), "S19252C10");
    check_base_class_offset(lv, (S19252C13*)(S19252C12*), ABISELECT(752,452), "S19252C10");
    /*is_ambiguous_... S19252C12::S19252C3 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C12*), ABISELECT(608,372), "S19252C10");
    check_base_class_offset(lv, (S19252C12*), ABISELECT(608,372), "S19252C10");
    check_base_class_offset(lv, (S19252C6*), ABISELECT(1408,860), "S19252C10");
    /*is_ambiguous_... S19252C10::S19252C9 */ AMB_check_base_class_offset(lv, (S19252C9*), ABISELECT(368,220), "S19252C10");
    check_field_offset(lv, s19252c10f0, ABISELECT(592,368), "S19252C10.s19252c10f0");
    test_class_info(&lv, &cd_S19252C10);
    dp->~S19252C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19252C10(Test_S19252C10, "S19252C10", ABISELECT(1696,1040));

#else // __cplusplus

extern void _ZN9S19252C10C1Ev();
extern void _ZN9S19252C10D2Ev();
Name_Map name_map_S19252C10[] = {
  NSPAIR(_ZN9S19252C10C1Ev),
  NSPAIR(_ZN9S19252C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C11;
extern VTBL_ENTRY _ZTI9S19252C11[];
extern  VTBL_ENTRY _ZTV9S19252C11[];
extern Class_Descriptor cd_S19252C4;
extern VTBL_ENTRY _ZTI8S19252C4[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C11;
extern VTBL_ENTRY _ZTI9S19252C11[];
extern  VTBL_ENTRY _ZTV9S19252C11[];
extern Class_Descriptor cd_S19252C13;
extern VTBL_ENTRY _ZTI9S19252C13[];
extern  VTBL_ENTRY _ZTV9S19252C13[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C12;
extern VTBL_ENTRY _ZTI9S19252C12[];
extern  VTBL_ENTRY _ZTV9S19252C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19252C12[];
extern Class_Descriptor cd_S19252C6;
extern VTBL_ENTRY _ZTI8S19252C6[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
static Base_Class bases_S19252C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19252C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S19252C9,    ABISELECT(48,24), //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
    10, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19252C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19252C4,    ABISELECT(344,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19252C3,    ABISELECT(752,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19252C9,    ABISELECT(800,476), //bcp->offset
    38, //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19252C3,    ABISELECT(1024,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19252C9,    ABISELECT(1072,648), //bcp->offset
    45, //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19252C11,    ABISELECT(1024,624), //bcp->offset
    41, //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_S19252C13,    ABISELECT(752,452), //bcp->offset
    23, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19252C3,    ABISELECT(608,372), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19252C12,    ABISELECT(608,372), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //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},
  {&cd_S19252C6,    ABISELECT(1408,860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19252C9,    ABISELECT(368,220), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19252C10[];
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void _ZN9S19252C10D1Ev();
extern void _ZN9S19252C10D0Ev();
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n40_N9S19252C10D1Ev,_ZTv0_n20_N9S19252C10D1Ev)();
extern void ABISELECT(_ZThn608_N9S19252C10D1Ev,_ZThn372_N9S19252C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19252C10D0Ev,_ZTv0_n20_N9S19252C10D0Ev)();
extern void ABISELECT(_ZThn608_N9S19252C10D0Ev,_ZThn372_N9S19252C10D0Ev)() __attribute__((weak));
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19252C10D1Ev,_ZTv0_n16_N9S19252C10D1Ev)();
extern void ABISELECT(_ZThn752_N9S19252C10D1Ev,_ZThn452_N9S19252C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19252C10D0Ev,_ZTv0_n16_N9S19252C10D0Ev)();
extern void ABISELECT(_ZThn752_N9S19252C10D0Ev,_ZThn452_N9S19252C10D0Ev)() __attribute__((weak));
extern void _ZN9S19252C132v5Ev();
extern void _ZN9S19252C132v6Ev();
extern void _ZN9S19252C132v7Ev();
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY vtc_S19252C10[] = {
  ABISELECT(1408,860),
  ABISELECT(752,452),
  ABISELECT(608,372),
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C10[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  (VTBL_ENTRY)&_ZN9S19252C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19252C10D0Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19252C10[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI9S19252C10[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(-608,-372),
  0,
  ABISELECT(144,80),
  ABISELECT(-608,-372),
  (VTBL_ENTRY)&(_ZTI9S19252C10[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19252C10D1Ev,_ZTv0_n20_N9S19252C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19252C10D0Ev,_ZTv0_n20_N9S19252C10D0Ev),
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-752,-452),
  0,
  ABISELECT(-752,-452),
  (VTBL_ENTRY)&(_ZTI9S19252C10[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C10D1Ev,_ZTv0_n16_N9S19252C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C10D0Ev,_ZTv0_n16_N9S19252C10D0Ev),
  (VTBL_ENTRY)&_ZN9S19252C132v5Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v6Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v7Ev,
  ABISELECT(-800,-476),
  (VTBL_ENTRY)&(_ZTI9S19252C10[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(-1024,-624),
  (VTBL_ENTRY)&(_ZTI9S19252C10[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  ABISELECT(-1072,-648),
  (VTBL_ENTRY)&(_ZTI9S19252C10[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern VTBL_ENTRY _ZTV9S19252C10[];
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C12D1Ev();
extern void _ZN9S19252C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C12__9S19252C10[] = {
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19252C12D0Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19252C12D1Ev,_ZTv0_n16_N9S19252C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19252C12D1Ev,_ZThn80_N9S19252C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19252C12D0Ev,_ZTv0_n16_N9S19252C12D0Ev)();
extern void ABISELECT(_ZThn144_N9S19252C12D0Ev,_ZThn80_N9S19252C12D0Ev)() __attribute__((weak));
extern void _ZN9S19252C132v5Ev();
extern void _ZN9S19252C132v6Ev();
extern void _ZN9S19252C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C13__9S19252C12__9S19252C10[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-144,-80),
  0,
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C12D1Ev,_ZTv0_n16_N9S19252C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C12D0Ev,_ZTv0_n16_N9S19252C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19252C132v5Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v6Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v7Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C13__9S19252C12__9S19252C10[] = {
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C119S19252C13__9S19252C12__9S19252C10[] = {
  ABISELECT(-416,-252),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C119S19252C13__A1__9S19252C12__9S19252C10[] = {
  ABISELECT(-464,-276),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
static  VTT_ENTRY vtt_S19252C10[] = {
  {&(_ZTV9S19252C10[5]),  5,48},
  {&(_ZTV9S19252C10[20]),  20,48},
  {&(_ZTV9S19252C10[32]),  32,48},
  {&(_ZTV9S19252C10[40]),  40,48},
  {&(_ZTV9S19252C10[43]),  43,48},
  {&(_ZTV9S19252C10[47]),  47,48},
  {&(_tg__ZTV9S19252C12__9S19252C10[3]),  3,6},
  {&(_tg__ZTV9S19252C13__9S19252C12__9S19252C10[9]),  9,15},
  {&(_tg__ZTV8S19252C99S19252C13__9S19252C12__9S19252C10[2]),  2,3},
  {&(_tg__ZTV9S19252C119S19252C13__9S19252C12__9S19252C10[2]),  2,4},
  {&(_tg__ZTV8S19252C99S19252C119S19252C13__A1__9S19252C12__9S19252C10[2]),  2,3},
};
extern VTBL_ENTRY _ZTI9S19252C10[];
extern  VTBL_ENTRY _ZTV9S19252C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19252C10[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C12D0Ev,_ZTv0_n16_N9S19252C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19252C12D0Ev,_ZThn80_N9S19252C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C12D1Ev,_ZTv0_n16_N9S19252C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19252C12D1Ev,_ZThn80_N9S19252C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C10D0Ev,_ZTv0_n16_N9S19252C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N9S19252C10D0Ev,_ZThn452_N9S19252C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C10D1Ev,_ZTv0_n16_N9S19252C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N9S19252C10D1Ev,_ZThn452_N9S19252C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19252C10D0Ev,_ZTv0_n20_N9S19252C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N9S19252C10D0Ev,_ZThn372_N9S19252C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19252C10D1Ev,_ZTv0_n20_N9S19252C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N9S19252C10D1Ev,_ZThn372_N9S19252C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19252C10 = {  "S19252C10", // class name
  bases_S19252C10, 14,
  &(vtc_S19252C10[0]), // expected_vtbl_contents
  &(vtt_S19252C10[0]), // expected_vtt_contents
  ABISELECT(1696,1040), // object size
  NSPAIRA(_ZTI9S19252C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19252C10),48, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19252C10),11, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19252C16  : virtual S19252C3 {
  void *s19252c16f0;
  ::S19252C9 s19252c16f1;
  void *s19252c16f2;
  void *s19252c16f3;
  ~S19252C16(); // tgen
  S19252C16(); // tgen
};
//SIG(-1 S19252C16) C1{ VBC2{ v1 Fp Fs FD} Fp FC3{ v2 Fp[2] FD[10] Fp Fs Fp[2]} Fp[2]}


S19252C16 ::~S19252C16(){ note_dtor("S19252C16", this);} // tgen
S19252C16 ::S19252C16(){ note_ctor("S19252C16", this);} // tgen

static void Test_S19252C16()
{
  extern Class_Descriptor cd_S19252C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,48)];
    init_test(&cd_S19252C16, buf);
    S19252C16 *dp, &lv = *(dp=new (buf) S19252C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,188), "sizeof(S19252C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19252C16)");
    check_base_class_offset(lv, (S19252C3*), ABISELECT(256,164), "S19252C16");
    check_field_offset(lv, s19252c16f0, ABISELECT(8,4), "S19252C16.s19252c16f0");
    check_field_offset(lv, s19252c16f1, ABISELECT(16,8), "S19252C16.s19252c16f1");
    check_field_offset(lv, s19252c16f2, ABISELECT(240,156), "S19252C16.s19252c16f2");
    check_field_offset(lv, s19252c16f3, ABISELECT(248,160), "S19252C16.s19252c16f3");
    test_class_info(&lv, &cd_S19252C16);
    dp->~S19252C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19252C16(Test_S19252C16, "S19252C16", ABISELECT(304,188));

#else // __cplusplus

extern void _ZN9S19252C16C1Ev();
extern void _ZN9S19252C16D1Ev();
Name_Map name_map_S19252C16[] = {
  NSPAIR(_ZN9S19252C16C1Ev),
  NSPAIR(_ZN9S19252C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
static Base_Class bases_S19252C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19252C3,    ABISELECT(256,164), //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 _ZTI9S19252C16[];
extern void _ZN8S19252C32v1Ev();
static  VTBL_ENTRY vtc_S19252C16[] = {
  ABISELECT(256,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C16[0]),
  0,
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI9S19252C16[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
};
extern VTBL_ENTRY _ZTV9S19252C16[];
static  VTT_ENTRY vtt_S19252C16[] = {
  {&(_ZTV9S19252C16[3]),  3,7},
  {&(_ZTV9S19252C16[6]),  6,7},
};
extern VTBL_ENTRY _ZTI9S19252C16[];
extern  VTBL_ENTRY _ZTV9S19252C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19252C16[];
Class_Descriptor cd_S19252C16 = {  "S19252C16", // class name
  bases_S19252C16, 1,
  &(vtc_S19252C16[0]), // expected_vtbl_contents
  &(vtt_S19252C16[0]), // expected_vtt_contents
  ABISELECT(304,188), // object size
  NSPAIRA(_ZTI9S19252C16),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19252C16),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19252C16),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  S19252C15  : virtual S19252C13 , virtual S19252C12 , S19252C11 {
  ::S19252C16 s19252c15f0;
  ~S19252C15(); // tgen
  S19252C15(); // tgen
};
//SIG(-1 S19252C15) C1{ VBC2{ BC3{ v1 Fp Fs FD} BC4{ v2 Fp[2] FD[10] Fp Fs Fp[2]} BC5{ BC3 BC4 v3 Fi FC3 Fp} vd v4 v5 v6 Fc Fi FL Fl FL Fp} VBC6{ VBC2 BC3 vd Fs[4] Fi FD Fi Fp[5] FL} BC5 FC7{ VBC3 Fp FC4 Fp[2]}}


S19252C15 ::~S19252C15(){ note_dtor("S19252C15", this);} // tgen
S19252C15 ::S19252C15(){ note_ctor("S19252C15", this);} // tgen

static void Test_S19252C15()
{
  extern Class_Descriptor cd_S19252C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(92,221)];
    init_test(&cd_S19252C15, buf);
    S19252C15 *dp, &lv = *(dp=new (buf) S19252C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1456,880), "sizeof(S19252C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19252C15)");
    /*is_ambiguous_... S19252C13::S19252C3 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C13*), ABISELECT(656,392), "S19252C15");
    /*is_ambiguous_... S19252C13::S19252C9 */ AMB_check_base_class_offset(lv, (S19252C9*)(S19252C13*), ABISELECT(704,416), "S19252C15");
    check_base_class_offset(lv, (S19252C3*)(S19252C11*)(S19252C13*), ABISELECT(928,564), "S19252C15");
    check_base_class_offset(lv, (S19252C9*)(S19252C11*)(S19252C13*), ABISELECT(976,588), "S19252C15");
    check_base_class_offset(lv, (S19252C11*)(S19252C13*), ABISELECT(928,564), "S19252C15");
    check_base_class_offset(lv, (S19252C13*), ABISELECT(656,392), "S19252C15");
    check_base_class_offset(lv, (S19252C13*)(S19252C12*), ABISELECT(656,392), "S19252C15");
    /*is_ambiguous_... S19252C12::S19252C3 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C12*), ABISELECT(1312,800), "S19252C15");
    check_base_class_offset(lv, (S19252C12*), ABISELECT(1312,800), "S19252C15");
    /*is_ambiguous_... S19252C15::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C11*), 0, "S19252C15");
    /*is_ambiguous_... S19252C15::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C9*)(S19252C11*), ABISELECT(48,24), "S19252C15");
    /*is_ambiguous_... S19252C15::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C11*), 0, "S19252C15");
    check_field_offset(lv, s19252c15f0, ABISELECT(352,204), "S19252C15.s19252c15f0");
    test_class_info(&lv, &cd_S19252C15);
    dp->~S19252C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19252C15(Test_S19252C15, "S19252C15", ABISELECT(1456,880));

#else // __cplusplus

extern void _ZN9S19252C15C1Ev();
extern void _ZN9S19252C15D1Ev();
Name_Map name_map_S19252C15[] = {
  NSPAIR(_ZN9S19252C15C1Ev),
  NSPAIR(_ZN9S19252C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C11;
extern VTBL_ENTRY _ZTI9S19252C11[];
extern  VTBL_ENTRY _ZTV9S19252C11[];
extern Class_Descriptor cd_S19252C13;
extern VTBL_ENTRY _ZTI9S19252C13[];
extern  VTBL_ENTRY _ZTV9S19252C13[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C12;
extern VTBL_ENTRY _ZTI9S19252C12[];
extern  VTBL_ENTRY _ZTV9S19252C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19252C12[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C11;
extern VTBL_ENTRY _ZTI9S19252C11[];
extern  VTBL_ENTRY _ZTV9S19252C11[];
static Base_Class bases_S19252C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19252C3,    ABISELECT(656,392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19252C9,    ABISELECT(704,416), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19252C3,    ABISELECT(928,564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19252C9,    ABISELECT(976,588), //bcp->offset
    33, //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_S19252C11,    ABISELECT(928,564), //bcp->offset
    29, //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
    5, //immediately_derived
  0, 0},
  {&cd_S19252C13,    ABISELECT(656,392), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19252C3,    ABISELECT(1312,800), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19252C12,    ABISELECT(1312,800), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19252C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19252C9,    ABISELECT(48,24), //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
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19252C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S19252C15[];
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void _ZN9S19252C15D1Ev();
extern void _ZN9S19252C15D0Ev();
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19252C15D1Ev,_ZTv0_n16_N9S19252C15D1Ev)();
extern void ABISELECT(_ZThn656_N9S19252C15D1Ev,_ZThn392_N9S19252C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19252C15D0Ev,_ZTv0_n16_N9S19252C15D0Ev)();
extern void ABISELECT(_ZThn656_N9S19252C15D0Ev,_ZThn392_N9S19252C15D0Ev)() __attribute__((weak));
extern void _ZN9S19252C132v5Ev();
extern void _ZN9S19252C132v6Ev();
extern void _ZN9S19252C132v7Ev();
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n40_N9S19252C15D1Ev,_ZTv0_n20_N9S19252C15D1Ev)();
extern void ABISELECT(_ZThn1312_N9S19252C15D1Ev,_ZThn800_N9S19252C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19252C15D0Ev,_ZTv0_n20_N9S19252C15D0Ev)();
extern void ABISELECT(_ZThn1312_N9S19252C15D0Ev,_ZThn800_N9S19252C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19252C15[] = {
  ABISELECT(1312,800),
  ABISELECT(656,392),
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  (VTBL_ENTRY)&_ZN9S19252C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19252C15D0Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-656,-392),
  0,
  ABISELECT(-656,-392),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C15D1Ev,_ZTv0_n16_N9S19252C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C15D0Ev,_ZTv0_n16_N9S19252C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19252C132v5Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v6Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v7Ev,
  ABISELECT(-704,-416),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(-928,-564),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  ABISELECT(-976,-588),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(-1312,-800),
  0,
  ABISELECT(-656,-408),
  ABISELECT(-1312,-800),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19252C15D1Ev,_ZTv0_n20_N9S19252C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19252C15D0Ev,_ZTv0_n20_N9S19252C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S19252C15[];
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C12D1Ev();
extern void _ZN9S19252C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C12__9S19252C15[] = {
  ABISELECT(-656,-408),
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19252C12D0Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19252C12D1Ev,_ZTv0_n16_N9S19252C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19252C12D0Ev,_ZTv0_n16_N9S19252C12D0Ev)();
extern void _ZN9S19252C132v5Ev();
extern void _ZN9S19252C132v6Ev();
extern void _ZN9S19252C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C13__9S19252C12__9S19252C15[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(656,408),
  0,
  ABISELECT(656,408),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C12D1Ev,_ZTv0_n16_N9S19252C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C12D0Ev,_ZTv0_n16_N9S19252C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19252C132v5Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v6Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v7Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C13__9S19252C12__9S19252C15[] = {
  ABISELECT(608,384),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C119S19252C13__9S19252C12__9S19252C15[] = {
  ABISELECT(384,236),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C119S19252C13__A1__9S19252C12__9S19252C15[] = {
  ABISELECT(336,212),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
static  VTT_ENTRY vtt_S19252C15[] = {
  {&(_ZTV9S19252C15[4]),  4,44},
  {&(_ZTV9S19252C15[20]),  20,44},
  {&(_ZTV9S19252C15[28]),  28,44},
  {&(_ZTV9S19252C15[31]),  31,44},
  {&(_ZTV9S19252C15[35]),  35,44},
  {&(_ZTV9S19252C15[41]),  41,44},
  {&(_tg__ZTV9S19252C12__9S19252C15[3]),  3,6},
  {&(_tg__ZTV9S19252C13__9S19252C12__9S19252C15[9]),  9,15},
  {&(_tg__ZTV8S19252C99S19252C13__9S19252C12__9S19252C15[2]),  2,3},
  {&(_tg__ZTV9S19252C119S19252C13__9S19252C12__9S19252C15[2]),  2,4},
  {&(_tg__ZTV8S19252C99S19252C119S19252C13__A1__9S19252C12__9S19252C15[2]),  2,3},
};
extern VTBL_ENTRY _ZTI9S19252C15[];
extern  VTBL_ENTRY _ZTV9S19252C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19252C15[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19252C15D0Ev,_ZTv0_n20_N9S19252C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N9S19252C15D0Ev,_ZThn800_N9S19252C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19252C15D1Ev,_ZTv0_n20_N9S19252C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N9S19252C15D1Ev,_ZThn800_N9S19252C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C15D0Ev,_ZTv0_n16_N9S19252C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S19252C15D0Ev,_ZThn392_N9S19252C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C15D1Ev,_ZTv0_n16_N9S19252C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S19252C15D1Ev,_ZThn392_N9S19252C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19252C15 = {  "S19252C15", // class name
  bases_S19252C15, 11,
  &(vtc_S19252C15[0]), // expected_vtbl_contents
  &(vtt_S19252C15[0]), // expected_vtt_contents
  ABISELECT(1456,880), // object size
  NSPAIRA(_ZTI9S19252C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19252C15),44, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19252C15),11, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19252C17  : virtual S19252C7 {
  __tsi64 s19252c17f0;
  virtual void  v10(); // _ZN9S19252C173v10Ev
  ~S19252C17(); // tgen
  S19252C17(); // tgen
};
//SIG(-1 S19252C17) C1{ VBC2{ vd v2 v3 Fi FU3{ m Fp} Fs:16 FC4{ v4 Fp Fp FD[10] Fp Fs Fp Fp} FC5{}} v1 FL}


void  S19252C17 ::v10(){vfunc_called(this, "_ZN9S19252C173v10Ev");}
S19252C17 ::~S19252C17(){ note_dtor("S19252C17", this);} // tgen
S19252C17 ::S19252C17(){ note_ctor("S19252C17", this);} // tgen

static void Test_S19252C17()
{
  extern Class_Descriptor cd_S19252C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,46)];
    init_test(&cd_S19252C17, buf);
    S19252C17 *dp, &lv = *(dp=new (buf) S19252C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,180), "sizeof(S19252C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19252C17)");
    check_base_class_offset(lv, (S19252C7*), ABISELECT(16,12), "S19252C17");
    check_field_offset(lv, s19252c17f0, ABISELECT(8,4), "S19252C17.s19252c17f0");
    test_class_info(&lv, &cd_S19252C17);
    dp->~S19252C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19252C17(Test_S19252C17, "S19252C17", ABISELECT(288,180));

#else // __cplusplus

extern void _ZN9S19252C17C1Ev();
extern void _ZN9S19252C17D1Ev();
Name_Map name_map_S19252C17[] = {
  NSPAIR(_ZN9S19252C17C1Ev),
  NSPAIR(_ZN9S19252C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19252C7;
extern VTBL_ENTRY _ZTI8S19252C7[];
extern  VTBL_ENTRY _ZTV8S19252C7[];
static Base_Class bases_S19252C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19252C7,    ABISELECT(16,12), //bcp->offset
    6, //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 _ZTI9S19252C17[];
extern void _ZN9S19252C173v10Ev();
extern void _ZN9S19252C17D1Ev();
extern void _ZN9S19252C17D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19252C17D1Ev,_ZTv0_n12_N9S19252C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S19252C17D1Ev,_ZThn12_N9S19252C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19252C17D0Ev,_ZTv0_n12_N9S19252C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S19252C17D0Ev,_ZThn12_N9S19252C17D0Ev)() __attribute__((weak));
extern void _ZN8S19252C72v8Ev();
extern void _ZN8S19252C72v9Ev();
static  VTBL_ENTRY vtc_S19252C17[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C17[0]),
  (VTBL_ENTRY)&_ZN9S19252C173v10Ev,
  (VTBL_ENTRY)&_ZN9S19252C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19252C17D0Ev,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19252C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19252C17D1Ev,_ZTv0_n12_N9S19252C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19252C17D0Ev,_ZTv0_n12_N9S19252C17D0Ev),
  (VTBL_ENTRY)&_ZN8S19252C72v8Ev,
  (VTBL_ENTRY)&_ZN8S19252C72v9Ev,
};
extern VTBL_ENTRY _ZTV9S19252C17[];
static  VTT_ENTRY vtt_S19252C17[] = {
  {&(_ZTV9S19252C17[3]),  3,15},
  {&(_ZTV9S19252C17[11]),  11,15},
};
extern VTBL_ENTRY _ZTI9S19252C17[];
extern  VTBL_ENTRY _ZTV9S19252C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19252C17[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19252C17D0Ev,_ZTv0_n12_N9S19252C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19252C17D0Ev,_ZThn12_N9S19252C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19252C17D1Ev,_ZTv0_n12_N9S19252C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19252C17D1Ev,_ZThn12_N9S19252C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19252C17 = {  "S19252C17", // class name
  bases_S19252C17, 1,
  &(vtc_S19252C17[0]), // expected_vtbl_contents
  &(vtt_S19252C17[0]), // expected_vtt_contents
  ABISELECT(288,180), // object size
  NSPAIRA(_ZTI9S19252C17),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19252C17),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19252C17),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19252C18  : virtual S19252C3 , virtual S19252C12 , virtual S19252C15 , virtual S19252C11 {
  void *s19252c18f0[8];
  __tsi64 s19252c18f1;
  virtual  ~S19252C18(); // _ZN9S19252C18D2Ev
  virtual void  v11(); // _ZN9S19252C183v11Ev
  S19252C18(); // tgen
};
//SIG(-1 S19252C18) C1{ VBC2{ v2 Fp Fs FD} VBC3{ VBC4{ BC2 BC5{ v3 Fp[2] FD[10] Fp Fs Fp[2]} BC6{ BC2 BC5 v4 Fi FC2 Fp} vd v5 v6 v7 Fc Fi FL Fl FL Fp} BC2 vd Fs[4] Fi FD Fi Fp[5] FL} VBC7{ VBC4 VBC3 BC6 FC8{ VBC2 Fp FC5 Fp[2]}} VBC6 vd v1 Fp[8] FL}


 S19252C18 ::~S19252C18(){ note_dtor("S19252C18", this);}
void  S19252C18 ::v11(){vfunc_called(this, "_ZN9S19252C183v11Ev");}
S19252C18 ::S19252C18(){ note_ctor("S19252C18", this);} // tgen

static void Test_S19252C18()
{
  extern Class_Descriptor cd_S19252C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(122,289)];
    init_test(&cd_S19252C18, buf);
    S19252C18 *dp, &lv = *(dp=new (buf) S19252C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1936,1152), "sizeof(S19252C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19252C18)");
    /*is_ambiguous_... S19252C18::S19252C3 */ AMB_check_base_class_offset(lv, (S19252C3*), ABISELECT(80,44), "S19252C18");
    /*is_ambiguous_... S19252C13::S19252C3 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C13*), ABISELECT(272,148), "S19252C18");
    /*is_ambiguous_... S19252C13::S19252C9 */ AMB_check_base_class_offset(lv, (S19252C9*)(S19252C13*), ABISELECT(320,172), "S19252C18");
    check_base_class_offset(lv, (S19252C3*)(S19252C11*)(S19252C13*), ABISELECT(544,320), "S19252C18");
    check_base_class_offset(lv, (S19252C9*)(S19252C11*)(S19252C13*), ABISELECT(592,344), "S19252C18");
    check_base_class_offset(lv, (S19252C11*)(S19252C13*), ABISELECT(544,320), "S19252C18");
    check_base_class_offset(lv, (S19252C13*)(S19252C12*), ABISELECT(272,148), "S19252C18");
    check_base_class_offset(lv, (S19252C13*)(S19252C15*), ABISELECT(272,148), "S19252C18");
    /*is_ambiguous_... S19252C12::S19252C3 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C12*), ABISELECT(128,68), "S19252C18");
    check_base_class_offset(lv, (S19252C12*), ABISELECT(128,68), "S19252C18");
    check_base_class_offset(lv, (S19252C12*)(S19252C15*), ABISELECT(128,68), "S19252C18");
    /*is_ambiguous_... S19252C15::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C11*)(S19252C15*), ABISELECT(928,556), "S19252C18");
    /*is_ambiguous_... S19252C15::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C9*)(S19252C11*)(S19252C15*), ABISELECT(976,580), "S19252C18");
    /*is_ambiguous_... S19252C15::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C11*)(S19252C15*), ABISELECT(928,556), "S19252C18");
    check_base_class_offset(lv, (S19252C15*), ABISELECT(928,556), "S19252C18");
    /*is_ambiguous_... S19252C18::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C11*), ABISELECT(1584,948), "S19252C18");
    /*is_ambiguous_... S19252C18::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C9*)(S19252C11*), ABISELECT(1632,972), "S19252C18");
    /*is_ambiguous_... S19252C18::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C11*), ABISELECT(1584,948), "S19252C18");
    check_field_offset(lv, s19252c18f0, ABISELECT(8,4), "S19252C18.s19252c18f0");
    check_field_offset(lv, s19252c18f1, ABISELECT(72,36), "S19252C18.s19252c18f1");
    test_class_info(&lv, &cd_S19252C18);
    dp->~S19252C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19252C18(Test_S19252C18, "S19252C18", ABISELECT(1936,1152));

#else // __cplusplus

extern void _ZN9S19252C18C1Ev();
extern void _ZN9S19252C18D2Ev();
Name_Map name_map_S19252C18[] = {
  NSPAIR(_ZN9S19252C18C1Ev),
  NSPAIR(_ZN9S19252C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C11;
extern VTBL_ENTRY _ZTI9S19252C11[];
extern  VTBL_ENTRY _ZTV9S19252C11[];
extern Class_Descriptor cd_S19252C13;
extern VTBL_ENTRY _ZTI9S19252C13[];
extern  VTBL_ENTRY _ZTV9S19252C13[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C12;
extern VTBL_ENTRY _ZTI9S19252C12[];
extern  VTBL_ENTRY _ZTV9S19252C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19252C12[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C11;
extern VTBL_ENTRY _ZTI9S19252C11[];
extern  VTBL_ENTRY _ZTV9S19252C11[];
extern Class_Descriptor cd_S19252C15;
extern VTBL_ENTRY _ZTI9S19252C15[];
extern  VTBL_ENTRY _ZTV9S19252C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19252C15[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C11;
extern VTBL_ENTRY _ZTI9S19252C11[];
extern  VTBL_ENTRY _ZTV9S19252C11[];
static Base_Class bases_S19252C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19252C3,    ABISELECT(80,44), //bcp->offset
    10, //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_S19252C3,    ABISELECT(272,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
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19252C9,    ABISELECT(320,172), //bcp->offset
    37, //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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19252C3,    ABISELECT(544,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
    5, //immediately_derived
  0, 0},
  {&cd_S19252C9,    ABISELECT(592,344), //bcp->offset
    44, //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
    5, //immediately_derived
  0, 0},
  {&cd_S19252C11,    ABISELECT(544,320), //bcp->offset
    40, //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_S19252C13,    ABISELECT(272,148), //bcp->offset
    22, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19252C3,    ABISELECT(128,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
    8, //immediately_derived
  0, 0},
  {&cd_S19252C12,    ABISELECT(128,68), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19252C3,    ABISELECT(928,556), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19252C9,    ABISELECT(976,580), //bcp->offset
    59, //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
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19252C11,    ABISELECT(928,556), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19252C15,    ABISELECT(928,556), //bcp->offset
    47, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19252C3,    ABISELECT(1584,948), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19252C9,    ABISELECT(1632,972), //bcp->offset
    69, //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
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19252C11,    ABISELECT(1584,948), //bcp->offset
    62, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19252C18[];
extern void _ZN9S19252C18D1Ev();
extern void _ZN9S19252C18D0Ev();
extern void _ZN9S19252C183v11Ev();
extern void _ZN8S19252C32v1Ev();
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n40_N9S19252C18D1Ev,_ZTv0_n20_N9S19252C18D1Ev)();
extern void ABISELECT(_ZThn128_N9S19252C18D1Ev,_ZThn68_N9S19252C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19252C18D0Ev,_ZTv0_n20_N9S19252C18D0Ev)();
extern void ABISELECT(_ZThn128_N9S19252C18D0Ev,_ZThn68_N9S19252C18D0Ev)() __attribute__((weak));
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19252C18D1Ev,_ZTv0_n16_N9S19252C18D1Ev)();
extern void ABISELECT(_ZThn272_N9S19252C18D1Ev,_ZThn148_N9S19252C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19252C18D0Ev,_ZTv0_n16_N9S19252C18D0Ev)();
extern void ABISELECT(_ZThn272_N9S19252C18D0Ev,_ZThn148_N9S19252C18D0Ev)() __attribute__((weak));
extern void _ZN9S19252C132v5Ev();
extern void _ZN9S19252C132v6Ev();
extern void _ZN9S19252C132v7Ev();
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19252C18D1Ev,_ZTv0_n32_N9S19252C18D1Ev)();
extern void ABISELECT(_ZThn928_N9S19252C18D1Ev,_ZThn556_N9S19252C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19252C18D0Ev,_ZTv0_n32_N9S19252C18D0Ev)();
extern void ABISELECT(_ZThn928_N9S19252C18D0Ev,_ZThn556_N9S19252C18D0Ev)() __attribute__((weak));
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY vtc_S19252C18[] = {
  ABISELECT(1584,948),
  ABISELECT(928,556),
  ABISELECT(272,148),
  ABISELECT(128,68),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN9S19252C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19252C18D0Ev,
  (VTBL_ENTRY)&_ZN9S19252C183v11Ev,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  ABISELECT(-128,-68),
  0,
  ABISELECT(144,80),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19252C18D1Ev,_ZTv0_n20_N9S19252C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19252C18D0Ev,_ZTv0_n20_N9S19252C18D0Ev),
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-272,-148),
  0,
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C18D1Ev,_ZTv0_n16_N9S19252C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C18D0Ev,_ZTv0_n16_N9S19252C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19252C132v5Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v6Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v7Ev,
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(-544,-320),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  ABISELECT(-592,-344),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(-928,-556),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(-800,-488),
  ABISELECT(-656,-408),
  ABISELECT(-928,-556),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19252C18D1Ev,_ZTv0_n32_N9S19252C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19252C18D0Ev,_ZTv0_n32_N9S19252C18D0Ev),
  ABISELECT(-976,-580),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(-1584,-948),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  ABISELECT(-1632,-972),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern VTBL_ENTRY _ZTV9S19252C18[];
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C12D1Ev();
extern void _ZN9S19252C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C12__9S19252C18[] = {
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19252C12D0Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19252C12D1Ev,_ZTv0_n16_N9S19252C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19252C12D1Ev,_ZThn80_N9S19252C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19252C12D0Ev,_ZTv0_n16_N9S19252C12D0Ev)();
extern void ABISELECT(_ZThn144_N9S19252C12D0Ev,_ZThn80_N9S19252C12D0Ev)() __attribute__((weak));
extern void _ZN9S19252C132v5Ev();
extern void _ZN9S19252C132v6Ev();
extern void _ZN9S19252C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C13__9S19252C12__9S19252C18[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-144,-80),
  0,
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C12D1Ev,_ZTv0_n16_N9S19252C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C12D0Ev,_ZTv0_n16_N9S19252C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19252C132v5Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v6Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v7Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C13__9S19252C12__9S19252C18[] = {
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C119S19252C13__9S19252C12__9S19252C18[] = {
  ABISELECT(-416,-252),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C119S19252C13__A1__9S19252C12__9S19252C18[] = {
  ABISELECT(-464,-276),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void _ZN9S19252C15D1Ev();
extern void _ZN9S19252C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C15__9S19252C18[] = {
  ABISELECT(-800,-488),
  ABISELECT(-656,-408),
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  (VTBL_ENTRY)&_ZN9S19252C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19252C15D0Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19252C15D1Ev,_ZTv0_n16_N9S19252C15D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19252C15D0Ev,_ZTv0_n16_N9S19252C15D0Ev)();
extern void _ZN9S19252C132v5Ev();
extern void _ZN9S19252C132v6Ev();
extern void _ZN9S19252C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C13__9S19252C15__9S19252C18[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(656,408),
  0,
  ABISELECT(656,408),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C15D1Ev,_ZTv0_n16_N9S19252C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C15D0Ev,_ZTv0_n16_N9S19252C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19252C132v5Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v6Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v7Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C13__9S19252C15__9S19252C18[] = {
  ABISELECT(608,384),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C119S19252C13__9S19252C15__9S19252C18[] = {
  ABISELECT(384,236),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C119S19252C13__A1__9S19252C15__9S19252C18[] = {
  ABISELECT(336,212),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n40_N9S19252C15D1Ev,_ZTv0_n20_N9S19252C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19252C15D0Ev,_ZTv0_n20_N9S19252C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19252C12__9S19252C15__9S19252C18[] = {
  ABISELECT(800,488),
  0,
  ABISELECT(144,80),
  ABISELECT(800,488),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19252C15D1Ev,_ZTv0_n20_N9S19252C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19252C15D0Ev,_ZTv0_n20_N9S19252C15D0Ev),
};
static  VTT_ENTRY vtt_S19252C18[] = {
  {&(_ZTV9S19252C18[7]),  7,72},
  {&(_ZTV9S19252C18[13]),  13,72},
  {&(_ZTV9S19252C18[19]),  19,72},
  {&(_ZTV9S19252C18[31]),  31,72},
  {&(_ZTV9S19252C18[39]),  39,72},
  {&(_ZTV9S19252C18[42]),  42,72},
  {&(_ZTV9S19252C18[46]),  46,72},
  {&(_ZTV9S19252C18[55]),  55,72},
  {&(_ZTV9S19252C18[61]),  61,72},
  {&(_ZTV9S19252C18[67]),  67,72},
  {&(_ZTV9S19252C18[71]),  71,72},
  {&(_tg__ZTV9S19252C12__9S19252C18[3]),  3,6},
  {&(_tg__ZTV9S19252C13__9S19252C12__9S19252C18[9]),  9,15},
  {&(_tg__ZTV8S19252C99S19252C13__9S19252C12__9S19252C18[2]),  2,3},
  {&(_tg__ZTV9S19252C119S19252C13__9S19252C12__9S19252C18[2]),  2,4},
  {&(_tg__ZTV8S19252C99S19252C119S19252C13__A1__9S19252C12__9S19252C18[2]),  2,3},
  {&(_tg__ZTV9S19252C15__9S19252C18[4]),  4,8},
  {&(_tg__ZTV9S19252C13__9S19252C15__9S19252C18[9]),  9,15},
  {&(_tg__ZTV8S19252C99S19252C13__9S19252C15__9S19252C18[2]),  2,3},
  {&(_tg__ZTV9S19252C119S19252C13__9S19252C15__9S19252C18[2]),  2,4},
  {&(_tg__ZTV8S19252C99S19252C119S19252C13__A1__9S19252C15__9S19252C18[2]),  2,3},
  {&(_tg__ZTV9S19252C12__9S19252C15__9S19252C18[5]),  5,8},
};
extern VTBL_ENTRY _ZTI9S19252C18[];
extern  VTBL_ENTRY _ZTV9S19252C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19252C18[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C12D0Ev,_ZTv0_n16_N9S19252C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19252C12D0Ev,_ZThn80_N9S19252C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C12D1Ev,_ZTv0_n16_N9S19252C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19252C12D1Ev,_ZThn80_N9S19252C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19252C18D0Ev,_ZTv0_n32_N9S19252C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn928_N9S19252C18D0Ev,_ZThn556_N9S19252C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19252C18D1Ev,_ZTv0_n32_N9S19252C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn928_N9S19252C18D1Ev,_ZThn556_N9S19252C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C18D0Ev,_ZTv0_n16_N9S19252C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19252C18D0Ev,_ZThn148_N9S19252C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C18D1Ev,_ZTv0_n16_N9S19252C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19252C18D1Ev,_ZThn148_N9S19252C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19252C18D0Ev,_ZTv0_n20_N9S19252C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19252C18D0Ev,_ZThn68_N9S19252C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19252C18D1Ev,_ZTv0_n20_N9S19252C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19252C18D1Ev,_ZThn68_N9S19252C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19252C18 = {  "S19252C18", // class name
  bases_S19252C18, 16,
  &(vtc_S19252C18[0]), // expected_vtbl_contents
  &(vtt_S19252C18[0]), // expected_vtt_contents
  ABISELECT(1936,1152), // object size
  NSPAIRA(_ZTI9S19252C18),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19252C18),72, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19252C18),22, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19252C14  : S19252C7 , S19252C2 , S19252C15 , S19252C17 , virtual S19252C18 {
  int s19252c14f0;
  int s19252c14f1;
  char s19252c14f2;
  ::S19252C6 s19252c14f3;
  void *s19252c14f4;
  ~S19252C14(); // tgen
  S19252C14(); // tgen
};
//SIG(1 S19252C14) C1{ BC2{ vd v1 v2 Fi FU3{ m Fp} Fs:16 FC4{ v4 Fp Fp FD[10] Fp Fs Fp Fp} FC5{}} BC6{ BC7{ v3 Fp Fs FD} VBC8{ m Fi Fc Fp FC5} VBC9{ m Fi[2] Fs FC2} BC4 v5 Fi Fi[9] FD FU3 Fp} BC10{ VBC11{ BC7 BC4 BC12{ BC7 BC4 v6 Fi FC7 Fp} vd v7 v8 v9 Fc Fi FL Fl FL Fp} VBC13{ VBC11 BC7 vd Fs[4] Fi FD Fi Fp[5] FL} BC12 FC14{ VBC7 Fp FC4 Fp Fp}} BC15{ VBC2 v10 FL} VBC16{ VBC7 VBC13 VBC10 VBC12 vd v11 Fp[8] FL} Fi Fi Fc FC9 Fp}


S19252C14 ::~S19252C14(){ note_dtor("S19252C14", this);} // tgen
S19252C14 ::S19252C14(){ note_ctor("S19252C14", this);} // tgen

static void Test_S19252C14()
{
  extern Class_Descriptor cd_S19252C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(259,630)];
    init_test(&cd_S19252C14, buf);
    S19252C14 *dp, &lv = *(dp=new (buf) S19252C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4128,2516), "sizeof(S19252C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19252C14)");
    /*is_ambiguous_... S19252C14::S19252C7 */ AMB_check_base_class_offset(lv, (S19252C7*), 0, "S19252C14");
    check_base_class_offset(lv, (S19252C3*)(S19252C2*), ABISELECT(272,168), "S19252C14");
    check_base_class_offset(lv, (S19252C4*)(S19252C2*), ABISELECT(1608,1000), "S19252C14");
    check_base_class_offset(lv, (S19252C6*)(S19252C2*), ABISELECT(1632,1016), "S19252C14");
    check_base_class_offset(lv, (S19252C9*)(S19252C2*), ABISELECT(320,192), "S19252C14");
    check_base_class_offset(lv, (S19252C2*), ABISELECT(272,168), "S19252C14");
    /*is_ambiguous_... S19252C13::S19252C3 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C13*), ABISELECT(1920,1196), "S19252C14");
    /*is_ambiguous_... S19252C13::S19252C9 */ AMB_check_base_class_offset(lv, (S19252C9*)(S19252C13*), ABISELECT(1968,1220), "S19252C14");
    check_base_class_offset(lv, (S19252C3*)(S19252C11*)(S19252C13*), ABISELECT(2192,1368), "S19252C14");
    check_base_class_offset(lv, (S19252C9*)(S19252C11*)(S19252C13*), ABISELECT(2240,1392), "S19252C14");
    check_base_class_offset(lv, (S19252C11*)(S19252C13*), ABISELECT(2192,1368), "S19252C14");
    /*is_ambiguous_... S19252C14::S19252C15 */ AMB_check_base_class_offset(lv, (S19252C13*)(S19252C15*), ABISELECT(1920,1196), "S19252C14");
    check_base_class_offset(lv, (S19252C13*)(S19252C12*), ABISELECT(1920,1196), "S19252C14");
    /*is_ambiguous_... S19252C14::S19252C15 */ AMB_check_base_class_offset(lv, (S19252C13*)(S19252C15*), ABISELECT(1920,1196), "S19252C14");
    /*is_ambiguous_... S19252C12::S19252C3 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C12*), ABISELECT(2576,1604), "S19252C14");
    /*is_ambiguous_... S19252C14::S19252C15 */ AMB_check_base_class_offset(lv, (S19252C12*)(S19252C15*), ABISELECT(2576,1604), "S19252C14");
    check_base_class_offset(lv, (S19252C12*)(S19252C18*), ABISELECT(2576,1604), "S19252C14");
    /*is_ambiguous_... S19252C14::S19252C15 */ AMB_check_base_class_offset(lv, (S19252C12*)(S19252C15*), ABISELECT(2576,1604), "S19252C14");
    /*is_ambiguous_... S19252C14::S19252C15 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C11*)(S19252C15*), ABISELECT(624,400), "S19252C14");
    /*is_ambiguous_... S19252C14::S19252C15 */ AMB_check_base_class_offset(lv, (S19252C9*)(S19252C11*)(S19252C15*), ABISELECT(672,424), "S19252C14");
    /*is_ambiguous_... S19252C14::S19252C15 */ AMB_check_base_class_offset(lv, (S19252C11*)(S19252C15*), ABISELECT(624,400), "S19252C14");
    /*is_ambiguous_... S19252C14::S19252C15 */ AMB_check_base_class_offset(lv, (S19252C15*), ABISELECT(624,400), "S19252C14");
    check_base_class_offset(lv, (S19252C7*)(S19252C17*), ABISELECT(2720,1684), "S19252C14");
    check_base_class_offset(lv, (S19252C17*), ABISELECT(1280,792), "S19252C14");
    /*is_ambiguous_... S19252C18::S19252C3 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C18*), ABISELECT(3072,1896), "S19252C14");
    /*is_ambiguous_... S19252C14::S19252C15 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C11*)(S19252C15*), ABISELECT(3120,1920), "S19252C14");
    /*is_ambiguous_... S19252C14::S19252C15 */ AMB_check_base_class_offset(lv, (S19252C9*)(S19252C11*)(S19252C15*), ABISELECT(3168,1944), "S19252C14");
    /*is_ambiguous_... S19252C14::S19252C15 */ AMB_check_base_class_offset(lv, (S19252C11*)(S19252C15*), ABISELECT(3120,1920), "S19252C14");
    check_base_class_offset(lv, (S19252C15*)(S19252C18*), ABISELECT(3120,1920), "S19252C14");
    /*is_ambiguous_... S19252C14::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C11*), ABISELECT(3776,2312), "S19252C14");
    /*is_ambiguous_... S19252C14::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C9*)(S19252C11*), ABISELECT(3824,2336), "S19252C14");
    /*is_ambiguous_... S19252C18::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C11*)(S19252C18*), ABISELECT(3776,2312), "S19252C14");
    check_base_class_offset(lv, (S19252C18*), ABISELECT(2984,1852), "S19252C14");
    check_field_offset(lv, s19252c14f0, ABISELECT(1296,804), "S19252C14.s19252c14f0");
    check_field_offset(lv, s19252c14f1, ABISELECT(1300,808), "S19252C14.s19252c14f1");
    check_field_offset(lv, s19252c14f2, ABISELECT(1304,812), "S19252C14.s19252c14f2");
    check_field_offset(lv, s19252c14f3, ABISELECT(1312,816), "S19252C14.s19252c14f3");
    check_field_offset(lv, s19252c14f4, ABISELECT(1600,996), "S19252C14.s19252c14f4");
    test_class_info(&lv, &cd_S19252C14);
    dp->~S19252C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19252C14(Test_S19252C14, "S19252C14", ABISELECT(4128,2516));

#else // __cplusplus

extern void _ZN9S19252C14C1Ev();
extern void _ZN9S19252C14D1Ev();
Name_Map name_map_S19252C14[] = {
  NSPAIR(_ZN9S19252C14C1Ev),
  NSPAIR(_ZN9S19252C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19252C7;
extern VTBL_ENTRY _ZTI8S19252C7[];
extern  VTBL_ENTRY _ZTV8S19252C7[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C4;
extern VTBL_ENTRY _ZTI8S19252C4[];
extern Class_Descriptor cd_S19252C6;
extern VTBL_ENTRY _ZTI8S19252C6[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C2;
extern VTBL_ENTRY _ZTI8S19252C2[];
extern  VTBL_ENTRY _ZTV8S19252C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19252C2[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C11;
extern VTBL_ENTRY _ZTI9S19252C11[];
extern  VTBL_ENTRY _ZTV9S19252C11[];
extern Class_Descriptor cd_S19252C13;
extern VTBL_ENTRY _ZTI9S19252C13[];
extern  VTBL_ENTRY _ZTV9S19252C13[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C12;
extern VTBL_ENTRY _ZTI9S19252C12[];
extern  VTBL_ENTRY _ZTV9S19252C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19252C12[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C11;
extern VTBL_ENTRY _ZTI9S19252C11[];
extern  VTBL_ENTRY _ZTV9S19252C11[];
extern Class_Descriptor cd_S19252C15;
extern VTBL_ENTRY _ZTI9S19252C15[];
extern  VTBL_ENTRY _ZTV9S19252C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19252C15[];
extern Class_Descriptor cd_S19252C7;
extern VTBL_ENTRY _ZTI8S19252C7[];
extern  VTBL_ENTRY _ZTV8S19252C7[];
extern Class_Descriptor cd_S19252C17;
extern VTBL_ENTRY _ZTI9S19252C17[];
extern  VTBL_ENTRY _ZTV9S19252C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19252C17[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C11;
extern VTBL_ENTRY _ZTI9S19252C11[];
extern  VTBL_ENTRY _ZTV9S19252C11[];
extern Class_Descriptor cd_S19252C15;
extern VTBL_ENTRY _ZTI9S19252C15[];
extern  VTBL_ENTRY _ZTV9S19252C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19252C15[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C11;
extern VTBL_ENTRY _ZTI9S19252C11[];
extern  VTBL_ENTRY _ZTV9S19252C11[];
extern Class_Descriptor cd_S19252C18;
extern VTBL_ENTRY _ZTI9S19252C18[];
extern  VTBL_ENTRY _ZTV9S19252C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19252C18[];
static Base_Class bases_S19252C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19252C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S19252C3,    ABISELECT(272,168), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S19252C4,    ABISELECT(1608,1000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19252C6,    ABISELECT(1632,1016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19252C9,    ABISELECT(320,192), //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
    21, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19252C2,    ABISELECT(272,168), //bcp->offset
    15, //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
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19252C3,    ABISELECT(1920,1196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19252C9,    ABISELECT(1968,1220), //bcp->offset
    56, //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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19252C3,    ABISELECT(2192,1368), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19252C9,    ABISELECT(2240,1392), //bcp->offset
    63, //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
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19252C11,    ABISELECT(2192,1368), //bcp->offset
    59, //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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19252C13,    ABISELECT(1920,1196), //bcp->offset
    41, //bcp->virtual_function_table_offset
    9, //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
    13, //immediately_derived
  0, 1},
  {&cd_S19252C3,    ABISELECT(2576,1604), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19252C12,    ABISELECT(2576,1604), //bcp->offset
    66, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19252C3,    ABISELECT(624,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
    23, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19252C9,    ABISELECT(672,424), //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
    24, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19252C11,    ABISELECT(624,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
    25, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19252C15,    ABISELECT(624,400), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19252C7,    ABISELECT(2720,1684), //bcp->offset
    74, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19252C17,    ABISELECT(1280,792), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19252C3,    ABISELECT(3072,1896), //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
    10, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S19252C3,    ABISELECT(3120,1920), //bcp->offset
    -1, //bcp->virtual_function_table_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
    23, //immediately_derived
  0, 0},
  {&cd_S19252C9,    ABISELECT(3168,1944), //bcp->offset
    111, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19252C11,    ABISELECT(3120,1920), //bcp->offset
    -1, //bcp->virtual_function_table_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
    24, //immediately_derived
  0, 0},
  {&cd_S19252C15,    ABISELECT(3120,1920), //bcp->offset
    99, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S19252C3,    ABISELECT(3776,2312), //bcp->offset
    -1, //bcp->virtual_function_table_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
    27, //immediately_derived
  0, 0},
  {&cd_S19252C9,    ABISELECT(3824,2336), //bcp->offset
    121, //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
    16, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19252C11,    ABISELECT(3776,2312), //bcp->offset
    114, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S19252C18,    ABISELECT(2984,1852), //bcp->offset
    83, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19252C14[];
extern void _ZN9S19252C14D1Ev();
extern void _ZN9S19252C14D0Ev();
extern void _ZN8S19252C72v8Ev();
extern void _ZN8S19252C72v9Ev();
extern void _ZN8S19252C32v1Ev();
extern void _ZN8S19252C22v3Ev();
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void ABISELECT(_ZThn624_N9S19252C14D1Ev,_ZThn400_N9S19252C14D1Ev)();
extern void ABISELECT(_ZThn624_N9S19252C14D0Ev,_ZThn400_N9S19252C14D0Ev)();
extern void _ZN8S19252C92v2Ev();
extern void _ZN9S19252C173v10Ev();
extern void ABISELECT(_ZThn1280_N9S19252C14D1Ev,_ZThn792_N9S19252C14D1Ev)();
extern void ABISELECT(_ZThn1280_N9S19252C14D0Ev,_ZThn792_N9S19252C14D0Ev)();
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19252C14D1Ev,_ZTv0_n16_N9S19252C14D1Ev)();
extern void ABISELECT(_ZThn1920_N9S19252C14D1Ev,_ZThn1196_N9S19252C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19252C14D0Ev,_ZTv0_n16_N9S19252C14D0Ev)();
extern void ABISELECT(_ZThn1920_N9S19252C14D0Ev,_ZThn1196_N9S19252C14D0Ev)() __attribute__((weak));
extern void _ZN9S19252C132v5Ev();
extern void _ZN9S19252C132v6Ev();
extern void _ZN9S19252C132v7Ev();
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n40_N9S19252C14D1Ev,_ZTv0_n20_N9S19252C14D1Ev)();
extern void ABISELECT(_ZThn2576_N9S19252C14D1Ev,_ZThn1604_N9S19252C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19252C14D0Ev,_ZTv0_n20_N9S19252C14D0Ev)();
extern void ABISELECT(_ZThn2576_N9S19252C14D0Ev,_ZThn1604_N9S19252C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19252C14D1Ev,_ZTv0_n12_N9S19252C14D1Ev)();
extern void ABISELECT(_ZThn2720_N9S19252C14D1Ev,_ZThn1684_N9S19252C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19252C14D0Ev,_ZTv0_n12_N9S19252C14D0Ev)();
extern void ABISELECT(_ZThn2720_N9S19252C14D0Ev,_ZThn1684_N9S19252C14D0Ev)() __attribute__((weak));
extern void _ZN8S19252C72v8Ev();
extern void _ZN8S19252C72v9Ev();
extern void ABISELECT(_ZTv0_n64_N9S19252C14D1Ev,_ZTv0_n32_N9S19252C14D1Ev)();
extern void ABISELECT(_ZThn2984_N9S19252C14D1Ev,_ZThn1852_N9S19252C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19252C14D0Ev,_ZTv0_n32_N9S19252C14D0Ev)();
extern void ABISELECT(_ZThn2984_N9S19252C14D0Ev,_ZThn1852_N9S19252C14D0Ev)() __attribute__((weak));
extern void _ZN9S19252C183v11Ev();
extern void _ZN8S19252C32v1Ev();
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19252C14D1Ev,_ZTv0_n32_N9S19252C14D1Ev)();
extern void ABISELECT(_ZThn3120_N9S19252C14D1Ev,_ZThn1920_N9S19252C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19252C14D0Ev,_ZTv0_n32_N9S19252C14D0Ev)();
extern void ABISELECT(_ZThn3120_N9S19252C14D0Ev,_ZThn1920_N9S19252C14D0Ev)() __attribute__((weak));
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY vtc_S19252C14[] = {
  ABISELECT(3776,2312),
  ABISELECT(3120,1920),
  ABISELECT(3072,1896),
  ABISELECT(2984,1852),
  ABISELECT(2720,1684),
  ABISELECT(2576,1604),
  ABISELECT(1920,1196),
  ABISELECT(1632,1016),
  ABISELECT(1608,1000),
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C14[0]),
  (VTBL_ENTRY)&_ZN9S19252C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19252C14D0Ev,
  (VTBL_ENTRY)&_ZN8S19252C72v8Ev,
  (VTBL_ENTRY)&_ZN8S19252C72v9Ev,
  ABISELECT(1360,848),
  ABISELECT(1336,832),
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI9S19252C14[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19252C22v3Ev,
  ABISELECT(-320,-192),
  (VTBL_ENTRY)&(_ZTI9S19252C14[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(1952,1204),
  ABISELECT(1296,796),
  ABISELECT(-624,-400),
  (VTBL_ENTRY)&(_ZTI9S19252C14[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn624_N9S19252C14D1Ev,_ZThn400_N9S19252C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn624_N9S19252C14D0Ev,_ZThn400_N9S19252C14D0Ev),
  ABISELECT(-672,-424),
  (VTBL_ENTRY)&(_ZTI9S19252C14[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(1440,892),
  ABISELECT(-1280,-792),
  (VTBL_ENTRY)&(_ZTI9S19252C14[0]),
  (VTBL_ENTRY)&_ZN9S19252C173v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N9S19252C14D1Ev,_ZThn792_N9S19252C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N9S19252C14D0Ev,_ZThn792_N9S19252C14D0Ev),
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-1920,-1196),
  0,
  ABISELECT(-1920,-1196),
  (VTBL_ENTRY)&(_ZTI9S19252C14[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C14D1Ev,_ZTv0_n16_N9S19252C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C14D0Ev,_ZTv0_n16_N9S19252C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19252C132v5Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v6Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v7Ev,
  ABISELECT(-1968,-1220),
  (VTBL_ENTRY)&(_ZTI9S19252C14[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(-2192,-1368),
  (VTBL_ENTRY)&(_ZTI9S19252C14[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  ABISELECT(-2240,-1392),
  (VTBL_ENTRY)&(_ZTI9S19252C14[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(-2576,-1604),
  0,
  ABISELECT(-656,-408),
  ABISELECT(-2576,-1604),
  (VTBL_ENTRY)&(_ZTI9S19252C14[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19252C14D1Ev,_ZTv0_n20_N9S19252C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19252C14D0Ev,_ZTv0_n20_N9S19252C14D0Ev),
  0,
  0,
  ABISELECT(-2720,-1684),
  ABISELECT(-2720,-1684),
  (VTBL_ENTRY)&(_ZTI9S19252C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19252C14D1Ev,_ZTv0_n12_N9S19252C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19252C14D0Ev,_ZTv0_n12_N9S19252C14D0Ev),
  (VTBL_ENTRY)&_ZN8S19252C72v8Ev,
  (VTBL_ENTRY)&_ZN8S19252C72v9Ev,
  0,
  ABISELECT(-2984,-1852),
  ABISELECT(792,460),
  ABISELECT(136,68),
  ABISELECT(-1064,-656),
  ABISELECT(-408,-248),
  ABISELECT(88,44),
  ABISELECT(-2984,-1852),
  (VTBL_ENTRY)&(_ZTI9S19252C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19252C14D1Ev,_ZTv0_n32_N9S19252C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19252C14D0Ev,_ZTv0_n32_N9S19252C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19252C183v11Ev,
  0,
  ABISELECT(-3072,-1896),
  (VTBL_ENTRY)&(_ZTI9S19252C14[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  ABISELECT(-3120,-1920),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(-544,-316),
  ABISELECT(-1200,-724),
  ABISELECT(-3120,-1920),
  (VTBL_ENTRY)&(_ZTI9S19252C14[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19252C14D1Ev,_ZTv0_n32_N9S19252C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19252C14D0Ev,_ZTv0_n32_N9S19252C14D0Ev),
  ABISELECT(-3168,-1944),
  (VTBL_ENTRY)&(_ZTI9S19252C14[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(-3776,-2312),
  (VTBL_ENTRY)&(_ZTI9S19252C14[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  ABISELECT(-3824,-2336),
  (VTBL_ENTRY)&(_ZTI9S19252C14[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern VTBL_ENTRY _ZTV9S19252C14[];
extern void _ZN8S19252C32v1Ev();
extern void _ZN8S19252C22v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C2__9S19252C14[] = {
  ABISELECT(1360,848),
  ABISELECT(1336,832),
  0,
  (VTBL_ENTRY)&(_ZTI8S19252C2[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19252C22v3Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void _ZN9S19252C15D1Ev();
extern void _ZN9S19252C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C15__A__9S19252C14[] = {
  ABISELECT(1952,1204),
  ABISELECT(1296,796),
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  (VTBL_ENTRY)&_ZN9S19252C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19252C15D0Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19252C15D1Ev,_ZTv0_n16_N9S19252C15D1Ev)();
extern void ABISELECT(_ZThn1296_N9S19252C15D1Ev,_ZThn796_N9S19252C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19252C15D0Ev,_ZTv0_n16_N9S19252C15D0Ev)();
extern void ABISELECT(_ZThn1296_N9S19252C15D0Ev,_ZThn796_N9S19252C15D0Ev)() __attribute__((weak));
extern void _ZN9S19252C132v5Ev();
extern void _ZN9S19252C132v6Ev();
extern void _ZN9S19252C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C13__9S19252C15__A__9S19252C14[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-1296,-796),
  0,
  ABISELECT(-1296,-796),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C15D1Ev,_ZTv0_n16_N9S19252C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C15D0Ev,_ZTv0_n16_N9S19252C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19252C132v5Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v6Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v7Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C13__9S19252C15__A__9S19252C14[] = {
  ABISELECT(-1344,-820),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C119S19252C13__9S19252C15__A__9S19252C14[] = {
  ABISELECT(-1568,-968),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C119S19252C13__A1__9S19252C15__A__9S19252C14[] = {
  ABISELECT(-1616,-992),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n40_N9S19252C15D1Ev,_ZTv0_n20_N9S19252C15D1Ev)();
extern void ABISELECT(_ZThn1952_N9S19252C15D1Ev,_ZThn1204_N9S19252C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19252C15D0Ev,_ZTv0_n20_N9S19252C15D0Ev)();
extern void ABISELECT(_ZThn1952_N9S19252C15D0Ev,_ZThn1204_N9S19252C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19252C12__9S19252C15__A__9S19252C14[] = {
  ABISELECT(-1952,-1204),
  0,
  ABISELECT(-656,-408),
  ABISELECT(-1952,-1204),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19252C15D1Ev,_ZTv0_n20_N9S19252C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19252C15D0Ev,_ZTv0_n20_N9S19252C15D0Ev),
};
extern void _ZN9S19252C173v10Ev();
extern void _ZN9S19252C17D1Ev();
extern void _ZN9S19252C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C17__9S19252C14[] = {
  ABISELECT(1440,892),
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C17[0]),
  (VTBL_ENTRY)&_ZN9S19252C173v10Ev,
  (VTBL_ENTRY)&_ZN9S19252C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19252C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19252C17D1Ev,_ZTv0_n12_N9S19252C17D1Ev)();
extern void ABISELECT(_ZThn1440_N9S19252C17D1Ev,_ZThn892_N9S19252C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19252C17D0Ev,_ZTv0_n12_N9S19252C17D0Ev)();
extern void ABISELECT(_ZThn1440_N9S19252C17D0Ev,_ZThn892_N9S19252C17D0Ev)() __attribute__((weak));
extern void _ZN8S19252C72v8Ev();
extern void _ZN8S19252C72v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C7__9S19252C17__9S19252C14[] = {
  0,
  0,
  ABISELECT(-1440,-892),
  ABISELECT(-1440,-892),
  (VTBL_ENTRY)&(_ZTI9S19252C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19252C17D1Ev,_ZTv0_n12_N9S19252C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19252C17D0Ev,_ZTv0_n12_N9S19252C17D0Ev),
  (VTBL_ENTRY)&_ZN8S19252C72v8Ev,
  (VTBL_ENTRY)&_ZN8S19252C72v9Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C12D1Ev();
extern void _ZN9S19252C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C12__9S19252C14[] = {
  ABISELECT(-656,-408),
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19252C12D0Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19252C12D1Ev,_ZTv0_n16_N9S19252C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19252C12D0Ev,_ZTv0_n16_N9S19252C12D0Ev)();
extern void _ZN9S19252C132v5Ev();
extern void _ZN9S19252C132v6Ev();
extern void _ZN9S19252C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C13__9S19252C12__9S19252C14[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(656,408),
  0,
  ABISELECT(656,408),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C12D1Ev,_ZTv0_n16_N9S19252C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C12D0Ev,_ZTv0_n16_N9S19252C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19252C132v5Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v6Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v7Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C13__9S19252C12__9S19252C14[] = {
  ABISELECT(608,384),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C119S19252C13__9S19252C12__9S19252C14[] = {
  ABISELECT(384,236),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C119S19252C13__A1__9S19252C12__9S19252C14[] = {
  ABISELECT(336,212),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN9S19252C18D1Ev();
extern void _ZN9S19252C18D0Ev();
extern void _ZN9S19252C183v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C18__9S19252C14[] = {
  ABISELECT(792,460),
  ABISELECT(136,68),
  ABISELECT(-1064,-656),
  ABISELECT(-408,-248),
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN9S19252C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19252C18D0Ev,
  (VTBL_ENTRY)&_ZN9S19252C183v11Ev,
};
extern void _ZN8S19252C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C3__9S19252C18__9S19252C14[] = {
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n40_N9S19252C18D1Ev,_ZTv0_n20_N9S19252C18D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19252C18D0Ev,_ZTv0_n20_N9S19252C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19252C12__9S19252C18__9S19252C14[] = {
  ABISELECT(408,248),
  0,
  ABISELECT(-656,-408),
  ABISELECT(408,248),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19252C18D1Ev,_ZTv0_n20_N9S19252C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19252C18D0Ev,_ZTv0_n20_N9S19252C18D0Ev),
};
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19252C18D1Ev,_ZTv0_n16_N9S19252C18D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19252C18D0Ev,_ZTv0_n16_N9S19252C18D0Ev)();
extern void _ZN9S19252C132v5Ev();
extern void _ZN9S19252C132v6Ev();
extern void _ZN9S19252C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C13__9S19252C18__9S19252C14[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(1064,656),
  0,
  ABISELECT(1064,656),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C18D1Ev,_ZTv0_n16_N9S19252C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C18D0Ev,_ZTv0_n16_N9S19252C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19252C132v5Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v6Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v7Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C13__9S19252C18__9S19252C14[] = {
  ABISELECT(1016,632),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C119S19252C13__9S19252C18__9S19252C14[] = {
  ABISELECT(792,484),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C119S19252C13__A1__9S19252C18__9S19252C14[] = {
  ABISELECT(744,460),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19252C18D1Ev,_ZTv0_n32_N9S19252C18D1Ev)();
extern void ABISELECT(_ZThn136_N9S19252C18D1Ev,_ZThn68_N9S19252C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19252C18D0Ev,_ZTv0_n32_N9S19252C18D0Ev)();
extern void ABISELECT(_ZThn136_N9S19252C18D0Ev,_ZThn68_N9S19252C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19252C15__9S19252C18__9S19252C14[] = {
  ABISELECT(-136,-68),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(-544,-316),
  ABISELECT(-1200,-724),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19252C18D1Ev,_ZTv0_n32_N9S19252C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19252C18D0Ev,_ZTv0_n32_N9S19252C18D0Ev),
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C119S19252C15__A2__9S19252C18__9S19252C14[] = {
  ABISELECT(-184,-92),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C11__A2__9S19252C18__9S19252C14[] = {
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(-792,-460),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C11__A3__9S19252C18__9S19252C14[] = {
  ABISELECT(-840,-484),
  (VTBL_ENTRY)&(_ZTI9S19252C18[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void _ZN9S19252C15D1Ev();
extern void _ZN9S19252C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C15__A1__9S19252C14[] = {
  ABISELECT(-544,-316),
  ABISELECT(-1200,-724),
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  (VTBL_ENTRY)&_ZN9S19252C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19252C15D0Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19252C15D1Ev,_ZTv0_n16_N9S19252C15D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19252C15D0Ev,_ZTv0_n16_N9S19252C15D0Ev)();
extern void _ZN9S19252C132v5Ev();
extern void _ZN9S19252C132v6Ev();
extern void _ZN9S19252C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C13__9S19252C15__A1__9S19252C14[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(1200,724),
  0,
  ABISELECT(1200,724),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C15D1Ev,_ZTv0_n16_N9S19252C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C15D0Ev,_ZTv0_n16_N9S19252C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19252C132v5Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v6Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v7Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C13__9S19252C15__A1__9S19252C14[] = {
  ABISELECT(1152,700),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C119S19252C13__9S19252C15__A1__9S19252C14[] = {
  ABISELECT(928,552),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C119S19252C13__A1__9S19252C15__A1__9S19252C14[] = {
  ABISELECT(880,528),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n40_N9S19252C15D1Ev,_ZTv0_n20_N9S19252C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19252C15D0Ev,_ZTv0_n20_N9S19252C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19252C12__9S19252C15__A1__9S19252C14[] = {
  ABISELECT(544,316),
  0,
  ABISELECT(-656,-408),
  ABISELECT(544,316),
  (VTBL_ENTRY)&(_ZTI9S19252C15[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19252C15D1Ev,_ZTv0_n20_N9S19252C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19252C15D0Ev,_ZTv0_n20_N9S19252C15D0Ev),
};
static  VTT_ENTRY vtt_S19252C14[] = {
  {&(_ZTV9S19252C14[11]),  11,124},
  {&(_tg__ZTV8S19252C2__9S19252C14[4]),  4,6},
  {&(_tg__ZTV9S19252C15__A__9S19252C14[4]),  4,8},
  {&(_tg__ZTV9S19252C13__9S19252C15__A__9S19252C14[9]),  9,15},
  {&(_tg__ZTV8S19252C99S19252C13__9S19252C15__A__9S19252C14[2]),  2,3},
  {&(_tg__ZTV9S19252C119S19252C13__9S19252C15__A__9S19252C14[2]),  2,4},
  {&(_tg__ZTV8S19252C99S19252C119S19252C13__A1__9S19252C15__A__9S19252C14[2]),  2,3},
  {&(_tg__ZTV9S19252C12__9S19252C15__A__9S19252C14[5]),  5,8},
  {&(_tg__ZTV9S19252C17__9S19252C14[3]),  3,6},
  {&(_tg__ZTV8S19252C7__9S19252C17__9S19252C14[5]),  5,9},
  {&(_ZTV9S19252C14[19]),  19,124},
  {&(_ZTV9S19252C14[28]),  28,124},
  {&(_ZTV9S19252C14[50]),  50,124},
  {&(_ZTV9S19252C14[58]),  58,124},
  {&(_ZTV9S19252C14[61]),  61,124},
  {&(_ZTV9S19252C14[65]),  65,124},
  {&(_ZTV9S19252C14[71]),  71,124},
  {&(_ZTV9S19252C14[38]),  38,124},
  {&(_ZTV9S19252C14[79]),  79,124},
  {&(_ZTV9S19252C14[92]),  92,124},
  {&(_ZTV9S19252C14[98]),  98,124},
  {&(_ZTV9S19252C14[107]),  107,124},
  {&(_ZTV9S19252C14[113]),  113,124},
  {&(_ZTV9S19252C14[119]),  119,124},
  {&(_ZTV9S19252C14[123]),  123,124},
  {&(_tg__ZTV9S19252C12__9S19252C14[3]),  3,6},
  {&(_tg__ZTV9S19252C13__9S19252C12__9S19252C14[9]),  9,15},
  {&(_tg__ZTV8S19252C99S19252C13__9S19252C12__9S19252C14[2]),  2,3},
  {&(_tg__ZTV9S19252C119S19252C13__9S19252C12__9S19252C14[2]),  2,4},
  {&(_tg__ZTV8S19252C99S19252C119S19252C13__A1__9S19252C12__9S19252C14[2]),  2,3},
  {&(_tg__ZTV9S19252C18__9S19252C14[7]),  7,10},
  {&(_tg__ZTV8S19252C3__9S19252C18__9S19252C14[3]),  3,4},
  {&(_tg__ZTV9S19252C12__9S19252C18__9S19252C14[5]),  5,8},
  {&(_tg__ZTV9S19252C13__9S19252C18__9S19252C14[9]),  9,15},
  {&(_tg__ZTV8S19252C99S19252C13__9S19252C18__9S19252C14[2]),  2,3},
  {&(_tg__ZTV9S19252C119S19252C13__9S19252C18__9S19252C14[2]),  2,4},
  {&(_tg__ZTV8S19252C99S19252C119S19252C13__A1__9S19252C18__9S19252C14[2]),  2,3},
  {&(_tg__ZTV9S19252C15__9S19252C18__9S19252C14[8]),  8,12},
  {&(_tg__ZTV8S19252C99S19252C119S19252C15__A2__9S19252C18__9S19252C14[2]),  2,3},
  {&(_tg__ZTV9S19252C11__A2__9S19252C18__9S19252C14[5]),  5,7},
  {&(_tg__ZTV8S19252C99S19252C11__A3__9S19252C18__9S19252C14[2]),  2,3},
  {&(_tg__ZTV9S19252C15__A1__9S19252C14[4]),  4,8},
  {&(_tg__ZTV9S19252C13__9S19252C15__A1__9S19252C14[9]),  9,15},
  {&(_tg__ZTV8S19252C99S19252C13__9S19252C15__A1__9S19252C14[2]),  2,3},
  {&(_tg__ZTV9S19252C119S19252C13__9S19252C15__A1__9S19252C14[2]),  2,4},
  {&(_tg__ZTV8S19252C99S19252C119S19252C13__A1__9S19252C15__A1__9S19252C14[2]),  2,3},
  {&(_tg__ZTV9S19252C12__9S19252C15__A1__9S19252C14[5]),  5,8},
};
extern VTBL_ENTRY _ZTI9S19252C14[];
extern  VTBL_ENTRY _ZTV9S19252C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19252C14[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19252C18D0Ev,_ZTv0_n32_N9S19252C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19252C18D0Ev,_ZThn68_N9S19252C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19252C18D1Ev,_ZTv0_n32_N9S19252C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19252C18D1Ev,_ZThn68_N9S19252C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19252C17D0Ev,_ZTv0_n12_N9S19252C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N9S19252C17D0Ev,_ZThn892_N9S19252C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19252C17D1Ev,_ZTv0_n12_N9S19252C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N9S19252C17D1Ev,_ZThn892_N9S19252C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19252C15D0Ev,_ZTv0_n20_N9S19252C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1952_N9S19252C15D0Ev,_ZThn1204_N9S19252C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19252C15D1Ev,_ZTv0_n20_N9S19252C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1952_N9S19252C15D1Ev,_ZThn1204_N9S19252C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C15D0Ev,_ZTv0_n16_N9S19252C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1296_N9S19252C15D0Ev,_ZThn796_N9S19252C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C15D1Ev,_ZTv0_n16_N9S19252C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1296_N9S19252C15D1Ev,_ZThn796_N9S19252C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19252C14D0Ev,_ZTv0_n32_N9S19252C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N9S19252C14D0Ev,_ZThn1920_N9S19252C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2984_N9S19252C14D0Ev,_ZThn1852_N9S19252C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19252C14D1Ev,_ZTv0_n32_N9S19252C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N9S19252C14D1Ev,_ZThn1920_N9S19252C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2984_N9S19252C14D1Ev,_ZThn1852_N9S19252C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19252C14D0Ev,_ZTv0_n12_N9S19252C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2720_N9S19252C14D0Ev,_ZThn1684_N9S19252C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19252C14D1Ev,_ZTv0_n12_N9S19252C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2720_N9S19252C14D1Ev,_ZThn1684_N9S19252C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19252C14D0Ev,_ZTv0_n20_N9S19252C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2576_N9S19252C14D0Ev,_ZThn1604_N9S19252C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19252C14D1Ev,_ZTv0_n20_N9S19252C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2576_N9S19252C14D1Ev,_ZThn1604_N9S19252C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C14D0Ev,_ZTv0_n16_N9S19252C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1920_N9S19252C14D0Ev,_ZThn1196_N9S19252C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C14D1Ev,_ZTv0_n16_N9S19252C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1920_N9S19252C14D1Ev,_ZThn1196_N9S19252C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19252C14 = {  "S19252C14", // class name
  bases_S19252C14, 29,
  &(vtc_S19252C14[0]), // expected_vtbl_contents
  &(vtt_S19252C14[0]), // expected_vtt_contents
  ABISELECT(4128,2516), // object size
  NSPAIRA(_ZTI9S19252C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19252C14),124, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19252C14),47, //virtual table table var
  27, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19252C1  : virtual S19252C2 , S19252C10 , S19252C11 {
  long double s19252c1f0;
  ::S19252C7 s19252c1f1;
  ::S19252C14 s19252c1f2[5];
  void *s19252c1f3;
  long double s19252c1f4;
  void *s19252c1f5;
  void *s19252c1f6;
  virtual  ~S19252C1(); // _ZN8S19252C1D2Ev
  S19252C1(); // tgen
};
//SIG(1 S19252C1) C1{ VBC2{ BC3{ v1 Fp Fs FD} VBC4{ m Fi Fc Fp FC5{}} VBC6{ m Fi[2] Fs FC7{ vd v8 v9 Fi FU8{ m Fp} Fs:16 FC9{ v2 Fp Fp FD[10] Fp Fs Fp Fp} FC5}} BC9 v3 Fi Fi[9] FD FU8 Fp} BC10{ BC11{ BC3 BC9 v4 Fi FC3 Fp} BC4 VBC12{ VBC13{ BC3 BC9 BC11 vd v5 v6 v7 Fc Fi FL Fl FL Fp} BC3 vd Fs[4] Fi FD Fi Fp[5] FL} VBC6 BC9 vd Fp} BC11 vd FD FC7 FC14{ BC7 BC2 BC15{ VBC13 VBC12 BC11 FC16{ VBC3 Fp FC9 Fp Fp}} BC17{ VBC7 v10 FL} VBC18{ VBC3 VBC12 VBC15 VBC11 vd v11 Fp[8] FL} Fi Fi Fc FC6 Fp}[5] Fp FD Fp Fp}


 S19252C1 ::~S19252C1(){ note_dtor("S19252C1", this);}
S19252C1 ::S19252C1(){ note_ctor("S19252C1", this);} // tgen

static void Test_S19252C1()
{
  extern Class_Descriptor cd_S19252C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1464,3570)];
    init_test(&cd_S19252C1, buf);
    S19252C1 *dp, &lv = *(dp=new (buf) S19252C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(23408,14276), "sizeof(S19252C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19252C1)");
    check_base_class_offset(lv, (S19252C3*)(S19252C2*), ABISELECT(21936,13360), "S19252C1");
    check_base_class_offset(lv, (S19252C4*)(S19252C2*), ABISELECT(22288,13592), "S19252C1");
    check_base_class_offset(lv, (S19252C6*)(S19252C2*), ABISELECT(22320,13608), "S19252C1");
    check_base_class_offset(lv, (S19252C6*)(S19252C10*), ABISELECT(22320,13608), "S19252C1");
    check_base_class_offset(lv, (S19252C9*)(S19252C2*), ABISELECT(21984,13384), "S19252C1");
    check_base_class_offset(lv, (S19252C2*), ABISELECT(21936,13360), "S19252C1");
    /*is_ambiguous_... S19252C10::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C11*)(S19252C10*), 0, "S19252C1");
    /*is_ambiguous_... S19252C10::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C9*)(S19252C11*)(S19252C10*), ABISELECT(48,24), "S19252C1");
    /*is_ambiguous_... S19252C10::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C11*)(S19252C10*), 0, "S19252C1");
    check_base_class_offset(lv, (S19252C4*)(S19252C10*), ABISELECT(344,204), "S19252C1");
    /*is_ambiguous_... S19252C13::S19252C3 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C13*), ABISELECT(22752,13868), "S19252C1");
    /*is_ambiguous_... S19252C13::S19252C9 */ AMB_check_base_class_offset(lv, (S19252C9*)(S19252C13*), ABISELECT(22800,13892), "S19252C1");
    check_base_class_offset(lv, (S19252C3*)(S19252C11*)(S19252C13*), ABISELECT(23024,14040), "S19252C1");
    check_base_class_offset(lv, (S19252C9*)(S19252C11*)(S19252C13*), ABISELECT(23072,14064), "S19252C1");
    check_base_class_offset(lv, (S19252C11*)(S19252C13*), ABISELECT(23024,14040), "S19252C1");
    check_base_class_offset(lv, (S19252C13*)(S19252C12*), ABISELECT(22752,13868), "S19252C1");
    /*is_ambiguous_... S19252C12::S19252C3 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C12*), ABISELECT(22608,13788), "S19252C1");
    check_base_class_offset(lv, (S19252C12*)(S19252C10*), ABISELECT(22608,13788), "S19252C1");
    /*is_ambiguous_... S19252C10::S19252C9 */ AMB_check_base_class_offset(lv, (S19252C9*)(S19252C10*), ABISELECT(368,220), "S19252C1");
    check_base_class_offset(lv, (S19252C10*), 0, "S19252C1");
    /*is_ambiguous_... S19252C1::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C3*)(S19252C11*), ABISELECT(608,372), "S19252C1");
    /*is_ambiguous_... S19252C1::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C9*)(S19252C11*), ABISELECT(656,396), "S19252C1");
    /*is_ambiguous_... S19252C1::S19252C11 */ AMB_check_base_class_offset(lv, (S19252C11*), ABISELECT(608,372), "S19252C1");
    check_field_offset(lv, s19252c1f0, ABISELECT(960,576), "S19252C1.s19252c1f0");
    check_field_offset(lv, s19252c1f1, ABISELECT(976,588), "S19252C1.s19252c1f1");
    check_field_offset(lv, s19252c1f2, ABISELECT(1248,756), "S19252C1.s19252c1f2");
    check_field_offset(lv, s19252c1f3, ABISELECT(21888,13336), "S19252C1.s19252c1f3");
    check_field_offset(lv, s19252c1f4, ABISELECT(21904,13340), "S19252C1.s19252c1f4");
    check_field_offset(lv, s19252c1f5, ABISELECT(21920,13352), "S19252C1.s19252c1f5");
    check_field_offset(lv, s19252c1f6, ABISELECT(21928,13356), "S19252C1.s19252c1f6");
    test_class_info(&lv, &cd_S19252C1);
    dp->~S19252C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19252C1(Test_S19252C1, "S19252C1", ABISELECT(23408,14276));

#else // __cplusplus

extern void _ZN8S19252C1C1Ev();
extern void _ZN8S19252C1D2Ev();
Name_Map name_map_S19252C1[] = {
  NSPAIR(_ZN8S19252C1C1Ev),
  NSPAIR(_ZN8S19252C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C4;
extern VTBL_ENTRY _ZTI8S19252C4[];
extern Class_Descriptor cd_S19252C6;
extern VTBL_ENTRY _ZTI8S19252C6[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C2;
extern VTBL_ENTRY _ZTI8S19252C2[];
extern  VTBL_ENTRY _ZTV8S19252C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19252C2[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C11;
extern VTBL_ENTRY _ZTI9S19252C11[];
extern  VTBL_ENTRY _ZTV9S19252C11[];
extern Class_Descriptor cd_S19252C4;
extern VTBL_ENTRY _ZTI8S19252C4[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C11;
extern VTBL_ENTRY _ZTI9S19252C11[];
extern  VTBL_ENTRY _ZTV9S19252C11[];
extern Class_Descriptor cd_S19252C13;
extern VTBL_ENTRY _ZTI9S19252C13[];
extern  VTBL_ENTRY _ZTV9S19252C13[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C12;
extern VTBL_ENTRY _ZTI9S19252C12[];
extern  VTBL_ENTRY _ZTV9S19252C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19252C12[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C10;
extern VTBL_ENTRY _ZTI9S19252C10[];
extern  VTBL_ENTRY _ZTV9S19252C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19252C10[];
extern Class_Descriptor cd_S19252C3;
extern VTBL_ENTRY _ZTI8S19252C3[];
extern  VTBL_ENTRY _ZTV8S19252C3[];
extern Class_Descriptor cd_S19252C9;
extern VTBL_ENTRY _ZTI8S19252C9[];
extern  VTBL_ENTRY _ZTV8S19252C9[];
extern Class_Descriptor cd_S19252C11;
extern VTBL_ENTRY _ZTI9S19252C11[];
extern  VTBL_ENTRY _ZTV9S19252C11[];
static Base_Class bases_S19252C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19252C3,    ABISELECT(21936,13360), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19252C4,    ABISELECT(22288,13592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19252C6,    ABISELECT(22320,13608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19252C9,    ABISELECT(21984,13384), //bcp->offset
    33, //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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19252C2,    ABISELECT(21936,13360), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19252C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19252C9,    ABISELECT(48,24), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19252C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    18, //immediately_derived
  0, 0},
  {&cd_S19252C4,    ABISELECT(344,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19252C3,    ABISELECT(22752,13868), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19252C9,    ABISELECT(22800,13892), //bcp->offset
    59, //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
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19252C3,    ABISELECT(23024,14040), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19252C9,    ABISELECT(23072,14064), //bcp->offset
    66, //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
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19252C11,    ABISELECT(23024,14040), //bcp->offset
    62, //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
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19252C13,    ABISELECT(22752,13868), //bcp->offset
    44, //bcp->virtual_function_table_offset
    9, //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
    16, //immediately_derived
  0, 1},
  {&cd_S19252C3,    ABISELECT(22608,13788), //bcp->offset
    -1, //bcp->virtual_function_table_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
    16, //immediately_derived
  0, 0},
  {&cd_S19252C12,    ABISELECT(22608,13788), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19252C9,    ABISELECT(368,220), //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
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19252C10,    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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19252C3,    ABISELECT(608,372), //bcp->offset
    -1, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S19252C9,    ABISELECT(656,396), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19252C11,    ABISELECT(608,372), //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
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19252C1[];
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void _ZN8S19252C1D1Ev();
extern void _ZN8S19252C1D0Ev();
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C32v1Ev();
extern void _ZN8S19252C22v3Ev();
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n40_N8S19252C1D1Ev,_ZTv0_n20_N8S19252C1D1Ev)();
extern void ABISELECT(_ZThn22608_N8S19252C1D1Ev,_ZThn13788_N8S19252C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19252C1D0Ev,_ZTv0_n20_N8S19252C1D0Ev)();
extern void ABISELECT(_ZThn22608_N8S19252C1D0Ev,_ZThn13788_N8S19252C1D0Ev)() __attribute__((weak));
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19252C1D1Ev,_ZTv0_n16_N8S19252C1D1Ev)();
extern void ABISELECT(_ZThn22752_N8S19252C1D1Ev,_ZThn13868_N8S19252C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19252C1D0Ev,_ZTv0_n16_N8S19252C1D0Ev)();
extern void ABISELECT(_ZThn22752_N8S19252C1D0Ev,_ZThn13868_N8S19252C1D0Ev)() __attribute__((weak));
extern void _ZN9S19252C132v5Ev();
extern void _ZN9S19252C132v6Ev();
extern void _ZN9S19252C132v7Ev();
extern void _ZN8S19252C92v2Ev();
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY vtc_S19252C1[] = {
  ABISELECT(22288,13592),
  ABISELECT(21936,13360),
  ABISELECT(22320,13608),
  ABISELECT(22752,13868),
  ABISELECT(22608,13788),
  0,
  (VTBL_ENTRY)&(_ZTI8S19252C1[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  (VTBL_ENTRY)&_ZN8S19252C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19252C1D0Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19252C1[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI8S19252C1[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(-608,-372),
  (VTBL_ENTRY)&(_ZTI8S19252C1[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  ABISELECT(-656,-396),
  (VTBL_ENTRY)&(_ZTI8S19252C1[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(384,248),
  ABISELECT(352,232),
  ABISELECT(-21936,-13360),
  (VTBL_ENTRY)&(_ZTI8S19252C1[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19252C22v3Ev,
  ABISELECT(-21984,-13384),
  (VTBL_ENTRY)&(_ZTI8S19252C1[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(-22608,-13788),
  0,
  ABISELECT(144,80),
  ABISELECT(-22608,-13788),
  (VTBL_ENTRY)&(_ZTI8S19252C1[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19252C1D1Ev,_ZTv0_n20_N8S19252C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19252C1D0Ev,_ZTv0_n20_N8S19252C1D0Ev),
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-22752,-13868),
  0,
  ABISELECT(-22752,-13868),
  (VTBL_ENTRY)&(_ZTI8S19252C1[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19252C1D1Ev,_ZTv0_n16_N8S19252C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19252C1D0Ev,_ZTv0_n16_N8S19252C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19252C132v5Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v6Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v7Ev,
  ABISELECT(-22800,-13892),
  (VTBL_ENTRY)&(_ZTI8S19252C1[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
  ABISELECT(-23024,-14040),
  (VTBL_ENTRY)&(_ZTI8S19252C1[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  ABISELECT(-23072,-14064),
  (VTBL_ENTRY)&(_ZTI8S19252C1[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern VTBL_ENTRY _ZTV8S19252C1[];
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
extern void _ZN9S19252C10D1Ev();
extern void _ZN9S19252C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C10__8S19252C1[] = {
  ABISELECT(22320,13608),
  ABISELECT(22752,13868),
  ABISELECT(22608,13788),
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C10[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
  (VTBL_ENTRY)&_ZN9S19252C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19252C10D0Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n40_N9S19252C10D1Ev,_ZTv0_n20_N9S19252C10D1Ev)();
extern void ABISELECT(_ZThn22608_N9S19252C10D1Ev,_ZThn13788_N9S19252C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19252C10D0Ev,_ZTv0_n20_N9S19252C10D0Ev)();
extern void ABISELECT(_ZThn22608_N9S19252C10D0Ev,_ZThn13788_N9S19252C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19252C12__9S19252C10__8S19252C1[] = {
  ABISELECT(-22608,-13788),
  0,
  ABISELECT(144,80),
  ABISELECT(-22608,-13788),
  (VTBL_ENTRY)&(_ZTI9S19252C10[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19252C10D1Ev,_ZTv0_n20_N9S19252C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19252C10D0Ev,_ZTv0_n20_N9S19252C10D0Ev),
};
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19252C10D1Ev,_ZTv0_n16_N9S19252C10D1Ev)();
extern void ABISELECT(_ZThn22752_N9S19252C10D1Ev,_ZThn13868_N9S19252C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19252C10D0Ev,_ZTv0_n16_N9S19252C10D0Ev)();
extern void ABISELECT(_ZThn22752_N9S19252C10D0Ev,_ZThn13868_N9S19252C10D0Ev)() __attribute__((weak));
extern void _ZN9S19252C132v5Ev();
extern void _ZN9S19252C132v6Ev();
extern void _ZN9S19252C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C13__9S19252C10__8S19252C1[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-22752,-13868),
  0,
  ABISELECT(-22752,-13868),
  (VTBL_ENTRY)&(_ZTI9S19252C10[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C10D1Ev,_ZTv0_n16_N9S19252C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C10D0Ev,_ZTv0_n16_N9S19252C10D0Ev),
  (VTBL_ENTRY)&_ZN9S19252C132v5Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v6Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v7Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C13__A1__9S19252C10__8S19252C1[] = {
  ABISELECT(-22800,-13892),
  (VTBL_ENTRY)&(_ZTI9S19252C10[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C119S19252C13__A1__9S19252C10__8S19252C1[] = {
  ABISELECT(-23024,-14040),
  (VTBL_ENTRY)&(_ZTI9S19252C10[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C119S19252C13__A2__9S19252C10__8S19252C1[] = {
  ABISELECT(-23072,-14064),
  (VTBL_ENTRY)&(_ZTI9S19252C10[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void _ZN8S19252C22v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C2__8S19252C1[] = {
  ABISELECT(384,248),
  ABISELECT(352,232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19252C2[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19252C22v3Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C12D1Ev();
extern void _ZN9S19252C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C12__8S19252C1[] = {
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19252C12D0Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19252C12D1Ev,_ZTv0_n16_N9S19252C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19252C12D1Ev,_ZThn80_N9S19252C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19252C12D0Ev,_ZTv0_n16_N9S19252C12D0Ev)();
extern void ABISELECT(_ZThn144_N9S19252C12D0Ev,_ZThn80_N9S19252C12D0Ev)() __attribute__((weak));
extern void _ZN9S19252C132v5Ev();
extern void _ZN9S19252C132v6Ev();
extern void _ZN9S19252C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C13__9S19252C12__8S19252C1[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-144,-80),
  0,
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C12D1Ev,_ZTv0_n16_N9S19252C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19252C12D0Ev,_ZTv0_n16_N9S19252C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19252C132v5Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v6Ev,
  (VTBL_ENTRY)&_ZN9S19252C132v7Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C13__9S19252C12__8S19252C1[] = {
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
extern void _ZN8S19252C32v1Ev();
extern void _ZN9S19252C112v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19252C119S19252C13__9S19252C12__8S19252C1[] = {
  ABISELECT(-416,-252),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19252C112v4Ev,
};
extern void _ZN8S19252C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19252C99S19252C119S19252C13__A1__9S19252C12__8S19252C1[] = {
  ABISELECT(-464,-276),
  (VTBL_ENTRY)&(_ZTI9S19252C12[0]),
  (VTBL_ENTRY)&_ZN8S19252C92v2Ev,
};
static  VTT_ENTRY vtt_S19252C1[] = {
  {&(_ZTV8S19252C1[7]),  7,69},
  {&(_tg__ZTV9S19252C10__8S19252C1[5]),  5,9},
  {&(_tg__ZTV9S19252C12__9S19252C10__8S19252C1[5]),  5,8},
  {&(_tg__ZTV9S19252C13__9S19252C10__8S19252C1[9]),  9,15},
  {&(_tg__ZTV8S19252C99S19252C13__A1__9S19252C10__8S19252C1[2]),  2,3},
  {&(_tg__ZTV9S19252C119S19252C13__A1__9S19252C10__8S19252C1[2]),  2,4},
  {&(_tg__ZTV8S19252C99S19252C119S19252C13__A2__9S19252C10__8S19252C1[2]),  2,3},
  {&(_ZTV8S19252C1[31]),  31,69},
  {&(_ZTV8S19252C1[35]),  35,69},
  {&(_ZTV8S19252C1[41]),  41,69},
  {&(_ZTV8S19252C1[53]),  53,69},
  {&(_ZTV8S19252C1[61]),  61,69},
  {&(_ZTV8S19252C1[64]),  64,69},
  {&(_ZTV8S19252C1[68]),  68,69},
  {&(_tg__ZTV8S19252C2__8S19252C1[4]),  4,6},
  {&(_tg__ZTV9S19252C12__8S19252C1[3]),  3,6},
  {&(_tg__ZTV9S19252C13__9S19252C12__8S19252C1[9]),  9,15},
  {&(_tg__ZTV8S19252C99S19252C13__9S19252C12__8S19252C1[2]),  2,3},
  {&(_tg__ZTV9S19252C119S19252C13__9S19252C12__8S19252C1[2]),  2,4},
  {&(_tg__ZTV8S19252C99S19252C119S19252C13__A1__9S19252C12__8S19252C1[2]),  2,3},
};
extern VTBL_ENTRY _ZTI8S19252C1[];
extern  VTBL_ENTRY _ZTV8S19252C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19252C1[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C12D0Ev,_ZTv0_n16_N9S19252C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19252C12D0Ev,_ZThn80_N9S19252C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C12D1Ev,_ZTv0_n16_N9S19252C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19252C12D1Ev,_ZThn80_N9S19252C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C10D0Ev,_ZTv0_n16_N9S19252C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22752_N9S19252C10D0Ev,_ZThn13868_N9S19252C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19252C10D1Ev,_ZTv0_n16_N9S19252C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22752_N9S19252C10D1Ev,_ZThn13868_N9S19252C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19252C10D0Ev,_ZTv0_n20_N9S19252C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22608_N9S19252C10D0Ev,_ZThn13788_N9S19252C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19252C10D1Ev,_ZTv0_n20_N9S19252C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22608_N9S19252C10D1Ev,_ZThn13788_N9S19252C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19252C1D0Ev,_ZTv0_n16_N8S19252C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22752_N8S19252C1D0Ev,_ZThn13868_N8S19252C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19252C1D1Ev,_ZTv0_n16_N8S19252C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22752_N8S19252C1D1Ev,_ZThn13868_N8S19252C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19252C1D0Ev,_ZTv0_n20_N8S19252C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22608_N8S19252C1D0Ev,_ZThn13788_N8S19252C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19252C1D1Ev,_ZTv0_n20_N8S19252C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22608_N8S19252C1D1Ev,_ZThn13788_N8S19252C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19252C1 = {  "S19252C1", // class name
  bases_S19252C1, 22,
  &(vtc_S19252C1[0]), // expected_vtbl_contents
  &(vtt_S19252C1[0]), // expected_vtt_contents
  ABISELECT(23408,14276), // object size
  NSPAIRA(_ZTI8S19252C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19252C1),69, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19252C1),20, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3600C6_nt  {
  void  mf3600c6(); // _ZN10S3600C6_nt8mf3600c6Ev
};
//SIG(-1 S3600C6_nt) C1{ m}


void  S3600C6_nt ::mf3600c6(){}

//skip512 S3600C6_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S3600C6_nt[];
VTBL_ENTRY *P__ZTI10S3600C6_nt = _ZTI10S3600C6_nt; 
Class_Descriptor cd_S3600C6_nt = {  "S3600C6_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI10S3600C6_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  S3600C4_nt  {
  void *s3600c4f0;
  int s3600c4f1;
  ::S1325C18_nt s3600c4f2;
  ::S3600C6_nt s3600c4f3;
  void  mf3600c4(); // _ZN10S3600C4_nt8mf3600c4Ev
};
//SIG(-1 S3600C4_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S3600C4_nt ::mf3600c4(){}

//skip512 S3600C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3600C3_nt  {
  ::S3600C4_nt s3600c3f0;
  ::S3600C4_nt s3600c3f1;
  char s3600c3f2;
  void  mf3600c3(); // _ZN10S3600C3_nt8mf3600c3Ev
  virtual  ~S3600C3_nt(); // _ZN10S3600C3_ntD1Ev
  S3600C3_nt(); // tgen
};
//SIG(-1 S3600C3_nt) C1{ vd m FC2{ m Fp Fi FC3{ m} FC4{ m}} FC2 Fc}


void  S3600C3_nt ::mf3600c3(){}
 S3600C3_nt ::~S3600C3_nt(){ note_dtor("S3600C3_nt", this);}
S3600C3_nt ::S3600C3_nt(){ note_ctor("S3600C3_nt", this);} // tgen

//skip512 S3600C3_nt

#else // __cplusplus

extern void _ZN10S3600C3_ntC1Ev();
extern void _ZN10S3600C3_ntD1Ev();
Name_Map name_map_S3600C3_nt[] = {
  NSPAIR(_ZN10S3600C3_ntC1Ev),
  NSPAIR(_ZN10S3600C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3600C3_nt[];
extern void _ZN10S3600C3_ntD1Ev();
extern void _ZN10S3600C3_ntD0Ev();
static  VTBL_ENTRY vtc_S3600C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3600C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3600C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3600C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3600C3_nt[];
VTBL_ENTRY *P__ZTI10S3600C3_nt = _ZTI10S3600C3_nt; 
extern  VTBL_ENTRY _ZTV10S3600C3_nt[];
Class_Descriptor cd_S3600C3_nt = {  "S3600C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3600C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S3600C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3600C3_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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3600C11_nt  {
  void *s3600c11f0;
  int s3600c11f1;
  ::S3600C6_nt s3600c11f2;
  void  mf3600c11(); // _ZN11S3600C11_nt9mf3600c11Ev
};
//SIG(-1 S3600C11_nt) C1{ m Fp Fi FC2{ m}}


void  S3600C11_nt ::mf3600c11(){}

//skip512 S3600C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3600C10_nt  {
  ::S3600C11_nt s3600c10f0;
  int s3600c10f1[2];
  char s3600c10f2;
  virtual  ~S3600C10_nt(); // _ZN11S3600C10_ntD1Ev
  virtual void  v3(); // _ZN11S3600C10_nt2v3Ev
  virtual void  v4(); // _ZN11S3600C10_nt2v4Ev
  virtual void  v5(); // _ZN11S3600C10_nt2v5Ev
  S3600C10_nt(); // tgen
};
//SIG(-1 S3600C10_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S3600C10_nt ::~S3600C10_nt(){ note_dtor("S3600C10_nt", this);}
void  S3600C10_nt ::v3(){vfunc_called(this, "_ZN11S3600C10_nt2v3Ev");}
void  S3600C10_nt ::v4(){vfunc_called(this, "_ZN11S3600C10_nt2v4Ev");}
void  S3600C10_nt ::v5(){vfunc_called(this, "_ZN11S3600C10_nt2v5Ev");}
S3600C10_nt ::S3600C10_nt(){ note_ctor("S3600C10_nt", this);} // tgen

//skip512 S3600C10_nt

#else // __cplusplus

extern void _ZN11S3600C10_ntC1Ev();
extern void _ZN11S3600C10_ntD1Ev();
Name_Map name_map_S3600C10_nt[] = {
  NSPAIR(_ZN11S3600C10_ntC1Ev),
  NSPAIR(_ZN11S3600C10_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S3600C10_nt[];
extern void _ZN11S3600C10_ntD1Ev();
extern void _ZN11S3600C10_ntD0Ev();
extern void _ZN11S3600C10_nt2v3Ev();
extern void _ZN11S3600C10_nt2v4Ev();
extern void _ZN11S3600C10_nt2v5Ev();
static  VTBL_ENTRY vtc_S3600C10_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3600C10_nt[0]),
  (VTBL_ENTRY)&_ZN11S3600C10_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S3600C10_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S3600C10_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S3600C10_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S3600C10_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI11S3600C10_nt[];
VTBL_ENTRY *P__ZTI11S3600C10_nt = _ZTI11S3600C10_nt; 
extern  VTBL_ENTRY _ZTV11S3600C10_nt[];
Class_Descriptor cd_S3600C10_nt = {  "S3600C10_nt", // class name
  0,0,//no base classes
  &(vtc_S3600C10_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI11S3600C10_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S3600C10_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  S3600C13_nt  {
  __tsi64 s3600c13f0[4];
  void  mf3600c13(); // _ZN11S3600C13_nt9mf3600c13Ev
};
//SIG(-1 S3600C13_nt) C1{ m FL[4]}


void  S3600C13_nt ::mf3600c13(){}

//skip512 S3600C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3600C15_nt  {
  int s3600c15f0[4];
};
//SIG(-1 S3600C15_nt) C1{ Fi[4]}



//skip512 S3600C15_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3600C14_nt  {
  void *s3600c14f0;
  ::S3600C15_nt s3600c14f1;
  void  mf3600c14(); // _ZN11S3600C14_nt9mf3600c14Ev
};
//SIG(-1 S3600C14_nt) C1{ m Fp FC2{ Fi[4]}}


void  S3600C14_nt ::mf3600c14(){}

//skip512 S3600C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3600C16_nt  {
  void *s3600c16f0[3];
  int s3600c16f1;
  void  mf3600c16(); // _ZN11S3600C16_nt9mf3600c16Ev
};
//SIG(-1 S3600C16_nt) C1{ m Fp[3] Fi}


void  S3600C16_nt ::mf3600c16(){}

//skip512 S3600C16_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3600C19  {
  void  mf3600c19(); // _ZN8S3600C199mf3600c19Ev
};
//SIG(-1 S3600C19) C1{ m}


void  S3600C19 ::mf3600c19(){}

static void Test_S3600C19()
{
  {
    init_simple_test("S3600C19");
    S3600C19 lv;
    check2(sizeof(lv), 1, "sizeof(S3600C19)");
    check2(__alignof__(lv), 1, "__alignof__(S3600C19)");
  }
}
static Arrange_To_Call_Me vS3600C19(Test_S3600C19, "S3600C19", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S3600C19[];
VTBL_ENTRY *P__ZTI8S3600C19 = _ZTI8S3600C19; 
Class_Descriptor cd_S3600C19 = {  "S3600C19", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S3600C19),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  S3600C18  {
  void *s3600c18f0;
  int s3600c18f1;
  ::S3600C19 s3600c18f2;
  ::S3600C19 s3600c18f3;
  void  mf3600c18(); // _ZN8S3600C189mf3600c18Ev
};
//SIG(-1 S3600C18) C1{ m Fp Fi FC2{ m} FC2}


void  S3600C18 ::mf3600c18(){}

static void Test_S3600C18()
{
  {
    init_simple_test("S3600C18");
    S3600C18 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3600C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3600C18)");
    check_field_offset(lv, s3600c18f0, 0, "S3600C18.s3600c18f0");
    check_field_offset(lv, s3600c18f1, ABISELECT(8,4), "S3600C18.s3600c18f1");
    check_field_offset(lv, s3600c18f2, ABISELECT(12,8), "S3600C18.s3600c18f2");
    check_field_offset(lv, s3600c18f3, ABISELECT(13,9), "S3600C18.s3600c18f3");
  }
}
static Arrange_To_Call_Me vS3600C18(Test_S3600C18, "S3600C18", ABISELECT(16,12));

#else // __cplusplus

Class_Descriptor cd_S3600C18 = {  "S3600C18", // 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  S3600C17_nt  : S3600C18 {
};
//SIG(-1 S3600C17_nt) C1{ BC2{ m Fp Fi FC3{ m} FC3}}



//skip512 S3600C17_nt

#else // __cplusplus

extern Class_Descriptor cd_S3600C18;
static Base_Class bases_S3600C17_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S3600C24_nt  {
  __tsi64 s3600c24f0;
  void  mf3600c24(); // _ZN11S3600C24_nt9mf3600c24Ev
};
//SIG(-1 S3600C24_nt) C1{ m FL}


void  S3600C24_nt ::mf3600c24(){}

//skip512 S3600C24_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3600C23_nt  {
  ::S3600C24_nt s3600c23f0;
  void  mf3600c23(); // _ZN11S3600C23_nt9mf3600c23Ev
};
//SIG(-1 S3600C23_nt) C1{ m FC2{ m FL}}


void  S3600C23_nt ::mf3600c23(){}

//skip512 S3600C23_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3600C26_nt  {
  ::S3600C11_nt s3600c26f0;
  __tsi64 s3600c26f1;
  int s3600c26f2;
  __tsi64 s3600c26f3;
  ::S3600C11_nt s3600c26f4;
  ::S3600C11_nt s3600c26f5;
  ::S3600C11_nt s3600c26f6;
  ::S3600C11_nt s3600c26f7;
  __tsi64 s3600c26f8[2];
  int s3600c26f9[4];
  __tsi64 s3600c26f10;
  int s3600c26f11[3];
  char s3600c26f12;
  __tsi64 s3600c26f13;
  char s3600c26f14;
  __tsi64 s3600c26f15;
  char s3600c26f16;
  int s3600c26f17;
  char s3600c26f18[2];
  void  mf3600c26(); // _ZN11S3600C26_nt9mf3600c26Ev
};
//SIG(-1 S3600C26_nt) C1{ m FC2{ m Fp Fi FC3{ m}} FL Fi FL FC2 FC2 FC2 FC2 FL[2] Fi[4] FL Fi[3] Fc FL Fc FL Fc Fi Fc[2]}


void  S3600C26_nt ::mf3600c26(){}

//skip512 S3600C26_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3600C29_nt  {
  void *s3600c29f0;
  void  mf3600c29(); // _ZN11S3600C29_nt9mf3600c29Ev
};
//SIG(-1 S3600C29_nt) C1{ m Fp}


void  S3600C29_nt ::mf3600c29(){}

//skip512 S3600C29_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S3600C29_nt[];
VTBL_ENTRY *P__ZTI11S3600C29_nt = _ZTI11S3600C29_nt; 
Class_Descriptor cd_S3600C29_nt = {  "S3600C29_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S3600C29_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  S3600C21_nt  {
  ::S3010C10_nt s3600c21f0;
  void *s3600c21f1;
  ::S3600C23_nt s3600c21f2;
  char s3600c21f3;
  ::S1566C14_nt s3600c21f4;
  ::S3600C26_nt s3600c21f5;
  ::S3600C29_nt s3600c21f6;
  int s3600c21f7[2];
  void  mf3600c21(); // _ZN11S3600C21_nt9mf3600c21Ev
};
//SIG(-1 S3600C21_nt) C1{ m FC2{ m Fp[2]} Fp FC3{ m FC4{ m FL}} Fc FC5{ m Fi[2]} FC6{ m FC7{ m Fp Fi FC8{ m}} FL Fi FL FC7 FC7 FC7 FC7 FL[2] Fi[4] FL Fi[3] Fc FL Fc FL Fc Fi Fc[2]} FC9{ m Fp} Fi[2]}


void  S3600C21_nt ::mf3600c21(){}

//skip512 S3600C21_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3600C2  : S3600C3_nt , S3600C10_nt {
  void *s3600c2f0[2];
  int s3600c2f1[2];
  ::S3600C13_nt s3600c2f2;
  ::S3600C13_nt s3600c2f3;
  ::S3600C14_nt s3600c2f4;
  void *s3600c2f5;
  int s3600c2f6;
  char s3600c2f7;
  __tsi64 s3600c2f8[6];
  ::S3600C11_nt s3600c2f9;
  ::S3600C16_nt s3600c2f10;
  void *s3600c2f11;
  ::S3600C17_nt s3600c2f12;
  ::S3600C21_nt s3600c2f13;
  ::S3600C21_nt s3600c2f14;
  virtual  ~S3600C2(); // _ZN7S3600C2D1Ev
  virtual void  v6(); // _ZN7S3600C22v6Ev
  virtual void  v7(); // _ZN7S3600C22v7Ev
  virtual void  v8(); // _ZN7S3600C22v8Ev
  virtual void  v9(); // _ZN7S3600C22v9Ev
  S3600C2(); // tgen
};
//SIG(-1 S3600C2) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ vd v5 v6 v7 FC7{ m Fp Fi FC5} Fi[2] Fc} vd v1 v2 v3 v4 Fp[2] Fi[2] FC8{ m FL[4]} FC8 FC9{ m Fp FC10{ Fi[4]}} Fp Fi Fc FL[6] FC7 FC11{ m Fp[3] Fi} Fp FC12{ BC13{ m Fp Fi FC14{ m} FC14}} FC15{ m FC16{ m Fp[2]} Fp FC17{ m FC18{ m FL}} Fc FC19{ m Fi[2]} FC20{ m FC7 FL Fi FL FC7 FC7 FC7 FC7 FL[2] Fi[4] FL Fi[3] Fc FL Fc FL Fc Fi Fc[2]} FC21{ m Fp} Fi[2]} FC15}


 S3600C2 ::~S3600C2(){ note_dtor("S3600C2", this);}
void  S3600C2 ::v6(){vfunc_called(this, "_ZN7S3600C22v6Ev");}
void  S3600C2 ::v7(){vfunc_called(this, "_ZN7S3600C22v7Ev");}
void  S3600C2 ::v8(){vfunc_called(this, "_ZN7S3600C22v8Ev");}
void  S3600C2 ::v9(){vfunc_called(this, "_ZN7S3600C22v9Ev");}
S3600C2 ::S3600C2(){ note_ctor("S3600C2", this);} // tgen

static void Test_S3600C2()
{
  extern Class_Descriptor cd_S3600C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(109,173)];
    init_test(&cd_S3600C2, buf);
    S3600C2 *dp, &lv = *(dp=new (buf) S3600C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(864,688), "sizeof(S3600C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3600C2)");
    check_base_class_offset(lv, (S3600C3_nt*), 0, "S3600C2");
    check_base_class_offset(lv, (S3600C10_nt*), ABISELECT(48,32), "S3600C2");
    check_field_offset(lv, s3600c2f0, ABISELECT(88,60), "S3600C2.s3600c2f0");
    check_field_offset(lv, s3600c2f1, ABISELECT(104,68), "S3600C2.s3600c2f1");
    check_field_offset(lv, s3600c2f2, ABISELECT(112,76), "S3600C2.s3600c2f2");
    check_field_offset(lv, s3600c2f3, ABISELECT(144,108), "S3600C2.s3600c2f3");
    check_field_offset(lv, s3600c2f4, ABISELECT(176,140), "S3600C2.s3600c2f4");
    check_field_offset(lv, s3600c2f5, ABISELECT(200,160), "S3600C2.s3600c2f5");
    check_field_offset(lv, s3600c2f6, ABISELECT(208,164), "S3600C2.s3600c2f6");
    check_field_offset(lv, s3600c2f7, ABISELECT(212,168), "S3600C2.s3600c2f7");
    check_field_offset(lv, s3600c2f8, ABISELECT(216,172), "S3600C2.s3600c2f8");
    check_field_offset(lv, s3600c2f9, ABISELECT(264,220), "S3600C2.s3600c2f9");
    check_field_offset(lv, s3600c2f10, ABISELECT(280,232), "S3600C2.s3600c2f10");
    check_field_offset(lv, s3600c2f11, ABISELECT(312,248), "S3600C2.s3600c2f11");
    check_field_offset(lv, s3600c2f12, ABISELECT(320,252), "S3600C2.s3600c2f12");
    check_field_offset(lv, s3600c2f13, ABISELECT(336,264), "S3600C2.s3600c2f13");
    check_field_offset(lv, s3600c2f14, ABISELECT(600,476), "S3600C2.s3600c2f14");
    test_class_info(&lv, &cd_S3600C2);
    dp->~S3600C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3600C2(Test_S3600C2, "S3600C2", ABISELECT(864,688));

#else // __cplusplus

extern void _ZN7S3600C2C1Ev();
extern void _ZN7S3600C2D1Ev();
Name_Map name_map_S3600C2[] = {
  NSPAIR(_ZN7S3600C2C1Ev),
  NSPAIR(_ZN7S3600C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C3_nt;
extern VTBL_ENTRY _ZTI10S3600C3_nt[];
extern  VTBL_ENTRY _ZTV10S3600C3_nt[];
extern Class_Descriptor cd_S3600C10_nt;
extern VTBL_ENTRY _ZTI11S3600C10_nt[];
extern  VTBL_ENTRY _ZTV11S3600C10_nt[];
static Base_Class bases_S3600C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C3_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_S3600C10_nt,    ABISELECT(48,32), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3600C2[];
extern void _ZN7S3600C2D1Ev();
extern void _ZN7S3600C2D0Ev();
extern void _ZN7S3600C22v6Ev();
extern void _ZN7S3600C22v7Ev();
extern void _ZN7S3600C22v8Ev();
extern void _ZN7S3600C22v9Ev();
extern void ABISELECT(_ZThn48_N7S3600C2D1Ev,_ZThn32_N7S3600C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S3600C2D0Ev,_ZThn32_N7S3600C2D0Ev)();
extern void _ZN11S3600C10_nt2v3Ev();
extern void _ZN11S3600C10_nt2v4Ev();
extern void _ZN11S3600C10_nt2v5Ev();
static  VTBL_ENTRY vtc_S3600C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3600C2[0]),
  (VTBL_ENTRY)&_ZN7S3600C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3600C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3600C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3600C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3600C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3600C22v9Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S3600C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3600C2D1Ev,_ZThn32_N7S3600C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3600C2D0Ev,_ZThn32_N7S3600C2D0Ev),
  (VTBL_ENTRY)&_ZN11S3600C10_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S3600C10_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S3600C10_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI7S3600C2[];
extern  VTBL_ENTRY _ZTV7S3600C2[];
Class_Descriptor cd_S3600C2 = {  "S3600C2", // class name
  bases_S3600C2, 2,
  &(vtc_S3600C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(864,688), // object size
  NSPAIRA(_ZTI7S3600C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3600C2),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  S3600C1  : S3600C2 {
  int s3600c1f0;
  virtual  ~S3600C1(); // _ZN7S3600C1D1Ev
  virtual void  v1(); // _ZN7S3600C12v1Ev
  virtual void  v2(); // _ZN7S3600C12v2Ev
  S3600C1(); // tgen
};
//SIG(1 S3600C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} BC7{ vd v3 v4 v5 FC8{ m Fp Fi FC6} Fi[2] Fc} vd v6 v7 v8 v9 Fp[2] Fi[2] FC9{ m FL[4]} FC9 FC10{ m Fp FC11{ Fi[4]}} Fp Fi Fc FL[6] FC8 FC12{ m Fp[3] Fi} Fp FC13{ BC14{ m Fp Fi FC15{ m} FC15}} FC16{ m FC17{ m Fp[2]} Fp FC18{ m FC19{ m FL}} Fc FC20{ m Fi[2]} FC21{ m FC8 FL Fi FL FC8 FC8 FC8 FC8 FL[2] Fi[4] FL Fi[3] Fc FL Fc FL Fc Fi Fc[2]} FC22{ m Fp} Fi[2]} FC16} vd v1 v2 Fi}


 S3600C1 ::~S3600C1(){ note_dtor("S3600C1", this);}
void  S3600C1 ::v1(){vfunc_called(this, "_ZN7S3600C12v1Ev");}
void  S3600C1 ::v2(){vfunc_called(this, "_ZN7S3600C12v2Ev");}
S3600C1 ::S3600C1(){ note_ctor("S3600C1", this);} // tgen

static void Test_S3600C1()
{
  extern Class_Descriptor cd_S3600C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(110,174)];
    init_test(&cd_S3600C1, buf);
    S3600C1 *dp, &lv = *(dp=new (buf) S3600C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(872,692), "sizeof(S3600C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3600C1)");
    check_base_class_offset(lv, (S3600C3_nt*)(S3600C2*), 0, "S3600C1");
    check_base_class_offset(lv, (S3600C10_nt*)(S3600C2*), ABISELECT(48,32), "S3600C1");
    check_base_class_offset(lv, (S3600C2*), 0, "S3600C1");
    check_field_offset(lv, s3600c1f0, ABISELECT(864,688), "S3600C1.s3600c1f0");
    test_class_info(&lv, &cd_S3600C1);
    dp->~S3600C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3600C1(Test_S3600C1, "S3600C1", ABISELECT(872,692));

#else // __cplusplus

extern void _ZN7S3600C1C1Ev();
extern void _ZN7S3600C1D1Ev();
Name_Map name_map_S3600C1[] = {
  NSPAIR(_ZN7S3600C1C1Ev),
  NSPAIR(_ZN7S3600C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C3_nt;
extern VTBL_ENTRY _ZTI10S3600C3_nt[];
extern  VTBL_ENTRY _ZTV10S3600C3_nt[];
extern Class_Descriptor cd_S3600C10_nt;
extern VTBL_ENTRY _ZTI11S3600C10_nt[];
extern  VTBL_ENTRY _ZTV11S3600C10_nt[];
extern Class_Descriptor cd_S3600C2;
extern VTBL_ENTRY _ZTI7S3600C2[];
extern  VTBL_ENTRY _ZTV7S3600C2[];
static Base_Class bases_S3600C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C3_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_S3600C10_nt,    ABISELECT(48,32), //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_S3600C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3600C1[];
extern void _ZN7S3600C1D1Ev();
extern void _ZN7S3600C1D0Ev();
extern void _ZN7S3600C22v6Ev();
extern void _ZN7S3600C22v7Ev();
extern void _ZN7S3600C22v8Ev();
extern void _ZN7S3600C22v9Ev();
extern void _ZN7S3600C12v1Ev();
extern void _ZN7S3600C12v2Ev();
extern void ABISELECT(_ZThn48_N7S3600C1D1Ev,_ZThn32_N7S3600C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S3600C1D0Ev,_ZThn32_N7S3600C1D0Ev)();
extern void _ZN11S3600C10_nt2v3Ev();
extern void _ZN11S3600C10_nt2v4Ev();
extern void _ZN11S3600C10_nt2v5Ev();
static  VTBL_ENTRY vtc_S3600C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3600C1[0]),
  (VTBL_ENTRY)&_ZN7S3600C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3600C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3600C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3600C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3600C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3600C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3600C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3600C12v2Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S3600C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3600C1D1Ev,_ZThn32_N7S3600C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3600C1D0Ev,_ZThn32_N7S3600C1D0Ev),
  (VTBL_ENTRY)&_ZN11S3600C10_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S3600C10_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S3600C10_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI7S3600C1[];
extern  VTBL_ENTRY _ZTV7S3600C1[];
Class_Descriptor cd_S3600C1 = {  "S3600C1", // class name
  bases_S3600C1, 3,
  &(vtc_S3600C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(872,692), // object size
  NSPAIRA(_ZTI7S3600C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3600C1),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  S3601C10  {
  ::S3600C11_nt s3601c10f0;
  int s3601c10f1[2];
  char s3601c10f2;
  virtual  ~S3601C10(); // _ZN8S3601C10D1Ev
  virtual void  v3(); // _ZN8S3601C102v3Ev
  virtual void  v4(); // _ZN8S3601C102v4Ev
  virtual void  v5(); // _ZN8S3601C102v5Ev
  S3601C10(); // tgen
};
//SIG(-1 S3601C10) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S3601C10 ::~S3601C10(){ note_dtor("S3601C10", this);}
void  S3601C10 ::v3(){vfunc_called(this, "_ZN8S3601C102v3Ev");}
void  S3601C10 ::v4(){vfunc_called(this, "_ZN8S3601C102v4Ev");}
void  S3601C10 ::v5(){vfunc_called(this, "_ZN8S3601C102v5Ev");}
S3601C10 ::S3601C10(){ note_ctor("S3601C10", this);} // tgen

static void Test_S3601C10()
{
  extern Class_Descriptor cd_S3601C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S3601C10, buf);
    S3601C10 *dp, &lv = *(dp=new (buf) S3601C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S3601C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3601C10)");
    check_field_offset(lv, s3601c10f0, ABISELECT(8,4), "S3601C10.s3601c10f0");
    check_field_offset(lv, s3601c10f1, ABISELECT(24,16), "S3601C10.s3601c10f1");
    check_field_offset(lv, s3601c10f2, ABISELECT(32,24), "S3601C10.s3601c10f2");
    test_class_info(&lv, &cd_S3601C10);
    dp->~S3601C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3601C10(Test_S3601C10, "S3601C10", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN8S3601C10C1Ev();
extern void _ZN8S3601C10D1Ev();
Name_Map name_map_S3601C10[] = {
  NSPAIR(_ZN8S3601C10C1Ev),
  NSPAIR(_ZN8S3601C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3601C10[];
extern void _ZN8S3601C10D1Ev();
extern void _ZN8S3601C10D0Ev();
extern void _ZN8S3601C102v3Ev();
extern void _ZN8S3601C102v4Ev();
extern void _ZN8S3601C102v5Ev();
static  VTBL_ENTRY vtc_S3601C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3601C10[0]),
  (VTBL_ENTRY)&_ZN8S3601C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3601C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3601C102v3Ev,
  (VTBL_ENTRY)&_ZN8S3601C102v4Ev,
  (VTBL_ENTRY)&_ZN8S3601C102v5Ev,
};
extern VTBL_ENTRY _ZTI8S3601C10[];
extern  VTBL_ENTRY _ZTV8S3601C10[];
Class_Descriptor cd_S3601C10 = {  "S3601C10", // class name
  0,0,//no base classes
  &(vtc_S3601C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI8S3601C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3601C10),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  S3601C2  : S3600C3_nt , S3601C10 {
  void *s3601c2f0[2];
  int s3601c2f1[2];
  ::S3600C13_nt s3601c2f2;
  ::S3600C13_nt s3601c2f3;
  ::S3600C14_nt s3601c2f4;
  void *s3601c2f5;
  int s3601c2f6;
  char s3601c2f7;
  __tsi64 s3601c2f8[6];
  ::S3600C11_nt s3601c2f9;
  ::S3600C16_nt s3601c2f10;
  void *s3601c2f11;
  ::S3600C17_nt s3601c2f12;
  ::S3600C21_nt s3601c2f13;
  ::S3600C21_nt s3601c2f14;
  virtual  ~S3601C2(); // _ZN7S3601C2D1Ev
  virtual void  v6(); // _ZN7S3601C22v6Ev
  virtual void  v7(); // _ZN7S3601C22v7Ev
  virtual void  v8(); // _ZN7S3601C22v8Ev
  virtual void  v9(); // _ZN7S3601C22v9Ev
  S3601C2(); // tgen
};
//SIG(-1 S3601C2) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ vd v5 v6 v7 FC7{ m Fp Fi FC5} Fi[2] Fc} vd v1 v2 v3 v4 Fp[2] Fi[2] FC8{ m FL[4]} FC8 FC9{ m Fp FC10{ Fi[4]}} Fp Fi Fc FL[6] FC7 FC11{ m Fp[3] Fi} Fp FC12{ BC13{ m Fp Fi FC14{ m} FC14}} FC15{ m FC16{ m Fp[2]} Fp FC17{ m FC18{ m FL}} Fc FC19{ m Fi[2]} FC20{ m FC7 FL Fi FL FC7 FC7 FC7 FC7 FL[2] Fi[4] FL Fi[3] Fc FL Fc FL Fc Fi Fc[2]} FC21{ m Fp} Fi[2]} FC15}


 S3601C2 ::~S3601C2(){ note_dtor("S3601C2", this);}
void  S3601C2 ::v6(){vfunc_called(this, "_ZN7S3601C22v6Ev");}
void  S3601C2 ::v7(){vfunc_called(this, "_ZN7S3601C22v7Ev");}
void  S3601C2 ::v8(){vfunc_called(this, "_ZN7S3601C22v8Ev");}
void  S3601C2 ::v9(){vfunc_called(this, "_ZN7S3601C22v9Ev");}
S3601C2 ::S3601C2(){ note_ctor("S3601C2", this);} // tgen

static void Test_S3601C2()
{
  extern Class_Descriptor cd_S3601C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(109,173)];
    init_test(&cd_S3601C2, buf);
    S3601C2 *dp, &lv = *(dp=new (buf) S3601C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(864,688), "sizeof(S3601C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3601C2)");
    check_base_class_offset(lv, (S3600C3_nt*), 0, "S3601C2");
    check_base_class_offset(lv, (S3601C10*), ABISELECT(48,32), "S3601C2");
    check_field_offset(lv, s3601c2f0, ABISELECT(88,60), "S3601C2.s3601c2f0");
    check_field_offset(lv, s3601c2f1, ABISELECT(104,68), "S3601C2.s3601c2f1");
    check_field_offset(lv, s3601c2f2, ABISELECT(112,76), "S3601C2.s3601c2f2");
    check_field_offset(lv, s3601c2f3, ABISELECT(144,108), "S3601C2.s3601c2f3");
    check_field_offset(lv, s3601c2f4, ABISELECT(176,140), "S3601C2.s3601c2f4");
    check_field_offset(lv, s3601c2f5, ABISELECT(200,160), "S3601C2.s3601c2f5");
    check_field_offset(lv, s3601c2f6, ABISELECT(208,164), "S3601C2.s3601c2f6");
    check_field_offset(lv, s3601c2f7, ABISELECT(212,168), "S3601C2.s3601c2f7");
    check_field_offset(lv, s3601c2f8, ABISELECT(216,172), "S3601C2.s3601c2f8");
    check_field_offset(lv, s3601c2f9, ABISELECT(264,220), "S3601C2.s3601c2f9");
    check_field_offset(lv, s3601c2f10, ABISELECT(280,232), "S3601C2.s3601c2f10");
    check_field_offset(lv, s3601c2f11, ABISELECT(312,248), "S3601C2.s3601c2f11");
    check_field_offset(lv, s3601c2f12, ABISELECT(320,252), "S3601C2.s3601c2f12");
    check_field_offset(lv, s3601c2f13, ABISELECT(336,264), "S3601C2.s3601c2f13");
    check_field_offset(lv, s3601c2f14, ABISELECT(600,476), "S3601C2.s3601c2f14");
    test_class_info(&lv, &cd_S3601C2);
    dp->~S3601C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3601C2(Test_S3601C2, "S3601C2", ABISELECT(864,688));

#else // __cplusplus

extern void _ZN7S3601C2C1Ev();
extern void _ZN7S3601C2D1Ev();
Name_Map name_map_S3601C2[] = {
  NSPAIR(_ZN7S3601C2C1Ev),
  NSPAIR(_ZN7S3601C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C3_nt;
extern VTBL_ENTRY _ZTI10S3600C3_nt[];
extern  VTBL_ENTRY _ZTV10S3600C3_nt[];
extern Class_Descriptor cd_S3601C10;
extern VTBL_ENTRY _ZTI8S3601C10[];
extern  VTBL_ENTRY _ZTV8S3601C10[];
static Base_Class bases_S3601C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C3_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_S3601C10,    ABISELECT(48,32), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3601C2[];
extern void _ZN7S3601C2D1Ev();
extern void _ZN7S3601C2D0Ev();
extern void _ZN7S3601C22v6Ev();
extern void _ZN7S3601C22v7Ev();
extern void _ZN7S3601C22v8Ev();
extern void _ZN7S3601C22v9Ev();
extern void ABISELECT(_ZThn48_N7S3601C2D1Ev,_ZThn32_N7S3601C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S3601C2D0Ev,_ZThn32_N7S3601C2D0Ev)();
extern void _ZN8S3601C102v3Ev();
extern void _ZN8S3601C102v4Ev();
extern void _ZN8S3601C102v5Ev();
static  VTBL_ENTRY vtc_S3601C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3601C2[0]),
  (VTBL_ENTRY)&_ZN7S3601C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3601C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3601C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3601C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3601C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3601C22v9Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S3601C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3601C2D1Ev,_ZThn32_N7S3601C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3601C2D0Ev,_ZThn32_N7S3601C2D0Ev),
  (VTBL_ENTRY)&_ZN8S3601C102v3Ev,
  (VTBL_ENTRY)&_ZN8S3601C102v4Ev,
  (VTBL_ENTRY)&_ZN8S3601C102v5Ev,
};
extern VTBL_ENTRY _ZTI7S3601C2[];
extern  VTBL_ENTRY _ZTV7S3601C2[];
Class_Descriptor cd_S3601C2 = {  "S3601C2", // class name
  bases_S3601C2, 2,
  &(vtc_S3601C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(864,688), // object size
  NSPAIRA(_ZTI7S3601C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3601C2),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  S3601C1  : S3601C2 {
  virtual  ~S3601C1(); // _ZN7S3601C1D1Ev
  virtual void  v1(); // _ZN7S3601C12v1Ev
  virtual void  v2(); // _ZN7S3601C12v2Ev
  S3601C1(); // tgen
};
//SIG(1 S3601C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} BC7{ vd v3 v4 v5 FC8{ m Fp Fi FC6} Fi[2] Fc} vd v6 v7 v8 v9 Fp[2] Fi[2] FC9{ m FL[4]} FC9 FC10{ m Fp FC11{ Fi[4]}} Fp Fi Fc FL[6] FC8 FC12{ m Fp[3] Fi} Fp FC13{ BC14{ m Fp Fi FC15{ m} FC15}} FC16{ m FC17{ m Fp[2]} Fp FC18{ m FC19{ m FL}} Fc FC20{ m Fi[2]} FC21{ m FC8 FL Fi FL FC8 FC8 FC8 FC8 FL[2] Fi[4] FL Fi[3] Fc FL Fc FL Fc Fi Fc[2]} FC22{ m Fp} Fi[2]} FC16} vd v1 v2}


 S3601C1 ::~S3601C1(){ note_dtor("S3601C1", this);}
void  S3601C1 ::v1(){vfunc_called(this, "_ZN7S3601C12v1Ev");}
void  S3601C1 ::v2(){vfunc_called(this, "_ZN7S3601C12v2Ev");}
S3601C1 ::S3601C1(){ note_ctor("S3601C1", this);} // tgen

static void Test_S3601C1()
{
  extern Class_Descriptor cd_S3601C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(109,173)];
    init_test(&cd_S3601C1, buf);
    S3601C1 *dp, &lv = *(dp=new (buf) S3601C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(864,688), "sizeof(S3601C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3601C1)");
    check_base_class_offset(lv, (S3600C3_nt*)(S3601C2*), 0, "S3601C1");
    check_base_class_offset(lv, (S3601C10*)(S3601C2*), ABISELECT(48,32), "S3601C1");
    check_base_class_offset(lv, (S3601C2*), 0, "S3601C1");
    test_class_info(&lv, &cd_S3601C1);
    dp->~S3601C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3601C1(Test_S3601C1, "S3601C1", ABISELECT(864,688));

#else // __cplusplus

extern void _ZN7S3601C1C1Ev();
extern void _ZN7S3601C1D1Ev();
Name_Map name_map_S3601C1[] = {
  NSPAIR(_ZN7S3601C1C1Ev),
  NSPAIR(_ZN7S3601C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C3_nt;
extern VTBL_ENTRY _ZTI10S3600C3_nt[];
extern  VTBL_ENTRY _ZTV10S3600C3_nt[];
extern Class_Descriptor cd_S3601C10;
extern VTBL_ENTRY _ZTI8S3601C10[];
extern  VTBL_ENTRY _ZTV8S3601C10[];
extern Class_Descriptor cd_S3601C2;
extern VTBL_ENTRY _ZTI7S3601C2[];
extern  VTBL_ENTRY _ZTV7S3601C2[];
static Base_Class bases_S3601C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C3_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_S3601C10,    ABISELECT(48,32), //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_S3601C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3601C1[];
extern void _ZN7S3601C1D1Ev();
extern void _ZN7S3601C1D0Ev();
extern void _ZN7S3601C22v6Ev();
extern void _ZN7S3601C22v7Ev();
extern void _ZN7S3601C22v8Ev();
extern void _ZN7S3601C22v9Ev();
extern void _ZN7S3601C12v1Ev();
extern void _ZN7S3601C12v2Ev();
extern void ABISELECT(_ZThn48_N7S3601C1D1Ev,_ZThn32_N7S3601C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S3601C1D0Ev,_ZThn32_N7S3601C1D0Ev)();
extern void _ZN8S3601C102v3Ev();
extern void _ZN8S3601C102v4Ev();
extern void _ZN8S3601C102v5Ev();
static  VTBL_ENTRY vtc_S3601C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3601C1[0]),
  (VTBL_ENTRY)&_ZN7S3601C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3601C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3601C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3601C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3601C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3601C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3601C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3601C12v2Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S3601C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3601C1D1Ev,_ZThn32_N7S3601C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3601C1D0Ev,_ZThn32_N7S3601C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3601C102v3Ev,
  (VTBL_ENTRY)&_ZN8S3601C102v4Ev,
  (VTBL_ENTRY)&_ZN8S3601C102v5Ev,
};
extern VTBL_ENTRY _ZTI7S3601C1[];
extern  VTBL_ENTRY _ZTV7S3601C1[];
Class_Descriptor cd_S3601C1 = {  "S3601C1", // class name
  bases_S3601C1, 3,
  &(vtc_S3601C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(864,688), // object size
  NSPAIRA(_ZTI7S3601C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3601C1),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  S3212C3  {
  int s3212c3f0;
  __tsi64 s3212c3f1;
  void *s3212c3f2[4];
  int s3212c3f3[2];
  void *s3212c3f4;
  ::S1566C14_nt s3212c3f5;
  void *s3212c3f6[2];
  virtual  ~S3212C3(); // _ZN7S3212C3D1Ev
  virtual void  v4(); // _ZN7S3212C32v4Ev
  virtual void  v5(); // _ZN7S3212C32v5Ev
  virtual void  v6(); // _ZN7S3212C32v6Ev
  virtual void  v7(); // _ZN7S3212C32v7Ev
  virtual void  v8(); // _ZN7S3212C32v8Ev
  virtual void  v9(); // _ZN7S3212C32v9Ev
  virtual void  v10(); // _ZN7S3212C33v10Ev
  virtual void  v11(); // _ZN7S3212C33v11Ev
  virtual void  v12(); // _ZN7S3212C33v12Ev
  virtual void  v13(); // _ZN7S3212C33v13Ev
  virtual void  v14(); // _ZN7S3212C33v14Ev
  virtual void  v15(); // _ZN7S3212C33v15Ev
  virtual void  v16(); // _ZN7S3212C33v16Ev
  virtual void  v17(); // _ZN7S3212C33v17Ev
  virtual void  v18(); // _ZN7S3212C33v18Ev
  virtual void  v19(); // _ZN7S3212C33v19Ev
  virtual void  v20(); // _ZN7S3212C33v20Ev
  virtual void  v21(); // _ZN7S3212C33v21Ev
  virtual void  v22(); // _ZN7S3212C33v22Ev
  virtual void  v23(); // _ZN7S3212C33v23Ev
  virtual void  v24(); // _ZN7S3212C33v24Ev
  virtual void  v25(); // _ZN7S3212C33v25Ev
  virtual void  v26(); // _ZN7S3212C33v26Ev
  virtual void  v27(); // _ZN7S3212C33v27Ev
  virtual void  v28(); // _ZN7S3212C33v28Ev
  virtual void  v29(); // _ZN7S3212C33v29Ev
  virtual void  v30(); // _ZN7S3212C33v30Ev
  virtual void  v31(); // _ZN7S3212C33v31Ev
  virtual void  v32(); // _ZN7S3212C33v32Ev
  virtual void  v33(); // _ZN7S3212C33v33Ev
  virtual void  v34(); // _ZN7S3212C33v34Ev
  virtual void  v35(); // _ZN7S3212C33v35Ev
  virtual void  v36(); // _ZN7S3212C33v36Ev
  virtual void  v37(); // _ZN7S3212C33v37Ev
  virtual void  v38(); // _ZN7S3212C33v38Ev
  virtual void  v39(); // _ZN7S3212C33v39Ev
  virtual void  v40(); // _ZN7S3212C33v40Ev
  virtual void  v41(); // _ZN7S3212C33v41Ev
  virtual void  v42(); // _ZN7S3212C33v42Ev
  virtual void  v43(); // _ZN7S3212C33v43Ev
  virtual void  v44(); // _ZN7S3212C33v44Ev
  virtual void  v45(); // _ZN7S3212C33v45Ev
  virtual void  v46(); // _ZN7S3212C33v46Ev
  virtual void  v47(); // _ZN7S3212C33v47Ev
  virtual void  v48(); // _ZN7S3212C33v48Ev
  virtual void  v49(); // _ZN7S3212C33v49Ev
  virtual void  v50(); // _ZN7S3212C33v50Ev
  virtual void  v51(); // _ZN7S3212C33v51Ev
  virtual void  v52(); // _ZN7S3212C33v52Ev
  virtual void  v53(); // _ZN7S3212C33v53Ev
  virtual void  v54(); // _ZN7S3212C33v54Ev
  virtual void  v55(); // _ZN7S3212C33v55Ev
  virtual void  v56(); // _ZN7S3212C33v56Ev
  virtual void  v57(); // _ZN7S3212C33v57Ev
  virtual void  v58(); // _ZN7S3212C33v58Ev
  virtual void  v59(); // _ZN7S3212C33v59Ev
  virtual void  v60(); // _ZN7S3212C33v60Ev
  virtual void  v61(); // _ZN7S3212C33v61Ev
  virtual void  v62(); // _ZN7S3212C33v62Ev
  virtual void  v63(); // _ZN7S3212C33v63Ev
  virtual void  v64(); // _ZN7S3212C33v64Ev
  virtual void  v65(); // _ZN7S3212C33v65Ev
  virtual void  v66(); // _ZN7S3212C33v66Ev
  virtual void  v67(); // _ZN7S3212C33v67Ev
  S3212C3(); // tgen
};
//SIG(-1 S3212C3) 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]}


 S3212C3 ::~S3212C3(){ note_dtor("S3212C3", this);}
void  S3212C3 ::v4(){vfunc_called(this, "_ZN7S3212C32v4Ev");}
void  S3212C3 ::v5(){vfunc_called(this, "_ZN7S3212C32v5Ev");}
void  S3212C3 ::v6(){vfunc_called(this, "_ZN7S3212C32v6Ev");}
void  S3212C3 ::v7(){vfunc_called(this, "_ZN7S3212C32v7Ev");}
void  S3212C3 ::v8(){vfunc_called(this, "_ZN7S3212C32v8Ev");}
void  S3212C3 ::v9(){vfunc_called(this, "_ZN7S3212C32v9Ev");}
void  S3212C3 ::v10(){vfunc_called(this, "_ZN7S3212C33v10Ev");}
void  S3212C3 ::v11(){vfunc_called(this, "_ZN7S3212C33v11Ev");}
void  S3212C3 ::v12(){vfunc_called(this, "_ZN7S3212C33v12Ev");}
void  S3212C3 ::v13(){vfunc_called(this, "_ZN7S3212C33v13Ev");}
void  S3212C3 ::v14(){vfunc_called(this, "_ZN7S3212C33v14Ev");}
void  S3212C3 ::v15(){vfunc_called(this, "_ZN7S3212C33v15Ev");}
void  S3212C3 ::v16(){vfunc_called(this, "_ZN7S3212C33v16Ev");}
void  S3212C3 ::v17(){vfunc_called(this, "_ZN7S3212C33v17Ev");}
void  S3212C3 ::v18(){vfunc_called(this, "_ZN7S3212C33v18Ev");}
void  S3212C3 ::v19(){vfunc_called(this, "_ZN7S3212C33v19Ev");}
void  S3212C3 ::v20(){vfunc_called(this, "_ZN7S3212C33v20Ev");}
void  S3212C3 ::v21(){vfunc_called(this, "_ZN7S3212C33v21Ev");}
void  S3212C3 ::v22(){vfunc_called(this, "_ZN7S3212C33v22Ev");}
void  S3212C3 ::v23(){vfunc_called(this, "_ZN7S3212C33v23Ev");}
void  S3212C3 ::v24(){vfunc_called(this, "_ZN7S3212C33v24Ev");}
void  S3212C3 ::v25(){vfunc_called(this, "_ZN7S3212C33v25Ev");}
void  S3212C3 ::v26(){vfunc_called(this, "_ZN7S3212C33v26Ev");}
void  S3212C3 ::v27(){vfunc_called(this, "_ZN7S3212C33v27Ev");}
void  S3212C3 ::v28(){vfunc_called(this, "_ZN7S3212C33v28Ev");}
void  S3212C3 ::v29(){vfunc_called(this, "_ZN7S3212C33v29Ev");}
void  S3212C3 ::v30(){vfunc_called(this, "_ZN7S3212C33v30Ev");}
void  S3212C3 ::v31(){vfunc_called(this, "_ZN7S3212C33v31Ev");}
void  S3212C3 ::v32(){vfunc_called(this, "_ZN7S3212C33v32Ev");}
void  S3212C3 ::v33(){vfunc_called(this, "_ZN7S3212C33v33Ev");}
void  S3212C3 ::v34(){vfunc_called(this, "_ZN7S3212C33v34Ev");}
void  S3212C3 ::v35(){vfunc_called(this, "_ZN7S3212C33v35Ev");}
void  S3212C3 ::v36(){vfunc_called(this, "_ZN7S3212C33v36Ev");}
void  S3212C3 ::v37(){vfunc_called(this, "_ZN7S3212C33v37Ev");}
void  S3212C3 ::v38(){vfunc_called(this, "_ZN7S3212C33v38Ev");}
void  S3212C3 ::v39(){vfunc_called(this, "_ZN7S3212C33v39Ev");}
void  S3212C3 ::v40(){vfunc_called(this, "_ZN7S3212C33v40Ev");}
void  S3212C3 ::v41(){vfunc_called(this, "_ZN7S3212C33v41Ev");}
void  S3212C3 ::v42(){vfunc_called(this, "_ZN7S3212C33v42Ev");}
void  S3212C3 ::v43(){vfunc_called(this, "_ZN7S3212C33v43Ev");}
void  S3212C3 ::v44(){vfunc_called(this, "_ZN7S3212C33v44Ev");}
void  S3212C3 ::v45(){vfunc_called(this, "_ZN7S3212C33v45Ev");}
void  S3212C3 ::v46(){vfunc_called(this, "_ZN7S3212C33v46Ev");}
void  S3212C3 ::v47(){vfunc_called(this, "_ZN7S3212C33v47Ev");}
void  S3212C3 ::v48(){vfunc_called(this, "_ZN7S3212C33v48Ev");}
void  S3212C3 ::v49(){vfunc_called(this, "_ZN7S3212C33v49Ev");}
void  S3212C3 ::v50(){vfunc_called(this, "_ZN7S3212C33v50Ev");}
void  S3212C3 ::v51(){vfunc_called(this, "_ZN7S3212C33v51Ev");}
void  S3212C3 ::v52(){vfunc_called(this, "_ZN7S3212C33v52Ev");}
void  S3212C3 ::v53(){vfunc_called(this, "_ZN7S3212C33v53Ev");}
void  S3212C3 ::v54(){vfunc_called(this, "_ZN7S3212C33v54Ev");}
void  S3212C3 ::v55(){vfunc_called(this, "_ZN7S3212C33v55Ev");}
void  S3212C3 ::v56(){vfunc_called(this, "_ZN7S3212C33v56Ev");}
void  S3212C3 ::v57(){vfunc_called(this, "_ZN7S3212C33v57Ev");}
void  S3212C3 ::v58(){vfunc_called(this, "_ZN7S3212C33v58Ev");}
void  S3212C3 ::v59(){vfunc_called(this, "_ZN7S3212C33v59Ev");}
void  S3212C3 ::v60(){vfunc_called(this, "_ZN7S3212C33v60Ev");}
void  S3212C3 ::v61(){vfunc_called(this, "_ZN7S3212C33v61Ev");}
void  S3212C3 ::v62(){vfunc_called(this, "_ZN7S3212C33v62Ev");}
void  S3212C3 ::v63(){vfunc_called(this, "_ZN7S3212C33v63Ev");}
void  S3212C3 ::v64(){vfunc_called(this, "_ZN7S3212C33v64Ev");}
void  S3212C3 ::v65(){vfunc_called(this, "_ZN7S3212C33v65Ev");}
void  S3212C3 ::v66(){vfunc_called(this, "_ZN7S3212C33v66Ev");}
void  S3212C3 ::v67(){vfunc_called(this, "_ZN7S3212C33v67Ev");}
S3212C3 ::S3212C3(){ note_ctor("S3212C3", this);} // tgen

static void Test_S3212C3()
{
  extern Class_Descriptor cd_S3212C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3212C3, buf);
    S3212C3 *dp, &lv = *(dp=new (buf) S3212C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3212C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3212C3)");
    check_field_offset(lv, s3212c3f0, ABISELECT(8,4), "S3212C3.s3212c3f0");
    check_field_offset(lv, s3212c3f1, ABISELECT(16,8), "S3212C3.s3212c3f1");
    check_field_offset(lv, s3212c3f2, ABISELECT(24,16), "S3212C3.s3212c3f2");
    check_field_offset(lv, s3212c3f3, ABISELECT(56,32), "S3212C3.s3212c3f3");
    check_field_offset(lv, s3212c3f4, ABISELECT(64,40), "S3212C3.s3212c3f4");
    check_field_offset(lv, s3212c3f5, ABISELECT(72,44), "S3212C3.s3212c3f5");
    check_field_offset(lv, s3212c3f6, ABISELECT(80,52), "S3212C3.s3212c3f6");
    test_class_info(&lv, &cd_S3212C3);
    dp->~S3212C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3212C3(Test_S3212C3, "S3212C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3212C3C1Ev();
extern void _ZN7S3212C3D1Ev();
Name_Map name_map_S3212C3[] = {
  NSPAIR(_ZN7S3212C3C1Ev),
  NSPAIR(_ZN7S3212C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3212C3[];
extern void _ZN7S3212C3D1Ev();
extern void _ZN7S3212C3D0Ev();
extern void _ZN7S3212C32v4Ev();
extern void _ZN7S3212C32v5Ev();
extern void _ZN7S3212C32v6Ev();
extern void _ZN7S3212C32v7Ev();
extern void _ZN7S3212C32v8Ev();
extern void _ZN7S3212C32v9Ev();
extern void _ZN7S3212C33v10Ev();
extern void _ZN7S3212C33v11Ev();
extern void _ZN7S3212C33v12Ev();
extern void _ZN7S3212C33v13Ev();
extern void _ZN7S3212C33v14Ev();
extern void _ZN7S3212C33v15Ev();
extern void _ZN7S3212C33v16Ev();
extern void _ZN7S3212C33v17Ev();
extern void _ZN7S3212C33v18Ev();
extern void _ZN7S3212C33v19Ev();
extern void _ZN7S3212C33v20Ev();
extern void _ZN7S3212C33v21Ev();
extern void _ZN7S3212C33v22Ev();
extern void _ZN7S3212C33v23Ev();
extern void _ZN7S3212C33v24Ev();
extern void _ZN7S3212C33v25Ev();
extern void _ZN7S3212C33v26Ev();
extern void _ZN7S3212C33v27Ev();
extern void _ZN7S3212C33v28Ev();
extern void _ZN7S3212C33v29Ev();
extern void _ZN7S3212C33v30Ev();
extern void _ZN7S3212C33v31Ev();
extern void _ZN7S3212C33v32Ev();
extern void _ZN7S3212C33v33Ev();
extern void _ZN7S3212C33v34Ev();
extern void _ZN7S3212C33v35Ev();
extern void _ZN7S3212C33v36Ev();
extern void _ZN7S3212C33v37Ev();
extern void _ZN7S3212C33v38Ev();
extern void _ZN7S3212C33v39Ev();
extern void _ZN7S3212C33v40Ev();
extern void _ZN7S3212C33v41Ev();
extern void _ZN7S3212C33v42Ev();
extern void _ZN7S3212C33v43Ev();
extern void _ZN7S3212C33v44Ev();
extern void _ZN7S3212C33v45Ev();
extern void _ZN7S3212C33v46Ev();
extern void _ZN7S3212C33v47Ev();
extern void _ZN7S3212C33v48Ev();
extern void _ZN7S3212C33v49Ev();
extern void _ZN7S3212C33v50Ev();
extern void _ZN7S3212C33v51Ev();
extern void _ZN7S3212C33v52Ev();
extern void _ZN7S3212C33v53Ev();
extern void _ZN7S3212C33v54Ev();
extern void _ZN7S3212C33v55Ev();
extern void _ZN7S3212C33v56Ev();
extern void _ZN7S3212C33v57Ev();
extern void _ZN7S3212C33v58Ev();
extern void _ZN7S3212C33v59Ev();
extern void _ZN7S3212C33v60Ev();
extern void _ZN7S3212C33v61Ev();
extern void _ZN7S3212C33v62Ev();
extern void _ZN7S3212C33v63Ev();
extern void _ZN7S3212C33v64Ev();
extern void _ZN7S3212C33v65Ev();
extern void _ZN7S3212C33v66Ev();
extern void _ZN7S3212C33v67Ev();
static  VTBL_ENTRY vtc_S3212C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3212C3[0]),
  (VTBL_ENTRY)&_ZN7S3212C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3212C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3212C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3212C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3212C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3212C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3212C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3212C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v67Ev,
};
extern VTBL_ENTRY _ZTI7S3212C3[];
extern  VTBL_ENTRY _ZTV7S3212C3[];
Class_Descriptor cd_S3212C3 = {  "S3212C3", // class name
  0,0,//no base classes
  &(vtc_S3212C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3212C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3212C3),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  S3212C5  {
  virtual void  v68(); // _ZN7S3212C53v68Ev
  ~S3212C5(); // tgen
  S3212C5(); // tgen
};
//SIG(-1 S3212C5) C1{ v1}


void  S3212C5 ::v68(){vfunc_called(this, "_ZN7S3212C53v68Ev");}
S3212C5 ::~S3212C5(){ note_dtor("S3212C5", this);} // tgen
S3212C5 ::S3212C5(){ note_ctor("S3212C5", this);} // tgen

static void Test_S3212C5()
{
  extern Class_Descriptor cd_S3212C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3212C5, buf);
    S3212C5 *dp, &lv = *(dp=new (buf) S3212C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3212C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3212C5)");
    test_class_info(&lv, &cd_S3212C5);
    dp->~S3212C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3212C5(Test_S3212C5, "S3212C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3212C5C1Ev();
extern void _ZN7S3212C5D1Ev();
Name_Map name_map_S3212C5[] = {
  NSPAIR(_ZN7S3212C5C1Ev),
  NSPAIR(_ZN7S3212C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3212C5[];
extern void _ZN7S3212C53v68Ev();
static  VTBL_ENTRY vtc_S3212C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3212C5[0]),
  (VTBL_ENTRY)&_ZN7S3212C53v68Ev,
};
extern VTBL_ENTRY _ZTI7S3212C5[];
extern  VTBL_ENTRY _ZTV7S3212C5[];
Class_Descriptor cd_S3212C5 = {  "S3212C5", // class name
  0,0,//no base classes
  &(vtc_S3212C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3212C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3212C5),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  S3212C2  : S3212C3 , S3212C5 {
  virtual  ~S3212C2(); // _ZN7S3212C2D1Ev
  virtual void  v69(); // _ZN7S3212C23v69Ev
  virtual void  v70(); // _ZN7S3212C23v70Ev
  virtual void  v71(); // _ZN7S3212C23v71Ev
  virtual void  v72(); // _ZN7S3212C23v72Ev
  S3212C2(); // tgen
};
//SIG(-1 S3212C2) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} BC4{ v69} vd v1 v2 v3 v4}


 S3212C2 ::~S3212C2(){ note_dtor("S3212C2", this);}
void  S3212C2 ::v69(){vfunc_called(this, "_ZN7S3212C23v69Ev");}
void  S3212C2 ::v70(){vfunc_called(this, "_ZN7S3212C23v70Ev");}
void  S3212C2 ::v71(){vfunc_called(this, "_ZN7S3212C23v71Ev");}
void  S3212C2 ::v72(){vfunc_called(this, "_ZN7S3212C23v72Ev");}
S3212C2 ::S3212C2(){ note_ctor("S3212C2", this);} // tgen

static void Test_S3212C2()
{
  extern Class_Descriptor cd_S3212C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S3212C2, buf);
    S3212C2 *dp, &lv = *(dp=new (buf) S3212C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S3212C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3212C2)");
    check_base_class_offset(lv, (S3212C3*), 0, "S3212C2");
    check_base_class_offset(lv, (S3212C5*), ABISELECT(96,60), "S3212C2");
    test_class_info(&lv, &cd_S3212C2);
    dp->~S3212C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3212C2(Test_S3212C2, "S3212C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S3212C2C1Ev();
extern void _ZN7S3212C2D1Ev();
Name_Map name_map_S3212C2[] = {
  NSPAIR(_ZN7S3212C2C1Ev),
  NSPAIR(_ZN7S3212C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3212C3;
extern VTBL_ENTRY _ZTI7S3212C3[];
extern  VTBL_ENTRY _ZTV7S3212C3[];
extern Class_Descriptor cd_S3212C5;
extern VTBL_ENTRY _ZTI7S3212C5[];
extern  VTBL_ENTRY _ZTV7S3212C5[];
static Base_Class bases_S3212C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3212C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3212C5,    ABISELECT(96,60), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3212C2[];
extern void _ZN7S3212C2D1Ev();
extern void _ZN7S3212C2D0Ev();
extern void _ZN7S3212C32v4Ev();
extern void _ZN7S3212C32v5Ev();
extern void _ZN7S3212C32v6Ev();
extern void _ZN7S3212C32v7Ev();
extern void _ZN7S3212C32v8Ev();
extern void _ZN7S3212C32v9Ev();
extern void _ZN7S3212C33v10Ev();
extern void _ZN7S3212C33v11Ev();
extern void _ZN7S3212C33v12Ev();
extern void _ZN7S3212C33v13Ev();
extern void _ZN7S3212C33v14Ev();
extern void _ZN7S3212C33v15Ev();
extern void _ZN7S3212C33v16Ev();
extern void _ZN7S3212C33v17Ev();
extern void _ZN7S3212C33v18Ev();
extern void _ZN7S3212C33v19Ev();
extern void _ZN7S3212C33v20Ev();
extern void _ZN7S3212C33v21Ev();
extern void _ZN7S3212C33v22Ev();
extern void _ZN7S3212C33v23Ev();
extern void _ZN7S3212C33v24Ev();
extern void _ZN7S3212C33v25Ev();
extern void _ZN7S3212C33v26Ev();
extern void _ZN7S3212C33v27Ev();
extern void _ZN7S3212C33v28Ev();
extern void _ZN7S3212C33v29Ev();
extern void _ZN7S3212C33v30Ev();
extern void _ZN7S3212C33v31Ev();
extern void _ZN7S3212C33v32Ev();
extern void _ZN7S3212C33v33Ev();
extern void _ZN7S3212C33v34Ev();
extern void _ZN7S3212C33v35Ev();
extern void _ZN7S3212C33v36Ev();
extern void _ZN7S3212C33v37Ev();
extern void _ZN7S3212C33v38Ev();
extern void _ZN7S3212C33v39Ev();
extern void _ZN7S3212C33v40Ev();
extern void _ZN7S3212C33v41Ev();
extern void _ZN7S3212C33v42Ev();
extern void _ZN7S3212C33v43Ev();
extern void _ZN7S3212C33v44Ev();
extern void _ZN7S3212C33v45Ev();
extern void _ZN7S3212C33v46Ev();
extern void _ZN7S3212C33v47Ev();
extern void _ZN7S3212C33v48Ev();
extern void _ZN7S3212C33v49Ev();
extern void _ZN7S3212C33v50Ev();
extern void _ZN7S3212C33v51Ev();
extern void _ZN7S3212C33v52Ev();
extern void _ZN7S3212C33v53Ev();
extern void _ZN7S3212C33v54Ev();
extern void _ZN7S3212C33v55Ev();
extern void _ZN7S3212C33v56Ev();
extern void _ZN7S3212C33v57Ev();
extern void _ZN7S3212C33v58Ev();
extern void _ZN7S3212C33v59Ev();
extern void _ZN7S3212C33v60Ev();
extern void _ZN7S3212C33v61Ev();
extern void _ZN7S3212C33v62Ev();
extern void _ZN7S3212C33v63Ev();
extern void _ZN7S3212C33v64Ev();
extern void _ZN7S3212C33v65Ev();
extern void _ZN7S3212C33v66Ev();
extern void _ZN7S3212C33v67Ev();
extern void _ZN7S3212C23v69Ev();
extern void _ZN7S3212C23v70Ev();
extern void _ZN7S3212C23v71Ev();
extern void _ZN7S3212C23v72Ev();
extern void _ZN7S3212C53v68Ev();
static  VTBL_ENTRY vtc_S3212C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3212C2[0]),
  (VTBL_ENTRY)&_ZN7S3212C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3212C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3212C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3212C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3212C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3212C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3212C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3212C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3212C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3212C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3212C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3212C23v72Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S3212C2[0]),
  (VTBL_ENTRY)&_ZN7S3212C53v68Ev,
};
extern VTBL_ENTRY _ZTI7S3212C2[];
extern  VTBL_ENTRY _ZTV7S3212C2[];
Class_Descriptor cd_S3212C2 = {  "S3212C2", // class name
  bases_S3212C2, 2,
  &(vtc_S3212C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S3212C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3212C2),75, //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  S3212C1  : S3212C2 {
  int s3212c1f0[4];
  ::S1566C9 s3212c1f1;
  ::S1566C9 s3212c1f2;
  ::S1566C9 s3212c1f3;
  ::S1566C9 s3212c1f4;
  ::S1566C29 s3212c1f5;
  ::S1566C29 s3212c1f6;
  ::S1566C29 s3212c1f7;
  ::S1566C29 s3212c1f8;
  ::S1566C29 s3212c1f9;
  ::S1566C10 s3212c1f10;
  ::S1566C29 s3212c1f11;
  ::S1566C29 s3212c1f12;
  ::S1566C29 s3212c1f13;
  ::S1566C9 s3212c1f14;
  virtual  ~S3212C1(); // _ZN7S3212C1D1Ev
  virtual void  v1(); // _ZN7S3212C12v1Ev
  virtual void  v2(); // _ZN7S3212C12v2Ev
  virtual void  v3(); // _ZN7S3212C12v3Ev
  S3212C1(); // tgen
};
//SIG(1 S3212C1) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} BC5{ v68} vd v69 v70 v71 v72} vd v1 v2 v3 Fi[4] FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC6 FC6 FC6 FC9{ BC8} FC9 FC9 FC9 FC9 FC7 FC9 FC9 FC9 FC6}


 S3212C1 ::~S3212C1(){ note_dtor("S3212C1", this);}
void  S3212C1 ::v1(){vfunc_called(this, "_ZN7S3212C12v1Ev");}
void  S3212C1 ::v2(){vfunc_called(this, "_ZN7S3212C12v2Ev");}
void  S3212C1 ::v3(){vfunc_called(this, "_ZN7S3212C12v3Ev");}
S3212C1 ::S3212C1(){ note_ctor("S3212C1", this);} // tgen

static void Test_S3212C1()
{
  extern Class_Descriptor cd_S3212C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,63)];
    init_test(&cd_S3212C1, buf);
    S3212C1 *dp, &lv = *(dp=new (buf) S3212C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,248), "sizeof(S3212C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3212C1)");
    check_base_class_offset(lv, (S3212C3*)(S3212C2*), 0, "S3212C1");
    check_base_class_offset(lv, (S3212C5*)(S3212C2*), ABISELECT(96,60), "S3212C1");
    check_base_class_offset(lv, (S3212C2*), 0, "S3212C1");
    check_field_offset(lv, s3212c1f0, ABISELECT(104,64), "S3212C1.s3212c1f0");
    check_field_offset(lv, s3212c1f1, ABISELECT(120,80), "S3212C1.s3212c1f1");
    check_field_offset(lv, s3212c1f2, ABISELECT(136,92), "S3212C1.s3212c1f2");
    check_field_offset(lv, s3212c1f3, ABISELECT(152,104), "S3212C1.s3212c1f3");
    check_field_offset(lv, s3212c1f4, ABISELECT(168,116), "S3212C1.s3212c1f4");
    check_field_offset(lv, s3212c1f5, ABISELECT(184,128), "S3212C1.s3212c1f5");
    check_field_offset(lv, s3212c1f6, ABISELECT(200,140), "S3212C1.s3212c1f6");
    check_field_offset(lv, s3212c1f7, ABISELECT(216,152), "S3212C1.s3212c1f7");
    check_field_offset(lv, s3212c1f8, ABISELECT(232,164), "S3212C1.s3212c1f8");
    check_field_offset(lv, s3212c1f9, ABISELECT(248,176), "S3212C1.s3212c1f9");
    check_field_offset(lv, s3212c1f10, ABISELECT(264,188), "S3212C1.s3212c1f10");
    check_field_offset(lv, s3212c1f11, ABISELECT(280,200), "S3212C1.s3212c1f11");
    check_field_offset(lv, s3212c1f12, ABISELECT(296,212), "S3212C1.s3212c1f12");
    check_field_offset(lv, s3212c1f13, ABISELECT(312,224), "S3212C1.s3212c1f13");
    check_field_offset(lv, s3212c1f14, ABISELECT(328,236), "S3212C1.s3212c1f14");
    test_class_info(&lv, &cd_S3212C1);
    dp->~S3212C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3212C1(Test_S3212C1, "S3212C1", ABISELECT(344,248));

#else // __cplusplus

extern void _ZN7S3212C1C1Ev();
extern void _ZN7S3212C1D1Ev();
Name_Map name_map_S3212C1[] = {
  NSPAIR(_ZN7S3212C1C1Ev),
  NSPAIR(_ZN7S3212C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3212C3;
extern VTBL_ENTRY _ZTI7S3212C3[];
extern  VTBL_ENTRY _ZTV7S3212C3[];
extern Class_Descriptor cd_S3212C5;
extern VTBL_ENTRY _ZTI7S3212C5[];
extern  VTBL_ENTRY _ZTV7S3212C5[];
extern Class_Descriptor cd_S3212C2;
extern VTBL_ENTRY _ZTI7S3212C2[];
extern  VTBL_ENTRY _ZTV7S3212C2[];
static Base_Class bases_S3212C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3212C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3212C5,    ABISELECT(96,60), //bcp->offset
    75, //bcp->virtual_function_table_offset
    2, //num_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_S3212C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3212C1[];
extern void _ZN7S3212C1D1Ev();
extern void _ZN7S3212C1D0Ev();
extern void _ZN7S3212C32v4Ev();
extern void _ZN7S3212C32v5Ev();
extern void _ZN7S3212C32v6Ev();
extern void _ZN7S3212C32v7Ev();
extern void _ZN7S3212C32v8Ev();
extern void _ZN7S3212C32v9Ev();
extern void _ZN7S3212C33v10Ev();
extern void _ZN7S3212C33v11Ev();
extern void _ZN7S3212C33v12Ev();
extern void _ZN7S3212C33v13Ev();
extern void _ZN7S3212C33v14Ev();
extern void _ZN7S3212C33v15Ev();
extern void _ZN7S3212C33v16Ev();
extern void _ZN7S3212C33v17Ev();
extern void _ZN7S3212C33v18Ev();
extern void _ZN7S3212C33v19Ev();
extern void _ZN7S3212C33v20Ev();
extern void _ZN7S3212C33v21Ev();
extern void _ZN7S3212C33v22Ev();
extern void _ZN7S3212C33v23Ev();
extern void _ZN7S3212C33v24Ev();
extern void _ZN7S3212C33v25Ev();
extern void _ZN7S3212C33v26Ev();
extern void _ZN7S3212C33v27Ev();
extern void _ZN7S3212C33v28Ev();
extern void _ZN7S3212C33v29Ev();
extern void _ZN7S3212C33v30Ev();
extern void _ZN7S3212C33v31Ev();
extern void _ZN7S3212C33v32Ev();
extern void _ZN7S3212C33v33Ev();
extern void _ZN7S3212C33v34Ev();
extern void _ZN7S3212C33v35Ev();
extern void _ZN7S3212C33v36Ev();
extern void _ZN7S3212C33v37Ev();
extern void _ZN7S3212C33v38Ev();
extern void _ZN7S3212C33v39Ev();
extern void _ZN7S3212C33v40Ev();
extern void _ZN7S3212C33v41Ev();
extern void _ZN7S3212C33v42Ev();
extern void _ZN7S3212C33v43Ev();
extern void _ZN7S3212C33v44Ev();
extern void _ZN7S3212C33v45Ev();
extern void _ZN7S3212C33v46Ev();
extern void _ZN7S3212C33v47Ev();
extern void _ZN7S3212C33v48Ev();
extern void _ZN7S3212C33v49Ev();
extern void _ZN7S3212C33v50Ev();
extern void _ZN7S3212C33v51Ev();
extern void _ZN7S3212C33v52Ev();
extern void _ZN7S3212C33v53Ev();
extern void _ZN7S3212C33v54Ev();
extern void _ZN7S3212C33v55Ev();
extern void _ZN7S3212C33v56Ev();
extern void _ZN7S3212C33v57Ev();
extern void _ZN7S3212C33v58Ev();
extern void _ZN7S3212C33v59Ev();
extern void _ZN7S3212C33v60Ev();
extern void _ZN7S3212C33v61Ev();
extern void _ZN7S3212C33v62Ev();
extern void _ZN7S3212C33v63Ev();
extern void _ZN7S3212C33v64Ev();
extern void _ZN7S3212C33v65Ev();
extern void _ZN7S3212C33v66Ev();
extern void _ZN7S3212C33v67Ev();
extern void _ZN7S3212C23v69Ev();
extern void _ZN7S3212C23v70Ev();
extern void _ZN7S3212C23v71Ev();
extern void _ZN7S3212C23v72Ev();
extern void _ZN7S3212C12v1Ev();
extern void _ZN7S3212C12v2Ev();
extern void _ZN7S3212C12v3Ev();
extern void _ZN7S3212C53v68Ev();
static  VTBL_ENTRY vtc_S3212C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3212C1[0]),
  (VTBL_ENTRY)&_ZN7S3212C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3212C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3212C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3212C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3212C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3212C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3212C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3212C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3212C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3212C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3212C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3212C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3212C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3212C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3212C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3212C12v3Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S3212C1[0]),
  (VTBL_ENTRY)&_ZN7S3212C53v68Ev,
};
extern VTBL_ENTRY _ZTI7S3212C1[];
extern  VTBL_ENTRY _ZTV7S3212C1[];
Class_Descriptor cd_S3212C1 = {  "S3212C1", // class name
  bases_S3212C1, 3,
  &(vtc_S3212C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,248), // object size
  NSPAIRA(_ZTI7S3212C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3212C1),78, //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  S3020C3  {
  int s3020c3f0;
  __tsi64 s3020c3f1;
  void *s3020c3f2[4];
  int s3020c3f3[2];
  void *s3020c3f4;
  ::S1566C14_nt s3020c3f5;
  void *s3020c3f6[2];
  virtual  ~S3020C3(); // _ZN7S3020C3D1Ev
  virtual void  v12(); // _ZN7S3020C33v12Ev
  virtual void  v13(); // _ZN7S3020C33v13Ev
  virtual void  v14(); // _ZN7S3020C33v14Ev
  virtual void  v15(); // _ZN7S3020C33v15Ev
  virtual void  v16(); // _ZN7S3020C33v16Ev
  virtual void  v17(); // _ZN7S3020C33v17Ev
  virtual void  v18(); // _ZN7S3020C33v18Ev
  virtual void  v19(); // _ZN7S3020C33v19Ev
  virtual void  v20(); // _ZN7S3020C33v20Ev
  virtual void  v21(); // _ZN7S3020C33v21Ev
  virtual void  v22(); // _ZN7S3020C33v22Ev
  virtual void  v23(); // _ZN7S3020C33v23Ev
  virtual void  v24(); // _ZN7S3020C33v24Ev
  virtual void  v25(); // _ZN7S3020C33v25Ev
  virtual void  v26(); // _ZN7S3020C33v26Ev
  virtual void  v27(); // _ZN7S3020C33v27Ev
  virtual void  v28(); // _ZN7S3020C33v28Ev
  virtual void  v29(); // _ZN7S3020C33v29Ev
  virtual void  v30(); // _ZN7S3020C33v30Ev
  virtual void  v31(); // _ZN7S3020C33v31Ev
  virtual void  v32(); // _ZN7S3020C33v32Ev
  virtual void  v33(); // _ZN7S3020C33v33Ev
  virtual void  v34(); // _ZN7S3020C33v34Ev
  virtual void  v35(); // _ZN7S3020C33v35Ev
  virtual void  v36(); // _ZN7S3020C33v36Ev
  virtual void  v37(); // _ZN7S3020C33v37Ev
  virtual void  v38(); // _ZN7S3020C33v38Ev
  virtual void  v39(); // _ZN7S3020C33v39Ev
  virtual void  v40(); // _ZN7S3020C33v40Ev
  virtual void  v41(); // _ZN7S3020C33v41Ev
  virtual void  v42(); // _ZN7S3020C33v42Ev
  virtual void  v43(); // _ZN7S3020C33v43Ev
  virtual void  v44(); // _ZN7S3020C33v44Ev
  virtual void  v45(); // _ZN7S3020C33v45Ev
  virtual void  v46(); // _ZN7S3020C33v46Ev
  virtual void  v47(); // _ZN7S3020C33v47Ev
  virtual void  v48(); // _ZN7S3020C33v48Ev
  virtual void  v49(); // _ZN7S3020C33v49Ev
  virtual void  v50(); // _ZN7S3020C33v50Ev
  virtual void  v51(); // _ZN7S3020C33v51Ev
  virtual void  v52(); // _ZN7S3020C33v52Ev
  virtual void  v53(); // _ZN7S3020C33v53Ev
  virtual void  v54(); // _ZN7S3020C33v54Ev
  virtual void  v55(); // _ZN7S3020C33v55Ev
  virtual void  v56(); // _ZN7S3020C33v56Ev
  virtual void  v57(); // _ZN7S3020C33v57Ev
  virtual void  v58(); // _ZN7S3020C33v58Ev
  virtual void  v59(); // _ZN7S3020C33v59Ev
  virtual void  v60(); // _ZN7S3020C33v60Ev
  virtual void  v61(); // _ZN7S3020C33v61Ev
  virtual void  v62(); // _ZN7S3020C33v62Ev
  virtual void  v63(); // _ZN7S3020C33v63Ev
  virtual void  v64(); // _ZN7S3020C33v64Ev
  virtual void  v65(); // _ZN7S3020C33v65Ev
  virtual void  v66(); // _ZN7S3020C33v66Ev
  virtual void  v67(); // _ZN7S3020C33v67Ev
  virtual void  v68(); // _ZN7S3020C33v68Ev
  virtual void  v69(); // _ZN7S3020C33v69Ev
  virtual void  v70(); // _ZN7S3020C33v70Ev
  virtual void  v71(); // _ZN7S3020C33v71Ev
  virtual void  v72(); // _ZN7S3020C33v72Ev
  virtual void  v73(); // _ZN7S3020C33v73Ev
  virtual void  v74(); // _ZN7S3020C33v74Ev
  virtual void  v75(); // _ZN7S3020C33v75Ev
  S3020C3(); // tgen
};
//SIG(-1 S3020C3) 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]}


 S3020C3 ::~S3020C3(){ note_dtor("S3020C3", this);}
void  S3020C3 ::v12(){vfunc_called(this, "_ZN7S3020C33v12Ev");}
void  S3020C3 ::v13(){vfunc_called(this, "_ZN7S3020C33v13Ev");}
void  S3020C3 ::v14(){vfunc_called(this, "_ZN7S3020C33v14Ev");}
void  S3020C3 ::v15(){vfunc_called(this, "_ZN7S3020C33v15Ev");}
void  S3020C3 ::v16(){vfunc_called(this, "_ZN7S3020C33v16Ev");}
void  S3020C3 ::v17(){vfunc_called(this, "_ZN7S3020C33v17Ev");}
void  S3020C3 ::v18(){vfunc_called(this, "_ZN7S3020C33v18Ev");}
void  S3020C3 ::v19(){vfunc_called(this, "_ZN7S3020C33v19Ev");}
void  S3020C3 ::v20(){vfunc_called(this, "_ZN7S3020C33v20Ev");}
void  S3020C3 ::v21(){vfunc_called(this, "_ZN7S3020C33v21Ev");}
void  S3020C3 ::v22(){vfunc_called(this, "_ZN7S3020C33v22Ev");}
void  S3020C3 ::v23(){vfunc_called(this, "_ZN7S3020C33v23Ev");}
void  S3020C3 ::v24(){vfunc_called(this, "_ZN7S3020C33v24Ev");}
void  S3020C3 ::v25(){vfunc_called(this, "_ZN7S3020C33v25Ev");}
void  S3020C3 ::v26(){vfunc_called(this, "_ZN7S3020C33v26Ev");}
void  S3020C3 ::v27(){vfunc_called(this, "_ZN7S3020C33v27Ev");}
void  S3020C3 ::v28(){vfunc_called(this, "_ZN7S3020C33v28Ev");}
void  S3020C3 ::v29(){vfunc_called(this, "_ZN7S3020C33v29Ev");}
void  S3020C3 ::v30(){vfunc_called(this, "_ZN7S3020C33v30Ev");}
void  S3020C3 ::v31(){vfunc_called(this, "_ZN7S3020C33v31Ev");}
void  S3020C3 ::v32(){vfunc_called(this, "_ZN7S3020C33v32Ev");}
void  S3020C3 ::v33(){vfunc_called(this, "_ZN7S3020C33v33Ev");}
void  S3020C3 ::v34(){vfunc_called(this, "_ZN7S3020C33v34Ev");}
void  S3020C3 ::v35(){vfunc_called(this, "_ZN7S3020C33v35Ev");}
void  S3020C3 ::v36(){vfunc_called(this, "_ZN7S3020C33v36Ev");}
void  S3020C3 ::v37(){vfunc_called(this, "_ZN7S3020C33v37Ev");}
void  S3020C3 ::v38(){vfunc_called(this, "_ZN7S3020C33v38Ev");}
void  S3020C3 ::v39(){vfunc_called(this, "_ZN7S3020C33v39Ev");}
void  S3020C3 ::v40(){vfunc_called(this, "_ZN7S3020C33v40Ev");}
void  S3020C3 ::v41(){vfunc_called(this, "_ZN7S3020C33v41Ev");}
void  S3020C3 ::v42(){vfunc_called(this, "_ZN7S3020C33v42Ev");}
void  S3020C3 ::v43(){vfunc_called(this, "_ZN7S3020C33v43Ev");}
void  S3020C3 ::v44(){vfunc_called(this, "_ZN7S3020C33v44Ev");}
void  S3020C3 ::v45(){vfunc_called(this, "_ZN7S3020C33v45Ev");}
void  S3020C3 ::v46(){vfunc_called(this, "_ZN7S3020C33v46Ev");}
void  S3020C3 ::v47(){vfunc_called(this, "_ZN7S3020C33v47Ev");}
void  S3020C3 ::v48(){vfunc_called(this, "_ZN7S3020C33v48Ev");}
void  S3020C3 ::v49(){vfunc_called(this, "_ZN7S3020C33v49Ev");}
void  S3020C3 ::v50(){vfunc_called(this, "_ZN7S3020C33v50Ev");}
void  S3020C3 ::v51(){vfunc_called(this, "_ZN7S3020C33v51Ev");}
void  S3020C3 ::v52(){vfunc_called(this, "_ZN7S3020C33v52Ev");}
void  S3020C3 ::v53(){vfunc_called(this, "_ZN7S3020C33v53Ev");}
void  S3020C3 ::v54(){vfunc_called(this, "_ZN7S3020C33v54Ev");}
void  S3020C3 ::v55(){vfunc_called(this, "_ZN7S3020C33v55Ev");}
void  S3020C3 ::v56(){vfunc_called(this, "_ZN7S3020C33v56Ev");}
void  S3020C3 ::v57(){vfunc_called(this, "_ZN7S3020C33v57Ev");}
void  S3020C3 ::v58(){vfunc_called(this, "_ZN7S3020C33v58Ev");}
void  S3020C3 ::v59(){vfunc_called(this, "_ZN7S3020C33v59Ev");}
void  S3020C3 ::v60(){vfunc_called(this, "_ZN7S3020C33v60Ev");}
void  S3020C3 ::v61(){vfunc_called(this, "_ZN7S3020C33v61Ev");}
void  S3020C3 ::v62(){vfunc_called(this, "_ZN7S3020C33v62Ev");}
void  S3020C3 ::v63(){vfunc_called(this, "_ZN7S3020C33v63Ev");}
void  S3020C3 ::v64(){vfunc_called(this, "_ZN7S3020C33v64Ev");}
void  S3020C3 ::v65(){vfunc_called(this, "_ZN7S3020C33v65Ev");}
void  S3020C3 ::v66(){vfunc_called(this, "_ZN7S3020C33v66Ev");}
void  S3020C3 ::v67(){vfunc_called(this, "_ZN7S3020C33v67Ev");}
void  S3020C3 ::v68(){vfunc_called(this, "_ZN7S3020C33v68Ev");}
void  S3020C3 ::v69(){vfunc_called(this, "_ZN7S3020C33v69Ev");}
void  S3020C3 ::v70(){vfunc_called(this, "_ZN7S3020C33v70Ev");}
void  S3020C3 ::v71(){vfunc_called(this, "_ZN7S3020C33v71Ev");}
void  S3020C3 ::v72(){vfunc_called(this, "_ZN7S3020C33v72Ev");}
void  S3020C3 ::v73(){vfunc_called(this, "_ZN7S3020C33v73Ev");}
void  S3020C3 ::v74(){vfunc_called(this, "_ZN7S3020C33v74Ev");}
void  S3020C3 ::v75(){vfunc_called(this, "_ZN7S3020C33v75Ev");}
S3020C3 ::S3020C3(){ note_ctor("S3020C3", this);} // tgen

static void Test_S3020C3()
{
  extern Class_Descriptor cd_S3020C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3020C3, buf);
    S3020C3 *dp, &lv = *(dp=new (buf) S3020C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3020C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3020C3)");
    check_field_offset(lv, s3020c3f0, ABISELECT(8,4), "S3020C3.s3020c3f0");
    check_field_offset(lv, s3020c3f1, ABISELECT(16,8), "S3020C3.s3020c3f1");
    check_field_offset(lv, s3020c3f2, ABISELECT(24,16), "S3020C3.s3020c3f2");
    check_field_offset(lv, s3020c3f3, ABISELECT(56,32), "S3020C3.s3020c3f3");
    check_field_offset(lv, s3020c3f4, ABISELECT(64,40), "S3020C3.s3020c3f4");
    check_field_offset(lv, s3020c3f5, ABISELECT(72,44), "S3020C3.s3020c3f5");
    check_field_offset(lv, s3020c3f6, ABISELECT(80,52), "S3020C3.s3020c3f6");
    test_class_info(&lv, &cd_S3020C3);
    dp->~S3020C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3020C3(Test_S3020C3, "S3020C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3020C3C1Ev();
extern void _ZN7S3020C3D1Ev();
Name_Map name_map_S3020C3[] = {
  NSPAIR(_ZN7S3020C3C1Ev),
  NSPAIR(_ZN7S3020C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3020C3[];
extern void _ZN7S3020C3D1Ev();
extern void _ZN7S3020C3D0Ev();
extern void _ZN7S3020C33v12Ev();
extern void _ZN7S3020C33v13Ev();
extern void _ZN7S3020C33v14Ev();
extern void _ZN7S3020C33v15Ev();
extern void _ZN7S3020C33v16Ev();
extern void _ZN7S3020C33v17Ev();
extern void _ZN7S3020C33v18Ev();
extern void _ZN7S3020C33v19Ev();
extern void _ZN7S3020C33v20Ev();
extern void _ZN7S3020C33v21Ev();
extern void _ZN7S3020C33v22Ev();
extern void _ZN7S3020C33v23Ev();
extern void _ZN7S3020C33v24Ev();
extern void _ZN7S3020C33v25Ev();
extern void _ZN7S3020C33v26Ev();
extern void _ZN7S3020C33v27Ev();
extern void _ZN7S3020C33v28Ev();
extern void _ZN7S3020C33v29Ev();
extern void _ZN7S3020C33v30Ev();
extern void _ZN7S3020C33v31Ev();
extern void _ZN7S3020C33v32Ev();
extern void _ZN7S3020C33v33Ev();
extern void _ZN7S3020C33v34Ev();
extern void _ZN7S3020C33v35Ev();
extern void _ZN7S3020C33v36Ev();
extern void _ZN7S3020C33v37Ev();
extern void _ZN7S3020C33v38Ev();
extern void _ZN7S3020C33v39Ev();
extern void _ZN7S3020C33v40Ev();
extern void _ZN7S3020C33v41Ev();
extern void _ZN7S3020C33v42Ev();
extern void _ZN7S3020C33v43Ev();
extern void _ZN7S3020C33v44Ev();
extern void _ZN7S3020C33v45Ev();
extern void _ZN7S3020C33v46Ev();
extern void _ZN7S3020C33v47Ev();
extern void _ZN7S3020C33v48Ev();
extern void _ZN7S3020C33v49Ev();
extern void _ZN7S3020C33v50Ev();
extern void _ZN7S3020C33v51Ev();
extern void _ZN7S3020C33v52Ev();
extern void _ZN7S3020C33v53Ev();
extern void _ZN7S3020C33v54Ev();
extern void _ZN7S3020C33v55Ev();
extern void _ZN7S3020C33v56Ev();
extern void _ZN7S3020C33v57Ev();
extern void _ZN7S3020C33v58Ev();
extern void _ZN7S3020C33v59Ev();
extern void _ZN7S3020C33v60Ev();
extern void _ZN7S3020C33v61Ev();
extern void _ZN7S3020C33v62Ev();
extern void _ZN7S3020C33v63Ev();
extern void _ZN7S3020C33v64Ev();
extern void _ZN7S3020C33v65Ev();
extern void _ZN7S3020C33v66Ev();
extern void _ZN7S3020C33v67Ev();
extern void _ZN7S3020C33v68Ev();
extern void _ZN7S3020C33v69Ev();
extern void _ZN7S3020C33v70Ev();
extern void _ZN7S3020C33v71Ev();
extern void _ZN7S3020C33v72Ev();
extern void _ZN7S3020C33v73Ev();
extern void _ZN7S3020C33v74Ev();
extern void _ZN7S3020C33v75Ev();
static  VTBL_ENTRY vtc_S3020C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3020C3[0]),
  (VTBL_ENTRY)&_ZN7S3020C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3020C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v75Ev,
};
extern VTBL_ENTRY _ZTI7S3020C3[];
extern  VTBL_ENTRY _ZTV7S3020C3[];
Class_Descriptor cd_S3020C3 = {  "S3020C3", // class name
  0,0,//no base classes
  &(vtc_S3020C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3020C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3020C3),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  S3020C2  : S3020C3 {
  int s3020c2f0;
  virtual  ~S3020C2(); // _ZN7S3020C2D1Ev
  virtual void  v76(); // _ZN7S3020C23v76Ev
  virtual void  v77(); // _ZN7S3020C23v77Ev
  virtual void  v78(); // _ZN7S3020C23v78Ev
  virtual void  v79(); // _ZN7S3020C23v79Ev
  virtual void  v80(); // _ZN7S3020C23v80Ev
  virtual void  v81(); // _ZN7S3020C23v81Ev
  virtual void  v82(); // _ZN7S3020C23v82Ev
  virtual void  v83(); // _ZN7S3020C23v83Ev
  virtual void  v84(); // _ZN7S3020C23v84Ev
  virtual void  v85(); // _ZN7S3020C23v85Ev
  virtual void  v86(); // _ZN7S3020C23v86Ev
  virtual void  v87(); // _ZN7S3020C23v87Ev
  virtual void  v88(); // _ZN7S3020C23v88Ev
  virtual void  v89(); // _ZN7S3020C23v89Ev
  virtual void  v90(); // _ZN7S3020C23v90Ev
  virtual void  v91(); // _ZN7S3020C23v91Ev
  virtual void  v92(); // _ZN7S3020C23v92Ev
  S3020C2(); // tgen
};
//SIG(-1 S3020C2) C1{ BC2{ vd 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 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 Fi}


 S3020C2 ::~S3020C2(){ note_dtor("S3020C2", this);}
void  S3020C2 ::v76(){vfunc_called(this, "_ZN7S3020C23v76Ev");}
void  S3020C2 ::v77(){vfunc_called(this, "_ZN7S3020C23v77Ev");}
void  S3020C2 ::v78(){vfunc_called(this, "_ZN7S3020C23v78Ev");}
void  S3020C2 ::v79(){vfunc_called(this, "_ZN7S3020C23v79Ev");}
void  S3020C2 ::v80(){vfunc_called(this, "_ZN7S3020C23v80Ev");}
void  S3020C2 ::v81(){vfunc_called(this, "_ZN7S3020C23v81Ev");}
void  S3020C2 ::v82(){vfunc_called(this, "_ZN7S3020C23v82Ev");}
void  S3020C2 ::v83(){vfunc_called(this, "_ZN7S3020C23v83Ev");}
void  S3020C2 ::v84(){vfunc_called(this, "_ZN7S3020C23v84Ev");}
void  S3020C2 ::v85(){vfunc_called(this, "_ZN7S3020C23v85Ev");}
void  S3020C2 ::v86(){vfunc_called(this, "_ZN7S3020C23v86Ev");}
void  S3020C2 ::v87(){vfunc_called(this, "_ZN7S3020C23v87Ev");}
void  S3020C2 ::v88(){vfunc_called(this, "_ZN7S3020C23v88Ev");}
void  S3020C2 ::v89(){vfunc_called(this, "_ZN7S3020C23v89Ev");}
void  S3020C2 ::v90(){vfunc_called(this, "_ZN7S3020C23v90Ev");}
void  S3020C2 ::v91(){vfunc_called(this, "_ZN7S3020C23v91Ev");}
void  S3020C2 ::v92(){vfunc_called(this, "_ZN7S3020C23v92Ev");}
S3020C2 ::S3020C2(){ note_ctor("S3020C2", this);} // tgen

static void Test_S3020C2()
{
  extern Class_Descriptor cd_S3020C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S3020C2, buf);
    S3020C2 *dp, &lv = *(dp=new (buf) S3020C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S3020C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3020C2)");
    check_base_class_offset(lv, (S3020C3*), 0, "S3020C2");
    check_field_offset(lv, s3020c2f0, ABISELECT(96,60), "S3020C2.s3020c2f0");
    test_class_info(&lv, &cd_S3020C2);
    dp->~S3020C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3020C2(Test_S3020C2, "S3020C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S3020C2C1Ev();
extern void _ZN7S3020C2D1Ev();
Name_Map name_map_S3020C2[] = {
  NSPAIR(_ZN7S3020C2C1Ev),
  NSPAIR(_ZN7S3020C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3020C3;
extern VTBL_ENTRY _ZTI7S3020C3[];
extern  VTBL_ENTRY _ZTV7S3020C3[];
static Base_Class bases_S3020C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3020C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S3020C2[];
extern void _ZN7S3020C2D1Ev();
extern void _ZN7S3020C2D0Ev();
extern void _ZN7S3020C33v12Ev();
extern void _ZN7S3020C33v13Ev();
extern void _ZN7S3020C33v14Ev();
extern void _ZN7S3020C33v15Ev();
extern void _ZN7S3020C33v16Ev();
extern void _ZN7S3020C33v17Ev();
extern void _ZN7S3020C33v18Ev();
extern void _ZN7S3020C33v19Ev();
extern void _ZN7S3020C33v20Ev();
extern void _ZN7S3020C33v21Ev();
extern void _ZN7S3020C33v22Ev();
extern void _ZN7S3020C33v23Ev();
extern void _ZN7S3020C33v24Ev();
extern void _ZN7S3020C33v25Ev();
extern void _ZN7S3020C33v26Ev();
extern void _ZN7S3020C33v27Ev();
extern void _ZN7S3020C33v28Ev();
extern void _ZN7S3020C33v29Ev();
extern void _ZN7S3020C33v30Ev();
extern void _ZN7S3020C33v31Ev();
extern void _ZN7S3020C33v32Ev();
extern void _ZN7S3020C33v33Ev();
extern void _ZN7S3020C33v34Ev();
extern void _ZN7S3020C33v35Ev();
extern void _ZN7S3020C33v36Ev();
extern void _ZN7S3020C33v37Ev();
extern void _ZN7S3020C33v38Ev();
extern void _ZN7S3020C33v39Ev();
extern void _ZN7S3020C33v40Ev();
extern void _ZN7S3020C33v41Ev();
extern void _ZN7S3020C33v42Ev();
extern void _ZN7S3020C33v43Ev();
extern void _ZN7S3020C33v44Ev();
extern void _ZN7S3020C33v45Ev();
extern void _ZN7S3020C33v46Ev();
extern void _ZN7S3020C33v47Ev();
extern void _ZN7S3020C33v48Ev();
extern void _ZN7S3020C33v49Ev();
extern void _ZN7S3020C33v50Ev();
extern void _ZN7S3020C33v51Ev();
extern void _ZN7S3020C33v52Ev();
extern void _ZN7S3020C33v53Ev();
extern void _ZN7S3020C33v54Ev();
extern void _ZN7S3020C33v55Ev();
extern void _ZN7S3020C33v56Ev();
extern void _ZN7S3020C33v57Ev();
extern void _ZN7S3020C33v58Ev();
extern void _ZN7S3020C33v59Ev();
extern void _ZN7S3020C33v60Ev();
extern void _ZN7S3020C33v61Ev();
extern void _ZN7S3020C33v62Ev();
extern void _ZN7S3020C33v63Ev();
extern void _ZN7S3020C33v64Ev();
extern void _ZN7S3020C33v65Ev();
extern void _ZN7S3020C33v66Ev();
extern void _ZN7S3020C33v67Ev();
extern void _ZN7S3020C33v68Ev();
extern void _ZN7S3020C33v69Ev();
extern void _ZN7S3020C33v70Ev();
extern void _ZN7S3020C33v71Ev();
extern void _ZN7S3020C33v72Ev();
extern void _ZN7S3020C33v73Ev();
extern void _ZN7S3020C33v74Ev();
extern void _ZN7S3020C33v75Ev();
extern void _ZN7S3020C23v76Ev();
extern void _ZN7S3020C23v77Ev();
extern void _ZN7S3020C23v78Ev();
extern void _ZN7S3020C23v79Ev();
extern void _ZN7S3020C23v80Ev();
extern void _ZN7S3020C23v81Ev();
extern void _ZN7S3020C23v82Ev();
extern void _ZN7S3020C23v83Ev();
extern void _ZN7S3020C23v84Ev();
extern void _ZN7S3020C23v85Ev();
extern void _ZN7S3020C23v86Ev();
extern void _ZN7S3020C23v87Ev();
extern void _ZN7S3020C23v88Ev();
extern void _ZN7S3020C23v89Ev();
extern void _ZN7S3020C23v90Ev();
extern void _ZN7S3020C23v91Ev();
extern void _ZN7S3020C23v92Ev();
static  VTBL_ENTRY vtc_S3020C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3020C2[0]),
  (VTBL_ENTRY)&_ZN7S3020C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3020C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v91Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v92Ev,
};
extern VTBL_ENTRY _ZTI7S3020C2[];
extern  VTBL_ENTRY _ZTV7S3020C2[];
Class_Descriptor cd_S3020C2 = {  "S3020C2", // class name
  bases_S3020C2, 1,
  &(vtc_S3020C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S3020C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3020C2),85, //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  S3020C1  : S3020C2 {
  int s3020c1f0;
  virtual  ~S3020C1(); // _ZN7S3020C1D1Ev
  virtual void  v1(); // _ZN7S3020C12v1Ev
  virtual void  v2(); // _ZN7S3020C12v2Ev
  virtual void  v3(); // _ZN7S3020C12v3Ev
  virtual void  v4(); // _ZN7S3020C12v4Ev
  virtual void  v5(); // _ZN7S3020C12v5Ev
  virtual void  v6(); // _ZN7S3020C12v6Ev
  virtual void  v7(); // _ZN7S3020C12v7Ev
  virtual void  v8(); // _ZN7S3020C12v8Ev
  virtual void  v9(); // _ZN7S3020C12v9Ev
  virtual void  v10(); // _ZN7S3020C13v10Ev
  virtual void  v11(); // _ZN7S3020C13v11Ev
  S3020C1(); // tgen
};
//SIG(1 S3020C1) C1{ BC2{ BC3{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi}


 S3020C1 ::~S3020C1(){ note_dtor("S3020C1", this);}
void  S3020C1 ::v1(){vfunc_called(this, "_ZN7S3020C12v1Ev");}
void  S3020C1 ::v2(){vfunc_called(this, "_ZN7S3020C12v2Ev");}
void  S3020C1 ::v3(){vfunc_called(this, "_ZN7S3020C12v3Ev");}
void  S3020C1 ::v4(){vfunc_called(this, "_ZN7S3020C12v4Ev");}
void  S3020C1 ::v5(){vfunc_called(this, "_ZN7S3020C12v5Ev");}
void  S3020C1 ::v6(){vfunc_called(this, "_ZN7S3020C12v6Ev");}
void  S3020C1 ::v7(){vfunc_called(this, "_ZN7S3020C12v7Ev");}
void  S3020C1 ::v8(){vfunc_called(this, "_ZN7S3020C12v8Ev");}
void  S3020C1 ::v9(){vfunc_called(this, "_ZN7S3020C12v9Ev");}
void  S3020C1 ::v10(){vfunc_called(this, "_ZN7S3020C13v10Ev");}
void  S3020C1 ::v11(){vfunc_called(this, "_ZN7S3020C13v11Ev");}
S3020C1 ::S3020C1(){ note_ctor("S3020C1", this);} // tgen

static void Test_S3020C1()
{
  extern Class_Descriptor cd_S3020C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S3020C1, buf);
    S3020C1 *dp, &lv = *(dp=new (buf) S3020C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S3020C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3020C1)");
    check_base_class_offset(lv, (S3020C3*)(S3020C2*), 0, "S3020C1");
    check_base_class_offset(lv, (S3020C2*), 0, "S3020C1");
    check_field_offset(lv, s3020c1f0, ABISELECT(100,64), "S3020C1.s3020c1f0");
    test_class_info(&lv, &cd_S3020C1);
    dp->~S3020C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3020C1(Test_S3020C1, "S3020C1", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S3020C1C1Ev();
extern void _ZN7S3020C1D1Ev();
Name_Map name_map_S3020C1[] = {
  NSPAIR(_ZN7S3020C1C1Ev),
  NSPAIR(_ZN7S3020C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3020C3;
extern VTBL_ENTRY _ZTI7S3020C3[];
extern  VTBL_ENTRY _ZTV7S3020C3[];
extern Class_Descriptor cd_S3020C2;
extern VTBL_ENTRY _ZTI7S3020C2[];
extern  VTBL_ENTRY _ZTV7S3020C2[];
static Base_Class bases_S3020C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3020C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3020C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3020C1[];
extern void _ZN7S3020C1D1Ev();
extern void _ZN7S3020C1D0Ev();
extern void _ZN7S3020C33v12Ev();
extern void _ZN7S3020C33v13Ev();
extern void _ZN7S3020C33v14Ev();
extern void _ZN7S3020C33v15Ev();
extern void _ZN7S3020C33v16Ev();
extern void _ZN7S3020C33v17Ev();
extern void _ZN7S3020C33v18Ev();
extern void _ZN7S3020C33v19Ev();
extern void _ZN7S3020C33v20Ev();
extern void _ZN7S3020C33v21Ev();
extern void _ZN7S3020C33v22Ev();
extern void _ZN7S3020C33v23Ev();
extern void _ZN7S3020C33v24Ev();
extern void _ZN7S3020C33v25Ev();
extern void _ZN7S3020C33v26Ev();
extern void _ZN7S3020C33v27Ev();
extern void _ZN7S3020C33v28Ev();
extern void _ZN7S3020C33v29Ev();
extern void _ZN7S3020C33v30Ev();
extern void _ZN7S3020C33v31Ev();
extern void _ZN7S3020C33v32Ev();
extern void _ZN7S3020C33v33Ev();
extern void _ZN7S3020C33v34Ev();
extern void _ZN7S3020C33v35Ev();
extern void _ZN7S3020C33v36Ev();
extern void _ZN7S3020C33v37Ev();
extern void _ZN7S3020C33v38Ev();
extern void _ZN7S3020C33v39Ev();
extern void _ZN7S3020C33v40Ev();
extern void _ZN7S3020C33v41Ev();
extern void _ZN7S3020C33v42Ev();
extern void _ZN7S3020C33v43Ev();
extern void _ZN7S3020C33v44Ev();
extern void _ZN7S3020C33v45Ev();
extern void _ZN7S3020C33v46Ev();
extern void _ZN7S3020C33v47Ev();
extern void _ZN7S3020C33v48Ev();
extern void _ZN7S3020C33v49Ev();
extern void _ZN7S3020C33v50Ev();
extern void _ZN7S3020C33v51Ev();
extern void _ZN7S3020C33v52Ev();
extern void _ZN7S3020C33v53Ev();
extern void _ZN7S3020C33v54Ev();
extern void _ZN7S3020C33v55Ev();
extern void _ZN7S3020C33v56Ev();
extern void _ZN7S3020C33v57Ev();
extern void _ZN7S3020C33v58Ev();
extern void _ZN7S3020C33v59Ev();
extern void _ZN7S3020C33v60Ev();
extern void _ZN7S3020C33v61Ev();
extern void _ZN7S3020C33v62Ev();
extern void _ZN7S3020C33v63Ev();
extern void _ZN7S3020C33v64Ev();
extern void _ZN7S3020C33v65Ev();
extern void _ZN7S3020C33v66Ev();
extern void _ZN7S3020C33v67Ev();
extern void _ZN7S3020C33v68Ev();
extern void _ZN7S3020C33v69Ev();
extern void _ZN7S3020C33v70Ev();
extern void _ZN7S3020C33v71Ev();
extern void _ZN7S3020C33v72Ev();
extern void _ZN7S3020C33v73Ev();
extern void _ZN7S3020C33v74Ev();
extern void _ZN7S3020C33v75Ev();
extern void _ZN7S3020C23v76Ev();
extern void _ZN7S3020C23v77Ev();
extern void _ZN7S3020C23v78Ev();
extern void _ZN7S3020C23v79Ev();
extern void _ZN7S3020C23v80Ev();
extern void _ZN7S3020C23v81Ev();
extern void _ZN7S3020C23v82Ev();
extern void _ZN7S3020C23v83Ev();
extern void _ZN7S3020C23v84Ev();
extern void _ZN7S3020C23v85Ev();
extern void _ZN7S3020C23v86Ev();
extern void _ZN7S3020C23v87Ev();
extern void _ZN7S3020C23v88Ev();
extern void _ZN7S3020C23v89Ev();
extern void _ZN7S3020C23v90Ev();
extern void _ZN7S3020C23v91Ev();
extern void _ZN7S3020C23v92Ev();
extern void _ZN7S3020C12v1Ev();
extern void _ZN7S3020C12v2Ev();
extern void _ZN7S3020C12v3Ev();
extern void _ZN7S3020C12v4Ev();
extern void _ZN7S3020C12v5Ev();
extern void _ZN7S3020C12v6Ev();
extern void _ZN7S3020C12v7Ev();
extern void _ZN7S3020C12v8Ev();
extern void _ZN7S3020C12v9Ev();
extern void _ZN7S3020C13v10Ev();
extern void _ZN7S3020C13v11Ev();
static  VTBL_ENTRY vtc_S3020C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3020C1[0]),
  (VTBL_ENTRY)&_ZN7S3020C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3020C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3020C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v91Ev,
  (VTBL_ENTRY)&_ZN7S3020C23v92Ev,
  (VTBL_ENTRY)&_ZN7S3020C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3020C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3020C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3020C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3020C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3020C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3020C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3020C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3020C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3020C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3020C13v11Ev,
};
extern VTBL_ENTRY _ZTI7S3020C1[];
extern  VTBL_ENTRY _ZTV7S3020C1[];
Class_Descriptor cd_S3020C1 = {  "S3020C1", // class name
  bases_S3020C1, 2,
  &(vtc_S3020C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S3020C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3020C1),96, //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  S2831C4  {
  virtual void  v8(); // _ZN7S2831C42v8Ev
  ~S2831C4(); // tgen
  S2831C4(); // tgen
};
//SIG(-1 S2831C4) C1{ v1}


void  S2831C4 ::v8(){vfunc_called(this, "_ZN7S2831C42v8Ev");}
S2831C4 ::~S2831C4(){ note_dtor("S2831C4", this);} // tgen
S2831C4 ::S2831C4(){ note_ctor("S2831C4", this);} // tgen

static void Test_S2831C4()
{
  extern Class_Descriptor cd_S2831C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2831C4, buf);
    S2831C4 *dp, &lv = *(dp=new (buf) S2831C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2831C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2831C4)");
    test_class_info(&lv, &cd_S2831C4);
    dp->~S2831C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2831C4(Test_S2831C4, "S2831C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2831C4C1Ev();
extern void _ZN7S2831C4D1Ev();
Name_Map name_map_S2831C4[] = {
  NSPAIR(_ZN7S2831C4C1Ev),
  NSPAIR(_ZN7S2831C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2831C4[];
extern void _ZN7S2831C42v8Ev();
static  VTBL_ENTRY vtc_S2831C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2831C4[0]),
  (VTBL_ENTRY)&_ZN7S2831C42v8Ev,
};
extern VTBL_ENTRY _ZTI7S2831C4[];
extern  VTBL_ENTRY _ZTV7S2831C4[];
Class_Descriptor cd_S2831C4 = {  "S2831C4", // class name
  0,0,//no base classes
  &(vtc_S2831C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2831C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2831C4),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  S2831C2  : S3600C19 , S2831C4 {
  virtual void  v9(); // _ZN7S2831C22v9Ev
  virtual void  v10(); // _ZN7S2831C23v10Ev
  virtual void  v11(); // _ZN7S2831C23v11Ev
  virtual void  v12(); // _ZN7S2831C23v12Ev
  virtual void  v13(); // _ZN7S2831C23v13Ev
  virtual void  v14(); // _ZN7S2831C23v14Ev
  virtual void  v15(); // _ZN7S2831C23v15Ev
  virtual void  v16(); // _ZN7S2831C23v16Ev
  virtual void  v17(); // _ZN7S2831C23v17Ev
  virtual void  v18(); // _ZN7S2831C23v18Ev
  virtual void  v19(); // _ZN7S2831C23v19Ev
  ~S2831C2(); // tgen
  S2831C2(); // tgen
};
//SIG(-1 S2831C2) C1{ BC2{ m} BC3{ v12} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11}


void  S2831C2 ::v9(){vfunc_called(this, "_ZN7S2831C22v9Ev");}
void  S2831C2 ::v10(){vfunc_called(this, "_ZN7S2831C23v10Ev");}
void  S2831C2 ::v11(){vfunc_called(this, "_ZN7S2831C23v11Ev");}
void  S2831C2 ::v12(){vfunc_called(this, "_ZN7S2831C23v12Ev");}
void  S2831C2 ::v13(){vfunc_called(this, "_ZN7S2831C23v13Ev");}
void  S2831C2 ::v14(){vfunc_called(this, "_ZN7S2831C23v14Ev");}
void  S2831C2 ::v15(){vfunc_called(this, "_ZN7S2831C23v15Ev");}
void  S2831C2 ::v16(){vfunc_called(this, "_ZN7S2831C23v16Ev");}
void  S2831C2 ::v17(){vfunc_called(this, "_ZN7S2831C23v17Ev");}
void  S2831C2 ::v18(){vfunc_called(this, "_ZN7S2831C23v18Ev");}
void  S2831C2 ::v19(){vfunc_called(this, "_ZN7S2831C23v19Ev");}
S2831C2 ::~S2831C2(){ note_dtor("S2831C2", this);} // tgen
S2831C2 ::S2831C2(){ note_ctor("S2831C2", this);} // tgen

static void Test_S2831C2()
{
  extern Class_Descriptor cd_S2831C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2831C2, buf);
    S2831C2 *dp, &lv = *(dp=new (buf) S2831C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2831C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2831C2)");
    check_base_class_offset(lv, (S3600C19*), 0, "S2831C2");
    check_base_class_offset(lv, (S2831C4*), 0, "S2831C2");
    test_class_info(&lv, &cd_S2831C2);
    dp->~S2831C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2831C2(Test_S2831C2, "S2831C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2831C2C1Ev();
extern void _ZN7S2831C2D1Ev();
Name_Map name_map_S2831C2[] = {
  NSPAIR(_ZN7S2831C2C1Ev),
  NSPAIR(_ZN7S2831C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2831C4;
extern VTBL_ENTRY _ZTI7S2831C4[];
extern  VTBL_ENTRY _ZTV7S2831C4[];
static Base_Class bases_S2831C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2831C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2831C2[];
extern void _ZN7S2831C42v8Ev();
extern void _ZN7S2831C22v9Ev();
extern void _ZN7S2831C23v10Ev();
extern void _ZN7S2831C23v11Ev();
extern void _ZN7S2831C23v12Ev();
extern void _ZN7S2831C23v13Ev();
extern void _ZN7S2831C23v14Ev();
extern void _ZN7S2831C23v15Ev();
extern void _ZN7S2831C23v16Ev();
extern void _ZN7S2831C23v17Ev();
extern void _ZN7S2831C23v18Ev();
extern void _ZN7S2831C23v19Ev();
static  VTBL_ENTRY vtc_S2831C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2831C2[0]),
  (VTBL_ENTRY)&_ZN7S2831C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2831C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S2831C2[];
extern  VTBL_ENTRY _ZTV7S2831C2[];
Class_Descriptor cd_S2831C2 = {  "S2831C2", // class name
  bases_S2831C2, 2,
  &(vtc_S2831C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2831C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2831C2),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  S2831C6  {
  int s2831c6f0[28];
  virtual  ~S2831C6(); // _ZN7S2831C6D1Ev
  virtual void  v24(); // _ZN7S2831C63v24Ev
  virtual void  v25(); // _ZN7S2831C63v25Ev
  virtual void  v26(); // _ZN7S2831C63v26Ev
  virtual void  v27(); // _ZN7S2831C63v27Ev
  virtual void  v28(); // _ZN7S2831C63v28Ev
  virtual void  v29(); // _ZN7S2831C63v29Ev
  virtual void  v30(); // _ZN7S2831C63v30Ev
  virtual void  v31(); // _ZN7S2831C63v31Ev
  virtual void  v32(); // _ZN7S2831C63v32Ev
  virtual void  v33(); // _ZN7S2831C63v33Ev
  virtual void  v34(); // _ZN7S2831C63v34Ev
  virtual void  v35(); // _ZN7S2831C63v35Ev
  virtual void  v36(); // _ZN7S2831C63v36Ev
  virtual void  v37(); // _ZN7S2831C63v37Ev
  virtual void  v38(); // _ZN7S2831C63v38Ev
  virtual void  v39(); // _ZN7S2831C63v39Ev
  virtual void  v40(); // _ZN7S2831C63v40Ev
  virtual void  v41(); // _ZN7S2831C63v41Ev
  virtual void  v42(); // _ZN7S2831C63v42Ev
  virtual void  v43(); // _ZN7S2831C63v43Ev
  virtual void  v44(); // _ZN7S2831C63v44Ev
  virtual void  v45(); // _ZN7S2831C63v45Ev
  virtual void  v46(); // _ZN7S2831C63v46Ev
  virtual void  v47(); // _ZN7S2831C63v47Ev
  virtual void  v48(); // _ZN7S2831C63v48Ev
  S2831C6(); // tgen
};
//SIG(-1 S2831C6) 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 Fi[28]}


 S2831C6 ::~S2831C6(){ note_dtor("S2831C6", this);}
void  S2831C6 ::v24(){vfunc_called(this, "_ZN7S2831C63v24Ev");}
void  S2831C6 ::v25(){vfunc_called(this, "_ZN7S2831C63v25Ev");}
void  S2831C6 ::v26(){vfunc_called(this, "_ZN7S2831C63v26Ev");}
void  S2831C6 ::v27(){vfunc_called(this, "_ZN7S2831C63v27Ev");}
void  S2831C6 ::v28(){vfunc_called(this, "_ZN7S2831C63v28Ev");}
void  S2831C6 ::v29(){vfunc_called(this, "_ZN7S2831C63v29Ev");}
void  S2831C6 ::v30(){vfunc_called(this, "_ZN7S2831C63v30Ev");}
void  S2831C6 ::v31(){vfunc_called(this, "_ZN7S2831C63v31Ev");}
void  S2831C6 ::v32(){vfunc_called(this, "_ZN7S2831C63v32Ev");}
void  S2831C6 ::v33(){vfunc_called(this, "_ZN7S2831C63v33Ev");}
void  S2831C6 ::v34(){vfunc_called(this, "_ZN7S2831C63v34Ev");}
void  S2831C6 ::v35(){vfunc_called(this, "_ZN7S2831C63v35Ev");}
void  S2831C6 ::v36(){vfunc_called(this, "_ZN7S2831C63v36Ev");}
void  S2831C6 ::v37(){vfunc_called(this, "_ZN7S2831C63v37Ev");}
void  S2831C6 ::v38(){vfunc_called(this, "_ZN7S2831C63v38Ev");}
void  S2831C6 ::v39(){vfunc_called(this, "_ZN7S2831C63v39Ev");}
void  S2831C6 ::v40(){vfunc_called(this, "_ZN7S2831C63v40Ev");}
void  S2831C6 ::v41(){vfunc_called(this, "_ZN7S2831C63v41Ev");}
void  S2831C6 ::v42(){vfunc_called(this, "_ZN7S2831C63v42Ev");}
void  S2831C6 ::v43(){vfunc_called(this, "_ZN7S2831C63v43Ev");}
void  S2831C6 ::v44(){vfunc_called(this, "_ZN7S2831C63v44Ev");}
void  S2831C6 ::v45(){vfunc_called(this, "_ZN7S2831C63v45Ev");}
void  S2831C6 ::v46(){vfunc_called(this, "_ZN7S2831C63v46Ev");}
void  S2831C6 ::v47(){vfunc_called(this, "_ZN7S2831C63v47Ev");}
void  S2831C6 ::v48(){vfunc_called(this, "_ZN7S2831C63v48Ev");}
S2831C6 ::S2831C6(){ note_ctor("S2831C6", this);} // tgen

static void Test_S2831C6()
{
  extern Class_Descriptor cd_S2831C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S2831C6, buf);
    S2831C6 *dp, &lv = *(dp=new (buf) S2831C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S2831C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2831C6)");
    check_field_offset(lv, s2831c6f0, ABISELECT(8,4), "S2831C6.s2831c6f0");
    test_class_info(&lv, &cd_S2831C6);
    dp->~S2831C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2831C6(Test_S2831C6, "S2831C6", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN7S2831C6C1Ev();
extern void _ZN7S2831C6D1Ev();
Name_Map name_map_S2831C6[] = {
  NSPAIR(_ZN7S2831C6C1Ev),
  NSPAIR(_ZN7S2831C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2831C6[];
extern void _ZN7S2831C6D1Ev();
extern void _ZN7S2831C6D0Ev();
extern void _ZN7S2831C63v24Ev();
extern void _ZN7S2831C63v25Ev();
extern void _ZN7S2831C63v26Ev();
extern void _ZN7S2831C63v27Ev();
extern void _ZN7S2831C63v28Ev();
extern void _ZN7S2831C63v29Ev();
extern void _ZN7S2831C63v30Ev();
extern void _ZN7S2831C63v31Ev();
extern void _ZN7S2831C63v32Ev();
extern void _ZN7S2831C63v33Ev();
extern void _ZN7S2831C63v34Ev();
extern void _ZN7S2831C63v35Ev();
extern void _ZN7S2831C63v36Ev();
extern void _ZN7S2831C63v37Ev();
extern void _ZN7S2831C63v38Ev();
extern void _ZN7S2831C63v39Ev();
extern void _ZN7S2831C63v40Ev();
extern void _ZN7S2831C63v41Ev();
extern void _ZN7S2831C63v42Ev();
extern void _ZN7S2831C63v43Ev();
extern void _ZN7S2831C63v44Ev();
extern void _ZN7S2831C63v45Ev();
extern void _ZN7S2831C63v46Ev();
extern void _ZN7S2831C63v47Ev();
extern void _ZN7S2831C63v48Ev();
static  VTBL_ENTRY vtc_S2831C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2831C6[0]),
  (VTBL_ENTRY)&_ZN7S2831C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2831C6D0Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v24Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v25Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v26Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v27Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v28Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v29Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v30Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v31Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v32Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v33Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v34Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v35Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v36Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v37Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v38Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v39Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v40Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v41Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v42Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v43Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v44Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v45Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v46Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v47Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v48Ev,
};
extern VTBL_ENTRY _ZTI7S2831C6[];
extern  VTBL_ENTRY _ZTV7S2831C6[];
Class_Descriptor cd_S2831C6 = {  "S2831C6", // class name
  0,0,//no base classes
  &(vtc_S2831C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI7S2831C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2831C6),29, //virtual function table var
  2, // 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  S2831C5  : S2831C6 {
  void *s2831c5f0;
  ::S1566C29 s2831c5f1;
  void *s2831c5f2;
  ::S1325C7_nt s2831c5f3;
  virtual  ~S2831C5(); // _ZN7S2831C5D1Ev
  virtual void  v20(); // _ZN7S2831C53v20Ev
  virtual void  v21(); // _ZN7S2831C53v21Ev
  virtual void  v22(); // _ZN7S2831C53v22Ev
  virtual void  v23(); // _ZN7S2831C53v23Ev
  S2831C5(); // tgen
};
//SIG(-1 S2831C5) C1{ BC2{ 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 Fi[28]} vd v1 v2 v3 v4 Fp FC3{ BC4{ m Fp Fi[2]}} Fp FC5{ BC6{ BC7{ BC4}}}}


 S2831C5 ::~S2831C5(){ note_dtor("S2831C5", this);}
void  S2831C5 ::v20(){vfunc_called(this, "_ZN7S2831C53v20Ev");}
void  S2831C5 ::v21(){vfunc_called(this, "_ZN7S2831C53v21Ev");}
void  S2831C5 ::v22(){vfunc_called(this, "_ZN7S2831C53v22Ev");}
void  S2831C5 ::v23(){vfunc_called(this, "_ZN7S2831C53v23Ev");}
S2831C5 ::S2831C5(){ note_ctor("S2831C5", this);} // tgen

static void Test_S2831C5()
{
  extern Class_Descriptor cd_S2831C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,38)];
    init_test(&cd_S2831C5, buf);
    S2831C5 *dp, &lv = *(dp=new (buf) S2831C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,148), "sizeof(S2831C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2831C5)");
    check_base_class_offset(lv, (S2831C6*), 0, "S2831C5");
    check_field_offset(lv, s2831c5f0, ABISELECT(120,116), "S2831C5.s2831c5f0");
    check_field_offset(lv, s2831c5f1, ABISELECT(128,120), "S2831C5.s2831c5f1");
    check_field_offset(lv, s2831c5f2, ABISELECT(144,132), "S2831C5.s2831c5f2");
    check_field_offset(lv, s2831c5f3, ABISELECT(152,136), "S2831C5.s2831c5f3");
    test_class_info(&lv, &cd_S2831C5);
    dp->~S2831C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2831C5(Test_S2831C5, "S2831C5", ABISELECT(168,148));

#else // __cplusplus

extern void _ZN7S2831C5C1Ev();
extern void _ZN7S2831C5D1Ev();
Name_Map name_map_S2831C5[] = {
  NSPAIR(_ZN7S2831C5C1Ev),
  NSPAIR(_ZN7S2831C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2831C6;
extern VTBL_ENTRY _ZTI7S2831C6[];
extern  VTBL_ENTRY _ZTV7S2831C6[];
static Base_Class bases_S2831C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2831C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2831C5[];
extern void _ZN7S2831C5D1Ev();
extern void _ZN7S2831C5D0Ev();
extern void _ZN7S2831C63v24Ev();
extern void _ZN7S2831C63v25Ev();
extern void _ZN7S2831C63v26Ev();
extern void _ZN7S2831C63v27Ev();
extern void _ZN7S2831C63v28Ev();
extern void _ZN7S2831C63v29Ev();
extern void _ZN7S2831C63v30Ev();
extern void _ZN7S2831C63v31Ev();
extern void _ZN7S2831C63v32Ev();
extern void _ZN7S2831C63v33Ev();
extern void _ZN7S2831C63v34Ev();
extern void _ZN7S2831C63v35Ev();
extern void _ZN7S2831C63v36Ev();
extern void _ZN7S2831C63v37Ev();
extern void _ZN7S2831C63v38Ev();
extern void _ZN7S2831C63v39Ev();
extern void _ZN7S2831C63v40Ev();
extern void _ZN7S2831C63v41Ev();
extern void _ZN7S2831C63v42Ev();
extern void _ZN7S2831C63v43Ev();
extern void _ZN7S2831C63v44Ev();
extern void _ZN7S2831C63v45Ev();
extern void _ZN7S2831C63v46Ev();
extern void _ZN7S2831C63v47Ev();
extern void _ZN7S2831C63v48Ev();
extern void _ZN7S2831C53v20Ev();
extern void _ZN7S2831C53v21Ev();
extern void _ZN7S2831C53v22Ev();
extern void _ZN7S2831C53v23Ev();
static  VTBL_ENTRY vtc_S2831C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2831C5[0]),
  (VTBL_ENTRY)&_ZN7S2831C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2831C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v24Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v25Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v26Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v27Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v28Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v29Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v30Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v31Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v32Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v33Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v34Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v35Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v36Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v37Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v38Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v39Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v40Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v41Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v42Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v43Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v44Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v45Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v46Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v47Ev,
  (VTBL_ENTRY)&_ZN7S2831C63v48Ev,
  (VTBL_ENTRY)&_ZN7S2831C53v20Ev,
  (VTBL_ENTRY)&_ZN7S2831C53v21Ev,
  (VTBL_ENTRY)&_ZN7S2831C53v22Ev,
  (VTBL_ENTRY)&_ZN7S2831C53v23Ev,
};
extern VTBL_ENTRY _ZTI7S2831C5[];
extern  VTBL_ENTRY _ZTV7S2831C5[];
Class_Descriptor cd_S2831C5 = {  "S2831C5", // class name
  bases_S2831C5, 1,
  &(vtc_S2831C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,148), // object size
  NSPAIRA(_ZTI7S2831C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2831C5),33, //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  S2831C16_nt  : S1566C23_nt {
};
//SIG(-1 S2831C16_nt) C1{ BC2{ m FC3{ BC4{ m Fp Fi[2]}} Fp Fi}}



//skip512 S2831C16_nt

#else // __cplusplus

extern Class_Descriptor cd_S1566C23_nt;
static Base_Class bases_S2831C16_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1566C23_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  S2831C25_nt  {
  ::S1537C13 s2831c25f0;
  void *s2831c25f1;
  int s2831c25f2;
  void  mf2831c25(); // _ZN11S2831C25_nt9mf2831c25Ev
};
//SIG(-1 S2831C25_nt) C1{ m FC2{ BC3{ m Fp Fi[2]}} Fp Fi}


void  S2831C25_nt ::mf2831c25(){}

//skip512 S2831C25_nt

#else // __cplusplus

Class_Descriptor cd_S2831C25_nt = {  "S2831C25_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2831C24  : S2831C25_nt {
};
//SIG(-1 S2831C24) C1{ BC2{ m FC3{ BC4{ m Fp Fi[2]}} Fp Fi}}



static void Test_S2831C24()
{
  extern Class_Descriptor cd_S2831C24;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2831C24, buf);
    S2831C24 &lv = *(new (buf) S2831C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2831C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2831C24)");
    check_base_class_offset(lv, (S2831C25_nt*), 0, "S2831C24");
    test_class_info(&lv, &cd_S2831C24);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2831C24(Test_S2831C24, "S2831C24", ABISELECT(32,20));

#else // __cplusplus

extern Class_Descriptor cd_S2831C25_nt;
static Base_Class bases_S2831C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2831C25_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_S2831C24 = {  "S2831C24", // class name
  bases_S2831C24, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2831C1  : S2831C2 {
  void *s2831c1f0;
  int s2831c1f1;
  __tsi64 s2831c1f2;
  ::S2831C5 s2831c1f3;
  ::S2831C5 s2831c1f4;
  ::S1566C22_nt s2831c1f5;
  ::S1566C10 s2831c1f6;
  ::S2831C16_nt s2831c1f7;
  ::S1537C23 s2831c1f8;
  ::S2831C16_nt s2831c1f9;
  ::S1537C19 s2831c1f10;
  ::S2831C24 s2831c1f11;
  int s2831c1f12;
  virtual void  v1(); // _ZN7S2831C12v1Ev
  virtual void  v2(); // _ZN7S2831C12v2Ev
  virtual void  v3(); // _ZN7S2831C12v3Ev
  virtual void  v4(); // _ZN7S2831C12v4Ev
  virtual void  v5(); // _ZN7S2831C12v5Ev
  virtual void  v6(); // _ZN7S2831C12v6Ev
  virtual void  v7(); // _ZN7S2831C12v7Ev
  ~S2831C1(); // tgen
  S2831C1(); // tgen
};
//SIG(1 S2831C1) C1{ BC2{ BC3{ m} BC4{ v8} v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19} v1 v2 v3 v4 v5 v6 v7 Fp Fi FL FC5{ BC6{ vd 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 Fi[28]} vd v20 v21 v22 v23 Fp FC7{ BC8{ m Fp Fi[2]}} Fp FC9{ BC10{ BC11{ BC8}}}} FC5 FC12{ BC13{ m FC14{ BC8} Fp Fi}} FC15{ BC8} FC16{ BC13} FC17{ BC8} FC16 FC18{ BC8} FC19{ BC20{ m FC21{ BC8} Fp Fi}} Fi}


void  S2831C1 ::v1(){vfunc_called(this, "_ZN7S2831C12v1Ev");}
void  S2831C1 ::v2(){vfunc_called(this, "_ZN7S2831C12v2Ev");}
void  S2831C1 ::v3(){vfunc_called(this, "_ZN7S2831C12v3Ev");}
void  S2831C1 ::v4(){vfunc_called(this, "_ZN7S2831C12v4Ev");}
void  S2831C1 ::v5(){vfunc_called(this, "_ZN7S2831C12v5Ev");}
void  S2831C1 ::v6(){vfunc_called(this, "_ZN7S2831C12v6Ev");}
void  S2831C1 ::v7(){vfunc_called(this, "_ZN7S2831C12v7Ev");}
S2831C1 ::~S2831C1(){ note_dtor("S2831C1", this);} // tgen
S2831C1 ::S2831C1(){ note_ctor("S2831C1", this);} // tgen

static void Test_S2831C1()
{
  extern Class_Descriptor cd_S2831C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(70,110)];
    init_test(&cd_S2831C1, buf);
    S2831C1 *dp, &lv = *(dp=new (buf) S2831C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(552,436), "sizeof(S2831C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2831C1)");
    check_base_class_offset(lv, (S3600C19*)(S2831C2*), 0, "S2831C1");
    check_base_class_offset(lv, (S2831C4*)(S2831C2*), 0, "S2831C1");
    check_base_class_offset(lv, (S2831C2*), 0, "S2831C1");
    check_field_offset(lv, s2831c1f0, ABISELECT(8,4), "S2831C1.s2831c1f0");
    check_field_offset(lv, s2831c1f1, ABISELECT(16,8), "S2831C1.s2831c1f1");
    check_field_offset(lv, s2831c1f2, ABISELECT(24,12), "S2831C1.s2831c1f2");
    check_field_offset(lv, s2831c1f3, ABISELECT(32,20), "S2831C1.s2831c1f3");
    check_field_offset(lv, s2831c1f4, ABISELECT(200,168), "S2831C1.s2831c1f4");
    check_field_offset(lv, s2831c1f5, ABISELECT(368,316), "S2831C1.s2831c1f5");
    check_field_offset(lv, s2831c1f6, ABISELECT(400,336), "S2831C1.s2831c1f6");
    check_field_offset(lv, s2831c1f7, ABISELECT(416,348), "S2831C1.s2831c1f7");
    check_field_offset(lv, s2831c1f8, ABISELECT(448,368), "S2831C1.s2831c1f8");
    check_field_offset(lv, s2831c1f9, ABISELECT(464,380), "S2831C1.s2831c1f9");
    check_field_offset(lv, s2831c1f10, ABISELECT(496,400), "S2831C1.s2831c1f10");
    check_field_offset(lv, s2831c1f11, ABISELECT(512,412), "S2831C1.s2831c1f11");
    check_field_offset(lv, s2831c1f12, ABISELECT(544,432), "S2831C1.s2831c1f12");
    test_class_info(&lv, &cd_S2831C1);
    dp->~S2831C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2831C1(Test_S2831C1, "S2831C1", ABISELECT(552,436));

#else // __cplusplus

extern void _ZN7S2831C1C1Ev();
extern void _ZN7S2831C1D1Ev();
Name_Map name_map_S2831C1[] = {
  NSPAIR(_ZN7S2831C1C1Ev),
  NSPAIR(_ZN7S2831C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2831C4;
extern VTBL_ENTRY _ZTI7S2831C4[];
extern  VTBL_ENTRY _ZTV7S2831C4[];
extern Class_Descriptor cd_S2831C2;
extern VTBL_ENTRY _ZTI7S2831C2[];
extern  VTBL_ENTRY _ZTV7S2831C2[];
static Base_Class bases_S2831C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2831C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2831C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2831C1[];
extern void _ZN7S2831C42v8Ev();
extern void _ZN7S2831C22v9Ev();
extern void _ZN7S2831C23v10Ev();
extern void _ZN7S2831C23v11Ev();
extern void _ZN7S2831C23v12Ev();
extern void _ZN7S2831C23v13Ev();
extern void _ZN7S2831C23v14Ev();
extern void _ZN7S2831C23v15Ev();
extern void _ZN7S2831C23v16Ev();
extern void _ZN7S2831C23v17Ev();
extern void _ZN7S2831C23v18Ev();
extern void _ZN7S2831C23v19Ev();
extern void _ZN7S2831C12v1Ev();
extern void _ZN7S2831C12v2Ev();
extern void _ZN7S2831C12v3Ev();
extern void _ZN7S2831C12v4Ev();
extern void _ZN7S2831C12v5Ev();
extern void _ZN7S2831C12v6Ev();
extern void _ZN7S2831C12v7Ev();
static  VTBL_ENTRY vtc_S2831C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2831C1[0]),
  (VTBL_ENTRY)&_ZN7S2831C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2831C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2831C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2831C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2831C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2831C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2831C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2831C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2831C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2831C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S2831C1[];
extern  VTBL_ENTRY _ZTV7S2831C1[];
Class_Descriptor cd_S2831C1 = {  "S2831C1", // class name
  bases_S2831C1, 3,
  &(vtc_S2831C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(552,436), // object size
  NSPAIRA(_ZTI7S2831C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2831C1),21, //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  S6852C2  {
  int s6852c2f0;
  __tsi64 s6852c2f1;
  void *s6852c2f2[4];
  int s6852c2f3[2];
  void *s6852c2f4;
  ::S1566C14_nt s6852c2f5;
  void *s6852c2f6[2];
  virtual  ~S6852C2(); // _ZN7S6852C2D1Ev
  virtual void  v4(); // _ZN7S6852C22v4Ev
  virtual void  v5(); // _ZN7S6852C22v5Ev
  virtual void  v6(); // _ZN7S6852C22v6Ev
  virtual void  v7(); // _ZN7S6852C22v7Ev
  virtual void  v8(); // _ZN7S6852C22v8Ev
  virtual void  v9(); // _ZN7S6852C22v9Ev
  virtual void  v10(); // _ZN7S6852C23v10Ev
  virtual void  v11(); // _ZN7S6852C23v11Ev
  virtual void  v12(); // _ZN7S6852C23v12Ev
  virtual void  v13(); // _ZN7S6852C23v13Ev
  virtual void  v14(); // _ZN7S6852C23v14Ev
  virtual void  v15(); // _ZN7S6852C23v15Ev
  virtual void  v16(); // _ZN7S6852C23v16Ev
  virtual void  v17(); // _ZN7S6852C23v17Ev
  virtual void  v18(); // _ZN7S6852C23v18Ev
  virtual void  v19(); // _ZN7S6852C23v19Ev
  virtual void  v20(); // _ZN7S6852C23v20Ev
  virtual void  v21(); // _ZN7S6852C23v21Ev
  virtual void  v22(); // _ZN7S6852C23v22Ev
  virtual void  v23(); // _ZN7S6852C23v23Ev
  virtual void  v24(); // _ZN7S6852C23v24Ev
  virtual void  v25(); // _ZN7S6852C23v25Ev
  virtual void  v26(); // _ZN7S6852C23v26Ev
  virtual void  v27(); // _ZN7S6852C23v27Ev
  virtual void  v28(); // _ZN7S6852C23v28Ev
  virtual void  v29(); // _ZN7S6852C23v29Ev
  virtual void  v30(); // _ZN7S6852C23v30Ev
  virtual void  v31(); // _ZN7S6852C23v31Ev
  virtual void  v32(); // _ZN7S6852C23v32Ev
  virtual void  v33(); // _ZN7S6852C23v33Ev
  virtual void  v34(); // _ZN7S6852C23v34Ev
  virtual void  v35(); // _ZN7S6852C23v35Ev
  virtual void  v36(); // _ZN7S6852C23v36Ev
  virtual void  v37(); // _ZN7S6852C23v37Ev
  virtual void  v38(); // _ZN7S6852C23v38Ev
  virtual void  v39(); // _ZN7S6852C23v39Ev
  virtual void  v40(); // _ZN7S6852C23v40Ev
  virtual void  v41(); // _ZN7S6852C23v41Ev
  virtual void  v42(); // _ZN7S6852C23v42Ev
  virtual void  v43(); // _ZN7S6852C23v43Ev
  virtual void  v44(); // _ZN7S6852C23v44Ev
  virtual void  v45(); // _ZN7S6852C23v45Ev
  virtual void  v46(); // _ZN7S6852C23v46Ev
  virtual void  v47(); // _ZN7S6852C23v47Ev
  virtual void  v48(); // _ZN7S6852C23v48Ev
  virtual void  v49(); // _ZN7S6852C23v49Ev
  virtual void  v50(); // _ZN7S6852C23v50Ev
  virtual void  v51(); // _ZN7S6852C23v51Ev
  virtual void  v52(); // _ZN7S6852C23v52Ev
  virtual void  v53(); // _ZN7S6852C23v53Ev
  virtual void  v54(); // _ZN7S6852C23v54Ev
  virtual void  v55(); // _ZN7S6852C23v55Ev
  virtual void  v56(); // _ZN7S6852C23v56Ev
  virtual void  v57(); // _ZN7S6852C23v57Ev
  virtual void  v58(); // _ZN7S6852C23v58Ev
  virtual void  v59(); // _ZN7S6852C23v59Ev
  virtual void  v60(); // _ZN7S6852C23v60Ev
  virtual void  v61(); // _ZN7S6852C23v61Ev
  virtual void  v62(); // _ZN7S6852C23v62Ev
  virtual void  v63(); // _ZN7S6852C23v63Ev
  virtual void  v64(); // _ZN7S6852C23v64Ev
  virtual void  v65(); // _ZN7S6852C23v65Ev
  virtual void  v66(); // _ZN7S6852C23v66Ev
  virtual void  v67(); // _ZN7S6852C23v67Ev
  S6852C2(); // tgen
};
//SIG(-1 S6852C2) 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]}


 S6852C2 ::~S6852C2(){ note_dtor("S6852C2", this);}
void  S6852C2 ::v4(){vfunc_called(this, "_ZN7S6852C22v4Ev");}
void  S6852C2 ::v5(){vfunc_called(this, "_ZN7S6852C22v5Ev");}
void  S6852C2 ::v6(){vfunc_called(this, "_ZN7S6852C22v6Ev");}
void  S6852C2 ::v7(){vfunc_called(this, "_ZN7S6852C22v7Ev");}
void  S6852C2 ::v8(){vfunc_called(this, "_ZN7S6852C22v8Ev");}
void  S6852C2 ::v9(){vfunc_called(this, "_ZN7S6852C22v9Ev");}
void  S6852C2 ::v10(){vfunc_called(this, "_ZN7S6852C23v10Ev");}
void  S6852C2 ::v11(){vfunc_called(this, "_ZN7S6852C23v11Ev");}
void  S6852C2 ::v12(){vfunc_called(this, "_ZN7S6852C23v12Ev");}
void  S6852C2 ::v13(){vfunc_called(this, "_ZN7S6852C23v13Ev");}
void  S6852C2 ::v14(){vfunc_called(this, "_ZN7S6852C23v14Ev");}
void  S6852C2 ::v15(){vfunc_called(this, "_ZN7S6852C23v15Ev");}
void  S6852C2 ::v16(){vfunc_called(this, "_ZN7S6852C23v16Ev");}
void  S6852C2 ::v17(){vfunc_called(this, "_ZN7S6852C23v17Ev");}
void  S6852C2 ::v18(){vfunc_called(this, "_ZN7S6852C23v18Ev");}
void  S6852C2 ::v19(){vfunc_called(this, "_ZN7S6852C23v19Ev");}
void  S6852C2 ::v20(){vfunc_called(this, "_ZN7S6852C23v20Ev");}
void  S6852C2 ::v21(){vfunc_called(this, "_ZN7S6852C23v21Ev");}
void  S6852C2 ::v22(){vfunc_called(this, "_ZN7S6852C23v22Ev");}
void  S6852C2 ::v23(){vfunc_called(this, "_ZN7S6852C23v23Ev");}
void  S6852C2 ::v24(){vfunc_called(this, "_ZN7S6852C23v24Ev");}
void  S6852C2 ::v25(){vfunc_called(this, "_ZN7S6852C23v25Ev");}
void  S6852C2 ::v26(){vfunc_called(this, "_ZN7S6852C23v26Ev");}
void  S6852C2 ::v27(){vfunc_called(this, "_ZN7S6852C23v27Ev");}
void  S6852C2 ::v28(){vfunc_called(this, "_ZN7S6852C23v28Ev");}
void  S6852C2 ::v29(){vfunc_called(this, "_ZN7S6852C23v29Ev");}
void  S6852C2 ::v30(){vfunc_called(this, "_ZN7S6852C23v30Ev");}
void  S6852C2 ::v31(){vfunc_called(this, "_ZN7S6852C23v31Ev");}
void  S6852C2 ::v32(){vfunc_called(this, "_ZN7S6852C23v32Ev");}
void  S6852C2 ::v33(){vfunc_called(this, "_ZN7S6852C23v33Ev");}
void  S6852C2 ::v34(){vfunc_called(this, "_ZN7S6852C23v34Ev");}
void  S6852C2 ::v35(){vfunc_called(this, "_ZN7S6852C23v35Ev");}
void  S6852C2 ::v36(){vfunc_called(this, "_ZN7S6852C23v36Ev");}
void  S6852C2 ::v37(){vfunc_called(this, "_ZN7S6852C23v37Ev");}
void  S6852C2 ::v38(){vfunc_called(this, "_ZN7S6852C23v38Ev");}
void  S6852C2 ::v39(){vfunc_called(this, "_ZN7S6852C23v39Ev");}
void  S6852C2 ::v40(){vfunc_called(this, "_ZN7S6852C23v40Ev");}
void  S6852C2 ::v41(){vfunc_called(this, "_ZN7S6852C23v41Ev");}
void  S6852C2 ::v42(){vfunc_called(this, "_ZN7S6852C23v42Ev");}
void  S6852C2 ::v43(){vfunc_called(this, "_ZN7S6852C23v43Ev");}
void  S6852C2 ::v44(){vfunc_called(this, "_ZN7S6852C23v44Ev");}
void  S6852C2 ::v45(){vfunc_called(this, "_ZN7S6852C23v45Ev");}
void  S6852C2 ::v46(){vfunc_called(this, "_ZN7S6852C23v46Ev");}
void  S6852C2 ::v47(){vfunc_called(this, "_ZN7S6852C23v47Ev");}
void  S6852C2 ::v48(){vfunc_called(this, "_ZN7S6852C23v48Ev");}
void  S6852C2 ::v49(){vfunc_called(this, "_ZN7S6852C23v49Ev");}
void  S6852C2 ::v50(){vfunc_called(this, "_ZN7S6852C23v50Ev");}
void  S6852C2 ::v51(){vfunc_called(this, "_ZN7S6852C23v51Ev");}
void  S6852C2 ::v52(){vfunc_called(this, "_ZN7S6852C23v52Ev");}
void  S6852C2 ::v53(){vfunc_called(this, "_ZN7S6852C23v53Ev");}
void  S6852C2 ::v54(){vfunc_called(this, "_ZN7S6852C23v54Ev");}
void  S6852C2 ::v55(){vfunc_called(this, "_ZN7S6852C23v55Ev");}
void  S6852C2 ::v56(){vfunc_called(this, "_ZN7S6852C23v56Ev");}
void  S6852C2 ::v57(){vfunc_called(this, "_ZN7S6852C23v57Ev");}
void  S6852C2 ::v58(){vfunc_called(this, "_ZN7S6852C23v58Ev");}
void  S6852C2 ::v59(){vfunc_called(this, "_ZN7S6852C23v59Ev");}
void  S6852C2 ::v60(){vfunc_called(this, "_ZN7S6852C23v60Ev");}
void  S6852C2 ::v61(){vfunc_called(this, "_ZN7S6852C23v61Ev");}
void  S6852C2 ::v62(){vfunc_called(this, "_ZN7S6852C23v62Ev");}
void  S6852C2 ::v63(){vfunc_called(this, "_ZN7S6852C23v63Ev");}
void  S6852C2 ::v64(){vfunc_called(this, "_ZN7S6852C23v64Ev");}
void  S6852C2 ::v65(){vfunc_called(this, "_ZN7S6852C23v65Ev");}
void  S6852C2 ::v66(){vfunc_called(this, "_ZN7S6852C23v66Ev");}
void  S6852C2 ::v67(){vfunc_called(this, "_ZN7S6852C23v67Ev");}
S6852C2 ::S6852C2(){ note_ctor("S6852C2", this);} // tgen

static void Test_S6852C2()
{
  extern Class_Descriptor cd_S6852C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S6852C2, buf);
    S6852C2 *dp, &lv = *(dp=new (buf) S6852C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S6852C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6852C2)");
    check_field_offset(lv, s6852c2f0, ABISELECT(8,4), "S6852C2.s6852c2f0");
    check_field_offset(lv, s6852c2f1, ABISELECT(16,8), "S6852C2.s6852c2f1");
    check_field_offset(lv, s6852c2f2, ABISELECT(24,16), "S6852C2.s6852c2f2");
    check_field_offset(lv, s6852c2f3, ABISELECT(56,32), "S6852C2.s6852c2f3");
    check_field_offset(lv, s6852c2f4, ABISELECT(64,40), "S6852C2.s6852c2f4");
    check_field_offset(lv, s6852c2f5, ABISELECT(72,44), "S6852C2.s6852c2f5");
    check_field_offset(lv, s6852c2f6, ABISELECT(80,52), "S6852C2.s6852c2f6");
    test_class_info(&lv, &cd_S6852C2);
    dp->~S6852C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6852C2(Test_S6852C2, "S6852C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S6852C2C1Ev();
extern void _ZN7S6852C2D1Ev();
Name_Map name_map_S6852C2[] = {
  NSPAIR(_ZN7S6852C2C1Ev),
  NSPAIR(_ZN7S6852C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6852C2[];
extern void _ZN7S6852C2D1Ev();
extern void _ZN7S6852C2D0Ev();
extern void _ZN7S6852C22v4Ev();
extern void _ZN7S6852C22v5Ev();
extern void _ZN7S6852C22v6Ev();
extern void _ZN7S6852C22v7Ev();
extern void _ZN7S6852C22v8Ev();
extern void _ZN7S6852C22v9Ev();
extern void _ZN7S6852C23v10Ev();
extern void _ZN7S6852C23v11Ev();
extern void _ZN7S6852C23v12Ev();
extern void _ZN7S6852C23v13Ev();
extern void _ZN7S6852C23v14Ev();
extern void _ZN7S6852C23v15Ev();
extern void _ZN7S6852C23v16Ev();
extern void _ZN7S6852C23v17Ev();
extern void _ZN7S6852C23v18Ev();
extern void _ZN7S6852C23v19Ev();
extern void _ZN7S6852C23v20Ev();
extern void _ZN7S6852C23v21Ev();
extern void _ZN7S6852C23v22Ev();
extern void _ZN7S6852C23v23Ev();
extern void _ZN7S6852C23v24Ev();
extern void _ZN7S6852C23v25Ev();
extern void _ZN7S6852C23v26Ev();
extern void _ZN7S6852C23v27Ev();
extern void _ZN7S6852C23v28Ev();
extern void _ZN7S6852C23v29Ev();
extern void _ZN7S6852C23v30Ev();
extern void _ZN7S6852C23v31Ev();
extern void _ZN7S6852C23v32Ev();
extern void _ZN7S6852C23v33Ev();
extern void _ZN7S6852C23v34Ev();
extern void _ZN7S6852C23v35Ev();
extern void _ZN7S6852C23v36Ev();
extern void _ZN7S6852C23v37Ev();
extern void _ZN7S6852C23v38Ev();
extern void _ZN7S6852C23v39Ev();
extern void _ZN7S6852C23v40Ev();
extern void _ZN7S6852C23v41Ev();
extern void _ZN7S6852C23v42Ev();
extern void _ZN7S6852C23v43Ev();
extern void _ZN7S6852C23v44Ev();
extern void _ZN7S6852C23v45Ev();
extern void _ZN7S6852C23v46Ev();
extern void _ZN7S6852C23v47Ev();
extern void _ZN7S6852C23v48Ev();
extern void _ZN7S6852C23v49Ev();
extern void _ZN7S6852C23v50Ev();
extern void _ZN7S6852C23v51Ev();
extern void _ZN7S6852C23v52Ev();
extern void _ZN7S6852C23v53Ev();
extern void _ZN7S6852C23v54Ev();
extern void _ZN7S6852C23v55Ev();
extern void _ZN7S6852C23v56Ev();
extern void _ZN7S6852C23v57Ev();
extern void _ZN7S6852C23v58Ev();
extern void _ZN7S6852C23v59Ev();
extern void _ZN7S6852C23v60Ev();
extern void _ZN7S6852C23v61Ev();
extern void _ZN7S6852C23v62Ev();
extern void _ZN7S6852C23v63Ev();
extern void _ZN7S6852C23v64Ev();
extern void _ZN7S6852C23v65Ev();
extern void _ZN7S6852C23v66Ev();
extern void _ZN7S6852C23v67Ev();
static  VTBL_ENTRY vtc_S6852C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6852C2[0]),
  (VTBL_ENTRY)&_ZN7S6852C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6852C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6852C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6852C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6852C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6852C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6852C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6852C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v31Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v32Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v33Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v64Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v65Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v66Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v67Ev,
};
extern VTBL_ENTRY _ZTI7S6852C2[];
extern  VTBL_ENTRY _ZTV7S6852C2[];
Class_Descriptor cd_S6852C2 = {  "S6852C2", // class name
  0,0,//no base classes
  &(vtc_S6852C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S6852C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6852C2),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  S6852C1  : S6852C2 {
  void *s6852c1f0;
  int s6852c1f1;
  ::S1537C14_nt s6852c1f2;
  ::S1537C14_nt s6852c1f3;
  int s6852c1f4;
  void *s6852c1f5[3];
  unsigned int s6852c1f6:1;
  unsigned int s6852c1f7:1;
  unsigned int s6852c1f8:1;
  unsigned int s6852c1f9:1;
  unsigned int s6852c1f10:1;
  unsigned int s6852c1f11:1;
  unsigned int s6852c1f12:1;
  unsigned int s6852c1f13:1;
  unsigned int s6852c1f14:1;
  int s6852c1f15[7];
  void *s6852c1f16;
  virtual  ~S6852C1(); // _ZN7S6852C1D1Ev
  virtual void  v1(); // _ZN7S6852C12v1Ev
  virtual void  v2(); // _ZN7S6852C12v2Ev
  virtual void  v3(); // _ZN7S6852C12v3Ev
  S6852C1(); // tgen
};
//SIG(1 S6852C1) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 Fp Fi FC4{ m Fi[3]} FC4 Fi Fp[3] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[7] Fp}


 S6852C1 ::~S6852C1(){ note_dtor("S6852C1", this);}
void  S6852C1 ::v1(){vfunc_called(this, "_ZN7S6852C12v1Ev");}
void  S6852C1 ::v2(){vfunc_called(this, "_ZN7S6852C12v2Ev");}
void  S6852C1 ::v3(){vfunc_called(this, "_ZN7S6852C12v3Ev");}
S6852C1 ::S6852C1(){ note_ctor("S6852C1", this);} // tgen

static void Test_S6852C1()
{
  extern Class_Descriptor cd_S6852C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,37)];
    init_test(&cd_S6852C1, buf);
    S6852C1 *dp, &lv = *(dp=new (buf) S6852C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,144), "sizeof(S6852C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6852C1)");
    check_base_class_offset(lv, (S6852C2*), 0, "S6852C1");
    check_field_offset(lv, s6852c1f0, ABISELECT(96,60), "S6852C1.s6852c1f0");
    check_field_offset(lv, s6852c1f1, ABISELECT(104,64), "S6852C1.s6852c1f1");
    check_field_offset(lv, s6852c1f2, ABISELECT(108,68), "S6852C1.s6852c1f2");
    check_field_offset(lv, s6852c1f3, ABISELECT(120,80), "S6852C1.s6852c1f3");
    check_field_offset(lv, s6852c1f4, ABISELECT(132,92), "S6852C1.s6852c1f4");
    check_field_offset(lv, s6852c1f5, ABISELECT(136,96), "S6852C1.s6852c1f5");
    set_bf_and_test(lv, s6852c1f6, ABISELECT(160,108), 0, 1, 1, "S6852C1");
    set_bf_and_test(lv, s6852c1f7, ABISELECT(160,108), 1, 1, 1, "S6852C1");
    set_bf_and_test(lv, s6852c1f8, ABISELECT(160,108), 2, 1, 1, "S6852C1");
    set_bf_and_test(lv, s6852c1f9, ABISELECT(160,108), 3, 1, 1, "S6852C1");
    set_bf_and_test(lv, s6852c1f10, ABISELECT(160,108), 4, 1, 1, "S6852C1");
    set_bf_and_test(lv, s6852c1f11, ABISELECT(160,108), 5, 1, 1, "S6852C1");
    set_bf_and_test(lv, s6852c1f12, ABISELECT(160,108), 6, 1, 1, "S6852C1");
    set_bf_and_test(lv, s6852c1f13, ABISELECT(160,108), 7, 1, 1, "S6852C1");
    set_bf_and_test(lv, s6852c1f14, ABISELECT(161,109), 0, 1, 1, "S6852C1");
    check_field_offset(lv, s6852c1f15, ABISELECT(164,112), "S6852C1.s6852c1f15");
    check_field_offset(lv, s6852c1f16, ABISELECT(192,140), "S6852C1.s6852c1f16");
    test_class_info(&lv, &cd_S6852C1);
    dp->~S6852C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6852C1(Test_S6852C1, "S6852C1", ABISELECT(200,144));

#else // __cplusplus

extern void _ZN7S6852C1C1Ev();
extern void _ZN7S6852C1D1Ev();
Name_Map name_map_S6852C1[] = {
  NSPAIR(_ZN7S6852C1C1Ev),
  NSPAIR(_ZN7S6852C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6852C2;
extern VTBL_ENTRY _ZTI7S6852C2[];
extern  VTBL_ENTRY _ZTV7S6852C2[];
static Base_Class bases_S6852C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6852C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S6852C1[];
extern void _ZN7S6852C1D1Ev();
extern void _ZN7S6852C1D0Ev();
extern void _ZN7S6852C22v4Ev();
extern void _ZN7S6852C22v5Ev();
extern void _ZN7S6852C22v6Ev();
extern void _ZN7S6852C22v7Ev();
extern void _ZN7S6852C22v8Ev();
extern void _ZN7S6852C22v9Ev();
extern void _ZN7S6852C23v10Ev();
extern void _ZN7S6852C23v11Ev();
extern void _ZN7S6852C23v12Ev();
extern void _ZN7S6852C23v13Ev();
extern void _ZN7S6852C23v14Ev();
extern void _ZN7S6852C23v15Ev();
extern void _ZN7S6852C23v16Ev();
extern void _ZN7S6852C23v17Ev();
extern void _ZN7S6852C23v18Ev();
extern void _ZN7S6852C23v19Ev();
extern void _ZN7S6852C23v20Ev();
extern void _ZN7S6852C23v21Ev();
extern void _ZN7S6852C23v22Ev();
extern void _ZN7S6852C23v23Ev();
extern void _ZN7S6852C23v24Ev();
extern void _ZN7S6852C23v25Ev();
extern void _ZN7S6852C23v26Ev();
extern void _ZN7S6852C23v27Ev();
extern void _ZN7S6852C23v28Ev();
extern void _ZN7S6852C23v29Ev();
extern void _ZN7S6852C23v30Ev();
extern void _ZN7S6852C23v31Ev();
extern void _ZN7S6852C23v32Ev();
extern void _ZN7S6852C23v33Ev();
extern void _ZN7S6852C23v34Ev();
extern void _ZN7S6852C23v35Ev();
extern void _ZN7S6852C23v36Ev();
extern void _ZN7S6852C23v37Ev();
extern void _ZN7S6852C23v38Ev();
extern void _ZN7S6852C23v39Ev();
extern void _ZN7S6852C23v40Ev();
extern void _ZN7S6852C23v41Ev();
extern void _ZN7S6852C23v42Ev();
extern void _ZN7S6852C23v43Ev();
extern void _ZN7S6852C23v44Ev();
extern void _ZN7S6852C23v45Ev();
extern void _ZN7S6852C23v46Ev();
extern void _ZN7S6852C23v47Ev();
extern void _ZN7S6852C23v48Ev();
extern void _ZN7S6852C23v49Ev();
extern void _ZN7S6852C23v50Ev();
extern void _ZN7S6852C23v51Ev();
extern void _ZN7S6852C23v52Ev();
extern void _ZN7S6852C23v53Ev();
extern void _ZN7S6852C23v54Ev();
extern void _ZN7S6852C23v55Ev();
extern void _ZN7S6852C23v56Ev();
extern void _ZN7S6852C23v57Ev();
extern void _ZN7S6852C23v58Ev();
extern void _ZN7S6852C23v59Ev();
extern void _ZN7S6852C23v60Ev();
extern void _ZN7S6852C23v61Ev();
extern void _ZN7S6852C23v62Ev();
extern void _ZN7S6852C23v63Ev();
extern void _ZN7S6852C23v64Ev();
extern void _ZN7S6852C23v65Ev();
extern void _ZN7S6852C23v66Ev();
extern void _ZN7S6852C23v67Ev();
extern void _ZN7S6852C12v1Ev();
extern void _ZN7S6852C12v2Ev();
extern void _ZN7S6852C12v3Ev();
static  VTBL_ENTRY vtc_S6852C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6852C1[0]),
  (VTBL_ENTRY)&_ZN7S6852C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6852C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6852C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6852C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6852C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6852C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6852C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6852C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v31Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v32Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v33Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v64Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v65Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v66Ev,
  (VTBL_ENTRY)&_ZN7S6852C23v67Ev,
  (VTBL_ENTRY)&_ZN7S6852C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6852C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6852C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S6852C1[];
extern  VTBL_ENTRY _ZTV7S6852C1[];
Class_Descriptor cd_S6852C1 = {  "S6852C1", // class name
  bases_S6852C1, 1,
  &(vtc_S6852C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,144), // object size
  NSPAIRA(_ZTI7S6852C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6852C1),71, //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  S6419C4  {
  void *s6419c4f0;
  void *s6419c4f1;
  long double s6419c4f2[10];
  void *s6419c4f3;
  short s6419c4f4;
  void *s6419c4f5;
  void *s6419c4f6;
  virtual void  v4(); // _ZN7S6419C42v4Ev
  ~S6419C4(); // tgen
  S6419C4(); // tgen
};
//SIG(-1 S6419C4) C1{ v1 Fp[2] FD[10] Fp Fs Fp[2]}


void  S6419C4 ::v4(){vfunc_called(this, "_ZN7S6419C42v4Ev");}
S6419C4 ::~S6419C4(){ note_dtor("S6419C4", this);} // tgen
S6419C4 ::S6419C4(){ note_ctor("S6419C4", this);} // tgen

static void Test_S6419C4()
{
  extern Class_Descriptor cd_S6419C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,38)];
    init_test(&cd_S6419C4, buf);
    S6419C4 *dp, &lv = *(dp=new (buf) S6419C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,148), "sizeof(S6419C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6419C4)");
    check_field_offset(lv, s6419c4f0, ABISELECT(8,4), "S6419C4.s6419c4f0");
    check_field_offset(lv, s6419c4f1, ABISELECT(16,8), "S6419C4.s6419c4f1");
    check_field_offset(lv, s6419c4f2, ABISELECT(32,12), "S6419C4.s6419c4f2");
    check_field_offset(lv, s6419c4f3, ABISELECT(192,132), "S6419C4.s6419c4f3");
    check_field_offset(lv, s6419c4f4, ABISELECT(200,136), "S6419C4.s6419c4f4");
    check_field_offset(lv, s6419c4f5, ABISELECT(208,140), "S6419C4.s6419c4f5");
    check_field_offset(lv, s6419c4f6, ABISELECT(216,144), "S6419C4.s6419c4f6");
    test_class_info(&lv, &cd_S6419C4);
    dp->~S6419C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6419C4(Test_S6419C4, "S6419C4", ABISELECT(224,148));

#else // __cplusplus

extern void _ZN7S6419C4C1Ev();
extern void _ZN7S6419C4D1Ev();
Name_Map name_map_S6419C4[] = {
  NSPAIR(_ZN7S6419C4C1Ev),
  NSPAIR(_ZN7S6419C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6419C4[];
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY vtc_S6419C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6419C4[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
Class_Descriptor cd_S6419C4 = {  "S6419C4", // class name
  0,0,//no base classes
  &(vtc_S6419C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,148), // object size
  NSPAIRA(_ZTI7S6419C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6419C4),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  S6419C2  {
  int s6419c2f0;
  ::S19252C8_nt s6419c2f1;
  short s6419c2f2:16;
  ::S6419C4 s6419c2f3;
  ::S19252C5_nt s6419c2f4;
  virtual  ~S6419C2(); // _ZN7S6419C2D1Ev
  virtual void  v1(); // _ZN7S6419C22v1Ev
  virtual void  v2(); // _ZN7S6419C22v2Ev
  S6419C2(); // tgen
};
//SIG(-1 S6419C2) C1{ vd v1 v2 Fi FU2{ m Fp} Fs:16 FC3{ v3 Fp Fp FD[10] Fp Fs Fp Fp} FC4{}}


 S6419C2 ::~S6419C2(){ note_dtor("S6419C2", this);}
void  S6419C2 ::v1(){vfunc_called(this, "_ZN7S6419C22v1Ev");}
void  S6419C2 ::v2(){vfunc_called(this, "_ZN7S6419C22v2Ev");}
S6419C2 ::S6419C2(){ note_ctor("S6419C2", this);} // tgen

static void Test_S6419C2()
{
  extern Class_Descriptor cd_S6419C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,43)];
    init_test(&cd_S6419C2, buf);
    S6419C2 *dp, &lv = *(dp=new (buf) S6419C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,168), "sizeof(S6419C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6419C2)");
    check_field_offset(lv, s6419c2f0, ABISELECT(8,4), "S6419C2.s6419c2f0");
    check_field_offset(lv, s6419c2f1, ABISELECT(16,8), "S6419C2.s6419c2f1");
    set_bf_and_test(lv, s6419c2f2, ABISELECT(24,12), 0, 16, 1, "S6419C2");
    set_bf_and_test(lv, s6419c2f2, ABISELECT(24,12), 0, 16, hide_sll(1LL<<15), "S6419C2");
    check_field_offset(lv, s6419c2f3, ABISELECT(32,16), "S6419C2.s6419c2f3");
    check_field_offset(lv, s6419c2f4, ABISELECT(256,164), "S6419C2.s6419c2f4");
    test_class_info(&lv, &cd_S6419C2);
    dp->~S6419C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6419C2(Test_S6419C2, "S6419C2", ABISELECT(272,168));

#else // __cplusplus

extern void _ZN7S6419C2C1Ev();
extern void _ZN7S6419C2D1Ev();
Name_Map name_map_S6419C2[] = {
  NSPAIR(_ZN7S6419C2C1Ev),
  NSPAIR(_ZN7S6419C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6419C2[];
extern void _ZN7S6419C2D1Ev();
extern void _ZN7S6419C2D0Ev();
extern void _ZN7S6419C22v1Ev();
extern void _ZN7S6419C22v2Ev();
static  VTBL_ENTRY vtc_S6419C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6419C2[0]),
  (VTBL_ENTRY)&_ZN7S6419C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6419C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6419C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6419C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6419C2[];
extern  VTBL_ENTRY _ZTV7S6419C2[];
Class_Descriptor cd_S6419C2 = {  "S6419C2", // class name
  0,0,//no base classes
  &(vtc_S6419C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,168), // object size
  NSPAIRA(_ZTI7S6419C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6419C2),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  S6419C7  {
  void *s6419c7f0;
  short s6419c7f1;
  long double s6419c7f2;
  virtual void  v3(); // _ZN7S6419C72v3Ev
  ~S6419C7(); // tgen
  S6419C7(); // tgen
};
//SIG(-1 S6419C7) C1{ v1 Fp Fs FD}


void  S6419C7 ::v3(){vfunc_called(this, "_ZN7S6419C72v3Ev");}
S6419C7 ::~S6419C7(){ note_dtor("S6419C7", this);} // tgen
S6419C7 ::S6419C7(){ note_ctor("S6419C7", this);} // tgen

static void Test_S6419C7()
{
  extern Class_Descriptor cd_S6419C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S6419C7, buf);
    S6419C7 *dp, &lv = *(dp=new (buf) S6419C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S6419C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6419C7)");
    check_field_offset(lv, s6419c7f0, ABISELECT(8,4), "S6419C7.s6419c7f0");
    check_field_offset(lv, s6419c7f1, ABISELECT(16,8), "S6419C7.s6419c7f1");
    check_field_offset(lv, s6419c7f2, ABISELECT(32,12), "S6419C7.s6419c7f2");
    test_class_info(&lv, &cd_S6419C7);
    dp->~S6419C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6419C7(Test_S6419C7, "S6419C7", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S6419C7C1Ev();
extern void _ZN7S6419C7D1Ev();
Name_Map name_map_S6419C7[] = {
  NSPAIR(_ZN7S6419C7C1Ev),
  NSPAIR(_ZN7S6419C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6419C7[];
extern void _ZN7S6419C72v3Ev();
static  VTBL_ENTRY vtc_S6419C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6419C7[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
};
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
Class_Descriptor cd_S6419C7 = {  "S6419C7", // class name
  0,0,//no base classes
  &(vtc_S6419C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S6419C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6419C7),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  S6419C9  {
  int s6419c9f0;
  int s6419c9f1;
  short s6419c9f2;
  ::S6419C2 s6419c9f3;
  void  mf6419c9(); // _ZN7S6419C98mf6419c9Ev
};
//SIG(-1 S6419C9) C1{ m Fi[2] Fs FC2{ vd v1 v2 Fi FU3{ m Fp} Fs:16 FC4{ v3 Fp Fp FD[10] Fp Fs Fp Fp} FC5{}}}


void  S6419C9 ::mf6419c9(){}

static void Test_S6419C9()
{
  {
    init_simple_test("S6419C9");
    static S6419C9 lv;
    check2(sizeof(lv), ABISELECT(288,180), "sizeof(S6419C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6419C9)");
    check_field_offset(lv, s6419c9f0, 0, "S6419C9.s6419c9f0");
    check_field_offset(lv, s6419c9f1, 4, "S6419C9.s6419c9f1");
    check_field_offset(lv, s6419c9f2, 8, "S6419C9.s6419c9f2");
    check_field_offset(lv, s6419c9f3, ABISELECT(16,12), "S6419C9.s6419c9f3");
  }
}
static Arrange_To_Call_Me vS6419C9(Test_S6419C9, "S6419C9", ABISELECT(288,180));

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S6419C9[];
VTBL_ENTRY *P__ZTI7S6419C9 = _ZTI7S6419C9; 
Class_Descriptor cd_S6419C9 = {  "S6419C9", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(288,180), // object size
  NSPAIRA(_ZTI7S6419C9),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  S6419C6  : S6419C7 , virtual S19252C4 , virtual S6419C9 , S6419C4 {
  int s6419c6f0;
  int s6419c6f1[9];
  long double s6419c6f2;
  ::S19252C8_nt s6419c6f3;
  void *s6419c6f4;
  virtual void  v5(); // _ZN7S6419C62v5Ev
  ~S6419C6(); // tgen
  S6419C6(); // tgen
};
//SIG(-1 S6419C6) C1{ BC2{ v2 Fp Fs FD} VBC3{ m Fi Fc Fp FC4{}} VBC5{ m Fi[2] Fs FC6{ vd v4 v5 Fi FU7{ m Fp} Fs:16 FC8{ v3 Fp Fp FD[10] Fp Fs Fp Fp} FC4}} BC8 v1 Fi Fi[9] FD FU7 Fp}


void  S6419C6 ::v5(){vfunc_called(this, "_ZN7S6419C62v5Ev");}
S6419C6 ::~S6419C6(){ note_dtor("S6419C6", this);} // tgen
S6419C6 ::S6419C6(){ note_ctor("S6419C6", this);} // tgen

static void Test_S6419C6()
{
  extern Class_Descriptor cd_S6419C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(43,108)];
    init_test(&cd_S6419C6, buf);
    S6419C6 *dp, &lv = *(dp=new (buf) S6419C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(672,428), "sizeof(S6419C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6419C6)");
    check_base_class_offset(lv, (S6419C7*), 0, "S6419C6");
    check_base_class_offset(lv, (S19252C4*), ABISELECT(352,232), "S6419C6");
    check_base_class_offset(lv, (S6419C9*), ABISELECT(384,248), "S6419C6");
    check_base_class_offset(lv, (S6419C4*), ABISELECT(48,24), "S6419C6");
    check_field_offset(lv, s6419c6f0, ABISELECT(272,172), "S6419C6.s6419c6f0");
    check_field_offset(lv, s6419c6f1, ABISELECT(276,176), "S6419C6.s6419c6f1");
    check_field_offset(lv, s6419c6f2, ABISELECT(320,212), "S6419C6.s6419c6f2");
    check_field_offset(lv, s6419c6f3, ABISELECT(336,224), "S6419C6.s6419c6f3");
    check_field_offset(lv, s6419c6f4, ABISELECT(344,228), "S6419C6.s6419c6f4");
    test_class_info(&lv, &cd_S6419C6);
    dp->~S6419C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6419C6(Test_S6419C6, "S6419C6", ABISELECT(672,428));

#else // __cplusplus

extern void _ZN7S6419C6C1Ev();
extern void _ZN7S6419C6D1Ev();
Name_Map name_map_S6419C6[] = {
  NSPAIR(_ZN7S6419C6C1Ev),
  NSPAIR(_ZN7S6419C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S19252C4;
extern VTBL_ENTRY _ZTI8S19252C4[];
extern Class_Descriptor cd_S6419C9;
extern VTBL_ENTRY _ZTI7S6419C9[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
static Base_Class bases_S6419C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6419C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19252C4,    ABISELECT(352,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6419C9,    ABISELECT(384,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S6419C4,    ABISELECT(48,24), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S6419C6[];
extern void _ZN7S6419C72v3Ev();
extern void _ZN7S6419C62v5Ev();
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY vtc_S6419C6[] = {
  ABISELECT(384,248),
  ABISELECT(352,232),
  0,
  (VTBL_ENTRY)&(_ZTI7S6419C6[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6419C62v5Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S6419C6[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S6419C6[];
static  VTT_ENTRY vtt_S6419C6[] = {
  {&(_ZTV7S6419C6[4]),  4,9},
};
extern VTBL_ENTRY _ZTI7S6419C6[];
extern  VTBL_ENTRY _ZTV7S6419C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6419C6[];
Class_Descriptor cd_S6419C6 = {  "S6419C6", // class name
  bases_S6419C6, 4,
  &(vtc_S6419C6[0]), // expected_vtbl_contents
  &(vtt_S6419C6[0]), // expected_vtt_contents
  ABISELECT(672,428), // object size
  NSPAIRA(_ZTI7S6419C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6419C6),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6419C6),1, //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  S6419C12  : S6419C7 , S6419C4 {
  int s6419c12f0;
  ::S6419C7 s6419c12f1;
  void *s6419c12f2;
  virtual void  v6(); // _ZN8S6419C122v6Ev
  ~S6419C12(); // tgen
  S6419C12(); // tgen
};
//SIG(-1 S6419C12) C1{ BC2{ v2 Fp Fs FD} BC3{ v3 Fp[2] FD[10] Fp Fs Fp[2]} v1 Fi FC2 Fp}


void  S6419C12 ::v6(){vfunc_called(this, "_ZN8S6419C122v6Ev");}
S6419C12 ::~S6419C12(){ note_dtor("S6419C12", this);} // tgen
S6419C12 ::S6419C12(){ note_ctor("S6419C12", this);} // tgen

static void Test_S6419C12()
{
  extern Class_Descriptor cd_S6419C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,52)];
    init_test(&cd_S6419C12, buf);
    S6419C12 *dp, &lv = *(dp=new (buf) S6419C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,204), "sizeof(S6419C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6419C12)");
    check_base_class_offset(lv, (S6419C7*), 0, "S6419C12");
    check_base_class_offset(lv, (S6419C4*), ABISELECT(48,24), "S6419C12");
    check_field_offset(lv, s6419c12f0, ABISELECT(272,172), "S6419C12.s6419c12f0");
    check_field_offset(lv, s6419c12f1, ABISELECT(288,176), "S6419C12.s6419c12f1");
    check_field_offset(lv, s6419c12f2, ABISELECT(336,200), "S6419C12.s6419c12f2");
    test_class_info(&lv, &cd_S6419C12);
    dp->~S6419C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6419C12(Test_S6419C12, "S6419C12", ABISELECT(352,204));

#else // __cplusplus

extern void _ZN8S6419C12C1Ev();
extern void _ZN8S6419C12D1Ev();
Name_Map name_map_S6419C12[] = {
  NSPAIR(_ZN8S6419C12C1Ev),
  NSPAIR(_ZN8S6419C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
static Base_Class bases_S6419C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6419C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S6419C4,    ABISELECT(48,24), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S6419C12[];
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY vtc_S6419C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6419C12[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S6419C12[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern VTBL_ENTRY _ZTI8S6419C12[];
extern  VTBL_ENTRY _ZTV8S6419C12[];
Class_Descriptor cd_S6419C12 = {  "S6419C12", // class name
  bases_S6419C12, 2,
  &(vtc_S6419C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,204), // object size
  NSPAIRA(_ZTI8S6419C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6419C12),7, //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  S6419C11  : S6419C7 , S6419C4 , S6419C12 {
  char s6419c11f0;
  int s6419c11f1;
  __tsi64 s6419c11f2;
  long s6419c11f3;
  __tsi64 s6419c11f4;
  void *s6419c11f5;
  virtual  ~S6419C11(); // _ZN8S6419C11D1Ev
  virtual void  v7(); // _ZN8S6419C112v7Ev
  virtual void  v8(); // _ZN8S6419C112v8Ev
  virtual void  v9(); // _ZN8S6419C112v9Ev
  S6419C11(); // tgen
};
//SIG(-1 S6419C11) C1{ BC2{ v4 Fp Fs FD} BC3{ v5 Fp[2] FD[10] Fp Fs Fp[2]} BC4{ BC2 BC3 v6 Fi FC2 Fp} vd v1 v2 v3 Fc Fi FL Fl FL Fp}


 S6419C11 ::~S6419C11(){ note_dtor("S6419C11", this);}
void  S6419C11 ::v7(){vfunc_called(this, "_ZN8S6419C112v7Ev");}
void  S6419C11 ::v8(){vfunc_called(this, "_ZN8S6419C112v8Ev");}
void  S6419C11 ::v9(){vfunc_called(this, "_ZN8S6419C112v9Ev");}
S6419C11 ::S6419C11(){ note_ctor("S6419C11", this);} // tgen

static void Test_S6419C11()
{
  extern Class_Descriptor cd_S6419C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(42,103)];
    init_test(&cd_S6419C11, buf);
    S6419C11 *dp, &lv = *(dp=new (buf) S6419C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(656,408), "sizeof(S6419C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6419C11)");
    /*is_ambiguous_... S6419C11::S6419C7 */ AMB_check_base_class_offset(lv, (S6419C7*), 0, "S6419C11");
    /*is_ambiguous_... S6419C11::S6419C4 */ AMB_check_base_class_offset(lv, (S6419C4*), ABISELECT(48,24), "S6419C11");
    check_base_class_offset(lv, (S6419C7*)(S6419C12*), ABISELECT(272,172), "S6419C11");
    check_base_class_offset(lv, (S6419C4*)(S6419C12*), ABISELECT(320,196), "S6419C11");
    check_base_class_offset(lv, (S6419C12*), ABISELECT(272,172), "S6419C11");
    check_field_offset(lv, s6419c11f0, ABISELECT(616,376), "S6419C11.s6419c11f0");
    check_field_offset(lv, s6419c11f1, ABISELECT(620,380), "S6419C11.s6419c11f1");
    check_field_offset(lv, s6419c11f2, ABISELECT(624,384), "S6419C11.s6419c11f2");
    check_field_offset(lv, s6419c11f3, ABISELECT(632,392), "S6419C11.s6419c11f3");
    check_field_offset(lv, s6419c11f4, ABISELECT(640,396), "S6419C11.s6419c11f4");
    check_field_offset(lv, s6419c11f5, ABISELECT(648,404), "S6419C11.s6419c11f5");
    test_class_info(&lv, &cd_S6419C11);
    dp->~S6419C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6419C11(Test_S6419C11, "S6419C11", ABISELECT(656,408));

#else // __cplusplus

extern void _ZN8S6419C11C1Ev();
extern void _ZN8S6419C11D1Ev();
Name_Map name_map_S6419C11[] = {
  NSPAIR(_ZN8S6419C11C1Ev),
  NSPAIR(_ZN8S6419C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
extern Class_Descriptor cd_S6419C12;
extern VTBL_ENTRY _ZTI8S6419C12[];
extern  VTBL_ENTRY _ZTV8S6419C12[];
static Base_Class bases_S6419C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6419C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S6419C4,    ABISELECT(48,24), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6419C7,    ABISELECT(272,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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6419C4,    ABISELECT(320,196), //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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6419C12,    ABISELECT(272,172), //bcp->offset
    11, //bcp->virtual_function_table_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 _ZTI8S6419C11[];
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C11D1Ev();
extern void _ZN8S6419C11D0Ev();
extern void _ZN8S6419C112v7Ev();
extern void _ZN8S6419C112v8Ev();
extern void _ZN8S6419C112v9Ev();
extern void _ZN7S6419C42v4Ev();
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY vtc_S6419C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6419C11[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6419C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v8Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v9Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S6419C11[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
  ABISELECT(-272,-172),
  (VTBL_ENTRY)&(_ZTI8S6419C11[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
  ABISELECT(-320,-196),
  (VTBL_ENTRY)&(_ZTI8S6419C11[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern VTBL_ENTRY _ZTI8S6419C11[];
extern  VTBL_ENTRY _ZTV8S6419C11[];
Class_Descriptor cd_S6419C11 = {  "S6419C11", // class name
  bases_S6419C11, 5,
  &(vtc_S6419C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(656,408), // object size
  NSPAIRA(_ZTI8S6419C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6419C11),18, //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  S6419C13  : virtual S6419C11 , S6419C7 {
  short s6419c13f0[4];
  int s6419c13f1;
  long double s6419c13f2;
  int s6419c13f3;
  void *s6419c13f4[5];
  __tsi64 s6419c13f5;
  virtual  ~S6419C13(); // _ZN8S6419C13D2Ev
  S6419C13(); // tgen
};
//SIG(-1 S6419C13) C1{ VBC2{ BC3{ v1 Fp Fs FD} BC4{ v2 Fp[2] FD[10] Fp Fs Fp[2]} BC5{ BC3 BC4 v3 Fi FC3 Fp} vd v4 v5 v6 Fc Fi FL Fl FL Fp} BC3 vd Fs[4] Fi FD Fi Fp[5] FL}


 S6419C13 ::~S6419C13(){ note_dtor("S6419C13", this);}
S6419C13 ::S6419C13(){ note_ctor("S6419C13", this);} // tgen

static void Test_S6419C13()
{
  extern Class_Descriptor cd_S6419C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(51,123)];
    init_test(&cd_S6419C13, buf);
    S6419C13 *dp, &lv = *(dp=new (buf) S6419C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(800,488), "sizeof(S6419C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6419C13)");
    /*is_ambiguous_... S6419C11::S6419C7 */ AMB_check_base_class_offset(lv, (S6419C7*)(S6419C11*), ABISELECT(144,80), "S6419C13");
    /*is_ambiguous_... S6419C11::S6419C4 */ AMB_check_base_class_offset(lv, (S6419C4*)(S6419C11*), ABISELECT(192,104), "S6419C13");
    check_base_class_offset(lv, (S6419C7*)(S6419C12*)(S6419C11*), ABISELECT(416,252), "S6419C13");
    check_base_class_offset(lv, (S6419C4*)(S6419C12*)(S6419C11*), ABISELECT(464,276), "S6419C13");
    check_base_class_offset(lv, (S6419C12*)(S6419C11*), ABISELECT(416,252), "S6419C13");
    check_base_class_offset(lv, (S6419C11*), ABISELECT(144,80), "S6419C13");
    /*is_ambiguous_... S6419C13::S6419C7 */ AMB_check_base_class_offset(lv, (S6419C7*), 0, "S6419C13");
    check_field_offset(lv, s6419c13f0, ABISELECT(48,24), "S6419C13.s6419c13f0");
    check_field_offset(lv, s6419c13f1, ABISELECT(56,32), "S6419C13.s6419c13f1");
    check_field_offset(lv, s6419c13f2, ABISELECT(64,36), "S6419C13.s6419c13f2");
    check_field_offset(lv, s6419c13f3, ABISELECT(80,48), "S6419C13.s6419c13f3");
    check_field_offset(lv, s6419c13f4, ABISELECT(88,52), "S6419C13.s6419c13f4");
    check_field_offset(lv, s6419c13f5, ABISELECT(128,72), "S6419C13.s6419c13f5");
    test_class_info(&lv, &cd_S6419C13);
    dp->~S6419C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6419C13(Test_S6419C13, "S6419C13", ABISELECT(800,488));

#else // __cplusplus

extern void _ZN8S6419C13C1Ev();
extern void _ZN8S6419C13D2Ev();
Name_Map name_map_S6419C13[] = {
  NSPAIR(_ZN8S6419C13C1Ev),
  NSPAIR(_ZN8S6419C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
extern Class_Descriptor cd_S6419C12;
extern VTBL_ENTRY _ZTI8S6419C12[];
extern  VTBL_ENTRY _ZTV8S6419C12[];
extern Class_Descriptor cd_S6419C11;
extern VTBL_ENTRY _ZTI8S6419C11[];
extern  VTBL_ENTRY _ZTV8S6419C11[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
static Base_Class bases_S6419C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6419C7,    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
    5, //immediately_derived
  0, 0},
  {&cd_S6419C4,    ABISELECT(192,104), //bcp->offset
    21, //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6419C7,    ABISELECT(416,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6419C4,    ABISELECT(464,276), //bcp->offset
    28, //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_S6419C12,    ABISELECT(416,252), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6419C11,    ABISELECT(144,80), //bcp->offset
    6, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6419C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S6419C13[];
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C13D1Ev();
extern void _ZN8S6419C13D0Ev();
extern void _ZN7S6419C72v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S6419C13D1Ev,_ZTv0_n16_N8S6419C13D1Ev)();
extern void ABISELECT(_ZThn144_N8S6419C13D1Ev,_ZThn80_N8S6419C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6419C13D0Ev,_ZTv0_n16_N8S6419C13D0Ev)();
extern void ABISELECT(_ZThn144_N8S6419C13D0Ev,_ZThn80_N8S6419C13D0Ev)() __attribute__((weak));
extern void _ZN8S6419C112v7Ev();
extern void _ZN8S6419C112v8Ev();
extern void _ZN8S6419C112v9Ev();
extern void _ZN7S6419C42v4Ev();
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY vtc_S6419C13[] = {
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6419C13D0Ev,
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-144,-80),
  0,
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C13D1Ev,_ZTv0_n16_N8S6419C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C13D0Ev,_ZTv0_n16_N8S6419C13D0Ev),
  (VTBL_ENTRY)&_ZN8S6419C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v8Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v9Ev,
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
  ABISELECT(-416,-252),
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
  ABISELECT(-464,-276),
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S6419C13[];
static  VTT_ENTRY vtt_S6419C13[] = {
  {&(_ZTV8S6419C13[3]),  3,31},
  {&(_ZTV8S6419C13[15]),  15,31},
  {&(_ZTV8S6419C13[23]),  23,31},
  {&(_ZTV8S6419C13[26]),  26,31},
  {&(_ZTV8S6419C13[30]),  30,31},
};
extern VTBL_ENTRY _ZTI8S6419C13[];
extern  VTBL_ENTRY _ZTV8S6419C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6419C13[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6419C13D0Ev,_ZTv0_n16_N8S6419C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S6419C13D0Ev,_ZThn80_N8S6419C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6419C13D1Ev,_ZTv0_n16_N8S6419C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S6419C13D1Ev,_ZThn80_N8S6419C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6419C13 = {  "S6419C13", // class name
  bases_S6419C13, 7,
  &(vtc_S6419C13[0]), // expected_vtbl_contents
  &(vtt_S6419C13[0]), // expected_vtt_contents
  ABISELECT(800,488), // object size
  NSPAIRA(_ZTI8S6419C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6419C13),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6419C13),5, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6419C10  : virtual S6419C11 , virtual S6419C13 , S6419C12 {
  ::S19252C16 s6419c10f0;
  ~S6419C10(); // tgen
  S6419C10(); // tgen
};
//SIG(-1 S6419C10) C1{ VBC2{ BC3{ v1 Fp Fs FD} BC4{ v2 Fp[2] FD[10] Fp Fs Fp[2]} BC5{ BC3 BC4 v3 Fi FC3 Fp} vd v4 v5 v6 Fc Fi FL Fl FL Fp} VBC6{ VBC2 BC3 vd Fs[4] Fi FD Fi Fp[5] FL} BC5 FC7{ VBC8{ v7 Fp Fs FD} Fp FC9{ v8 Fp[2] FD[10] Fp Fs Fp[2]} Fp[2]}}


S6419C10 ::~S6419C10(){ note_dtor("S6419C10", this);} // tgen
S6419C10 ::S6419C10(){ note_ctor("S6419C10", this);} // tgen

static void Test_S6419C10()
{
  extern Class_Descriptor cd_S6419C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(92,221)];
    init_test(&cd_S6419C10, buf);
    S6419C10 *dp, &lv = *(dp=new (buf) S6419C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1456,880), "sizeof(S6419C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6419C10)");
    /*is_ambiguous_... S6419C11::S6419C7 */ AMB_check_base_class_offset(lv, (S6419C7*)(S6419C11*), ABISELECT(656,392), "S6419C10");
    /*is_ambiguous_... S6419C11::S6419C4 */ AMB_check_base_class_offset(lv, (S6419C4*)(S6419C11*), ABISELECT(704,416), "S6419C10");
    check_base_class_offset(lv, (S6419C7*)(S6419C12*)(S6419C11*), ABISELECT(928,564), "S6419C10");
    check_base_class_offset(lv, (S6419C4*)(S6419C12*)(S6419C11*), ABISELECT(976,588), "S6419C10");
    check_base_class_offset(lv, (S6419C12*)(S6419C11*), ABISELECT(928,564), "S6419C10");
    check_base_class_offset(lv, (S6419C11*), ABISELECT(656,392), "S6419C10");
    check_base_class_offset(lv, (S6419C11*)(S6419C13*), ABISELECT(656,392), "S6419C10");
    /*is_ambiguous_... S6419C13::S6419C7 */ AMB_check_base_class_offset(lv, (S6419C7*)(S6419C13*), ABISELECT(1312,800), "S6419C10");
    check_base_class_offset(lv, (S6419C13*), ABISELECT(1312,800), "S6419C10");
    /*is_ambiguous_... S6419C10::S6419C12 */ AMB_check_base_class_offset(lv, (S6419C7*)(S6419C12*), 0, "S6419C10");
    /*is_ambiguous_... S6419C10::S6419C12 */ AMB_check_base_class_offset(lv, (S6419C4*)(S6419C12*), ABISELECT(48,24), "S6419C10");
    /*is_ambiguous_... S6419C10::S6419C12 */ AMB_check_base_class_offset(lv, (S6419C12*), 0, "S6419C10");
    check_field_offset(lv, s6419c10f0, ABISELECT(352,204), "S6419C10.s6419c10f0");
    test_class_info(&lv, &cd_S6419C10);
    dp->~S6419C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6419C10(Test_S6419C10, "S6419C10", ABISELECT(1456,880));

#else // __cplusplus

extern void _ZN8S6419C10C1Ev();
extern void _ZN8S6419C10D1Ev();
Name_Map name_map_S6419C10[] = {
  NSPAIR(_ZN8S6419C10C1Ev),
  NSPAIR(_ZN8S6419C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
extern Class_Descriptor cd_S6419C12;
extern VTBL_ENTRY _ZTI8S6419C12[];
extern  VTBL_ENTRY _ZTV8S6419C12[];
extern Class_Descriptor cd_S6419C11;
extern VTBL_ENTRY _ZTI8S6419C11[];
extern  VTBL_ENTRY _ZTV8S6419C11[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C13;
extern VTBL_ENTRY _ZTI8S6419C13[];
extern  VTBL_ENTRY _ZTV8S6419C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6419C13[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
extern Class_Descriptor cd_S6419C12;
extern VTBL_ENTRY _ZTI8S6419C12[];
extern  VTBL_ENTRY _ZTV8S6419C12[];
static Base_Class bases_S6419C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6419C7,    ABISELECT(656,392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6419C4,    ABISELECT(704,416), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6419C7,    ABISELECT(928,564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6419C4,    ABISELECT(976,588), //bcp->offset
    33, //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_S6419C12,    ABISELECT(928,564), //bcp->offset
    29, //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
    5, //immediately_derived
  0, 0},
  {&cd_S6419C11,    ABISELECT(656,392), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6419C7,    ABISELECT(1312,800), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S6419C13,    ABISELECT(1312,800), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6419C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S6419C4,    ABISELECT(48,24), //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
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6419C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S6419C10[];
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
extern void _ZN8S6419C10D1Ev();
extern void _ZN8S6419C10D0Ev();
extern void _ZN7S6419C42v4Ev();
extern void _ZN7S6419C72v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S6419C10D1Ev,_ZTv0_n16_N8S6419C10D1Ev)();
extern void ABISELECT(_ZThn656_N8S6419C10D1Ev,_ZThn392_N8S6419C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6419C10D0Ev,_ZTv0_n16_N8S6419C10D0Ev)();
extern void ABISELECT(_ZThn656_N8S6419C10D0Ev,_ZThn392_N8S6419C10D0Ev)() __attribute__((weak));
extern void _ZN8S6419C112v7Ev();
extern void _ZN8S6419C112v8Ev();
extern void _ZN8S6419C112v9Ev();
extern void _ZN7S6419C42v4Ev();
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
extern void _ZN7S6419C42v4Ev();
extern void _ZN7S6419C72v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S6419C10D1Ev,_ZTv0_n20_N8S6419C10D1Ev)();
extern void ABISELECT(_ZThn1312_N8S6419C10D1Ev,_ZThn800_N8S6419C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6419C10D0Ev,_ZTv0_n20_N8S6419C10D0Ev)();
extern void ABISELECT(_ZThn1312_N8S6419C10D0Ev,_ZThn800_N8S6419C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6419C10[] = {
  ABISELECT(1312,800),
  ABISELECT(656,392),
  0,
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
  (VTBL_ENTRY)&_ZN8S6419C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6419C10D0Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-656,-392),
  0,
  ABISELECT(-656,-392),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C10D1Ev,_ZTv0_n16_N8S6419C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C10D0Ev,_ZTv0_n16_N8S6419C10D0Ev),
  (VTBL_ENTRY)&_ZN8S6419C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v8Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v9Ev,
  ABISELECT(-704,-416),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
  ABISELECT(-928,-564),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
  ABISELECT(-976,-588),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
  ABISELECT(-1312,-800),
  0,
  ABISELECT(-656,-408),
  ABISELECT(-1312,-800),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6419C10D1Ev,_ZTv0_n20_N8S6419C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6419C10D0Ev,_ZTv0_n20_N8S6419C10D0Ev),
};
extern VTBL_ENTRY _ZTV8S6419C10[];
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C13D1Ev();
extern void _ZN8S6419C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C13__8S6419C10[] = {
  ABISELECT(-656,-408),
  0,
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6419C13D0Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S6419C13D1Ev,_ZTv0_n16_N8S6419C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S6419C13D0Ev,_ZTv0_n16_N8S6419C13D0Ev)();
extern void _ZN8S6419C112v7Ev();
extern void _ZN8S6419C112v8Ev();
extern void _ZN8S6419C112v9Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C11__8S6419C13__8S6419C10[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(656,408),
  0,
  ABISELECT(656,408),
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C13D1Ev,_ZTv0_n16_N8S6419C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C13D0Ev,_ZTv0_n16_N8S6419C13D0Ev),
  (VTBL_ENTRY)&_ZN8S6419C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v8Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v9Ev,
};
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C48S6419C11__8S6419C13__8S6419C10[] = {
  ABISELECT(608,384),
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C128S6419C11__8S6419C13__8S6419C10[] = {
  ABISELECT(384,236),
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
};
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C48S6419C128S6419C11__A1__8S6419C13__8S6419C10[] = {
  ABISELECT(336,212),
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
static  VTT_ENTRY vtt_S6419C10[] = {
  {&(_ZTV8S6419C10[4]),  4,44},
  {&(_ZTV8S6419C10[20]),  20,44},
  {&(_ZTV8S6419C10[28]),  28,44},
  {&(_ZTV8S6419C10[31]),  31,44},
  {&(_ZTV8S6419C10[35]),  35,44},
  {&(_ZTV8S6419C10[41]),  41,44},
  {&(_tg__ZTV8S6419C13__8S6419C10[3]),  3,6},
  {&(_tg__ZTV8S6419C11__8S6419C13__8S6419C10[9]),  9,15},
  {&(_tg__ZTV7S6419C48S6419C11__8S6419C13__8S6419C10[2]),  2,3},
  {&(_tg__ZTV8S6419C128S6419C11__8S6419C13__8S6419C10[2]),  2,4},
  {&(_tg__ZTV7S6419C48S6419C128S6419C11__A1__8S6419C13__8S6419C10[2]),  2,3},
};
extern VTBL_ENTRY _ZTI8S6419C10[];
extern  VTBL_ENTRY _ZTV8S6419C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6419C10[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6419C10D0Ev,_ZTv0_n20_N8S6419C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S6419C10D0Ev,_ZThn800_N8S6419C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6419C10D1Ev,_ZTv0_n20_N8S6419C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S6419C10D1Ev,_ZThn800_N8S6419C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6419C10D0Ev,_ZTv0_n16_N8S6419C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S6419C10D0Ev,_ZThn392_N8S6419C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6419C10D1Ev,_ZTv0_n16_N8S6419C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S6419C10D1Ev,_ZThn392_N8S6419C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6419C10 = {  "S6419C10", // class name
  bases_S6419C10, 11,
  &(vtc_S6419C10[0]), // expected_vtbl_contents
  &(vtt_S6419C10[0]), // expected_vtt_contents
  ABISELECT(1456,880), // object size
  NSPAIRA(_ZTI8S6419C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6419C10),44, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6419C10),11, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6419C15  : virtual S6419C2 {
  __tsi64 s6419c15f0;
  virtual void  v10(); // _ZN8S6419C153v10Ev
  ~S6419C15(); // tgen
  S6419C15(); // tgen
};
//SIG(-1 S6419C15) C1{ VBC2{ vd v2 v3 Fi FU3{ m Fp} Fs:16 FC4{ v4 Fp Fp FD[10] Fp Fs Fp Fp} FC5{}} v1 FL}


void  S6419C15 ::v10(){vfunc_called(this, "_ZN8S6419C153v10Ev");}
S6419C15 ::~S6419C15(){ note_dtor("S6419C15", this);} // tgen
S6419C15 ::S6419C15(){ note_ctor("S6419C15", this);} // tgen

static void Test_S6419C15()
{
  extern Class_Descriptor cd_S6419C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,46)];
    init_test(&cd_S6419C15, buf);
    S6419C15 *dp, &lv = *(dp=new (buf) S6419C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,180), "sizeof(S6419C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6419C15)");
    check_base_class_offset(lv, (S6419C2*), ABISELECT(16,12), "S6419C15");
    check_field_offset(lv, s6419c15f0, ABISELECT(8,4), "S6419C15.s6419c15f0");
    test_class_info(&lv, &cd_S6419C15);
    dp->~S6419C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6419C15(Test_S6419C15, "S6419C15", ABISELECT(288,180));

#else // __cplusplus

extern void _ZN8S6419C15C1Ev();
extern void _ZN8S6419C15D1Ev();
Name_Map name_map_S6419C15[] = {
  NSPAIR(_ZN8S6419C15C1Ev),
  NSPAIR(_ZN8S6419C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6419C2;
extern VTBL_ENTRY _ZTI7S6419C2[];
extern  VTBL_ENTRY _ZTV7S6419C2[];
static Base_Class bases_S6419C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6419C2,    ABISELECT(16,12), //bcp->offset
    6, //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 _ZTI8S6419C15[];
extern void _ZN8S6419C153v10Ev();
extern void _ZN8S6419C15D1Ev();
extern void _ZN8S6419C15D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S6419C15D1Ev,_ZTv0_n12_N8S6419C15D1Ev)();
extern void ABISELECT(_ZThn16_N8S6419C15D1Ev,_ZThn12_N8S6419C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6419C15D0Ev,_ZTv0_n12_N8S6419C15D0Ev)();
extern void ABISELECT(_ZThn16_N8S6419C15D0Ev,_ZThn12_N8S6419C15D0Ev)() __attribute__((weak));
extern void _ZN7S6419C22v1Ev();
extern void _ZN7S6419C22v2Ev();
static  VTBL_ENTRY vtc_S6419C15[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6419C15[0]),
  (VTBL_ENTRY)&_ZN8S6419C153v10Ev,
  (VTBL_ENTRY)&_ZN8S6419C15D1Ev,
  (VTBL_ENTRY)&_ZN8S6419C15D0Ev,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6419C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6419C15D1Ev,_ZTv0_n12_N8S6419C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6419C15D0Ev,_ZTv0_n12_N8S6419C15D0Ev),
  (VTBL_ENTRY)&_ZN7S6419C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6419C22v2Ev,
};
extern VTBL_ENTRY _ZTV8S6419C15[];
static  VTT_ENTRY vtt_S6419C15[] = {
  {&(_ZTV8S6419C15[3]),  3,15},
  {&(_ZTV8S6419C15[11]),  11,15},
};
extern VTBL_ENTRY _ZTI8S6419C15[];
extern  VTBL_ENTRY _ZTV8S6419C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6419C15[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6419C15D0Ev,_ZTv0_n12_N8S6419C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6419C15D0Ev,_ZThn12_N8S6419C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6419C15D1Ev,_ZTv0_n12_N8S6419C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6419C15D1Ev,_ZThn12_N8S6419C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6419C15 = {  "S6419C15", // class name
  bases_S6419C15, 1,
  &(vtc_S6419C15[0]), // expected_vtbl_contents
  &(vtt_S6419C15[0]), // expected_vtt_contents
  ABISELECT(288,180), // object size
  NSPAIRA(_ZTI8S6419C15),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S6419C15),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6419C15),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6419C16  : virtual S6419C7 , virtual S6419C13 , virtual S6419C10 , virtual S6419C12 {
  void *s6419c16f0[8];
  __tsi64 s6419c16f1;
  virtual  ~S6419C16(); // _ZN8S6419C16D2Ev
  virtual void  v11(); // _ZN8S6419C163v11Ev
  S6419C16(); // tgen
};
//SIG(-1 S6419C16) C1{ VBC2{ v2 Fp Fs FD} VBC3{ VBC4{ BC2 BC5{ v3 Fp[2] FD[10] Fp Fs Fp[2]} BC6{ BC2 BC5 v4 Fi FC2 Fp} vd v5 v6 v7 Fc Fi FL Fl FL Fp} BC2 vd Fs[4] Fi FD Fi Fp[5] FL} VBC7{ VBC4 VBC3 BC6 FC8{ VBC9{ v8 Fp Fs FD} Fp FC10{ v9 Fp[2] FD[10] Fp Fs Fp[2]} Fp[2]}} VBC6 vd v1 Fp[8] FL}


 S6419C16 ::~S6419C16(){ note_dtor("S6419C16", this);}
void  S6419C16 ::v11(){vfunc_called(this, "_ZN8S6419C163v11Ev");}
S6419C16 ::S6419C16(){ note_ctor("S6419C16", this);} // tgen

static void Test_S6419C16()
{
  extern Class_Descriptor cd_S6419C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(122,289)];
    init_test(&cd_S6419C16, buf);
    S6419C16 *dp, &lv = *(dp=new (buf) S6419C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1936,1152), "sizeof(S6419C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6419C16)");
    /*is_ambiguous_... S6419C16::S6419C7 */ AMB_check_base_class_offset(lv, (S6419C7*), ABISELECT(80,44), "S6419C16");
    /*is_ambiguous_... S6419C11::S6419C7 */ AMB_check_base_class_offset(lv, (S6419C7*)(S6419C11*), ABISELECT(272,148), "S6419C16");
    /*is_ambiguous_... S6419C11::S6419C4 */ AMB_check_base_class_offset(lv, (S6419C4*)(S6419C11*), ABISELECT(320,172), "S6419C16");
    check_base_class_offset(lv, (S6419C7*)(S6419C12*)(S6419C11*), ABISELECT(544,320), "S6419C16");
    check_base_class_offset(lv, (S6419C4*)(S6419C12*)(S6419C11*), ABISELECT(592,344), "S6419C16");
    check_base_class_offset(lv, (S6419C12*)(S6419C11*), ABISELECT(544,320), "S6419C16");
    check_base_class_offset(lv, (S6419C11*)(S6419C13*), ABISELECT(272,148), "S6419C16");
    check_base_class_offset(lv, (S6419C11*)(S6419C10*), ABISELECT(272,148), "S6419C16");
    /*is_ambiguous_... S6419C13::S6419C7 */ AMB_check_base_class_offset(lv, (S6419C7*)(S6419C13*), ABISELECT(128,68), "S6419C16");
    check_base_class_offset(lv, (S6419C13*), ABISELECT(128,68), "S6419C16");
    check_base_class_offset(lv, (S6419C13*)(S6419C10*), ABISELECT(128,68), "S6419C16");
    /*is_ambiguous_... S6419C10::S6419C12 */ AMB_check_base_class_offset(lv, (S6419C7*)(S6419C12*)(S6419C10*), ABISELECT(928,556), "S6419C16");
    /*is_ambiguous_... S6419C10::S6419C12 */ AMB_check_base_class_offset(lv, (S6419C4*)(S6419C12*)(S6419C10*), ABISELECT(976,580), "S6419C16");
    /*is_ambiguous_... S6419C10::S6419C12 */ AMB_check_base_class_offset(lv, (S6419C12*)(S6419C10*), ABISELECT(928,556), "S6419C16");
    check_base_class_offset(lv, (S6419C10*), ABISELECT(928,556), "S6419C16");
    /*is_ambiguous_... S6419C16::S6419C12 */ AMB_check_base_class_offset(lv, (S6419C7*)(S6419C12*), ABISELECT(1584,948), "S6419C16");
    /*is_ambiguous_... S6419C16::S6419C12 */ AMB_check_base_class_offset(lv, (S6419C4*)(S6419C12*), ABISELECT(1632,972), "S6419C16");
    /*is_ambiguous_... S6419C16::S6419C12 */ AMB_check_base_class_offset(lv, (S6419C12*), ABISELECT(1584,948), "S6419C16");
    check_field_offset(lv, s6419c16f0, ABISELECT(8,4), "S6419C16.s6419c16f0");
    check_field_offset(lv, s6419c16f1, ABISELECT(72,36), "S6419C16.s6419c16f1");
    test_class_info(&lv, &cd_S6419C16);
    dp->~S6419C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6419C16(Test_S6419C16, "S6419C16", ABISELECT(1936,1152));

#else // __cplusplus

extern void _ZN8S6419C16C1Ev();
extern void _ZN8S6419C16D2Ev();
Name_Map name_map_S6419C16[] = {
  NSPAIR(_ZN8S6419C16C1Ev),
  NSPAIR(_ZN8S6419C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
extern Class_Descriptor cd_S6419C12;
extern VTBL_ENTRY _ZTI8S6419C12[];
extern  VTBL_ENTRY _ZTV8S6419C12[];
extern Class_Descriptor cd_S6419C11;
extern VTBL_ENTRY _ZTI8S6419C11[];
extern  VTBL_ENTRY _ZTV8S6419C11[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C13;
extern VTBL_ENTRY _ZTI8S6419C13[];
extern  VTBL_ENTRY _ZTV8S6419C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6419C13[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
extern Class_Descriptor cd_S6419C12;
extern VTBL_ENTRY _ZTI8S6419C12[];
extern  VTBL_ENTRY _ZTV8S6419C12[];
extern Class_Descriptor cd_S6419C10;
extern VTBL_ENTRY _ZTI8S6419C10[];
extern  VTBL_ENTRY _ZTV8S6419C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6419C10[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
extern Class_Descriptor cd_S6419C12;
extern VTBL_ENTRY _ZTI8S6419C12[];
extern  VTBL_ENTRY _ZTV8S6419C12[];
static Base_Class bases_S6419C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6419C7,    ABISELECT(80,44), //bcp->offset
    10, //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_S6419C7,    ABISELECT(272,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
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6419C4,    ABISELECT(320,172), //bcp->offset
    37, //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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6419C7,    ABISELECT(544,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
    5, //immediately_derived
  0, 0},
  {&cd_S6419C4,    ABISELECT(592,344), //bcp->offset
    44, //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
    5, //immediately_derived
  0, 0},
  {&cd_S6419C12,    ABISELECT(544,320), //bcp->offset
    40, //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_S6419C11,    ABISELECT(272,148), //bcp->offset
    22, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S6419C7,    ABISELECT(128,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
    8, //immediately_derived
  0, 0},
  {&cd_S6419C13,    ABISELECT(128,68), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6419C7,    ABISELECT(928,556), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S6419C4,    ABISELECT(976,580), //bcp->offset
    59, //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
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6419C12,    ABISELECT(928,556), //bcp->offset
    -1, //bcp->virtual_function_table_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_S6419C10,    ABISELECT(928,556), //bcp->offset
    47, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6419C7,    ABISELECT(1584,948), //bcp->offset
    -1, //bcp->virtual_function_table_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_S6419C4,    ABISELECT(1632,972), //bcp->offset
    69, //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
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6419C12,    ABISELECT(1584,948), //bcp->offset
    62, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6419C16[];
extern void _ZN8S6419C16D1Ev();
extern void _ZN8S6419C16D0Ev();
extern void _ZN8S6419C163v11Ev();
extern void _ZN7S6419C72v3Ev();
extern void _ZN7S6419C72v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S6419C16D1Ev,_ZTv0_n20_N8S6419C16D1Ev)();
extern void ABISELECT(_ZThn128_N8S6419C16D1Ev,_ZThn68_N8S6419C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6419C16D0Ev,_ZTv0_n20_N8S6419C16D0Ev)();
extern void ABISELECT(_ZThn128_N8S6419C16D0Ev,_ZThn68_N8S6419C16D0Ev)() __attribute__((weak));
extern void _ZN7S6419C72v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S6419C16D1Ev,_ZTv0_n16_N8S6419C16D1Ev)();
extern void ABISELECT(_ZThn272_N8S6419C16D1Ev,_ZThn148_N8S6419C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6419C16D0Ev,_ZTv0_n16_N8S6419C16D0Ev)();
extern void ABISELECT(_ZThn272_N8S6419C16D0Ev,_ZThn148_N8S6419C16D0Ev)() __attribute__((weak));
extern void _ZN8S6419C112v7Ev();
extern void _ZN8S6419C112v8Ev();
extern void _ZN8S6419C112v9Ev();
extern void _ZN7S6419C42v4Ev();
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
extern void _ZN7S6419C42v4Ev();
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
extern void ABISELECT(_ZTv0_n64_N8S6419C16D1Ev,_ZTv0_n32_N8S6419C16D1Ev)();
extern void ABISELECT(_ZThn928_N8S6419C16D1Ev,_ZThn556_N8S6419C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6419C16D0Ev,_ZTv0_n32_N8S6419C16D0Ev)();
extern void ABISELECT(_ZThn928_N8S6419C16D0Ev,_ZThn556_N8S6419C16D0Ev)() __attribute__((weak));
extern void _ZN7S6419C42v4Ev();
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY vtc_S6419C16[] = {
  ABISELECT(1584,948),
  ABISELECT(928,556),
  ABISELECT(272,148),
  ABISELECT(128,68),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN8S6419C16D1Ev,
  (VTBL_ENTRY)&_ZN8S6419C16D0Ev,
  (VTBL_ENTRY)&_ZN8S6419C163v11Ev,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  ABISELECT(-128,-68),
  0,
  ABISELECT(144,80),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6419C16D1Ev,_ZTv0_n20_N8S6419C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6419C16D0Ev,_ZTv0_n20_N8S6419C16D0Ev),
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-272,-148),
  0,
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C16D1Ev,_ZTv0_n16_N8S6419C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C16D0Ev,_ZTv0_n16_N8S6419C16D0Ev),
  (VTBL_ENTRY)&_ZN8S6419C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v8Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v9Ev,
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
  ABISELECT(-544,-320),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
  ABISELECT(-592,-344),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
  ABISELECT(-928,-556),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(-800,-488),
  ABISELECT(-656,-408),
  ABISELECT(-928,-556),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6419C16D1Ev,_ZTv0_n32_N8S6419C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6419C16D0Ev,_ZTv0_n32_N8S6419C16D0Ev),
  ABISELECT(-976,-580),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(-1584,-948),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
  ABISELECT(-1632,-972),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S6419C16[];
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C13D1Ev();
extern void _ZN8S6419C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C13__8S6419C16[] = {
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6419C13D0Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S6419C13D1Ev,_ZTv0_n16_N8S6419C13D1Ev)();
extern void ABISELECT(_ZThn144_N8S6419C13D1Ev,_ZThn80_N8S6419C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6419C13D0Ev,_ZTv0_n16_N8S6419C13D0Ev)();
extern void ABISELECT(_ZThn144_N8S6419C13D0Ev,_ZThn80_N8S6419C13D0Ev)() __attribute__((weak));
extern void _ZN8S6419C112v7Ev();
extern void _ZN8S6419C112v8Ev();
extern void _ZN8S6419C112v9Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C11__8S6419C13__8S6419C16[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-144,-80),
  0,
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C13D1Ev,_ZTv0_n16_N8S6419C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C13D0Ev,_ZTv0_n16_N8S6419C13D0Ev),
  (VTBL_ENTRY)&_ZN8S6419C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v8Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v9Ev,
};
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C48S6419C11__8S6419C13__8S6419C16[] = {
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C128S6419C11__8S6419C13__8S6419C16[] = {
  ABISELECT(-416,-252),
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
};
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C48S6419C128S6419C11__A1__8S6419C13__8S6419C16[] = {
  ABISELECT(-464,-276),
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
extern void _ZN8S6419C10D1Ev();
extern void _ZN8S6419C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C10__8S6419C16[] = {
  ABISELECT(-800,-488),
  ABISELECT(-656,-408),
  0,
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
  (VTBL_ENTRY)&_ZN8S6419C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6419C10D0Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S6419C10D1Ev,_ZTv0_n16_N8S6419C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S6419C10D0Ev,_ZTv0_n16_N8S6419C10D0Ev)();
extern void _ZN8S6419C112v7Ev();
extern void _ZN8S6419C112v8Ev();
extern void _ZN8S6419C112v9Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C11__8S6419C10__8S6419C16[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(656,408),
  0,
  ABISELECT(656,408),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C10D1Ev,_ZTv0_n16_N8S6419C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C10D0Ev,_ZTv0_n16_N8S6419C10D0Ev),
  (VTBL_ENTRY)&_ZN8S6419C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v8Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v9Ev,
};
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C48S6419C11__8S6419C10__8S6419C16[] = {
  ABISELECT(608,384),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C128S6419C11__8S6419C10__8S6419C16[] = {
  ABISELECT(384,236),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
};
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C48S6419C128S6419C11__A1__8S6419C10__8S6419C16[] = {
  ABISELECT(336,212),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S6419C10D1Ev,_ZTv0_n20_N8S6419C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S6419C10D0Ev,_ZTv0_n20_N8S6419C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6419C13__8S6419C10__8S6419C16[] = {
  ABISELECT(800,488),
  0,
  ABISELECT(144,80),
  ABISELECT(800,488),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6419C10D1Ev,_ZTv0_n20_N8S6419C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6419C10D0Ev,_ZTv0_n20_N8S6419C10D0Ev),
};
static  VTT_ENTRY vtt_S6419C16[] = {
  {&(_ZTV8S6419C16[7]),  7,72},
  {&(_ZTV8S6419C16[13]),  13,72},
  {&(_ZTV8S6419C16[19]),  19,72},
  {&(_ZTV8S6419C16[31]),  31,72},
  {&(_ZTV8S6419C16[39]),  39,72},
  {&(_ZTV8S6419C16[42]),  42,72},
  {&(_ZTV8S6419C16[46]),  46,72},
  {&(_ZTV8S6419C16[55]),  55,72},
  {&(_ZTV8S6419C16[61]),  61,72},
  {&(_ZTV8S6419C16[67]),  67,72},
  {&(_ZTV8S6419C16[71]),  71,72},
  {&(_tg__ZTV8S6419C13__8S6419C16[3]),  3,6},
  {&(_tg__ZTV8S6419C11__8S6419C13__8S6419C16[9]),  9,15},
  {&(_tg__ZTV7S6419C48S6419C11__8S6419C13__8S6419C16[2]),  2,3},
  {&(_tg__ZTV8S6419C128S6419C11__8S6419C13__8S6419C16[2]),  2,4},
  {&(_tg__ZTV7S6419C48S6419C128S6419C11__A1__8S6419C13__8S6419C16[2]),  2,3},
  {&(_tg__ZTV8S6419C10__8S6419C16[4]),  4,8},
  {&(_tg__ZTV8S6419C11__8S6419C10__8S6419C16[9]),  9,15},
  {&(_tg__ZTV7S6419C48S6419C11__8S6419C10__8S6419C16[2]),  2,3},
  {&(_tg__ZTV8S6419C128S6419C11__8S6419C10__8S6419C16[2]),  2,4},
  {&(_tg__ZTV7S6419C48S6419C128S6419C11__A1__8S6419C10__8S6419C16[2]),  2,3},
  {&(_tg__ZTV8S6419C13__8S6419C10__8S6419C16[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S6419C16[];
extern  VTBL_ENTRY _ZTV8S6419C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6419C16[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6419C13D0Ev,_ZTv0_n16_N8S6419C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S6419C13D0Ev,_ZThn80_N8S6419C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6419C13D1Ev,_ZTv0_n16_N8S6419C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S6419C13D1Ev,_ZThn80_N8S6419C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6419C16D0Ev,_ZTv0_n32_N8S6419C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn928_N8S6419C16D0Ev,_ZThn556_N8S6419C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6419C16D1Ev,_ZTv0_n32_N8S6419C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn928_N8S6419C16D1Ev,_ZThn556_N8S6419C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6419C16D0Ev,_ZTv0_n16_N8S6419C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S6419C16D0Ev,_ZThn148_N8S6419C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6419C16D1Ev,_ZTv0_n16_N8S6419C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S6419C16D1Ev,_ZThn148_N8S6419C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6419C16D0Ev,_ZTv0_n20_N8S6419C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S6419C16D0Ev,_ZThn68_N8S6419C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6419C16D1Ev,_ZTv0_n20_N8S6419C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S6419C16D1Ev,_ZThn68_N8S6419C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6419C16 = {  "S6419C16", // class name
  bases_S6419C16, 16,
  &(vtc_S6419C16[0]), // expected_vtbl_contents
  &(vtt_S6419C16[0]), // expected_vtt_contents
  ABISELECT(1936,1152), // object size
  NSPAIRA(_ZTI8S6419C16),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6419C16),72, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6419C16),22, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6419C1  : S6419C2 , S6419C6 , S6419C10 , S6419C15 , virtual S6419C16 {
  int s6419c1f0;
  int s6419c1f1;
  char s6419c1f2;
  ::S6419C9 s6419c1f3;
  void *s6419c1f4;
  ~S6419C1(); // tgen
  S6419C1(); // tgen
};
//SIG(1 S6419C1) C1{ BC2{ vd v1 v2 Fi FU3{ m Fp} Fs:16 FC4{ v4 Fp Fp FD[10] Fp Fs Fp Fp} FC5{}} BC6{ BC7{ v3 Fp Fs FD} VBC8{ m Fi Fc Fp FC5} VBC9{ m Fi Fi Fs FC2} BC4 v5 Fi Fi[9] FD FU3 Fp} BC10{ VBC11{ BC7 BC4 BC12{ BC7 BC4 v6 Fi FC7 Fp} vd v7 v8 v9 Fc Fi FL Fl FL Fp} VBC13{ VBC11 BC7 vd Fs[4] Fi FD Fi Fp[5] FL} BC12 FC14{ VBC15{ v12 Fp Fs FD} Fp FC16{ v13 Fp Fp FD[10] Fp Fs Fp Fp} Fp Fp}} BC17{ VBC2 v10 FL} VBC18{ VBC7 VBC13 VBC10 VBC12 vd v11 Fp[8] FL} Fi Fi Fc FC9 Fp}


S6419C1 ::~S6419C1(){ note_dtor("S6419C1", this);} // tgen
S6419C1 ::S6419C1(){ note_ctor("S6419C1", this);} // tgen

static void Test_S6419C1()
{
  extern Class_Descriptor cd_S6419C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(259,630)];
    init_test(&cd_S6419C1, buf);
    S6419C1 *dp, &lv = *(dp=new (buf) S6419C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4128,2516), "sizeof(S6419C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6419C1)");
    /*is_ambiguous_... S6419C1::S6419C2 */ AMB_check_base_class_offset(lv, (S6419C2*), 0, "S6419C1");
    check_base_class_offset(lv, (S6419C7*)(S6419C6*), ABISELECT(272,168), "S6419C1");
    check_base_class_offset(lv, (S19252C4*)(S6419C6*), ABISELECT(1608,1000), "S6419C1");
    check_base_class_offset(lv, (S6419C9*)(S6419C6*), ABISELECT(1632,1016), "S6419C1");
    check_base_class_offset(lv, (S6419C4*)(S6419C6*), ABISELECT(320,192), "S6419C1");
    check_base_class_offset(lv, (S6419C6*), ABISELECT(272,168), "S6419C1");
    /*is_ambiguous_... S6419C11::S6419C7 */ AMB_check_base_class_offset(lv, (S6419C7*)(S6419C11*), ABISELECT(1920,1196), "S6419C1");
    /*is_ambiguous_... S6419C11::S6419C4 */ AMB_check_base_class_offset(lv, (S6419C4*)(S6419C11*), ABISELECT(1968,1220), "S6419C1");
    check_base_class_offset(lv, (S6419C7*)(S6419C12*)(S6419C11*), ABISELECT(2192,1368), "S6419C1");
    check_base_class_offset(lv, (S6419C4*)(S6419C12*)(S6419C11*), ABISELECT(2240,1392), "S6419C1");
    check_base_class_offset(lv, (S6419C12*)(S6419C11*), ABISELECT(2192,1368), "S6419C1");
    /*is_ambiguous_... S6419C1::S6419C10 */ AMB_check_base_class_offset(lv, (S6419C11*)(S6419C10*), ABISELECT(1920,1196), "S6419C1");
    check_base_class_offset(lv, (S6419C11*)(S6419C13*), ABISELECT(1920,1196), "S6419C1");
    /*is_ambiguous_... S6419C1::S6419C10 */ AMB_check_base_class_offset(lv, (S6419C11*)(S6419C10*), ABISELECT(1920,1196), "S6419C1");
    /*is_ambiguous_... S6419C13::S6419C7 */ AMB_check_base_class_offset(lv, (S6419C7*)(S6419C13*), ABISELECT(2576,1604), "S6419C1");
    /*is_ambiguous_... S6419C1::S6419C10 */ AMB_check_base_class_offset(lv, (S6419C13*)(S6419C10*), ABISELECT(2576,1604), "S6419C1");
    check_base_class_offset(lv, (S6419C13*)(S6419C16*), ABISELECT(2576,1604), "S6419C1");
    /*is_ambiguous_... S6419C1::S6419C10 */ AMB_check_base_class_offset(lv, (S6419C13*)(S6419C10*), ABISELECT(2576,1604), "S6419C1");
    /*is_ambiguous_... S6419C1::S6419C10 */ AMB_check_base_class_offset(lv, (S6419C7*)(S6419C12*)(S6419C10*), ABISELECT(624,400), "S6419C1");
    /*is_ambiguous_... S6419C1::S6419C10 */ AMB_check_base_class_offset(lv, (S6419C4*)(S6419C12*)(S6419C10*), ABISELECT(672,424), "S6419C1");
    /*is_ambiguous_... S6419C1::S6419C10 */ AMB_check_base_class_offset(lv, (S6419C12*)(S6419C10*), ABISELECT(624,400), "S6419C1");
    /*is_ambiguous_... S6419C1::S6419C10 */ AMB_check_base_class_offset(lv, (S6419C10*), ABISELECT(624,400), "S6419C1");
    check_base_class_offset(lv, (S6419C2*)(S6419C15*), ABISELECT(2720,1684), "S6419C1");
    check_base_class_offset(lv, (S6419C15*), ABISELECT(1280,792), "S6419C1");
    /*is_ambiguous_... S6419C16::S6419C7 */ AMB_check_base_class_offset(lv, (S6419C7*)(S6419C16*), ABISELECT(3072,1896), "S6419C1");
    /*is_ambiguous_... S6419C1::S6419C10 */ AMB_check_base_class_offset(lv, (S6419C7*)(S6419C12*)(S6419C10*), ABISELECT(3120,1920), "S6419C1");
    /*is_ambiguous_... S6419C1::S6419C10 */ AMB_check_base_class_offset(lv, (S6419C4*)(S6419C12*)(S6419C10*), ABISELECT(3168,1944), "S6419C1");
    /*is_ambiguous_... S6419C1::S6419C10 */ AMB_check_base_class_offset(lv, (S6419C12*)(S6419C10*), ABISELECT(3120,1920), "S6419C1");
    check_base_class_offset(lv, (S6419C10*)(S6419C16*), ABISELECT(3120,1920), "S6419C1");
    /*is_ambiguous_... S6419C1::S6419C12 */ AMB_check_base_class_offset(lv, (S6419C7*)(S6419C12*), ABISELECT(3776,2312), "S6419C1");
    /*is_ambiguous_... S6419C1::S6419C12 */ AMB_check_base_class_offset(lv, (S6419C4*)(S6419C12*), ABISELECT(3824,2336), "S6419C1");
    /*is_ambiguous_... S6419C16::S6419C12 */ AMB_check_base_class_offset(lv, (S6419C12*)(S6419C16*), ABISELECT(3776,2312), "S6419C1");
    check_base_class_offset(lv, (S6419C16*), ABISELECT(2984,1852), "S6419C1");
    check_field_offset(lv, s6419c1f0, ABISELECT(1296,804), "S6419C1.s6419c1f0");
    check_field_offset(lv, s6419c1f1, ABISELECT(1300,808), "S6419C1.s6419c1f1");
    check_field_offset(lv, s6419c1f2, ABISELECT(1304,812), "S6419C1.s6419c1f2");
    check_field_offset(lv, s6419c1f3, ABISELECT(1312,816), "S6419C1.s6419c1f3");
    check_field_offset(lv, s6419c1f4, ABISELECT(1600,996), "S6419C1.s6419c1f4");
    test_class_info(&lv, &cd_S6419C1);
    dp->~S6419C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6419C1(Test_S6419C1, "S6419C1", ABISELECT(4128,2516));

#else // __cplusplus

extern void _ZN7S6419C1C1Ev();
extern void _ZN7S6419C1D1Ev();
Name_Map name_map_S6419C1[] = {
  NSPAIR(_ZN7S6419C1C1Ev),
  NSPAIR(_ZN7S6419C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6419C2;
extern VTBL_ENTRY _ZTI7S6419C2[];
extern  VTBL_ENTRY _ZTV7S6419C2[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S19252C4;
extern VTBL_ENTRY _ZTI8S19252C4[];
extern Class_Descriptor cd_S6419C9;
extern VTBL_ENTRY _ZTI7S6419C9[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
extern Class_Descriptor cd_S6419C6;
extern VTBL_ENTRY _ZTI7S6419C6[];
extern  VTBL_ENTRY _ZTV7S6419C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6419C6[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
extern Class_Descriptor cd_S6419C12;
extern VTBL_ENTRY _ZTI8S6419C12[];
extern  VTBL_ENTRY _ZTV8S6419C12[];
extern Class_Descriptor cd_S6419C11;
extern VTBL_ENTRY _ZTI8S6419C11[];
extern  VTBL_ENTRY _ZTV8S6419C11[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C13;
extern VTBL_ENTRY _ZTI8S6419C13[];
extern  VTBL_ENTRY _ZTV8S6419C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6419C13[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
extern Class_Descriptor cd_S6419C12;
extern VTBL_ENTRY _ZTI8S6419C12[];
extern  VTBL_ENTRY _ZTV8S6419C12[];
extern Class_Descriptor cd_S6419C10;
extern VTBL_ENTRY _ZTI8S6419C10[];
extern  VTBL_ENTRY _ZTV8S6419C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6419C10[];
extern Class_Descriptor cd_S6419C2;
extern VTBL_ENTRY _ZTI7S6419C2[];
extern  VTBL_ENTRY _ZTV7S6419C2[];
extern Class_Descriptor cd_S6419C15;
extern VTBL_ENTRY _ZTI8S6419C15[];
extern  VTBL_ENTRY _ZTV8S6419C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6419C15[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
extern Class_Descriptor cd_S6419C12;
extern VTBL_ENTRY _ZTI8S6419C12[];
extern  VTBL_ENTRY _ZTV8S6419C12[];
extern Class_Descriptor cd_S6419C10;
extern VTBL_ENTRY _ZTI8S6419C10[];
extern  VTBL_ENTRY _ZTV8S6419C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6419C10[];
extern Class_Descriptor cd_S6419C7;
extern VTBL_ENTRY _ZTI7S6419C7[];
extern  VTBL_ENTRY _ZTV7S6419C7[];
extern Class_Descriptor cd_S6419C4;
extern VTBL_ENTRY _ZTI7S6419C4[];
extern  VTBL_ENTRY _ZTV7S6419C4[];
extern Class_Descriptor cd_S6419C12;
extern VTBL_ENTRY _ZTI8S6419C12[];
extern  VTBL_ENTRY _ZTV8S6419C12[];
extern Class_Descriptor cd_S6419C16;
extern VTBL_ENTRY _ZTI8S6419C16[];
extern  VTBL_ENTRY _ZTV8S6419C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6419C16[];
static Base_Class bases_S6419C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6419C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S6419C7,    ABISELECT(272,168), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S19252C4,    ABISELECT(1608,1000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6419C9,    ABISELECT(1632,1016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6419C4,    ABISELECT(320,192), //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
    21, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6419C6,    ABISELECT(272,168), //bcp->offset
    15, //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
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6419C7,    ABISELECT(1920,1196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6419C4,    ABISELECT(1968,1220), //bcp->offset
    56, //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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6419C7,    ABISELECT(2192,1368), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S6419C4,    ABISELECT(2240,1392), //bcp->offset
    63, //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
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6419C12,    ABISELECT(2192,1368), //bcp->offset
    59, //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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6419C11,    ABISELECT(1920,1196), //bcp->offset
    41, //bcp->virtual_function_table_offset
    9, //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
    13, //immediately_derived
  0, 1},
  {&cd_S6419C7,    ABISELECT(2576,1604), //bcp->offset
    -1, //bcp->virtual_function_table_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_S6419C13,    ABISELECT(2576,1604), //bcp->offset
    66, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S6419C7,    ABISELECT(624,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
    23, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6419C4,    ABISELECT(672,424), //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
    24, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6419C12,    ABISELECT(624,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
    25, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6419C10,    ABISELECT(624,400), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6419C2,    ABISELECT(2720,1684), //bcp->offset
    74, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S6419C15,    ABISELECT(1280,792), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6419C7,    ABISELECT(3072,1896), //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
    10, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S6419C7,    ABISELECT(3120,1920), //bcp->offset
    -1, //bcp->virtual_function_table_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
    23, //immediately_derived
  0, 0},
  {&cd_S6419C4,    ABISELECT(3168,1944), //bcp->offset
    111, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S6419C12,    ABISELECT(3120,1920), //bcp->offset
    -1, //bcp->virtual_function_table_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
    24, //immediately_derived
  0, 0},
  {&cd_S6419C10,    ABISELECT(3120,1920), //bcp->offset
    99, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S6419C7,    ABISELECT(3776,2312), //bcp->offset
    -1, //bcp->virtual_function_table_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
    27, //immediately_derived
  0, 0},
  {&cd_S6419C4,    ABISELECT(3824,2336), //bcp->offset
    121, //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
    16, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6419C12,    ABISELECT(3776,2312), //bcp->offset
    114, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S6419C16,    ABISELECT(2984,1852), //bcp->offset
    83, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6419C1[];
extern void _ZN7S6419C1D1Ev();
extern void _ZN7S6419C1D0Ev();
extern void _ZN7S6419C22v1Ev();
extern void _ZN7S6419C22v2Ev();
extern void _ZN7S6419C72v3Ev();
extern void _ZN7S6419C62v5Ev();
extern void _ZN7S6419C42v4Ev();
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
extern void ABISELECT(_ZThn624_N7S6419C1D1Ev,_ZThn400_N7S6419C1D1Ev)();
extern void ABISELECT(_ZThn624_N7S6419C1D0Ev,_ZThn400_N7S6419C1D0Ev)();
extern void _ZN7S6419C42v4Ev();
extern void _ZN8S6419C153v10Ev();
extern void ABISELECT(_ZThn1280_N7S6419C1D1Ev,_ZThn792_N7S6419C1D1Ev)();
extern void ABISELECT(_ZThn1280_N7S6419C1D0Ev,_ZThn792_N7S6419C1D0Ev)();
extern void _ZN7S6419C72v3Ev();
extern void ABISELECT(_ZTv0_n32_N7S6419C1D1Ev,_ZTv0_n16_N7S6419C1D1Ev)();
extern void ABISELECT(_ZThn1920_N7S6419C1D1Ev,_ZThn1196_N7S6419C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6419C1D0Ev,_ZTv0_n16_N7S6419C1D0Ev)();
extern void ABISELECT(_ZThn1920_N7S6419C1D0Ev,_ZThn1196_N7S6419C1D0Ev)() __attribute__((weak));
extern void _ZN8S6419C112v7Ev();
extern void _ZN8S6419C112v8Ev();
extern void _ZN8S6419C112v9Ev();
extern void _ZN7S6419C42v4Ev();
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
extern void _ZN7S6419C42v4Ev();
extern void _ZN7S6419C72v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S6419C1D1Ev,_ZTv0_n20_N7S6419C1D1Ev)();
extern void ABISELECT(_ZThn2576_N7S6419C1D1Ev,_ZThn1604_N7S6419C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6419C1D0Ev,_ZTv0_n20_N7S6419C1D0Ev)();
extern void ABISELECT(_ZThn2576_N7S6419C1D0Ev,_ZThn1604_N7S6419C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6419C1D1Ev,_ZTv0_n12_N7S6419C1D1Ev)();
extern void ABISELECT(_ZThn2720_N7S6419C1D1Ev,_ZThn1684_N7S6419C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6419C1D0Ev,_ZTv0_n12_N7S6419C1D0Ev)();
extern void ABISELECT(_ZThn2720_N7S6419C1D0Ev,_ZThn1684_N7S6419C1D0Ev)() __attribute__((weak));
extern void _ZN7S6419C22v1Ev();
extern void _ZN7S6419C22v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S6419C1D1Ev,_ZTv0_n32_N7S6419C1D1Ev)();
extern void ABISELECT(_ZThn2984_N7S6419C1D1Ev,_ZThn1852_N7S6419C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6419C1D0Ev,_ZTv0_n32_N7S6419C1D0Ev)();
extern void ABISELECT(_ZThn2984_N7S6419C1D0Ev,_ZThn1852_N7S6419C1D0Ev)() __attribute__((weak));
extern void _ZN8S6419C163v11Ev();
extern void _ZN7S6419C72v3Ev();
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S6419C1D1Ev,_ZTv0_n32_N7S6419C1D1Ev)();
extern void ABISELECT(_ZThn3120_N7S6419C1D1Ev,_ZThn1920_N7S6419C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6419C1D0Ev,_ZTv0_n32_N7S6419C1D0Ev)();
extern void ABISELECT(_ZThn3120_N7S6419C1D0Ev,_ZThn1920_N7S6419C1D0Ev)() __attribute__((weak));
extern void _ZN7S6419C42v4Ev();
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY vtc_S6419C1[] = {
  ABISELECT(3776,2312),
  ABISELECT(3120,1920),
  ABISELECT(3072,1896),
  ABISELECT(2984,1852),
  ABISELECT(2720,1684),
  ABISELECT(2576,1604),
  ABISELECT(1920,1196),
  ABISELECT(1632,1016),
  ABISELECT(1608,1000),
  0,
  (VTBL_ENTRY)&(_ZTI7S6419C1[0]),
  (VTBL_ENTRY)&_ZN7S6419C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6419C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6419C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6419C22v2Ev,
  ABISELECT(1360,848),
  ABISELECT(1336,832),
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI7S6419C1[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6419C62v5Ev,
  ABISELECT(-320,-192),
  (VTBL_ENTRY)&(_ZTI7S6419C1[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
  ABISELECT(1952,1204),
  ABISELECT(1296,796),
  ABISELECT(-624,-400),
  (VTBL_ENTRY)&(_ZTI7S6419C1[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn624_N7S6419C1D1Ev,_ZThn400_N7S6419C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn624_N7S6419C1D0Ev,_ZThn400_N7S6419C1D0Ev),
  ABISELECT(-672,-424),
  (VTBL_ENTRY)&(_ZTI7S6419C1[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
  ABISELECT(1440,892),
  ABISELECT(-1280,-792),
  (VTBL_ENTRY)&(_ZTI7S6419C1[0]),
  (VTBL_ENTRY)&_ZN8S6419C153v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N7S6419C1D1Ev,_ZThn792_N7S6419C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N7S6419C1D0Ev,_ZThn792_N7S6419C1D0Ev),
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-1920,-1196),
  0,
  ABISELECT(-1920,-1196),
  (VTBL_ENTRY)&(_ZTI7S6419C1[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6419C1D1Ev,_ZTv0_n16_N7S6419C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6419C1D0Ev,_ZTv0_n16_N7S6419C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6419C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v8Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v9Ev,
  ABISELECT(-1968,-1220),
  (VTBL_ENTRY)&(_ZTI7S6419C1[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
  ABISELECT(-2192,-1368),
  (VTBL_ENTRY)&(_ZTI7S6419C1[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
  ABISELECT(-2240,-1392),
  (VTBL_ENTRY)&(_ZTI7S6419C1[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
  ABISELECT(-2576,-1604),
  0,
  ABISELECT(-656,-408),
  ABISELECT(-2576,-1604),
  (VTBL_ENTRY)&(_ZTI7S6419C1[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6419C1D1Ev,_ZTv0_n20_N7S6419C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6419C1D0Ev,_ZTv0_n20_N7S6419C1D0Ev),
  0,
  0,
  ABISELECT(-2720,-1684),
  ABISELECT(-2720,-1684),
  (VTBL_ENTRY)&(_ZTI7S6419C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6419C1D1Ev,_ZTv0_n12_N7S6419C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6419C1D0Ev,_ZTv0_n12_N7S6419C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6419C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6419C22v2Ev,
  0,
  ABISELECT(-2984,-1852),
  ABISELECT(792,460),
  ABISELECT(136,68),
  ABISELECT(-1064,-656),
  ABISELECT(-408,-248),
  ABISELECT(88,44),
  ABISELECT(-2984,-1852),
  (VTBL_ENTRY)&(_ZTI7S6419C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6419C1D1Ev,_ZTv0_n32_N7S6419C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6419C1D0Ev,_ZTv0_n32_N7S6419C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6419C163v11Ev,
  0,
  ABISELECT(-3072,-1896),
  (VTBL_ENTRY)&(_ZTI7S6419C1[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  ABISELECT(-3120,-1920),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(-544,-316),
  ABISELECT(-1200,-724),
  ABISELECT(-3120,-1920),
  (VTBL_ENTRY)&(_ZTI7S6419C1[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6419C1D1Ev,_ZTv0_n32_N7S6419C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6419C1D0Ev,_ZTv0_n32_N7S6419C1D0Ev),
  ABISELECT(-3168,-1944),
  (VTBL_ENTRY)&(_ZTI7S6419C1[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(-3776,-2312),
  (VTBL_ENTRY)&(_ZTI7S6419C1[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
  ABISELECT(-3824,-2336),
  (VTBL_ENTRY)&(_ZTI7S6419C1[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S6419C1[];
extern void _ZN7S6419C72v3Ev();
extern void _ZN7S6419C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C6__7S6419C1[] = {
  ABISELECT(1360,848),
  ABISELECT(1336,832),
  0,
  (VTBL_ENTRY)&(_ZTI7S6419C6[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6419C62v5Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
extern void _ZN8S6419C10D1Ev();
extern void _ZN8S6419C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C10__A__7S6419C1[] = {
  ABISELECT(1952,1204),
  ABISELECT(1296,796),
  0,
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
  (VTBL_ENTRY)&_ZN8S6419C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6419C10D0Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S6419C10D1Ev,_ZTv0_n16_N8S6419C10D1Ev)();
extern void ABISELECT(_ZThn1296_N8S6419C10D1Ev,_ZThn796_N8S6419C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6419C10D0Ev,_ZTv0_n16_N8S6419C10D0Ev)();
extern void ABISELECT(_ZThn1296_N8S6419C10D0Ev,_ZThn796_N8S6419C10D0Ev)() __attribute__((weak));
extern void _ZN8S6419C112v7Ev();
extern void _ZN8S6419C112v8Ev();
extern void _ZN8S6419C112v9Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C11__8S6419C10__A__7S6419C1[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-1296,-796),
  0,
  ABISELECT(-1296,-796),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C10D1Ev,_ZTv0_n16_N8S6419C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C10D0Ev,_ZTv0_n16_N8S6419C10D0Ev),
  (VTBL_ENTRY)&_ZN8S6419C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v8Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v9Ev,
};
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C48S6419C11__8S6419C10__A__7S6419C1[] = {
  ABISELECT(-1344,-820),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C128S6419C11__8S6419C10__A__7S6419C1[] = {
  ABISELECT(-1568,-968),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
};
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C48S6419C128S6419C11__A1__8S6419C10__A__7S6419C1[] = {
  ABISELECT(-1616,-992),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S6419C10D1Ev,_ZTv0_n20_N8S6419C10D1Ev)();
extern void ABISELECT(_ZThn1952_N8S6419C10D1Ev,_ZThn1204_N8S6419C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6419C10D0Ev,_ZTv0_n20_N8S6419C10D0Ev)();
extern void ABISELECT(_ZThn1952_N8S6419C10D0Ev,_ZThn1204_N8S6419C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6419C13__8S6419C10__A__7S6419C1[] = {
  ABISELECT(-1952,-1204),
  0,
  ABISELECT(-656,-408),
  ABISELECT(-1952,-1204),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6419C10D1Ev,_ZTv0_n20_N8S6419C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6419C10D0Ev,_ZTv0_n20_N8S6419C10D0Ev),
};
extern void _ZN8S6419C153v10Ev();
extern void _ZN8S6419C15D1Ev();
extern void _ZN8S6419C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C15__7S6419C1[] = {
  ABISELECT(1440,892),
  0,
  (VTBL_ENTRY)&(_ZTI8S6419C15[0]),
  (VTBL_ENTRY)&_ZN8S6419C153v10Ev,
  (VTBL_ENTRY)&_ZN8S6419C15D1Ev,
  (VTBL_ENTRY)&_ZN8S6419C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6419C15D1Ev,_ZTv0_n12_N8S6419C15D1Ev)();
extern void ABISELECT(_ZThn1440_N8S6419C15D1Ev,_ZThn892_N8S6419C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6419C15D0Ev,_ZTv0_n12_N8S6419C15D0Ev)();
extern void ABISELECT(_ZThn1440_N8S6419C15D0Ev,_ZThn892_N8S6419C15D0Ev)() __attribute__((weak));
extern void _ZN7S6419C22v1Ev();
extern void _ZN7S6419C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C2__8S6419C15__7S6419C1[] = {
  0,
  0,
  ABISELECT(-1440,-892),
  ABISELECT(-1440,-892),
  (VTBL_ENTRY)&(_ZTI8S6419C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6419C15D1Ev,_ZTv0_n12_N8S6419C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6419C15D0Ev,_ZTv0_n12_N8S6419C15D0Ev),
  (VTBL_ENTRY)&_ZN7S6419C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6419C22v2Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C13D1Ev();
extern void _ZN8S6419C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C13__7S6419C1[] = {
  ABISELECT(-656,-408),
  0,
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6419C13D0Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S6419C13D1Ev,_ZTv0_n16_N8S6419C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S6419C13D0Ev,_ZTv0_n16_N8S6419C13D0Ev)();
extern void _ZN8S6419C112v7Ev();
extern void _ZN8S6419C112v8Ev();
extern void _ZN8S6419C112v9Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C11__8S6419C13__7S6419C1[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(656,408),
  0,
  ABISELECT(656,408),
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C13D1Ev,_ZTv0_n16_N8S6419C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C13D0Ev,_ZTv0_n16_N8S6419C13D0Ev),
  (VTBL_ENTRY)&_ZN8S6419C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v8Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v9Ev,
};
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C48S6419C11__8S6419C13__7S6419C1[] = {
  ABISELECT(608,384),
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C128S6419C11__8S6419C13__7S6419C1[] = {
  ABISELECT(384,236),
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
};
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C48S6419C128S6419C11__A1__8S6419C13__7S6419C1[] = {
  ABISELECT(336,212),
  (VTBL_ENTRY)&(_ZTI8S6419C13[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern void _ZN8S6419C16D1Ev();
extern void _ZN8S6419C16D0Ev();
extern void _ZN8S6419C163v11Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C16__7S6419C1[] = {
  ABISELECT(792,460),
  ABISELECT(136,68),
  ABISELECT(-1064,-656),
  ABISELECT(-408,-248),
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN8S6419C16D1Ev,
  (VTBL_ENTRY)&_ZN8S6419C16D0Ev,
  (VTBL_ENTRY)&_ZN8S6419C163v11Ev,
};
extern void _ZN7S6419C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C7__8S6419C16__7S6419C1[] = {
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S6419C16D1Ev,_ZTv0_n20_N8S6419C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S6419C16D0Ev,_ZTv0_n20_N8S6419C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6419C13__8S6419C16__7S6419C1[] = {
  ABISELECT(408,248),
  0,
  ABISELECT(-656,-408),
  ABISELECT(408,248),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6419C16D1Ev,_ZTv0_n20_N8S6419C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6419C16D0Ev,_ZTv0_n20_N8S6419C16D0Ev),
};
extern void _ZN7S6419C72v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S6419C16D1Ev,_ZTv0_n16_N8S6419C16D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S6419C16D0Ev,_ZTv0_n16_N8S6419C16D0Ev)();
extern void _ZN8S6419C112v7Ev();
extern void _ZN8S6419C112v8Ev();
extern void _ZN8S6419C112v9Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C11__8S6419C16__7S6419C1[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(1064,656),
  0,
  ABISELECT(1064,656),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C16D1Ev,_ZTv0_n16_N8S6419C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C16D0Ev,_ZTv0_n16_N8S6419C16D0Ev),
  (VTBL_ENTRY)&_ZN8S6419C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v8Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v9Ev,
};
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C48S6419C11__8S6419C16__7S6419C1[] = {
  ABISELECT(1016,632),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C128S6419C11__8S6419C16__7S6419C1[] = {
  ABISELECT(792,484),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
};
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C48S6419C128S6419C11__A1__8S6419C16__7S6419C1[] = {
  ABISELECT(744,460),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
extern void ABISELECT(_ZTv0_n64_N8S6419C16D1Ev,_ZTv0_n32_N8S6419C16D1Ev)();
extern void ABISELECT(_ZThn136_N8S6419C16D1Ev,_ZThn68_N8S6419C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6419C16D0Ev,_ZTv0_n32_N8S6419C16D0Ev)();
extern void ABISELECT(_ZThn136_N8S6419C16D0Ev,_ZThn68_N8S6419C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6419C10__8S6419C16__7S6419C1[] = {
  ABISELECT(-136,-68),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(-544,-316),
  ABISELECT(-1200,-724),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6419C16D1Ev,_ZTv0_n32_N8S6419C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6419C16D0Ev,_ZTv0_n32_N8S6419C16D0Ev),
};
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C48S6419C128S6419C10__A2__8S6419C16__7S6419C1[] = {
  ABISELECT(-184,-92),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C12__A2__8S6419C16__7S6419C1[] = {
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(-792,-460),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
};
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C48S6419C12__A3__8S6419C16__7S6419C1[] = {
  ABISELECT(-840,-484),
  (VTBL_ENTRY)&(_ZTI8S6419C16[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
extern void _ZN8S6419C10D1Ev();
extern void _ZN8S6419C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C10__A1__7S6419C1[] = {
  ABISELECT(-544,-316),
  ABISELECT(-1200,-724),
  0,
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
  (VTBL_ENTRY)&_ZN8S6419C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6419C10D0Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S6419C10D1Ev,_ZTv0_n16_N8S6419C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S6419C10D0Ev,_ZTv0_n16_N8S6419C10D0Ev)();
extern void _ZN8S6419C112v7Ev();
extern void _ZN8S6419C112v8Ev();
extern void _ZN8S6419C112v9Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C11__8S6419C10__A1__7S6419C1[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(1200,724),
  0,
  ABISELECT(1200,724),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C10D1Ev,_ZTv0_n16_N8S6419C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6419C10D0Ev,_ZTv0_n16_N8S6419C10D0Ev),
  (VTBL_ENTRY)&_ZN8S6419C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v8Ev,
  (VTBL_ENTRY)&_ZN8S6419C112v9Ev,
};
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C48S6419C11__8S6419C10__A1__7S6419C1[] = {
  ABISELECT(1152,700),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void _ZN8S6419C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6419C128S6419C11__8S6419C10__A1__7S6419C1[] = {
  ABISELECT(928,552),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&_ZN8S6419C122v6Ev,
};
extern void _ZN7S6419C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6419C48S6419C128S6419C11__A1__8S6419C10__A1__7S6419C1[] = {
  ABISELECT(880,528),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C42v4Ev,
};
extern void _ZN7S6419C72v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S6419C10D1Ev,_ZTv0_n20_N8S6419C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S6419C10D0Ev,_ZTv0_n20_N8S6419C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6419C13__8S6419C10__A1__7S6419C1[] = {
  ABISELECT(544,316),
  0,
  ABISELECT(-656,-408),
  ABISELECT(544,316),
  (VTBL_ENTRY)&(_ZTI8S6419C10[0]),
  (VTBL_ENTRY)&_ZN7S6419C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6419C10D1Ev,_ZTv0_n20_N8S6419C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6419C10D0Ev,_ZTv0_n20_N8S6419C10D0Ev),
};
static  VTT_ENTRY vtt_S6419C1[] = {
  {&(_ZTV7S6419C1[11]),  11,124},
  {&(_tg__ZTV7S6419C6__7S6419C1[4]),  4,6},
  {&(_tg__ZTV8S6419C10__A__7S6419C1[4]),  4,8},
  {&(_tg__ZTV8S6419C11__8S6419C10__A__7S6419C1[9]),  9,15},
  {&(_tg__ZTV7S6419C48S6419C11__8S6419C10__A__7S6419C1[2]),  2,3},
  {&(_tg__ZTV8S6419C128S6419C11__8S6419C10__A__7S6419C1[2]),  2,4},
  {&(_tg__ZTV7S6419C48S6419C128S6419C11__A1__8S6419C10__A__7S6419C1[2]),  2,3},
  {&(_tg__ZTV8S6419C13__8S6419C10__A__7S6419C1[5]),  5,8},
  {&(_tg__ZTV8S6419C15__7S6419C1[3]),  3,6},
  {&(_tg__ZTV7S6419C2__8S6419C15__7S6419C1[5]),  5,9},
  {&(_ZTV7S6419C1[19]),  19,124},
  {&(_ZTV7S6419C1[28]),  28,124},
  {&(_ZTV7S6419C1[50]),  50,124},
  {&(_ZTV7S6419C1[58]),  58,124},
  {&(_ZTV7S6419C1[61]),  61,124},
  {&(_ZTV7S6419C1[65]),  65,124},
  {&(_ZTV7S6419C1[71]),  71,124},
  {&(_ZTV7S6419C1[38]),  38,124},
  {&(_ZTV7S6419C1[79]),  79,124},
  {&(_ZTV7S6419C1[92]),  92,124},
  {&(_ZTV7S6419C1[98]),  98,124},
  {&(_ZTV7S6419C1[107]),  107,124},
  {&(_ZTV7S6419C1[113]),  113,124},
  {&(_ZTV7S6419C1[119]),  119,124},
  {&(_ZTV7S6419C1[123]),  123,124},
  {&(_tg__ZTV8S6419C13__7S6419C1[3]),  3,6},
  {&(_tg__ZTV8S6419C11__8S6419C13__7S6419C1[9]),  9,15},
  {&(_tg__ZTV7S6419C48S6419C11__8S6419C13__7S6419C1[2]),  2,3},
  {&(_tg__ZTV8S6419C128S6419C11__8S6419C13__7S6419C1[2]),  2,4},
  {&(_tg__ZTV7S6419C48S6419C128S6419C11__A1__8S6419C13__7S6419C1[2]),  2,3},
  {&(_tg__ZTV8S6419C16__7S6419C1[7]),  7,10},
  {&(_tg__ZTV7S6419C7__8S6419C16__7S6419C1[3]),  3,4},
  {&(_tg__ZTV8S6419C13__8S6419C16__7S6419C1[5]),  5,8},
  {&(_tg__ZTV8S6419C11__8S6419C16__7S6419C1[9]),  9,15},
  {&(_tg__ZTV7S6419C48S6419C11__8S6419C16__7S6419C1[2]),  2,3},
  {&(_tg__ZTV8S6419C128S6419C11__8S6419C16__7S6419C1[2]),  2,4},
  {&(_tg__ZTV7S6419C48S6419C128S6419C11__A1__8S6419C16__7S6419C1[2]),  2,3},
  {&(_tg__ZTV8S6419C10__8S6419C16__7S6419C1[8]),  8,12},
  {&(_tg__ZTV7S6419C48S6419C128S6419C10__A2__8S6419C16__7S6419C1[2]),  2,3},
  {&(_tg__ZTV8S6419C12__A2__8S6419C16__7S6419C1[5]),  5,7},
  {&(_tg__ZTV7S6419C48S6419C12__A3__8S6419C16__7S6419C1[2]),  2,3},
  {&(_tg__ZTV8S6419C10__A1__7S6419C1[4]),  4,8},
  {&(_tg__ZTV8S6419C11__8S6419C10__A1__7S6419C1[9]),  9,15},
  {&(_tg__ZTV7S6419C48S6419C11__8S6419C10__A1__7S6419C1[2]),  2,3},
  {&(_tg__ZTV8S6419C128S6419C11__8S6419C10__A1__7S6419C1[2]),  2,4},
  {&(_tg__ZTV7S6419C48S6419C128S6419C11__A1__8S6419C10__A1__7S6419C1[2]),  2,3},
  {&(_tg__ZTV8S6419C13__8S6419C10__A1__7S6419C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI7S6419C1[];
extern  VTBL_ENTRY _ZTV7S6419C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6419C1[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6419C16D0Ev,_ZTv0_n32_N8S6419C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S6419C16D0Ev,_ZThn68_N8S6419C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6419C16D1Ev,_ZTv0_n32_N8S6419C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S6419C16D1Ev,_ZThn68_N8S6419C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6419C15D0Ev,_ZTv0_n12_N8S6419C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N8S6419C15D0Ev,_ZThn892_N8S6419C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6419C15D1Ev,_ZTv0_n12_N8S6419C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N8S6419C15D1Ev,_ZThn892_N8S6419C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6419C10D0Ev,_ZTv0_n20_N8S6419C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1952_N8S6419C10D0Ev,_ZThn1204_N8S6419C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6419C10D1Ev,_ZTv0_n20_N8S6419C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1952_N8S6419C10D1Ev,_ZThn1204_N8S6419C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6419C10D0Ev,_ZTv0_n16_N8S6419C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1296_N8S6419C10D0Ev,_ZThn796_N8S6419C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6419C10D1Ev,_ZTv0_n16_N8S6419C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1296_N8S6419C10D1Ev,_ZThn796_N8S6419C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6419C1D0Ev,_ZTv0_n32_N7S6419C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N7S6419C1D0Ev,_ZThn1920_N7S6419C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2984_N7S6419C1D0Ev,_ZThn1852_N7S6419C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6419C1D1Ev,_ZTv0_n32_N7S6419C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N7S6419C1D1Ev,_ZThn1920_N7S6419C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2984_N7S6419C1D1Ev,_ZThn1852_N7S6419C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6419C1D0Ev,_ZTv0_n12_N7S6419C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2720_N7S6419C1D0Ev,_ZThn1684_N7S6419C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6419C1D1Ev,_ZTv0_n12_N7S6419C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2720_N7S6419C1D1Ev,_ZThn1684_N7S6419C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6419C1D0Ev,_ZTv0_n20_N7S6419C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2576_N7S6419C1D0Ev,_ZThn1604_N7S6419C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6419C1D1Ev,_ZTv0_n20_N7S6419C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2576_N7S6419C1D1Ev,_ZThn1604_N7S6419C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6419C1D0Ev,_ZTv0_n16_N7S6419C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1920_N7S6419C1D0Ev,_ZThn1196_N7S6419C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6419C1D1Ev,_ZTv0_n16_N7S6419C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1920_N7S6419C1D1Ev,_ZThn1196_N7S6419C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6419C1 = {  "S6419C1", // class name
  bases_S6419C1, 29,
  &(vtc_S6419C1[0]), // expected_vtbl_contents
  &(vtt_S6419C1[0]), // expected_vtt_contents
  ABISELECT(4128,2516), // object size
  NSPAIRA(_ZTI7S6419C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6419C1),124, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6419C1),47, //virtual table table var
  27, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19043C4  {
  void *s19043c4f0;
  short s19043c4f1;
  long double s19043c4f2;
  virtual void  v1(); // _ZN8S19043C42v1Ev
  ~S19043C4(); // tgen
  S19043C4(); // tgen
};
//SIG(-1 S19043C4) C1{ v1 Fp Fs FD}


void  S19043C4 ::v1(){vfunc_called(this, "_ZN8S19043C42v1Ev");}
S19043C4 ::~S19043C4(){ note_dtor("S19043C4", this);} // tgen
S19043C4 ::S19043C4(){ note_ctor("S19043C4", this);} // tgen

static void Test_S19043C4()
{
  extern Class_Descriptor cd_S19043C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S19043C4, buf);
    S19043C4 *dp, &lv = *(dp=new (buf) S19043C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19043C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19043C4)");
    check_field_offset(lv, s19043c4f0, ABISELECT(8,4), "S19043C4.s19043c4f0");
    check_field_offset(lv, s19043c4f1, ABISELECT(16,8), "S19043C4.s19043c4f1");
    check_field_offset(lv, s19043c4f2, ABISELECT(32,12), "S19043C4.s19043c4f2");
    test_class_info(&lv, &cd_S19043C4);
    dp->~S19043C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19043C4(Test_S19043C4, "S19043C4", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19043C4C1Ev();
extern void _ZN8S19043C4D1Ev();
Name_Map name_map_S19043C4[] = {
  NSPAIR(_ZN8S19043C4C1Ev),
  NSPAIR(_ZN8S19043C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19043C4[];
extern void _ZN8S19043C42v1Ev();
static  VTBL_ENTRY vtc_S19043C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19043C4[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
};
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
Class_Descriptor cd_S19043C4 = {  "S19043C4", // class name
  0,0,//no base classes
  &(vtc_S19043C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19043C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19043C4),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  S19043C5  {
  void *s19043c5f0[2];
  long double s19043c5f1[10];
  void *s19043c5f2;
  short s19043c5f3;
  void *s19043c5f4[2];
  virtual void  v2(); // _ZN8S19043C52v2Ev
  ~S19043C5(); // tgen
  S19043C5(); // tgen
};
//SIG(-1 S19043C5) C1{ v1 Fp[2] FD[10] Fp Fs Fp[2]}


void  S19043C5 ::v2(){vfunc_called(this, "_ZN8S19043C52v2Ev");}
S19043C5 ::~S19043C5(){ note_dtor("S19043C5", this);} // tgen
S19043C5 ::S19043C5(){ note_ctor("S19043C5", this);} // tgen

static void Test_S19043C5()
{
  extern Class_Descriptor cd_S19043C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,38)];
    init_test(&cd_S19043C5, buf);
    S19043C5 *dp, &lv = *(dp=new (buf) S19043C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,148), "sizeof(S19043C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19043C5)");
    check_field_offset(lv, s19043c5f0, ABISELECT(8,4), "S19043C5.s19043c5f0");
    check_field_offset(lv, s19043c5f1, ABISELECT(32,12), "S19043C5.s19043c5f1");
    check_field_offset(lv, s19043c5f2, ABISELECT(192,132), "S19043C5.s19043c5f2");
    check_field_offset(lv, s19043c5f3, ABISELECT(200,136), "S19043C5.s19043c5f3");
    check_field_offset(lv, s19043c5f4, ABISELECT(208,140), "S19043C5.s19043c5f4");
    test_class_info(&lv, &cd_S19043C5);
    dp->~S19043C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19043C5(Test_S19043C5, "S19043C5", ABISELECT(224,148));

#else // __cplusplus

extern void _ZN8S19043C5C1Ev();
extern void _ZN8S19043C5D1Ev();
Name_Map name_map_S19043C5[] = {
  NSPAIR(_ZN8S19043C5C1Ev),
  NSPAIR(_ZN8S19043C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19043C5[];
extern void _ZN8S19043C52v2Ev();
static  VTBL_ENTRY vtc_S19043C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19043C5[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
};
extern VTBL_ENTRY _ZTI8S19043C5[];
extern  VTBL_ENTRY _ZTV8S19043C5[];
Class_Descriptor cd_S19043C5 = {  "S19043C5", // class name
  0,0,//no base classes
  &(vtc_S19043C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,148), // object size
  NSPAIRA(_ZTI8S19043C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19043C5),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  S19043C3  : S19043C4 , S19043C5 {
  int s19043c3f0;
  ::S19043C4 s19043c3f1;
  void *s19043c3f2;
  virtual void  v3(); // _ZN8S19043C32v3Ev
  ~S19043C3(); // tgen
  S19043C3(); // tgen
};
//SIG(-1 S19043C3) C1{ BC2{ v2 Fp Fs FD} BC3{ v3 Fp[2] FD[10] Fp Fs Fp[2]} v1 Fi FC2 Fp}


void  S19043C3 ::v3(){vfunc_called(this, "_ZN8S19043C32v3Ev");}
S19043C3 ::~S19043C3(){ note_dtor("S19043C3", this);} // tgen
S19043C3 ::S19043C3(){ note_ctor("S19043C3", this);} // tgen

static void Test_S19043C3()
{
  extern Class_Descriptor cd_S19043C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,52)];
    init_test(&cd_S19043C3, buf);
    S19043C3 *dp, &lv = *(dp=new (buf) S19043C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,204), "sizeof(S19043C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19043C3)");
    check_base_class_offset(lv, (S19043C4*), 0, "S19043C3");
    check_base_class_offset(lv, (S19043C5*), ABISELECT(48,24), "S19043C3");
    check_field_offset(lv, s19043c3f0, ABISELECT(272,172), "S19043C3.s19043c3f0");
    check_field_offset(lv, s19043c3f1, ABISELECT(288,176), "S19043C3.s19043c3f1");
    check_field_offset(lv, s19043c3f2, ABISELECT(336,200), "S19043C3.s19043c3f2");
    test_class_info(&lv, &cd_S19043C3);
    dp->~S19043C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19043C3(Test_S19043C3, "S19043C3", ABISELECT(352,204));

#else // __cplusplus

extern void _ZN8S19043C3C1Ev();
extern void _ZN8S19043C3D1Ev();
Name_Map name_map_S19043C3[] = {
  NSPAIR(_ZN8S19043C3C1Ev),
  NSPAIR(_ZN8S19043C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C5;
extern VTBL_ENTRY _ZTI8S19043C5[];
extern  VTBL_ENTRY _ZTV8S19043C5[];
static Base_Class bases_S19043C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19043C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19043C5,    ABISELECT(48,24), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S19043C3[];
extern void _ZN8S19043C42v1Ev();
extern void _ZN8S19043C32v3Ev();
extern void _ZN8S19043C52v2Ev();
static  VTBL_ENTRY vtc_S19043C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19043C3[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19043C32v3Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19043C3[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
};
extern VTBL_ENTRY _ZTI8S19043C3[];
extern  VTBL_ENTRY _ZTV8S19043C3[];
Class_Descriptor cd_S19043C3 = {  "S19043C3", // class name
  bases_S19043C3, 2,
  &(vtc_S19043C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,204), // object size
  NSPAIRA(_ZTI8S19043C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19043C3),7, //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  S19043C9  : S19043C4 , S19043C5 , S19043C3 {
  char s19043c9f0;
  int s19043c9f1;
  __tsi64 s19043c9f2;
  long s19043c9f3;
  __tsi64 s19043c9f4;
  void *s19043c9f5;
  virtual  ~S19043C9(); // _ZN8S19043C9D1Ev
  virtual void  v4(); // _ZN8S19043C92v4Ev
  virtual void  v5(); // _ZN8S19043C92v5Ev
  virtual void  v6(); // _ZN8S19043C92v6Ev
  S19043C9(); // tgen
};
//SIG(-1 S19043C9) C1{ BC2{ v4 Fp Fs FD} BC3{ v5 Fp[2] FD[10] Fp Fs Fp[2]} BC4{ BC2 BC3 v6 Fi FC2 Fp} vd v1 v2 v3 Fc Fi FL Fl FL Fp}


 S19043C9 ::~S19043C9(){ note_dtor("S19043C9", this);}
void  S19043C9 ::v4(){vfunc_called(this, "_ZN8S19043C92v4Ev");}
void  S19043C9 ::v5(){vfunc_called(this, "_ZN8S19043C92v5Ev");}
void  S19043C9 ::v6(){vfunc_called(this, "_ZN8S19043C92v6Ev");}
S19043C9 ::S19043C9(){ note_ctor("S19043C9", this);} // tgen

static void Test_S19043C9()
{
  extern Class_Descriptor cd_S19043C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(42,103)];
    init_test(&cd_S19043C9, buf);
    S19043C9 *dp, &lv = *(dp=new (buf) S19043C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(656,408), "sizeof(S19043C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19043C9)");
    /*is_ambiguous_... S19043C9::S19043C4 */ AMB_check_base_class_offset(lv, (S19043C4*), 0, "S19043C9");
    /*is_ambiguous_... S19043C9::S19043C5 */ AMB_check_base_class_offset(lv, (S19043C5*), ABISELECT(48,24), "S19043C9");
    check_base_class_offset(lv, (S19043C4*)(S19043C3*), ABISELECT(272,172), "S19043C9");
    check_base_class_offset(lv, (S19043C5*)(S19043C3*), ABISELECT(320,196), "S19043C9");
    check_base_class_offset(lv, (S19043C3*), ABISELECT(272,172), "S19043C9");
    check_field_offset(lv, s19043c9f0, ABISELECT(616,376), "S19043C9.s19043c9f0");
    check_field_offset(lv, s19043c9f1, ABISELECT(620,380), "S19043C9.s19043c9f1");
    check_field_offset(lv, s19043c9f2, ABISELECT(624,384), "S19043C9.s19043c9f2");
    check_field_offset(lv, s19043c9f3, ABISELECT(632,392), "S19043C9.s19043c9f3");
    check_field_offset(lv, s19043c9f4, ABISELECT(640,396), "S19043C9.s19043c9f4");
    check_field_offset(lv, s19043c9f5, ABISELECT(648,404), "S19043C9.s19043c9f5");
    test_class_info(&lv, &cd_S19043C9);
    dp->~S19043C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19043C9(Test_S19043C9, "S19043C9", ABISELECT(656,408));

#else // __cplusplus

extern void _ZN8S19043C9C1Ev();
extern void _ZN8S19043C9D1Ev();
Name_Map name_map_S19043C9[] = {
  NSPAIR(_ZN8S19043C9C1Ev),
  NSPAIR(_ZN8S19043C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C5;
extern VTBL_ENTRY _ZTI8S19043C5[];
extern  VTBL_ENTRY _ZTV8S19043C5[];
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C5;
extern VTBL_ENTRY _ZTI8S19043C5[];
extern  VTBL_ENTRY _ZTV8S19043C5[];
extern Class_Descriptor cd_S19043C3;
extern VTBL_ENTRY _ZTI8S19043C3[];
extern  VTBL_ENTRY _ZTV8S19043C3[];
static Base_Class bases_S19043C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19043C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19043C5,    ABISELECT(48,24), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19043C4,    ABISELECT(272,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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19043C5,    ABISELECT(320,196), //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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19043C3,    ABISELECT(272,172), //bcp->offset
    11, //bcp->virtual_function_table_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 _ZTI8S19043C9[];
extern void _ZN8S19043C42v1Ev();
extern void _ZN8S19043C9D1Ev();
extern void _ZN8S19043C9D0Ev();
extern void _ZN8S19043C92v4Ev();
extern void _ZN8S19043C92v5Ev();
extern void _ZN8S19043C92v6Ev();
extern void _ZN8S19043C52v2Ev();
extern void _ZN8S19043C42v1Ev();
extern void _ZN8S19043C32v3Ev();
extern void _ZN8S19043C52v2Ev();
static  VTBL_ENTRY vtc_S19043C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19043C9[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19043C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19043C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19043C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19043C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19043C92v6Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19043C9[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
  ABISELECT(-272,-172),
  (VTBL_ENTRY)&(_ZTI8S19043C9[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19043C32v3Ev,
  ABISELECT(-320,-196),
  (VTBL_ENTRY)&(_ZTI8S19043C9[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
};
extern VTBL_ENTRY _ZTI8S19043C9[];
extern  VTBL_ENTRY _ZTV8S19043C9[];
Class_Descriptor cd_S19043C9 = {  "S19043C9", // class name
  bases_S19043C9, 5,
  &(vtc_S19043C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(656,408), // object size
  NSPAIRA(_ZTI8S19043C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19043C9),18, //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  S19043C8  : virtual S19043C9 , S19043C4 {
  short s19043c8f0[4];
  int s19043c8f1;
  long double s19043c8f2;
  int s19043c8f3;
  void *s19043c8f4[5];
  __tsi64 s19043c8f5;
  virtual  ~S19043C8(); // _ZN8S19043C8D2Ev
  S19043C8(); // tgen
};
//SIG(-1 S19043C8) C1{ VBC2{ BC3{ v1 Fp Fs FD} BC4{ v2 Fp[2] FD[10] Fp Fs Fp[2]} BC5{ BC3 BC4 v3 Fi FC3 Fp} vd v4 v5 v6 Fc Fi FL Fl FL Fp} BC3 vd Fs[4] Fi FD Fi Fp[5] FL}


 S19043C8 ::~S19043C8(){ note_dtor("S19043C8", this);}
S19043C8 ::S19043C8(){ note_ctor("S19043C8", this);} // tgen

static void Test_S19043C8()
{
  extern Class_Descriptor cd_S19043C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(51,123)];
    init_test(&cd_S19043C8, buf);
    S19043C8 *dp, &lv = *(dp=new (buf) S19043C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(800,488), "sizeof(S19043C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19043C8)");
    /*is_ambiguous_... S19043C9::S19043C4 */ AMB_check_base_class_offset(lv, (S19043C4*)(S19043C9*), ABISELECT(144,80), "S19043C8");
    /*is_ambiguous_... S19043C9::S19043C5 */ AMB_check_base_class_offset(lv, (S19043C5*)(S19043C9*), ABISELECT(192,104), "S19043C8");
    check_base_class_offset(lv, (S19043C4*)(S19043C3*)(S19043C9*), ABISELECT(416,252), "S19043C8");
    check_base_class_offset(lv, (S19043C5*)(S19043C3*)(S19043C9*), ABISELECT(464,276), "S19043C8");
    check_base_class_offset(lv, (S19043C3*)(S19043C9*), ABISELECT(416,252), "S19043C8");
    check_base_class_offset(lv, (S19043C9*), ABISELECT(144,80), "S19043C8");
    /*is_ambiguous_... S19043C8::S19043C4 */ AMB_check_base_class_offset(lv, (S19043C4*), 0, "S19043C8");
    check_field_offset(lv, s19043c8f0, ABISELECT(48,24), "S19043C8.s19043c8f0");
    check_field_offset(lv, s19043c8f1, ABISELECT(56,32), "S19043C8.s19043c8f1");
    check_field_offset(lv, s19043c8f2, ABISELECT(64,36), "S19043C8.s19043c8f2");
    check_field_offset(lv, s19043c8f3, ABISELECT(80,48), "S19043C8.s19043c8f3");
    check_field_offset(lv, s19043c8f4, ABISELECT(88,52), "S19043C8.s19043c8f4");
    check_field_offset(lv, s19043c8f5, ABISELECT(128,72), "S19043C8.s19043c8f5");
    test_class_info(&lv, &cd_S19043C8);
    dp->~S19043C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19043C8(Test_S19043C8, "S19043C8", ABISELECT(800,488));

#else // __cplusplus

extern void _ZN8S19043C8C1Ev();
extern void _ZN8S19043C8D2Ev();
Name_Map name_map_S19043C8[] = {
  NSPAIR(_ZN8S19043C8C1Ev),
  NSPAIR(_ZN8S19043C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C5;
extern VTBL_ENTRY _ZTI8S19043C5[];
extern  VTBL_ENTRY _ZTV8S19043C5[];
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C5;
extern VTBL_ENTRY _ZTI8S19043C5[];
extern  VTBL_ENTRY _ZTV8S19043C5[];
extern Class_Descriptor cd_S19043C3;
extern VTBL_ENTRY _ZTI8S19043C3[];
extern  VTBL_ENTRY _ZTV8S19043C3[];
extern Class_Descriptor cd_S19043C9;
extern VTBL_ENTRY _ZTI8S19043C9[];
extern  VTBL_ENTRY _ZTV8S19043C9[];
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
static Base_Class bases_S19043C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19043C4,    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
    5, //immediately_derived
  0, 0},
  {&cd_S19043C5,    ABISELECT(192,104), //bcp->offset
    21, //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19043C4,    ABISELECT(416,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19043C5,    ABISELECT(464,276), //bcp->offset
    28, //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_S19043C3,    ABISELECT(416,252), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19043C9,    ABISELECT(144,80), //bcp->offset
    6, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19043C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19043C8[];
extern void _ZN8S19043C42v1Ev();
extern void _ZN8S19043C8D1Ev();
extern void _ZN8S19043C8D0Ev();
extern void _ZN8S19043C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19043C8D1Ev,_ZTv0_n16_N8S19043C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19043C8D1Ev,_ZThn80_N8S19043C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19043C8D0Ev,_ZTv0_n16_N8S19043C8D0Ev)();
extern void ABISELECT(_ZThn144_N8S19043C8D0Ev,_ZThn80_N8S19043C8D0Ev)() __attribute__((weak));
extern void _ZN8S19043C92v4Ev();
extern void _ZN8S19043C92v5Ev();
extern void _ZN8S19043C92v6Ev();
extern void _ZN8S19043C52v2Ev();
extern void _ZN8S19043C42v1Ev();
extern void _ZN8S19043C32v3Ev();
extern void _ZN8S19043C52v2Ev();
static  VTBL_ENTRY vtc_S19043C8[] = {
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19043C8[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19043C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19043C8D0Ev,
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-144,-80),
  0,
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI8S19043C8[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19043C8D1Ev,_ZTv0_n16_N8S19043C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19043C8D0Ev,_ZTv0_n16_N8S19043C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19043C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19043C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19043C92v6Ev,
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S19043C8[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
  ABISELECT(-416,-252),
  (VTBL_ENTRY)&(_ZTI8S19043C8[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19043C32v3Ev,
  ABISELECT(-464,-276),
  (VTBL_ENTRY)&(_ZTI8S19043C8[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S19043C8[];
static  VTT_ENTRY vtt_S19043C8[] = {
  {&(_ZTV8S19043C8[3]),  3,31},
  {&(_ZTV8S19043C8[15]),  15,31},
  {&(_ZTV8S19043C8[23]),  23,31},
  {&(_ZTV8S19043C8[26]),  26,31},
  {&(_ZTV8S19043C8[30]),  30,31},
};
extern VTBL_ENTRY _ZTI8S19043C8[];
extern  VTBL_ENTRY _ZTV8S19043C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19043C8[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19043C8D0Ev,_ZTv0_n16_N8S19043C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19043C8D0Ev,_ZThn80_N8S19043C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19043C8D1Ev,_ZTv0_n16_N8S19043C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19043C8D1Ev,_ZThn80_N8S19043C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19043C8 = {  "S19043C8", // class name
  bases_S19043C8, 7,
  &(vtc_S19043C8[0]), // expected_vtbl_contents
  &(vtt_S19043C8[0]), // expected_vtt_contents
  ABISELECT(800,488), // object size
  NSPAIRA(_ZTI8S19043C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19043C8),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19043C8),5, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19043C11  {
  int s19043c11f0;
  ::S19252C8_nt s19043c11f1;
  short s19043c11f2:16;
  ::S19043C5 s19043c11f3;
  ::S19252C5_nt s19043c11f4;
  virtual  ~S19043C11(); // _ZN9S19043C11D1Ev
  virtual void  v8(); // _ZN9S19043C112v8Ev
  virtual void  v9(); // _ZN9S19043C112v9Ev
  S19043C11(); // tgen
};
//SIG(-1 S19043C11) C1{ vd v1 v2 Fi FU2{ m Fp} Fs:16 FC3{ v3 Fp[2] FD[10] Fp Fs Fp[2]} FC4{}}


 S19043C11 ::~S19043C11(){ note_dtor("S19043C11", this);}
void  S19043C11 ::v8(){vfunc_called(this, "_ZN9S19043C112v8Ev");}
void  S19043C11 ::v9(){vfunc_called(this, "_ZN9S19043C112v9Ev");}
S19043C11 ::S19043C11(){ note_ctor("S19043C11", this);} // tgen

static void Test_S19043C11()
{
  extern Class_Descriptor cd_S19043C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,43)];
    init_test(&cd_S19043C11, buf);
    S19043C11 *dp, &lv = *(dp=new (buf) S19043C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,168), "sizeof(S19043C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19043C11)");
    check_field_offset(lv, s19043c11f0, ABISELECT(8,4), "S19043C11.s19043c11f0");
    check_field_offset(lv, s19043c11f1, ABISELECT(16,8), "S19043C11.s19043c11f1");
    set_bf_and_test(lv, s19043c11f2, ABISELECT(24,12), 0, 16, 1, "S19043C11");
    set_bf_and_test(lv, s19043c11f2, ABISELECT(24,12), 0, 16, hide_sll(1LL<<15), "S19043C11");
    check_field_offset(lv, s19043c11f3, ABISELECT(32,16), "S19043C11.s19043c11f3");
    check_field_offset(lv, s19043c11f4, ABISELECT(256,164), "S19043C11.s19043c11f4");
    test_class_info(&lv, &cd_S19043C11);
    dp->~S19043C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19043C11(Test_S19043C11, "S19043C11", ABISELECT(272,168));

#else // __cplusplus

extern void _ZN9S19043C11C1Ev();
extern void _ZN9S19043C11D1Ev();
Name_Map name_map_S19043C11[] = {
  NSPAIR(_ZN9S19043C11C1Ev),
  NSPAIR(_ZN9S19043C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19043C11[];
extern void _ZN9S19043C11D1Ev();
extern void _ZN9S19043C11D0Ev();
extern void _ZN9S19043C112v8Ev();
extern void _ZN9S19043C112v9Ev();
static  VTBL_ENTRY vtc_S19043C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19043C11[0]),
  (VTBL_ENTRY)&_ZN9S19043C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19043C11D0Ev,
  (VTBL_ENTRY)&_ZN9S19043C112v8Ev,
  (VTBL_ENTRY)&_ZN9S19043C112v9Ev,
};
extern VTBL_ENTRY _ZTI9S19043C11[];
extern  VTBL_ENTRY _ZTV9S19043C11[];
Class_Descriptor cd_S19043C11 = {  "S19043C11", // class name
  0,0,//no base classes
  &(vtc_S19043C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,168), // object size
  NSPAIRA(_ZTI9S19043C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19043C11),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  S19043C10  {
  int s19043c10f0[2];
  short s19043c10f1;
  ::S19043C11 s19043c10f2;
  void  mf19043c10(); // _ZN9S19043C1010mf19043c10Ev
};
//SIG(-1 S19043C10) C1{ m Fi[2] Fs FC2{ vd v1 v2 Fi FU3{ m Fp} Fs:16 FC4{ v3 Fp[2] FD[10] Fp Fs Fp[2]} FC5{}}}


void  S19043C10 ::mf19043c10(){}

static void Test_S19043C10()
{
  {
    init_simple_test("S19043C10");
    static S19043C10 lv;
    check2(sizeof(lv), ABISELECT(288,180), "sizeof(S19043C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19043C10)");
    check_field_offset(lv, s19043c10f0, 0, "S19043C10.s19043c10f0");
    check_field_offset(lv, s19043c10f1, 8, "S19043C10.s19043c10f1");
    check_field_offset(lv, s19043c10f2, ABISELECT(16,12), "S19043C10.s19043c10f2");
  }
}
static Arrange_To_Call_Me vS19043C10(Test_S19043C10, "S19043C10", ABISELECT(288,180));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S19043C10[];
VTBL_ENTRY *P__ZTI9S19043C10 = _ZTI9S19043C10; 
Class_Descriptor cd_S19043C10 = {  "S19043C10", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(288,180), // object size
  NSPAIRA(_ZTI9S19043C10),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  S19043C2  : S19043C3 , S19252C4 , virtual S19043C8 , virtual S19043C10 , S19043C5 {
  void *s19043c2f0;
  virtual  ~S19043C2(); // _ZN8S19043C2D2Ev
  S19043C2(); // tgen
};
//SIG(-1 S19043C2) C1{ BC2{ BC3{ v1 Fp Fs FD} BC4{ v2 Fp[2] FD[10] Fp Fs Fp[2]} v3 Fi FC3 Fp} BC5{ m Fi Fc Fp FC6{}} VBC7{ VBC8{ BC3 BC4 BC2 vd v4 v5 v6 Fc Fi FL Fl FL Fp} BC3 vd Fs[4] Fi FD Fi Fp[5] FL} VBC9{ m Fi[2] Fs FC10{ vd v7 v8 Fi FU11{ m Fp} Fs:16 FC4 FC6}} BC4 vd Fp}


 S19043C2 ::~S19043C2(){ note_dtor("S19043C2", this);}
S19043C2 ::S19043C2(){ note_ctor("S19043C2", this);} // tgen

static void Test_S19043C2()
{
  extern Class_Descriptor cd_S19043C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(107,261)];
    init_test(&cd_S19043C2, buf);
    S19043C2 *dp, &lv = *(dp=new (buf) S19043C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1696,1040), "sizeof(S19043C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19043C2)");
    /*is_ambiguous_... S19043C2::S19043C3 */ AMB_check_base_class_offset(lv, (S19043C4*)(S19043C3*), 0, "S19043C2");
    /*is_ambiguous_... S19043C2::S19043C3 */ AMB_check_base_class_offset(lv, (S19043C5*)(S19043C3*), ABISELECT(48,24), "S19043C2");
    /*is_ambiguous_... S19043C2::S19043C3 */ AMB_check_base_class_offset(lv, (S19043C3*), 0, "S19043C2");
    check_base_class_offset(lv, (S19252C4*), ABISELECT(344,204), "S19043C2");
    /*is_ambiguous_... S19043C9::S19043C4 */ AMB_check_base_class_offset(lv, (S19043C4*)(S19043C9*), ABISELECT(752,452), "S19043C2");
    /*is_ambiguous_... S19043C9::S19043C5 */ AMB_check_base_class_offset(lv, (S19043C5*)(S19043C9*), ABISELECT(800,476), "S19043C2");
    check_base_class_offset(lv, (S19043C4*)(S19043C3*)(S19043C9*), ABISELECT(1024,624), "S19043C2");
    check_base_class_offset(lv, (S19043C5*)(S19043C3*)(S19043C9*), ABISELECT(1072,648), "S19043C2");
    check_base_class_offset(lv, (S19043C3*)(S19043C9*), ABISELECT(1024,624), "S19043C2");
    check_base_class_offset(lv, (S19043C9*)(S19043C8*), ABISELECT(752,452), "S19043C2");
    /*is_ambiguous_... S19043C8::S19043C4 */ AMB_check_base_class_offset(lv, (S19043C4*)(S19043C8*), ABISELECT(608,372), "S19043C2");
    check_base_class_offset(lv, (S19043C8*), ABISELECT(608,372), "S19043C2");
    check_base_class_offset(lv, (S19043C10*), ABISELECT(1408,860), "S19043C2");
    /*is_ambiguous_... S19043C2::S19043C5 */ AMB_check_base_class_offset(lv, (S19043C5*), ABISELECT(368,220), "S19043C2");
    check_field_offset(lv, s19043c2f0, ABISELECT(592,368), "S19043C2.s19043c2f0");
    test_class_info(&lv, &cd_S19043C2);
    dp->~S19043C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19043C2(Test_S19043C2, "S19043C2", ABISELECT(1696,1040));

#else // __cplusplus

extern void _ZN8S19043C2C1Ev();
extern void _ZN8S19043C2D2Ev();
Name_Map name_map_S19043C2[] = {
  NSPAIR(_ZN8S19043C2C1Ev),
  NSPAIR(_ZN8S19043C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C5;
extern VTBL_ENTRY _ZTI8S19043C5[];
extern  VTBL_ENTRY _ZTV8S19043C5[];
extern Class_Descriptor cd_S19043C3;
extern VTBL_ENTRY _ZTI8S19043C3[];
extern  VTBL_ENTRY _ZTV8S19043C3[];
extern Class_Descriptor cd_S19252C4;
extern VTBL_ENTRY _ZTI8S19252C4[];
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C5;
extern VTBL_ENTRY _ZTI8S19043C5[];
extern  VTBL_ENTRY _ZTV8S19043C5[];
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C5;
extern VTBL_ENTRY _ZTI8S19043C5[];
extern  VTBL_ENTRY _ZTV8S19043C5[];
extern Class_Descriptor cd_S19043C3;
extern VTBL_ENTRY _ZTI8S19043C3[];
extern  VTBL_ENTRY _ZTV8S19043C3[];
extern Class_Descriptor cd_S19043C9;
extern VTBL_ENTRY _ZTI8S19043C9[];
extern  VTBL_ENTRY _ZTV8S19043C9[];
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C8;
extern VTBL_ENTRY _ZTI8S19043C8[];
extern  VTBL_ENTRY _ZTV8S19043C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19043C8[];
extern Class_Descriptor cd_S19043C10;
extern VTBL_ENTRY _ZTI9S19043C10[];
extern Class_Descriptor cd_S19043C5;
extern VTBL_ENTRY _ZTI8S19043C5[];
extern  VTBL_ENTRY _ZTV8S19043C5[];
static Base_Class bases_S19043C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19043C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S19043C5,    ABISELECT(48,24), //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
    10, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19043C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19252C4,    ABISELECT(344,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19043C4,    ABISELECT(752,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19043C5,    ABISELECT(800,476), //bcp->offset
    38, //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19043C4,    ABISELECT(1024,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19043C5,    ABISELECT(1072,648), //bcp->offset
    45, //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19043C3,    ABISELECT(1024,624), //bcp->offset
    41, //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_S19043C9,    ABISELECT(752,452), //bcp->offset
    23, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19043C4,    ABISELECT(608,372), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19043C8,    ABISELECT(608,372), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //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},
  {&cd_S19043C10,    ABISELECT(1408,860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19043C5,    ABISELECT(368,220), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19043C2[];
extern void _ZN8S19043C42v1Ev();
extern void _ZN8S19043C32v3Ev();
extern void _ZN8S19043C2D1Ev();
extern void _ZN8S19043C2D0Ev();
extern void _ZN8S19043C52v2Ev();
extern void _ZN8S19043C52v2Ev();
extern void _ZN8S19043C42v1Ev();
extern void ABISELECT(_ZTv0_n40_N8S19043C2D1Ev,_ZTv0_n20_N8S19043C2D1Ev)();
extern void ABISELECT(_ZThn608_N8S19043C2D1Ev,_ZThn372_N8S19043C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19043C2D0Ev,_ZTv0_n20_N8S19043C2D0Ev)();
extern void ABISELECT(_ZThn608_N8S19043C2D0Ev,_ZThn372_N8S19043C2D0Ev)() __attribute__((weak));
extern void _ZN8S19043C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19043C2D1Ev,_ZTv0_n16_N8S19043C2D1Ev)();
extern void ABISELECT(_ZThn752_N8S19043C2D1Ev,_ZThn452_N8S19043C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19043C2D0Ev,_ZTv0_n16_N8S19043C2D0Ev)();
extern void ABISELECT(_ZThn752_N8S19043C2D0Ev,_ZThn452_N8S19043C2D0Ev)() __attribute__((weak));
extern void _ZN8S19043C92v4Ev();
extern void _ZN8S19043C92v5Ev();
extern void _ZN8S19043C92v6Ev();
extern void _ZN8S19043C52v2Ev();
extern void _ZN8S19043C42v1Ev();
extern void _ZN8S19043C32v3Ev();
extern void _ZN8S19043C52v2Ev();
static  VTBL_ENTRY vtc_S19043C2[] = {
  ABISELECT(1408,860),
  ABISELECT(752,452),
  ABISELECT(608,372),
  0,
  (VTBL_ENTRY)&(_ZTI8S19043C2[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19043C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19043C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19043C2D0Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19043C2[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI8S19043C2[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
  ABISELECT(-608,-372),
  0,
  ABISELECT(144,80),
  ABISELECT(-608,-372),
  (VTBL_ENTRY)&(_ZTI8S19043C2[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19043C2D1Ev,_ZTv0_n20_N8S19043C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19043C2D0Ev,_ZTv0_n20_N8S19043C2D0Ev),
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-752,-452),
  0,
  ABISELECT(-752,-452),
  (VTBL_ENTRY)&(_ZTI8S19043C2[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19043C2D1Ev,_ZTv0_n16_N8S19043C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19043C2D0Ev,_ZTv0_n16_N8S19043C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19043C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19043C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19043C92v6Ev,
  ABISELECT(-800,-476),
  (VTBL_ENTRY)&(_ZTI8S19043C2[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
  ABISELECT(-1024,-624),
  (VTBL_ENTRY)&(_ZTI8S19043C2[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19043C32v3Ev,
  ABISELECT(-1072,-648),
  (VTBL_ENTRY)&(_ZTI8S19043C2[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S19043C2[];
extern void _ZN8S19043C42v1Ev();
extern void _ZN8S19043C8D1Ev();
extern void _ZN8S19043C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19043C8__8S19043C2[] = {
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19043C8[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19043C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19043C8D0Ev,
};
extern void _ZN8S19043C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19043C8D1Ev,_ZTv0_n16_N8S19043C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19043C8D1Ev,_ZThn80_N8S19043C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19043C8D0Ev,_ZTv0_n16_N8S19043C8D0Ev)();
extern void ABISELECT(_ZThn144_N8S19043C8D0Ev,_ZThn80_N8S19043C8D0Ev)() __attribute__((weak));
extern void _ZN8S19043C92v4Ev();
extern void _ZN8S19043C92v5Ev();
extern void _ZN8S19043C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19043C9__8S19043C8__8S19043C2[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-144,-80),
  0,
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI8S19043C8[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19043C8D1Ev,_ZTv0_n16_N8S19043C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19043C8D0Ev,_ZTv0_n16_N8S19043C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19043C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19043C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19043C92v6Ev,
};
extern void _ZN8S19043C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19043C58S19043C9__8S19043C8__8S19043C2[] = {
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S19043C8[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
};
extern void _ZN8S19043C42v1Ev();
extern void _ZN8S19043C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19043C38S19043C9__8S19043C8__8S19043C2[] = {
  ABISELECT(-416,-252),
  (VTBL_ENTRY)&(_ZTI8S19043C8[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19043C32v3Ev,
};
extern void _ZN8S19043C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19043C58S19043C38S19043C9__A1__8S19043C8__8S19043C2[] = {
  ABISELECT(-464,-276),
  (VTBL_ENTRY)&(_ZTI8S19043C8[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
};
static  VTT_ENTRY vtt_S19043C2[] = {
  {&(_ZTV8S19043C2[5]),  5,48},
  {&(_ZTV8S19043C2[20]),  20,48},
  {&(_ZTV8S19043C2[32]),  32,48},
  {&(_ZTV8S19043C2[40]),  40,48},
  {&(_ZTV8S19043C2[43]),  43,48},
  {&(_ZTV8S19043C2[47]),  47,48},
  {&(_tg__ZTV8S19043C8__8S19043C2[3]),  3,6},
  {&(_tg__ZTV8S19043C9__8S19043C8__8S19043C2[9]),  9,15},
  {&(_tg__ZTV8S19043C58S19043C9__8S19043C8__8S19043C2[2]),  2,3},
  {&(_tg__ZTV8S19043C38S19043C9__8S19043C8__8S19043C2[2]),  2,4},
  {&(_tg__ZTV8S19043C58S19043C38S19043C9__A1__8S19043C8__8S19043C2[2]),  2,3},
};
extern VTBL_ENTRY _ZTI8S19043C2[];
extern  VTBL_ENTRY _ZTV8S19043C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19043C2[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19043C8D0Ev,_ZTv0_n16_N8S19043C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19043C8D0Ev,_ZThn80_N8S19043C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19043C8D1Ev,_ZTv0_n16_N8S19043C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19043C8D1Ev,_ZThn80_N8S19043C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19043C2D0Ev,_ZTv0_n16_N8S19043C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S19043C2D0Ev,_ZThn452_N8S19043C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19043C2D1Ev,_ZTv0_n16_N8S19043C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S19043C2D1Ev,_ZThn452_N8S19043C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19043C2D0Ev,_ZTv0_n20_N8S19043C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19043C2D0Ev,_ZThn372_N8S19043C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19043C2D1Ev,_ZTv0_n20_N8S19043C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19043C2D1Ev,_ZThn372_N8S19043C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19043C2 = {  "S19043C2", // class name
  bases_S19043C2, 14,
  &(vtc_S19043C2[0]), // expected_vtbl_contents
  &(vtt_S19043C2[0]), // expected_vtt_contents
  ABISELECT(1696,1040), // object size
  NSPAIRA(_ZTI8S19043C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19043C2),48, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19043C2),11, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19043C14  : S19043C4 , S19043C5 {
  void *s19043c14f0;
  __tsi64 s19043c14f1;
  short s19043c14f2;
  void *s19043c14f3;
  void *s19043c14f4[6];
  int s19043c14f5;
  ~S19043C14(); // tgen
  S19043C14(); // tgen
};
//SIG(-1 S19043C14) C1{ BC2{ v1 Fp Fs FD} BC3{ v2 Fp[2] FD[10] Fp Fs Fp[2]} Fp FL Fs Fp[7] Fi}


S19043C14 ::~S19043C14(){ note_dtor("S19043C14", this);} // tgen
S19043C14 ::S19043C14(){ note_ctor("S19043C14", this);} // tgen

static void Test_S19043C14()
{
  extern Class_Descriptor cd_S19043C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,56)];
    init_test(&cd_S19043C14, buf);
    S19043C14 *dp, &lv = *(dp=new (buf) S19043C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,220), "sizeof(S19043C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19043C14)");
    check_base_class_offset(lv, (S19043C4*), 0, "S19043C14");
    check_base_class_offset(lv, (S19043C5*), ABISELECT(48,24), "S19043C14");
    check_field_offset(lv, s19043c14f0, ABISELECT(272,172), "S19043C14.s19043c14f0");
    check_field_offset(lv, s19043c14f1, ABISELECT(280,176), "S19043C14.s19043c14f1");
    check_field_offset(lv, s19043c14f2, ABISELECT(288,184), "S19043C14.s19043c14f2");
    check_field_offset(lv, s19043c14f3, ABISELECT(296,188), "S19043C14.s19043c14f3");
    check_field_offset(lv, s19043c14f4, ABISELECT(304,192), "S19043C14.s19043c14f4");
    check_field_offset(lv, s19043c14f5, ABISELECT(352,216), "S19043C14.s19043c14f5");
    test_class_info(&lv, &cd_S19043C14);
    dp->~S19043C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19043C14(Test_S19043C14, "S19043C14", ABISELECT(368,220));

#else // __cplusplus

extern void _ZN9S19043C14C1Ev();
extern void _ZN9S19043C14D1Ev();
Name_Map name_map_S19043C14[] = {
  NSPAIR(_ZN9S19043C14C1Ev),
  NSPAIR(_ZN9S19043C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C5;
extern VTBL_ENTRY _ZTI8S19043C5[];
extern  VTBL_ENTRY _ZTV8S19043C5[];
static Base_Class bases_S19043C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19043C4,    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},
  {&cd_S19043C5,    ABISELECT(48,24), //bcp->offset
    3, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S19043C14[];
extern void _ZN8S19043C42v1Ev();
extern void _ZN8S19043C52v2Ev();
static  VTBL_ENTRY vtc_S19043C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19043C14[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19043C14[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
};
extern VTBL_ENTRY _ZTI9S19043C14[];
extern  VTBL_ENTRY _ZTV9S19043C14[];
Class_Descriptor cd_S19043C14 = {  "S19043C14", // class name
  bases_S19043C14, 2,
  &(vtc_S19043C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,220), // object size
  NSPAIRA(_ZTI9S19043C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19043C14),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  S19043C16  : virtual S19043C4 {
  void *s19043c16f0;
  ::S19043C5 s19043c16f1;
  void *s19043c16f2;
  void *s19043c16f3;
  ~S19043C16(); // tgen
  S19043C16(); // tgen
};
//SIG(-1 S19043C16) C1{ VBC2{ v1 Fp Fs FD} Fp FC3{ v2 Fp[2] FD[10] Fp Fs Fp[2]} Fp[2]}


S19043C16 ::~S19043C16(){ note_dtor("S19043C16", this);} // tgen
S19043C16 ::S19043C16(){ note_ctor("S19043C16", this);} // tgen

static void Test_S19043C16()
{
  extern Class_Descriptor cd_S19043C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,48)];
    init_test(&cd_S19043C16, buf);
    S19043C16 *dp, &lv = *(dp=new (buf) S19043C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,188), "sizeof(S19043C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19043C16)");
    check_base_class_offset(lv, (S19043C4*), ABISELECT(256,164), "S19043C16");
    check_field_offset(lv, s19043c16f0, ABISELECT(8,4), "S19043C16.s19043c16f0");
    check_field_offset(lv, s19043c16f1, ABISELECT(16,8), "S19043C16.s19043c16f1");
    check_field_offset(lv, s19043c16f2, ABISELECT(240,156), "S19043C16.s19043c16f2");
    check_field_offset(lv, s19043c16f3, ABISELECT(248,160), "S19043C16.s19043c16f3");
    test_class_info(&lv, &cd_S19043C16);
    dp->~S19043C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19043C16(Test_S19043C16, "S19043C16", ABISELECT(304,188));

#else // __cplusplus

extern void _ZN9S19043C16C1Ev();
extern void _ZN9S19043C16D1Ev();
Name_Map name_map_S19043C16[] = {
  NSPAIR(_ZN9S19043C16C1Ev),
  NSPAIR(_ZN9S19043C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
static Base_Class bases_S19043C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19043C4,    ABISELECT(256,164), //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 _ZTI9S19043C16[];
extern void _ZN8S19043C42v1Ev();
static  VTBL_ENTRY vtc_S19043C16[] = {
  ABISELECT(256,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S19043C16[0]),
  0,
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI9S19043C16[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
};
extern VTBL_ENTRY _ZTV9S19043C16[];
static  VTT_ENTRY vtt_S19043C16[] = {
  {&(_ZTV9S19043C16[3]),  3,7},
  {&(_ZTV9S19043C16[6]),  6,7},
};
extern VTBL_ENTRY _ZTI9S19043C16[];
extern  VTBL_ENTRY _ZTV9S19043C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19043C16[];
Class_Descriptor cd_S19043C16 = {  "S19043C16", // class name
  bases_S19043C16, 1,
  &(vtc_S19043C16[0]), // expected_vtbl_contents
  &(vtt_S19043C16[0]), // expected_vtt_contents
  ABISELECT(304,188), // object size
  NSPAIRA(_ZTI9S19043C16),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19043C16),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19043C16),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  S19043C15  : S19043C14 , S19043C16 , S19043C11 {
  int s19043c15f0;
  ::S19043C8 s19043c15f1;
  void *s19043c15f2;
  char s19043c15f3[8];
  void *s19043c15f4;
  ::S19043C10 s19043c15f5;
  __tsi64 s19043c15f6;
  ~S19043C15(); // tgen
  S19043C15(); // tgen
};
//SIG(-1 S19043C15) C1{ BC2{ BC3{ v1 Fp Fs FD} BC4{ v2 Fp[2] FD[10] Fp Fs Fp[2]} Fp FL Fs Fp[7] Fi} BC5{ VBC3 Fp FC4 Fp[2]} BC6{ vd v3 v4 Fi FU7{ m Fp} Fs:16 FC4 FC8{}} Fi FC9{ VBC10{ BC3 BC4 BC11{ BC3 BC4 v5 Fi FC3 Fp} vd v6 v7 v8 Fc Fi FL Fl FL Fp} BC3 vd Fs[4] Fi FD Fi Fp[5] FL} Fp Fc[8] Fp FC12{ m Fi[2] Fs FC6} FL}


S19043C15 ::~S19043C15(){ note_dtor("S19043C15", this);} // tgen
S19043C15 ::S19043C15(){ note_ctor("S19043C15", this);} // tgen

static void Test_S19043C15()
{
  extern Class_Descriptor cd_S19043C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(131,319)];
    init_test(&cd_S19043C15, buf);
    S19043C15 *dp, &lv = *(dp=new (buf) S19043C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2080,1272), "sizeof(S19043C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19043C15)");
    check_base_class_offset(lv, (S19043C4*)(S19043C14*), 0, "S19043C15");
    check_base_class_offset(lv, (S19043C5*)(S19043C14*), ABISELECT(48,24), "S19043C15");
    check_base_class_offset(lv, (S19043C14*), 0, "S19043C15");
    check_base_class_offset(lv, (S19043C4*)(S19043C16*), ABISELECT(2032,1248), "S19043C15");
    check_base_class_offset(lv, (S19043C16*), ABISELECT(368,220), "S19043C15");
    check_base_class_offset(lv, (S19043C11*), ABISELECT(624,384), "S19043C15");
    check_field_offset(lv, s19043c15f0, ABISELECT(884,552), "S19043C15.s19043c15f0");
    check_field_offset(lv, s19043c15f1, ABISELECT(896,556), "S19043C15.s19043c15f1");
    check_field_offset(lv, s19043c15f2, ABISELECT(1696,1044), "S19043C15.s19043c15f2");
    check_field_offset(lv, s19043c15f3, ABISELECT(1704,1048), "S19043C15.s19043c15f3");
    check_field_offset(lv, s19043c15f4, ABISELECT(1712,1056), "S19043C15.s19043c15f4");
    check_field_offset(lv, s19043c15f5, ABISELECT(1728,1060), "S19043C15.s19043c15f5");
    check_field_offset(lv, s19043c15f6, ABISELECT(2016,1240), "S19043C15.s19043c15f6");
    test_class_info(&lv, &cd_S19043C15);
    dp->~S19043C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19043C15(Test_S19043C15, "S19043C15", ABISELECT(2080,1272));

#else // __cplusplus

extern void _ZN9S19043C15C1Ev();
extern void _ZN9S19043C15D1Ev();
Name_Map name_map_S19043C15[] = {
  NSPAIR(_ZN9S19043C15C1Ev),
  NSPAIR(_ZN9S19043C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C5;
extern VTBL_ENTRY _ZTI8S19043C5[];
extern  VTBL_ENTRY _ZTV8S19043C5[];
extern Class_Descriptor cd_S19043C14;
extern VTBL_ENTRY _ZTI9S19043C14[];
extern  VTBL_ENTRY _ZTV9S19043C14[];
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C16;
extern VTBL_ENTRY _ZTI9S19043C16[];
extern  VTBL_ENTRY _ZTV9S19043C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19043C16[];
extern Class_Descriptor cd_S19043C11;
extern VTBL_ENTRY _ZTI9S19043C11[];
extern  VTBL_ENTRY _ZTV9S19043C11[];
static Base_Class bases_S19043C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19043C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19043C5,    ABISELECT(48,24), //bcp->offset
    6, //bcp->virtual_function_table_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_S19043C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19043C4,    ABISELECT(2032,1248), //bcp->offset
    18, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19043C16,    ABISELECT(368,220), //bcp->offset
    9, //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19043C11,    ABISELECT(624,384), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19043C15[];
extern void _ZN8S19043C42v1Ev();
extern void _ZN9S19043C15D1Ev();
extern void _ZN9S19043C15D0Ev();
extern void _ZN8S19043C52v2Ev();
extern void ABISELECT(_ZThn624_N9S19043C15D1Ev,_ZThn384_N9S19043C15D1Ev)();
extern void ABISELECT(_ZThn624_N9S19043C15D0Ev,_ZThn384_N9S19043C15D0Ev)();
extern void _ZN9S19043C112v8Ev();
extern void _ZN9S19043C112v9Ev();
extern void _ZN8S19043C42v1Ev();
static  VTBL_ENTRY vtc_S19043C15[] = {
  ABISELECT(2032,1248),
  0,
  (VTBL_ENTRY)&(_ZTI9S19043C15[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19043C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19043C15D0Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19043C15[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
  ABISELECT(1664,1028),
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI9S19043C15[0]),
  ABISELECT(-624,-384),
  (VTBL_ENTRY)&(_ZTI9S19043C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn624_N9S19043C15D1Ev,_ZThn384_N9S19043C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn624_N9S19043C15D0Ev,_ZThn384_N9S19043C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19043C112v8Ev,
  (VTBL_ENTRY)&_ZN9S19043C112v9Ev,
  0,
  ABISELECT(-2032,-1248),
  (VTBL_ENTRY)&(_ZTI9S19043C15[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
};
extern VTBL_ENTRY _ZTV9S19043C15[];
static  VTBL_ENTRY _tg__ZTV9S19043C16__9S19043C15[] = {
  ABISELECT(1664,1028),
  0,
  (VTBL_ENTRY)&(_ZTI9S19043C16[0]),
};
extern void _ZN8S19043C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19043C4__9S19043C16__9S19043C15[] = {
  0,
  ABISELECT(-1664,-1028),
  (VTBL_ENTRY)&(_ZTI9S19043C16[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
};
static  VTT_ENTRY vtt_S19043C15[] = {
  {&(_ZTV9S19043C15[3]),  3,22},
  {&(_tg__ZTV9S19043C16__9S19043C15[3]),  3,3},
  {&(_tg__ZTV8S19043C4__9S19043C16__9S19043C15[3]),  3,4},
  {&(_ZTV9S19043C15[12]),  12,22},
  {&(_ZTV9S19043C15[21]),  21,22},
};
extern VTBL_ENTRY _ZTI9S19043C15[];
extern  VTBL_ENTRY _ZTV9S19043C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19043C15[];
Class_Descriptor cd_S19043C15 = {  "S19043C15", // class name
  bases_S19043C15, 6,
  &(vtc_S19043C15[0]), // expected_vtbl_contents
  &(vtt_S19043C15[0]), // expected_vtt_contents
  ABISELECT(2080,1272), // object size
  NSPAIRA(_ZTI9S19043C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19043C15),22, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19043C15),5, //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  S19043C13  : S19252C4 , S19043C4 , S19043C14 , S19043C15 {
  virtual  ~S19043C13(); // _ZN9S19043C13D2Ev
  virtual void  v7(); // _ZN9S19043C132v7Ev
  S19043C13(); // tgen
};
//SIG(-1 S19043C13) C1{ BC2{ m Fi Fc Fp FC3{}} BC4{ v2 Fp Fs FD} BC5{ BC4 BC6{ v3 Fp[2] FD[10] Fp Fs Fp[2]} Fp FL Fs Fp[7] Fi} BC7{ BC5 BC8{ VBC4 Fp FC6 Fp[2]} BC9{ vd v4 v5 Fi FU10{ m Fp} Fs:16 FC6 FC3} Fi FC11{ VBC12{ BC4 BC6 BC13{ BC4 BC6 v6 Fi FC4 Fp} vd v7 v8 v9 Fc Fi FL Fl FL Fp} BC4 vd Fs[4] Fi FD Fi Fp[5] FL} Fp Fc[8] Fp FC14{ m Fi[2] Fs FC9} FL} vd v1}


 S19043C13 ::~S19043C13(){ note_dtor("S19043C13", this);}
void  S19043C13 ::v7(){vfunc_called(this, "_ZN9S19043C132v7Ev");}
S19043C13 ::S19043C13(){ note_ctor("S19043C13", this);} // tgen

static void Test_S19043C13()
{
  extern Class_Descriptor cd_S19043C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(159,384)];
    init_test(&cd_S19043C13, buf);
    S19043C13 *dp, &lv = *(dp=new (buf) S19043C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2528,1532), "sizeof(S19043C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19043C13)");
    check_base_class_offset(lv, (S19252C4*), ABISELECT(48,24), "S19043C13");
    /*is_ambiguous_... S19043C13::S19043C4 */ AMB_check_base_class_offset(lv, (S19043C4*), 0, "S19043C13");
    /*is_ambiguous_... S19043C13::S19043C14 */ AMB_check_base_class_offset(lv, (S19043C4*)(S19043C14*), ABISELECT(80,40), "S19043C13");
    /*is_ambiguous_... S19043C13::S19043C14 */ AMB_check_base_class_offset(lv, (S19043C5*)(S19043C14*), ABISELECT(128,64), "S19043C13");
    /*is_ambiguous_... S19043C13::S19043C14 */ AMB_check_base_class_offset(lv, (S19043C14*), ABISELECT(80,40), "S19043C13");
    check_base_class_offset(lv, (S19043C4*)(S19043C14*)(S19043C15*), ABISELECT(448,260), "S19043C13");
    check_base_class_offset(lv, (S19043C5*)(S19043C14*)(S19043C15*), ABISELECT(496,284), "S19043C13");
    check_base_class_offset(lv, (S19043C14*)(S19043C15*), ABISELECT(448,260), "S19043C13");
    check_base_class_offset(lv, (S19043C4*)(S19043C16*)(S19043C15*), ABISELECT(2480,1508), "S19043C13");
    check_base_class_offset(lv, (S19043C16*)(S19043C15*), ABISELECT(816,480), "S19043C13");
    check_base_class_offset(lv, (S19043C11*)(S19043C15*), ABISELECT(1072,644), "S19043C13");
    check_base_class_offset(lv, (S19043C15*), ABISELECT(448,260), "S19043C13");
    test_class_info(&lv, &cd_S19043C13);
    dp->~S19043C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19043C13(Test_S19043C13, "S19043C13", ABISELECT(2528,1532));

#else // __cplusplus

extern void _ZN9S19043C13C1Ev();
extern void _ZN9S19043C13D2Ev();
Name_Map name_map_S19043C13[] = {
  NSPAIR(_ZN9S19043C13C1Ev),
  NSPAIR(_ZN9S19043C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19252C4;
extern VTBL_ENTRY _ZTI8S19252C4[];
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C5;
extern VTBL_ENTRY _ZTI8S19043C5[];
extern  VTBL_ENTRY _ZTV8S19043C5[];
extern Class_Descriptor cd_S19043C14;
extern VTBL_ENTRY _ZTI9S19043C14[];
extern  VTBL_ENTRY _ZTV9S19043C14[];
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C5;
extern VTBL_ENTRY _ZTI8S19043C5[];
extern  VTBL_ENTRY _ZTV8S19043C5[];
extern Class_Descriptor cd_S19043C14;
extern VTBL_ENTRY _ZTI9S19043C14[];
extern  VTBL_ENTRY _ZTV9S19043C14[];
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C16;
extern VTBL_ENTRY _ZTI9S19043C16[];
extern  VTBL_ENTRY _ZTV9S19043C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19043C16[];
extern Class_Descriptor cd_S19043C11;
extern VTBL_ENTRY _ZTI9S19043C11[];
extern  VTBL_ENTRY _ZTV9S19043C11[];
extern Class_Descriptor cd_S19043C15;
extern VTBL_ENTRY _ZTI9S19043C15[];
extern  VTBL_ENTRY _ZTV9S19043C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19043C15[];
static Base_Class bases_S19043C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19252C4,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S19043C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19043C4,    ABISELECT(80,40), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19043C5,    ABISELECT(128,64), //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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19043C14,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19043C4,    ABISELECT(448,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
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19043C5,    ABISELECT(496,284), //bcp->offset
    19, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19043C14,    ABISELECT(448,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
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19043C4,    ABISELECT(2480,1508), //bcp->offset
    31, //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
    9, //immediately_derived
  0, 1},
  {&cd_S19043C16,    ABISELECT(816,480), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19043C11,    ABISELECT(1072,644), //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
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19043C15,    ABISELECT(448,260), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //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 _ZTI9S19043C13[];
extern void _ZN8S19043C42v1Ev();
extern void _ZN9S19043C13D1Ev();
extern void _ZN9S19043C13D0Ev();
extern void _ZN9S19043C132v7Ev();
extern void _ZN8S19043C42v1Ev();
extern void _ZN8S19043C52v2Ev();
extern void _ZN8S19043C42v1Ev();
extern void ABISELECT(_ZThn448_N9S19043C13D1Ev,_ZThn260_N9S19043C13D1Ev)();
extern void ABISELECT(_ZThn448_N9S19043C13D0Ev,_ZThn260_N9S19043C13D0Ev)();
extern void _ZN8S19043C52v2Ev();
extern void ABISELECT(_ZThn1072_N9S19043C13D1Ev,_ZThn644_N9S19043C13D1Ev)();
extern void ABISELECT(_ZThn1072_N9S19043C13D0Ev,_ZThn644_N9S19043C13D0Ev)();
extern void _ZN9S19043C112v8Ev();
extern void _ZN9S19043C112v9Ev();
extern void _ZN8S19043C42v1Ev();
static  VTBL_ENTRY vtc_S19043C13[] = {
  ABISELECT(2480,1508),
  0,
  (VTBL_ENTRY)&(_ZTI9S19043C13[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19043C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19043C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19043C132v7Ev,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S19043C13[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI9S19043C13[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
  ABISELECT(2032,1248),
  ABISELECT(-448,-260),
  (VTBL_ENTRY)&(_ZTI9S19043C13[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N9S19043C13D1Ev,_ZThn260_N9S19043C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N9S19043C13D0Ev,_ZThn260_N9S19043C13D0Ev),
  ABISELECT(-496,-284),
  (VTBL_ENTRY)&(_ZTI9S19043C13[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
  ABISELECT(1664,1028),
  ABISELECT(-816,-480),
  (VTBL_ENTRY)&(_ZTI9S19043C13[0]),
  ABISELECT(-1072,-644),
  (VTBL_ENTRY)&(_ZTI9S19043C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N9S19043C13D1Ev,_ZThn644_N9S19043C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N9S19043C13D0Ev,_ZThn644_N9S19043C13D0Ev),
  (VTBL_ENTRY)&_ZN9S19043C112v8Ev,
  (VTBL_ENTRY)&_ZN9S19043C112v9Ev,
  0,
  ABISELECT(-2480,-1508),
  (VTBL_ENTRY)&(_ZTI9S19043C13[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
};
extern VTBL_ENTRY _ZTV9S19043C13[];
extern void _ZN8S19043C42v1Ev();
extern void _ZN9S19043C15D1Ev();
extern void _ZN9S19043C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19043C15__9S19043C13[] = {
  ABISELECT(2032,1248),
  0,
  (VTBL_ENTRY)&(_ZTI9S19043C15[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19043C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19043C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19043C169S19043C15__9S19043C13[] = {
  ABISELECT(1664,1028),
  0,
  (VTBL_ENTRY)&(_ZTI9S19043C16[0]),
};
extern void _ZN8S19043C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19043C4__9S19043C169S19043C15__9S19043C13[] = {
  0,
  ABISELECT(-1664,-1028),
  (VTBL_ENTRY)&(_ZTI9S19043C16[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19043C16__9S19043C15__9S19043C13[] = {
  ABISELECT(1664,1028),
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI9S19043C15[0]),
};
extern void _ZN8S19043C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19043C4__A1__9S19043C15__9S19043C13[] = {
  0,
  ABISELECT(-2032,-1248),
  (VTBL_ENTRY)&(_ZTI9S19043C15[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
};
static  VTT_ENTRY vtt_S19043C13[] = {
  {&(_ZTV9S19043C13[3]),  3,35},
  {&(_tg__ZTV9S19043C15__9S19043C13[3]),  3,6},
  {&(_tg__ZTV9S19043C169S19043C15__9S19043C13[3]),  3,3},
  {&(_tg__ZTV8S19043C4__9S19043C169S19043C15__9S19043C13[3]),  3,4},
  {&(_tg__ZTV9S19043C16__9S19043C15__9S19043C13[3]),  3,3},
  {&(_tg__ZTV8S19043C4__A1__9S19043C15__9S19043C13[3]),  3,4},
  {&(_ZTV9S19043C13[16]),  16,35},
  {&(_ZTV9S19043C13[25]),  25,35},
  {&(_ZTV9S19043C13[34]),  34,35},
};
extern VTBL_ENTRY _ZTI9S19043C13[];
extern  VTBL_ENTRY _ZTV9S19043C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19043C13[];
Class_Descriptor cd_S19043C13 = {  "S19043C13", // class name
  bases_S19043C13, 12,
  &(vtc_S19043C13[0]), // expected_vtbl_contents
  &(vtt_S19043C13[0]), // expected_vtt_contents
  ABISELECT(2528,1532), // object size
  NSPAIRA(_ZTI9S19043C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19043C13),35, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19043C13),9, //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  S19043C1  : virtual S19043C2 {
  int s19043c1f0;
  ::S19043C13 s19043c1f1;
  int s19043c1f2;
  ::S19043C5 s19043c1f3;
  ~S19043C1(); // tgen
  S19043C1(); // tgen
};
//SIG(1 S19043C1) C1{ VBC2{ BC3{ BC4{ v1 Fp Fs FD} BC5{ v2 Fp[2] FD[10] Fp Fs Fp[2]} v3 Fi FC4 Fp} BC6{ m Fi Fc Fp FC7{}} VBC8{ VBC9{ BC4 BC5 BC3 vd v4 v5 v6 Fc Fi FL Fl FL Fp} BC4 vd Fs[4] Fi FD Fi Fp[5] FL} VBC10{ m Fi[2] Fs FC11{ vd v8 v9 Fi FU12{ m Fp} Fs:16 FC5 FC7}} BC5 vd Fp} Fi FC13{ BC6 BC4 BC14{ BC4 BC5 Fp FL Fs Fp Fp[6] Fi} BC15{ BC14 BC16{ VBC4 Fp FC5 Fp Fp} BC11 Fi FC8 Fp Fc[8] Fp FC10 FL} vd v7} Fi FC5}


S19043C1 ::~S19043C1(){ note_dtor("S19043C1", this);} // tgen
S19043C1 ::S19043C1(){ note_ctor("S19043C1", this);} // tgen

static void Test_S19043C1()
{
  extern Class_Descriptor cd_S19043C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(281,684)];
    init_test(&cd_S19043C1, buf);
    S19043C1 *dp, &lv = *(dp=new (buf) S19043C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4480,2732), "sizeof(S19043C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19043C1)");
    /*is_ambiguous_... S19043C2::S19043C3 */ AMB_check_base_class_offset(lv, (S19043C4*)(S19043C3*)(S19043C2*), ABISELECT(2784,1692), "S19043C1");
    /*is_ambiguous_... S19043C2::S19043C3 */ AMB_check_base_class_offset(lv, (S19043C5*)(S19043C3*)(S19043C2*), ABISELECT(2832,1716), "S19043C1");
    /*is_ambiguous_... S19043C2::S19043C3 */ AMB_check_base_class_offset(lv, (S19043C3*)(S19043C2*), ABISELECT(2784,1692), "S19043C1");
    check_base_class_offset(lv, (S19252C4*)(S19043C2*), ABISELECT(3128,1896), "S19043C1");
    /*is_ambiguous_... S19043C9::S19043C4 */ AMB_check_base_class_offset(lv, (S19043C4*)(S19043C9*), ABISELECT(3536,2144), "S19043C1");
    /*is_ambiguous_... S19043C9::S19043C5 */ AMB_check_base_class_offset(lv, (S19043C5*)(S19043C9*), ABISELECT(3584,2168), "S19043C1");
    check_base_class_offset(lv, (S19043C4*)(S19043C3*)(S19043C9*), ABISELECT(3808,2316), "S19043C1");
    check_base_class_offset(lv, (S19043C5*)(S19043C3*)(S19043C9*), ABISELECT(3856,2340), "S19043C1");
    check_base_class_offset(lv, (S19043C3*)(S19043C9*), ABISELECT(3808,2316), "S19043C1");
    check_base_class_offset(lv, (S19043C9*)(S19043C8*), ABISELECT(3536,2144), "S19043C1");
    /*is_ambiguous_... S19043C8::S19043C4 */ AMB_check_base_class_offset(lv, (S19043C4*)(S19043C8*), ABISELECT(3392,2064), "S19043C1");
    check_base_class_offset(lv, (S19043C8*)(S19043C2*), ABISELECT(3392,2064), "S19043C1");
    check_base_class_offset(lv, (S19043C10*)(S19043C2*), ABISELECT(4192,2552), "S19043C1");
    /*is_ambiguous_... S19043C2::S19043C5 */ AMB_check_base_class_offset(lv, (S19043C5*)(S19043C2*), ABISELECT(3152,1912), "S19043C1");
    check_base_class_offset(lv, (S19043C2*), ABISELECT(2784,1692), "S19043C1");
    check_field_offset(lv, s19043c1f0, ABISELECT(8,4), "S19043C1.s19043c1f0");
    check_field_offset(lv, s19043c1f1, ABISELECT(16,8), "S19043C1.s19043c1f1");
    check_field_offset(lv, s19043c1f2, ABISELECT(2544,1540), "S19043C1.s19043c1f2");
    check_field_offset(lv, s19043c1f3, ABISELECT(2560,1544), "S19043C1.s19043c1f3");
    test_class_info(&lv, &cd_S19043C1);
    dp->~S19043C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19043C1(Test_S19043C1, "S19043C1", ABISELECT(4480,2732));

#else // __cplusplus

extern void _ZN8S19043C1C1Ev();
extern void _ZN8S19043C1D1Ev();
Name_Map name_map_S19043C1[] = {
  NSPAIR(_ZN8S19043C1C1Ev),
  NSPAIR(_ZN8S19043C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C5;
extern VTBL_ENTRY _ZTI8S19043C5[];
extern  VTBL_ENTRY _ZTV8S19043C5[];
extern Class_Descriptor cd_S19043C3;
extern VTBL_ENTRY _ZTI8S19043C3[];
extern  VTBL_ENTRY _ZTV8S19043C3[];
extern Class_Descriptor cd_S19252C4;
extern VTBL_ENTRY _ZTI8S19252C4[];
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C5;
extern VTBL_ENTRY _ZTI8S19043C5[];
extern  VTBL_ENTRY _ZTV8S19043C5[];
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C5;
extern VTBL_ENTRY _ZTI8S19043C5[];
extern  VTBL_ENTRY _ZTV8S19043C5[];
extern Class_Descriptor cd_S19043C3;
extern VTBL_ENTRY _ZTI8S19043C3[];
extern  VTBL_ENTRY _ZTV8S19043C3[];
extern Class_Descriptor cd_S19043C9;
extern VTBL_ENTRY _ZTI8S19043C9[];
extern  VTBL_ENTRY _ZTV8S19043C9[];
extern Class_Descriptor cd_S19043C4;
extern VTBL_ENTRY _ZTI8S19043C4[];
extern  VTBL_ENTRY _ZTV8S19043C4[];
extern Class_Descriptor cd_S19043C8;
extern VTBL_ENTRY _ZTI8S19043C8[];
extern  VTBL_ENTRY _ZTV8S19043C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19043C8[];
extern Class_Descriptor cd_S19043C10;
extern VTBL_ENTRY _ZTI9S19043C10[];
extern Class_Descriptor cd_S19043C5;
extern VTBL_ENTRY _ZTI8S19043C5[];
extern  VTBL_ENTRY _ZTV8S19043C5[];
extern Class_Descriptor cd_S19043C2;
extern VTBL_ENTRY _ZTI8S19043C2[];
extern  VTBL_ENTRY _ZTV8S19043C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19043C2[];
static Base_Class bases_S19043C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19043C4,    ABISELECT(2784,1692), //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S19043C5,    ABISELECT(2832,1716), //bcp->offset
    21, //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
    10, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19043C3,    ABISELECT(2784,1692), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19252C4,    ABISELECT(3128,1896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19043C4,    ABISELECT(3536,2144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19043C5,    ABISELECT(3584,2168), //bcp->offset
    50, //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19043C4,    ABISELECT(3808,2316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19043C5,    ABISELECT(3856,2340), //bcp->offset
    57, //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19043C3,    ABISELECT(3808,2316), //bcp->offset
    53, //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
    9, //immediately_derived
  0, 0},
  {&cd_S19043C9,    ABISELECT(3536,2144), //bcp->offset
    35, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19043C4,    ABISELECT(3392,2064), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19043C8,    ABISELECT(3392,2064), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19043C10,    ABISELECT(4192,2552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19043C5,    ABISELECT(3152,1912), //bcp->offset
    24, //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
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19043C2,    ABISELECT(2784,1692), //bcp->offset
    8, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19043C1[];
extern void _ZN8S19043C1D1Ev();
extern void _ZN8S19043C1D0Ev();
extern void _ZN8S19043C42v1Ev();
extern void _ZN8S19043C32v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S19043C1D1Ev,_ZTv0_n36_N8S19043C1D1Ev)();
extern void ABISELECT(_ZThn2784_N8S19043C1D1Ev,_ZThn1692_N8S19043C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19043C1D0Ev,_ZTv0_n36_N8S19043C1D0Ev)();
extern void ABISELECT(_ZThn2784_N8S19043C1D0Ev,_ZThn1692_N8S19043C1D0Ev)() __attribute__((weak));
extern void _ZN8S19043C52v2Ev();
extern void _ZN8S19043C52v2Ev();
extern void _ZN8S19043C42v1Ev();
extern void ABISELECT(_ZTv0_n40_N8S19043C1D1Ev,_ZTv0_n20_N8S19043C1D1Ev)();
extern void ABISELECT(_ZThn3392_N8S19043C1D1Ev,_ZThn2064_N8S19043C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19043C1D0Ev,_ZTv0_n20_N8S19043C1D0Ev)();
extern void ABISELECT(_ZThn3392_N8S19043C1D0Ev,_ZThn2064_N8S19043C1D0Ev)() __attribute__((weak));
extern void _ZN8S19043C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19043C1D1Ev,_ZTv0_n16_N8S19043C1D1Ev)();
extern void ABISELECT(_ZThn3536_N8S19043C1D1Ev,_ZThn2144_N8S19043C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19043C1D0Ev,_ZTv0_n16_N8S19043C1D0Ev)();
extern void ABISELECT(_ZThn3536_N8S19043C1D0Ev,_ZThn2144_N8S19043C1D0Ev)() __attribute__((weak));
extern void _ZN8S19043C92v4Ev();
extern void _ZN8S19043C92v5Ev();
extern void _ZN8S19043C92v6Ev();
extern void _ZN8S19043C52v2Ev();
extern void _ZN8S19043C42v1Ev();
extern void _ZN8S19043C32v3Ev();
extern void _ZN8S19043C52v2Ev();
static  VTBL_ENTRY vtc_S19043C1[] = {
  ABISELECT(4192,2552),
  ABISELECT(3536,2144),
  ABISELECT(3392,2064),
  ABISELECT(2784,1692),
  0,
  (VTBL_ENTRY)&(_ZTI8S19043C1[0]),
  (VTBL_ENTRY)&_ZN8S19043C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19043C1D0Ev,
  ABISELECT(-2784,-1692),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(1408,860),
  ABISELECT(752,452),
  ABISELECT(608,372),
  ABISELECT(-2784,-1692),
  (VTBL_ENTRY)&(_ZTI8S19043C1[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19043C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19043C1D1Ev,_ZTv0_n36_N8S19043C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19043C1D0Ev,_ZTv0_n36_N8S19043C1D0Ev),
  ABISELECT(-2832,-1716),
  (VTBL_ENTRY)&(_ZTI8S19043C1[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
  ABISELECT(-3152,-1912),
  (VTBL_ENTRY)&(_ZTI8S19043C1[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
  ABISELECT(-3392,-2064),
  0,
  ABISELECT(144,80),
  ABISELECT(-3392,-2064),
  (VTBL_ENTRY)&(_ZTI8S19043C1[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19043C1D1Ev,_ZTv0_n20_N8S19043C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19043C1D0Ev,_ZTv0_n20_N8S19043C1D0Ev),
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-3536,-2144),
  0,
  ABISELECT(-3536,-2144),
  (VTBL_ENTRY)&(_ZTI8S19043C1[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19043C1D1Ev,_ZTv0_n16_N8S19043C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19043C1D0Ev,_ZTv0_n16_N8S19043C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19043C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19043C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19043C92v6Ev,
  ABISELECT(-3584,-2168),
  (VTBL_ENTRY)&(_ZTI8S19043C1[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
  ABISELECT(-3808,-2316),
  (VTBL_ENTRY)&(_ZTI8S19043C1[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19043C32v3Ev,
  ABISELECT(-3856,-2340),
  (VTBL_ENTRY)&(_ZTI8S19043C1[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S19043C1[];
extern void _ZN8S19043C42v1Ev();
extern void _ZN8S19043C32v3Ev();
extern void _ZN8S19043C2D1Ev();
extern void _ZN8S19043C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19043C2__8S19043C1[] = {
  ABISELECT(1408,860),
  ABISELECT(752,452),
  ABISELECT(608,372),
  0,
  (VTBL_ENTRY)&(_ZTI8S19043C2[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19043C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19043C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19043C2D0Ev,
};
extern void _ZN8S19043C42v1Ev();
extern void ABISELECT(_ZTv0_n40_N8S19043C2D1Ev,_ZTv0_n20_N8S19043C2D1Ev)();
extern void ABISELECT(_ZThn608_N8S19043C2D1Ev,_ZThn372_N8S19043C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19043C2D0Ev,_ZTv0_n20_N8S19043C2D0Ev)();
extern void ABISELECT(_ZThn608_N8S19043C2D0Ev,_ZThn372_N8S19043C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19043C8__8S19043C2__8S19043C1[] = {
  ABISELECT(-608,-372),
  0,
  ABISELECT(144,80),
  ABISELECT(-608,-372),
  (VTBL_ENTRY)&(_ZTI8S19043C2[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19043C2D1Ev,_ZTv0_n20_N8S19043C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19043C2D0Ev,_ZTv0_n20_N8S19043C2D0Ev),
};
extern void _ZN8S19043C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19043C2D1Ev,_ZTv0_n16_N8S19043C2D1Ev)();
extern void ABISELECT(_ZThn752_N8S19043C2D1Ev,_ZThn452_N8S19043C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19043C2D0Ev,_ZTv0_n16_N8S19043C2D0Ev)();
extern void ABISELECT(_ZThn752_N8S19043C2D0Ev,_ZThn452_N8S19043C2D0Ev)() __attribute__((weak));
extern void _ZN8S19043C92v4Ev();
extern void _ZN8S19043C92v5Ev();
extern void _ZN8S19043C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19043C9__8S19043C2__8S19043C1[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-752,-452),
  0,
  ABISELECT(-752,-452),
  (VTBL_ENTRY)&(_ZTI8S19043C2[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19043C2D1Ev,_ZTv0_n16_N8S19043C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19043C2D0Ev,_ZTv0_n16_N8S19043C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19043C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19043C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19043C92v6Ev,
};
extern void _ZN8S19043C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19043C58S19043C9__A1__8S19043C2__8S19043C1[] = {
  ABISELECT(-800,-476),
  (VTBL_ENTRY)&(_ZTI8S19043C2[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
};
extern void _ZN8S19043C42v1Ev();
extern void _ZN8S19043C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19043C38S19043C9__A1__8S19043C2__8S19043C1[] = {
  ABISELECT(-1024,-624),
  (VTBL_ENTRY)&(_ZTI8S19043C2[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19043C32v3Ev,
};
extern void _ZN8S19043C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19043C58S19043C38S19043C9__A2__8S19043C2__8S19043C1[] = {
  ABISELECT(-1072,-648),
  (VTBL_ENTRY)&(_ZTI8S19043C2[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
};
extern void _ZN8S19043C42v1Ev();
extern void _ZN8S19043C8D1Ev();
extern void _ZN8S19043C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19043C8__8S19043C1[] = {
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19043C8[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19043C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19043C8D0Ev,
};
extern void _ZN8S19043C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19043C8D1Ev,_ZTv0_n16_N8S19043C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19043C8D1Ev,_ZThn80_N8S19043C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19043C8D0Ev,_ZTv0_n16_N8S19043C8D0Ev)();
extern void ABISELECT(_ZThn144_N8S19043C8D0Ev,_ZThn80_N8S19043C8D0Ev)() __attribute__((weak));
extern void _ZN8S19043C92v4Ev();
extern void _ZN8S19043C92v5Ev();
extern void _ZN8S19043C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19043C9__8S19043C8__8S19043C1[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-144,-80),
  0,
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI8S19043C8[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19043C8D1Ev,_ZTv0_n16_N8S19043C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19043C8D0Ev,_ZTv0_n16_N8S19043C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19043C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19043C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19043C92v6Ev,
};
extern void _ZN8S19043C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19043C58S19043C9__8S19043C8__8S19043C1[] = {
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S19043C8[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
};
extern void _ZN8S19043C42v1Ev();
extern void _ZN8S19043C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19043C38S19043C9__8S19043C8__8S19043C1[] = {
  ABISELECT(-416,-252),
  (VTBL_ENTRY)&(_ZTI8S19043C8[0]),
  (VTBL_ENTRY)&_ZN8S19043C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19043C32v3Ev,
};
extern void _ZN8S19043C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19043C58S19043C38S19043C9__A1__8S19043C8__8S19043C1[] = {
  ABISELECT(-464,-276),
  (VTBL_ENTRY)&(_ZTI8S19043C8[0]),
  (VTBL_ENTRY)&_ZN8S19043C52v2Ev,
};
static  VTT_ENTRY vtt_S19043C1[] = {
  {&(_ZTV8S19043C1[6]),  6,60},
  {&(_ZTV8S19043C1[17]),  17,60},
  {&(_ZTV8S19043C1[23]),  23,60},
  {&(_ZTV8S19043C1[32]),  32,60},
  {&(_ZTV8S19043C1[44]),  44,60},
  {&(_ZTV8S19043C1[52]),  52,60},
  {&(_ZTV8S19043C1[55]),  55,60},
  {&(_ZTV8S19043C1[59]),  59,60},
  {&(_ZTV8S19043C1[26]),  26,60},
  {&(_tg__ZTV8S19043C2__8S19043C1[5]),  5,9},
  {&(_tg__ZTV8S19043C8__8S19043C2__8S19043C1[5]),  5,8},
  {&(_tg__ZTV8S19043C9__8S19043C2__8S19043C1[9]),  9,15},
  {&(_tg__ZTV8S19043C58S19043C9__A1__8S19043C2__8S19043C1[2]),  2,3},
  {&(_tg__ZTV8S19043C38S19043C9__A1__8S19043C2__8S19043C1[2]),  2,4},
  {&(_tg__ZTV8S19043C58S19043C38S19043C9__A2__8S19043C2__8S19043C1[2]),  2,3},
  {&(_tg__ZTV8S19043C8__8S19043C1[3]),  3,6},
  {&(_tg__ZTV8S19043C9__8S19043C8__8S19043C1[9]),  9,15},
  {&(_tg__ZTV8S19043C58S19043C9__8S19043C8__8S19043C1[2]),  2,3},
  {&(_tg__ZTV8S19043C38S19043C9__8S19043C8__8S19043C1[2]),  2,4},
  {&(_tg__ZTV8S19043C58S19043C38S19043C9__A1__8S19043C8__8S19043C1[2]),  2,3},
};
extern VTBL_ENTRY _ZTI8S19043C1[];
extern  VTBL_ENTRY _ZTV8S19043C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19043C1[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19043C8D0Ev,_ZTv0_n16_N8S19043C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19043C8D0Ev,_ZThn80_N8S19043C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19043C8D1Ev,_ZTv0_n16_N8S19043C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19043C8D1Ev,_ZThn80_N8S19043C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19043C2D0Ev,_ZTv0_n16_N8S19043C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S19043C2D0Ev,_ZThn452_N8S19043C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19043C2D1Ev,_ZTv0_n16_N8S19043C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S19043C2D1Ev,_ZThn452_N8S19043C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19043C2D0Ev,_ZTv0_n20_N8S19043C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19043C2D0Ev,_ZThn372_N8S19043C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19043C2D1Ev,_ZTv0_n20_N8S19043C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19043C2D1Ev,_ZThn372_N8S19043C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19043C1D0Ev,_ZTv0_n16_N8S19043C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3536_N8S19043C1D0Ev,_ZThn2144_N8S19043C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19043C1D1Ev,_ZTv0_n16_N8S19043C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3536_N8S19043C1D1Ev,_ZThn2144_N8S19043C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19043C1D0Ev,_ZTv0_n20_N8S19043C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3392_N8S19043C1D0Ev,_ZThn2064_N8S19043C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19043C1D1Ev,_ZTv0_n20_N8S19043C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3392_N8S19043C1D1Ev,_ZThn2064_N8S19043C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19043C1D0Ev,_ZTv0_n36_N8S19043C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2784_N8S19043C1D0Ev,_ZThn1692_N8S19043C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19043C1D1Ev,_ZTv0_n36_N8S19043C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2784_N8S19043C1D1Ev,_ZThn1692_N8S19043C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19043C1 = {  "S19043C1", // class name
  bases_S19043C1, 15,
  &(vtc_S19043C1[0]), // expected_vtbl_contents
  &(vtt_S19043C1[0]), // expected_vtt_contents
  ABISELECT(4480,2732), // object size
  NSPAIRA(_ZTI8S19043C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19043C1),60, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19043C1),20, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19062C4  {
  virtual  ~S19062C4(); // _ZN8S19062C4D1Ev
  virtual void  v4(); // _ZN8S19062C42v4Ev
  S19062C4(); // tgen
};
//SIG(-1 S19062C4) C1{ vd v1}


 S19062C4 ::~S19062C4(){ note_dtor("S19062C4", this);}
void  S19062C4 ::v4(){vfunc_called(this, "_ZN8S19062C42v4Ev");}
S19062C4 ::S19062C4(){ note_ctor("S19062C4", this);} // tgen

static void Test_S19062C4()
{
  extern Class_Descriptor cd_S19062C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19062C4, buf);
    S19062C4 *dp, &lv = *(dp=new (buf) S19062C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19062C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19062C4)");
    test_class_info(&lv, &cd_S19062C4);
    dp->~S19062C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19062C4(Test_S19062C4, "S19062C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19062C4C1Ev();
extern void _ZN8S19062C4D1Ev();
Name_Map name_map_S19062C4[] = {
  NSPAIR(_ZN8S19062C4C1Ev),
  NSPAIR(_ZN8S19062C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19062C4[];
extern void _ZN8S19062C4D1Ev();
extern void _ZN8S19062C4D0Ev();
extern void _ZN8S19062C42v4Ev();
static  VTBL_ENTRY vtc_S19062C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19062C4[0]),
  (VTBL_ENTRY)&_ZN8S19062C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19062C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
};
extern VTBL_ENTRY _ZTI8S19062C4[];
extern  VTBL_ENTRY _ZTV8S19062C4[];
Class_Descriptor cd_S19062C4 = {  "S19062C4", // class name
  0,0,//no base classes
  &(vtc_S19062C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19062C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19062C4),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  S19062C3  : S19062C4 {
  ::S19062C4 s19062c3f0;
  virtual  ~S19062C3(); // _ZN8S19062C3D1Ev
  virtual void  v5(); // _ZN8S19062C32v5Ev
  virtual void  v6(); // _ZN8S19062C32v6Ev
  S19062C3(); // tgen
};
//SIG(-1 S19062C3) C1{ BC2{ vd v3} vd v1 v2 FC2}


 S19062C3 ::~S19062C3(){ note_dtor("S19062C3", this);}
void  S19062C3 ::v5(){vfunc_called(this, "_ZN8S19062C32v5Ev");}
void  S19062C3 ::v6(){vfunc_called(this, "_ZN8S19062C32v6Ev");}
S19062C3 ::S19062C3(){ note_ctor("S19062C3", this);} // tgen

static void Test_S19062C3()
{
  extern Class_Descriptor cd_S19062C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19062C3, buf);
    S19062C3 *dp, &lv = *(dp=new (buf) S19062C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19062C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19062C3)");
    check_base_class_offset(lv, (S19062C4*), 0, "S19062C3");
    check_field_offset(lv, s19062c3f0, ABISELECT(8,4), "S19062C3.s19062c3f0");
    test_class_info(&lv, &cd_S19062C3);
    dp->~S19062C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19062C3(Test_S19062C3, "S19062C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19062C3C1Ev();
extern void _ZN8S19062C3D1Ev();
Name_Map name_map_S19062C3[] = {
  NSPAIR(_ZN8S19062C3C1Ev),
  NSPAIR(_ZN8S19062C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19062C4;
extern VTBL_ENTRY _ZTI8S19062C4[];
extern  VTBL_ENTRY _ZTV8S19062C4[];
static Base_Class bases_S19062C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19062C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S19062C3[];
extern void _ZN8S19062C3D1Ev();
extern void _ZN8S19062C3D0Ev();
extern void _ZN8S19062C42v4Ev();
extern void _ZN8S19062C32v5Ev();
extern void _ZN8S19062C32v6Ev();
static  VTBL_ENTRY vtc_S19062C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19062C3[0]),
  (VTBL_ENTRY)&_ZN8S19062C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19062C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19062C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19062C32v6Ev,
};
extern VTBL_ENTRY _ZTI8S19062C3[];
extern  VTBL_ENTRY _ZTV8S19062C3[];
Class_Descriptor cd_S19062C3 = {  "S19062C3", // class name
  bases_S19062C3, 1,
  &(vtc_S19062C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19062C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19062C3),7, //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  S19062C5_nt  {
  void *s19062c5f0[4];
  virtual void  v7(); // _ZN11S19062C5_nt2v7Ev
  virtual void  v8(); // _ZN11S19062C5_nt2v8Ev
  virtual void  v9(); // _ZN11S19062C5_nt2v9Ev
  virtual void  v10(); // _ZN11S19062C5_nt3v10Ev
  virtual void  v11(); // _ZN11S19062C5_nt3v11Ev
  ~S19062C5_nt(); // tgen
  S19062C5_nt(); // tgen
};
//SIG(-1 S19062C5_nt) C1{ v1 v2 v3 v4 v5 Fp[4]}


void  S19062C5_nt ::v7(){vfunc_called(this, "_ZN11S19062C5_nt2v7Ev");}
void  S19062C5_nt ::v8(){vfunc_called(this, "_ZN11S19062C5_nt2v8Ev");}
void  S19062C5_nt ::v9(){vfunc_called(this, "_ZN11S19062C5_nt2v9Ev");}
void  S19062C5_nt ::v10(){vfunc_called(this, "_ZN11S19062C5_nt3v10Ev");}
void  S19062C5_nt ::v11(){vfunc_called(this, "_ZN11S19062C5_nt3v11Ev");}
S19062C5_nt ::~S19062C5_nt(){ note_dtor("S19062C5_nt", this);} // tgen
S19062C5_nt ::S19062C5_nt(){ note_ctor("S19062C5_nt", this);} // tgen

//skip512 S19062C5_nt

#else // __cplusplus

extern void _ZN11S19062C5_ntC1Ev();
extern void _ZN11S19062C5_ntD1Ev();
Name_Map name_map_S19062C5_nt[] = {
  NSPAIR(_ZN11S19062C5_ntC1Ev),
  NSPAIR(_ZN11S19062C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19062C5_nt[];
extern void _ZN11S19062C5_nt2v7Ev();
extern void _ZN11S19062C5_nt2v8Ev();
extern void _ZN11S19062C5_nt2v9Ev();
extern void _ZN11S19062C5_nt3v10Ev();
extern void _ZN11S19062C5_nt3v11Ev();
static  VTBL_ENTRY vtc_S19062C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19062C5_nt[0]),
  (VTBL_ENTRY)&_ZN11S19062C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt3v11Ev,
};
extern VTBL_ENTRY _ZTI11S19062C5_nt[];
VTBL_ENTRY *P__ZTI11S19062C5_nt = _ZTI11S19062C5_nt; 
extern  VTBL_ENTRY _ZTV11S19062C5_nt[];
Class_Descriptor cd_S19062C5_nt = {  "S19062C5_nt", // class name
  0,0,//no base classes
  &(vtc_S19062C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI11S19062C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S19062C5_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  S19062C7  {
  char s19062c7f0;
  long double s19062c7f1[7];
  virtual void  v12(); // _ZN8S19062C73v12Ev
  virtual void  v13(); // _ZN8S19062C73v13Ev
  virtual void  v14(); // _ZN8S19062C73v14Ev
  virtual void  v15(); // _ZN8S19062C73v15Ev
  ~S19062C7(); // tgen
  S19062C7(); // tgen
};
//SIG(-1 S19062C7) C1{ v1 v2 v3 v4 Fc FD[7]}


void  S19062C7 ::v12(){vfunc_called(this, "_ZN8S19062C73v12Ev");}
void  S19062C7 ::v13(){vfunc_called(this, "_ZN8S19062C73v13Ev");}
void  S19062C7 ::v14(){vfunc_called(this, "_ZN8S19062C73v14Ev");}
void  S19062C7 ::v15(){vfunc_called(this, "_ZN8S19062C73v15Ev");}
S19062C7 ::~S19062C7(){ note_dtor("S19062C7", this);} // tgen
S19062C7 ::S19062C7(){ note_ctor("S19062C7", this);} // tgen

static void Test_S19062C7()
{
  extern Class_Descriptor cd_S19062C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,24)];
    init_test(&cd_S19062C7, buf);
    S19062C7 *dp, &lv = *(dp=new (buf) S19062C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,92), "sizeof(S19062C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19062C7)");
    check_field_offset(lv, s19062c7f0, ABISELECT(8,4), "S19062C7.s19062c7f0");
    check_field_offset(lv, s19062c7f1, ABISELECT(16,8), "S19062C7.s19062c7f1");
    test_class_info(&lv, &cd_S19062C7);
    dp->~S19062C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19062C7(Test_S19062C7, "S19062C7", ABISELECT(128,92));

#else // __cplusplus

extern void _ZN8S19062C7C1Ev();
extern void _ZN8S19062C7D1Ev();
Name_Map name_map_S19062C7[] = {
  NSPAIR(_ZN8S19062C7C1Ev),
  NSPAIR(_ZN8S19062C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19062C7[];
extern void _ZN8S19062C73v12Ev();
extern void _ZN8S19062C73v13Ev();
extern void _ZN8S19062C73v14Ev();
extern void _ZN8S19062C73v15Ev();
static  VTBL_ENTRY vtc_S19062C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19062C7[0]),
  (VTBL_ENTRY)&_ZN8S19062C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v15Ev,
};
extern VTBL_ENTRY _ZTI8S19062C7[];
extern  VTBL_ENTRY _ZTV8S19062C7[];
Class_Descriptor cd_S19062C7 = {  "S19062C7", // class name
  0,0,//no base classes
  &(vtc_S19062C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,92), // object size
  NSPAIRA(_ZTI8S19062C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19062C7),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  S19062C8  {
  ::S19062C4 s19062c8f0;
  virtual  ~S19062C8(); // _ZN8S19062C8D1Ev
  virtual void  v16(); // _ZN8S19062C83v16Ev
  virtual void  v17(); // _ZN8S19062C83v17Ev
  virtual void  v18(); // _ZN8S19062C83v18Ev
  virtual void  v19(); // _ZN8S19062C83v19Ev
  S19062C8(); // tgen
};
//SIG(-1 S19062C8) C1{ vd v1 v2 v3 v4 FC2{ vd v5}}


 S19062C8 ::~S19062C8(){ note_dtor("S19062C8", this);}
void  S19062C8 ::v16(){vfunc_called(this, "_ZN8S19062C83v16Ev");}
void  S19062C8 ::v17(){vfunc_called(this, "_ZN8S19062C83v17Ev");}
void  S19062C8 ::v18(){vfunc_called(this, "_ZN8S19062C83v18Ev");}
void  S19062C8 ::v19(){vfunc_called(this, "_ZN8S19062C83v19Ev");}
S19062C8 ::S19062C8(){ note_ctor("S19062C8", this);} // tgen

static void Test_S19062C8()
{
  extern Class_Descriptor cd_S19062C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19062C8, buf);
    S19062C8 *dp, &lv = *(dp=new (buf) S19062C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19062C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19062C8)");
    check_field_offset(lv, s19062c8f0, ABISELECT(8,4), "S19062C8.s19062c8f0");
    test_class_info(&lv, &cd_S19062C8);
    dp->~S19062C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19062C8(Test_S19062C8, "S19062C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19062C8C1Ev();
extern void _ZN8S19062C8D1Ev();
Name_Map name_map_S19062C8[] = {
  NSPAIR(_ZN8S19062C8C1Ev),
  NSPAIR(_ZN8S19062C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19062C8[];
extern void _ZN8S19062C8D1Ev();
extern void _ZN8S19062C8D0Ev();
extern void _ZN8S19062C83v16Ev();
extern void _ZN8S19062C83v17Ev();
extern void _ZN8S19062C83v18Ev();
extern void _ZN8S19062C83v19Ev();
static  VTBL_ENTRY vtc_S19062C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19062C8[0]),
  (VTBL_ENTRY)&_ZN8S19062C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19062C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v19Ev,
};
extern VTBL_ENTRY _ZTI8S19062C8[];
extern  VTBL_ENTRY _ZTV8S19062C8[];
Class_Descriptor cd_S19062C8 = {  "S19062C8", // class name
  0,0,//no base classes
  &(vtc_S19062C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19062C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19062C8),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19062C6  : virtual S19062C7 , S19062C8 , virtual S19062C4 {
  void *s19062c6f0;
  int s19062c6f1;
  __tsi64 s19062c6f2[3];
  virtual  ~S19062C6(); // _ZN8S19062C6D2Ev
  virtual void  v20(); // _ZN8S19062C63v20Ev
  virtual void  v21(); // _ZN8S19062C63v21Ev
  virtual void  v22(); // _ZN8S19062C63v22Ev
  virtual void  v23(); // _ZN8S19062C63v23Ev
  S19062C6(); // tgen
};
//SIG(-1 S19062C6) C1{ VBC2{ v5 v6 v7 v8 Fc FD[7]} BC3{ vd v9 v10 v11 v12 FC4{ vd v13}} VBC4 vd v1 v2 v3 v4 Fp Fi FL[3]}


 S19062C6 ::~S19062C6(){ note_dtor("S19062C6", this);}
void  S19062C6 ::v20(){vfunc_called(this, "_ZN8S19062C63v20Ev");}
void  S19062C6 ::v21(){vfunc_called(this, "_ZN8S19062C63v21Ev");}
void  S19062C6 ::v22(){vfunc_called(this, "_ZN8S19062C63v22Ev");}
void  S19062C6 ::v23(){vfunc_called(this, "_ZN8S19062C63v23Ev");}
S19062C6 ::S19062C6(){ note_ctor("S19062C6", this);} // tgen

static void Test_S19062C6()
{
  extern Class_Descriptor cd_S19062C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,35)];
    init_test(&cd_S19062C6, buf);
    S19062C6 *dp, &lv = *(dp=new (buf) S19062C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,136), "sizeof(S19062C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19062C6)");
    check_base_class_offset(lv, (S19062C7*), ABISELECT(64,40), "S19062C6");
    check_base_class_offset(lv, (S19062C8*), 0, "S19062C6");
    check_base_class_offset(lv, (S19062C4*), ABISELECT(192,132), "S19062C6");
    check_field_offset(lv, s19062c6f0, ABISELECT(16,8), "S19062C6.s19062c6f0");
    check_field_offset(lv, s19062c6f1, ABISELECT(24,12), "S19062C6.s19062c6f1");
    check_field_offset(lv, s19062c6f2, ABISELECT(32,16), "S19062C6.s19062c6f2");
    test_class_info(&lv, &cd_S19062C6);
    dp->~S19062C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19062C6(Test_S19062C6, "S19062C6", ABISELECT(208,136));

#else // __cplusplus

extern void _ZN8S19062C6C1Ev();
extern void _ZN8S19062C6D2Ev();
Name_Map name_map_S19062C6[] = {
  NSPAIR(_ZN8S19062C6C1Ev),
  NSPAIR(_ZN8S19062C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19062C7;
extern VTBL_ENTRY _ZTI8S19062C7[];
extern  VTBL_ENTRY _ZTV8S19062C7[];
extern Class_Descriptor cd_S19062C8;
extern VTBL_ENTRY _ZTI8S19062C8[];
extern  VTBL_ENTRY _ZTV8S19062C8[];
extern Class_Descriptor cd_S19062C4;
extern VTBL_ENTRY _ZTI8S19062C4[];
extern  VTBL_ENTRY _ZTV8S19062C4[];
static Base_Class bases_S19062C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19062C7,    ABISELECT(64,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19062C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19062C4,    ABISELECT(192,132), //bcp->offset
    24, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19062C6[];
extern void _ZN8S19062C6D1Ev();
extern void _ZN8S19062C6D0Ev();
extern void _ZN8S19062C83v16Ev();
extern void _ZN8S19062C83v17Ev();
extern void _ZN8S19062C83v18Ev();
extern void _ZN8S19062C83v19Ev();
extern void _ZN8S19062C63v20Ev();
extern void _ZN8S19062C63v21Ev();
extern void _ZN8S19062C63v22Ev();
extern void _ZN8S19062C63v23Ev();
extern void _ZN8S19062C73v12Ev();
extern void _ZN8S19062C73v13Ev();
extern void _ZN8S19062C73v14Ev();
extern void _ZN8S19062C73v15Ev();
extern void ABISELECT(_ZTv0_n24_N8S19062C6D1Ev,_ZTv0_n12_N8S19062C6D1Ev)();
extern void ABISELECT(_ZThn192_N8S19062C6D1Ev,_ZThn132_N8S19062C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19062C6D0Ev,_ZTv0_n12_N8S19062C6D0Ev)();
extern void ABISELECT(_ZThn192_N8S19062C6D0Ev,_ZThn132_N8S19062C6D0Ev)() __attribute__((weak));
extern void _ZN8S19062C42v4Ev();
static  VTBL_ENTRY vtc_S19062C6[] = {
  ABISELECT(192,132),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19062C6[0]),
  (VTBL_ENTRY)&_ZN8S19062C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19062C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19062C6[0]),
  (VTBL_ENTRY)&_ZN8S19062C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v15Ev,
  0,
  ABISELECT(-192,-132),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI8S19062C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19062C6D1Ev,_ZTv0_n12_N8S19062C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19062C6D0Ev,_ZTv0_n12_N8S19062C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S19062C6[];
static  VTT_ENTRY vtt_S19062C6[] = {
  {&(_ZTV8S19062C6[4]),  4,31},
  {&(_ZTV8S19062C6[20]),  20,31},
  {&(_ZTV8S19062C6[28]),  28,31},
};
extern VTBL_ENTRY _ZTI8S19062C6[];
extern  VTBL_ENTRY _ZTV8S19062C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19062C6[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19062C6D0Ev,_ZTv0_n12_N8S19062C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19062C6D0Ev,_ZThn132_N8S19062C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19062C6D1Ev,_ZTv0_n12_N8S19062C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19062C6D1Ev,_ZThn132_N8S19062C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19062C6 = {  "S19062C6", // class name
  bases_S19062C6, 3,
  &(vtc_S19062C6[0]), // expected_vtbl_contents
  &(vtt_S19062C6[0]), // expected_vtt_contents
  ABISELECT(208,136), // object size
  NSPAIRA(_ZTI8S19062C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19062C6),31, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19062C6),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19062C9  {
  virtual  ~S19062C9(); // _ZN8S19062C9D1Ev
  virtual void  v24(); // _ZN8S19062C93v24Ev
  S19062C9(); // tgen
};
//SIG(-1 S19062C9) C1{ vd v1}


 S19062C9 ::~S19062C9(){ note_dtor("S19062C9", this);}
void  S19062C9 ::v24(){vfunc_called(this, "_ZN8S19062C93v24Ev");}
S19062C9 ::S19062C9(){ note_ctor("S19062C9", this);} // tgen

static void Test_S19062C9()
{
  extern Class_Descriptor cd_S19062C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19062C9, buf);
    S19062C9 *dp, &lv = *(dp=new (buf) S19062C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19062C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19062C9)");
    test_class_info(&lv, &cd_S19062C9);
    dp->~S19062C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19062C9(Test_S19062C9, "S19062C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19062C9C1Ev();
extern void _ZN8S19062C9D1Ev();
Name_Map name_map_S19062C9[] = {
  NSPAIR(_ZN8S19062C9C1Ev),
  NSPAIR(_ZN8S19062C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19062C9[];
extern void _ZN8S19062C9D1Ev();
extern void _ZN8S19062C9D0Ev();
extern void _ZN8S19062C93v24Ev();
static  VTBL_ENTRY vtc_S19062C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19062C9[0]),
  (VTBL_ENTRY)&_ZN8S19062C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19062C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19062C93v24Ev,
};
extern VTBL_ENTRY _ZTI8S19062C9[];
extern  VTBL_ENTRY _ZTV8S19062C9[];
Class_Descriptor cd_S19062C9 = {  "S19062C9", // class name
  0,0,//no base classes
  &(vtc_S19062C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19062C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19062C9),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  S19062C2  : S19062C3 , virtual S19062C5_nt , S19062C6 , S19062C9 {
  virtual void  v25(); // _ZN8S19062C23v25Ev
  ~S19062C2(); // tgen
  S19062C2(); // tgen
};
//SIG(-1 S19062C2) C1{ BC2{ BC3{ vd v2} vd v3 v4 FC3} VBC4{ v5 v6 v7 v8 v9 Fp[4]} BC5{ VBC6{ v10 v11 v12 v13 Fc FD[7]} BC7{ vd v14 v15 v16 v17 FC3} VBC3 vd v18 v19 v20 v21 Fp Fi FL[3]} BC8{ vd v22} v1}


void  S19062C2 ::v25(){vfunc_called(this, "_ZN8S19062C23v25Ev");}
S19062C2 ::~S19062C2(){ note_dtor("S19062C2", this);} // tgen
S19062C2 ::S19062C2(){ note_ctor("S19062C2", this);} // tgen

static void Test_S19062C2()
{
  extern Class_Descriptor cd_S19062C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,43)];
    init_test(&cd_S19062C2, buf);
    S19062C2 *dp, &lv = *(dp=new (buf) S19062C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,168), "sizeof(S19062C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19062C2)");
    check_base_class_offset(lv, (S19062C4*)(S19062C3*), 0, "S19062C2");
    check_base_class_offset(lv, (S19062C3*), 0, "S19062C2");
    check_base_class_offset(lv, (S19062C5_nt*), ABISELECT(80,52), "S19062C2");
    check_base_class_offset(lv, (S19062C7*)(S19062C6*), ABISELECT(128,72), "S19062C2");
    check_base_class_offset(lv, (S19062C8*)(S19062C6*), ABISELECT(16,8), "S19062C2");
    check_base_class_offset(lv, (S19062C4*)(S19062C6*), ABISELECT(256,164), "S19062C2");
    check_base_class_offset(lv, (S19062C6*), ABISELECT(16,8), "S19062C2");
    check_base_class_offset(lv, (S19062C9*), ABISELECT(72,48), "S19062C2");
    test_class_info(&lv, &cd_S19062C2);
    dp->~S19062C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19062C2(Test_S19062C2, "S19062C2", ABISELECT(272,168));

#else // __cplusplus

extern void _ZN8S19062C2C1Ev();
extern void _ZN8S19062C2D1Ev();
Name_Map name_map_S19062C2[] = {
  NSPAIR(_ZN8S19062C2C1Ev),
  NSPAIR(_ZN8S19062C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19062C4;
extern VTBL_ENTRY _ZTI8S19062C4[];
extern  VTBL_ENTRY _ZTV8S19062C4[];
extern Class_Descriptor cd_S19062C3;
extern VTBL_ENTRY _ZTI8S19062C3[];
extern  VTBL_ENTRY _ZTV8S19062C3[];
extern Class_Descriptor cd_S19062C5_nt;
extern VTBL_ENTRY _ZTI11S19062C5_nt[];
extern  VTBL_ENTRY _ZTV11S19062C5_nt[];
extern Class_Descriptor cd_S19062C7;
extern VTBL_ENTRY _ZTI8S19062C7[];
extern  VTBL_ENTRY _ZTV8S19062C7[];
extern Class_Descriptor cd_S19062C8;
extern VTBL_ENTRY _ZTI8S19062C8[];
extern  VTBL_ENTRY _ZTV8S19062C8[];
extern Class_Descriptor cd_S19062C4;
extern VTBL_ENTRY _ZTI8S19062C4[];
extern  VTBL_ENTRY _ZTV8S19062C4[];
extern Class_Descriptor cd_S19062C6;
extern VTBL_ENTRY _ZTI8S19062C6[];
extern  VTBL_ENTRY _ZTV8S19062C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19062C6[];
extern Class_Descriptor cd_S19062C9;
extern VTBL_ENTRY _ZTI8S19062C9[];
extern  VTBL_ENTRY _ZTV8S19062C9[];
static Base_Class bases_S19062C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19062C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19062C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19062C5_nt,    ABISELECT(80,52), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19062C7,    ABISELECT(128,72), //bcp->offset
    42, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19062C8,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19062C4,    ABISELECT(256,164), //bcp->offset
    52, //bcp->virtual_function_table_offset
    4, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19062C6,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19062C9,    ABISELECT(72,48), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19062C2[];
extern void _ZN8S19062C2D1Ev();
extern void _ZN8S19062C2D0Ev();
extern void _ZN8S19062C42v4Ev();
extern void _ZN8S19062C32v5Ev();
extern void _ZN8S19062C32v6Ev();
extern void _ZN8S19062C23v25Ev();
extern void ABISELECT(_ZThn16_N8S19062C2D1Ev,_ZThn8_N8S19062C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19062C2D0Ev,_ZThn8_N8S19062C2D0Ev)();
extern void _ZN8S19062C83v16Ev();
extern void _ZN8S19062C83v17Ev();
extern void _ZN8S19062C83v18Ev();
extern void _ZN8S19062C83v19Ev();
extern void _ZN8S19062C63v20Ev();
extern void _ZN8S19062C63v21Ev();
extern void _ZN8S19062C63v22Ev();
extern void _ZN8S19062C63v23Ev();
extern void ABISELECT(_ZThn72_N8S19062C2D1Ev,_ZThn48_N8S19062C2D1Ev)();
extern void ABISELECT(_ZThn72_N8S19062C2D0Ev,_ZThn48_N8S19062C2D0Ev)();
extern void _ZN8S19062C93v24Ev();
extern void _ZN11S19062C5_nt2v7Ev();
extern void _ZN11S19062C5_nt2v8Ev();
extern void _ZN11S19062C5_nt2v9Ev();
extern void _ZN11S19062C5_nt3v10Ev();
extern void _ZN11S19062C5_nt3v11Ev();
extern void _ZN8S19062C73v12Ev();
extern void _ZN8S19062C73v13Ev();
extern void _ZN8S19062C73v14Ev();
extern void _ZN8S19062C73v15Ev();
extern void ABISELECT(_ZTv0_n24_N8S19062C2D1Ev,_ZTv0_n12_N8S19062C2D1Ev)();
extern void ABISELECT(_ZThn256_N8S19062C2D1Ev,_ZThn164_N8S19062C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19062C2D0Ev,_ZTv0_n12_N8S19062C2D0Ev)();
extern void ABISELECT(_ZThn256_N8S19062C2D0Ev,_ZThn164_N8S19062C2D0Ev)() __attribute__((weak));
extern void _ZN8S19062C42v4Ev();
static  VTBL_ENTRY vtc_S19062C2[] = {
  ABISELECT(256,164),
  ABISELECT(128,72),
  ABISELECT(80,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19062C2[0]),
  (VTBL_ENTRY)&_ZN8S19062C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19062C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19062C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19062C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19062C23v25Ev,
  ABISELECT(240,156),
  ABISELECT(112,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19062C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19062C2D1Ev,_ZThn8_N8S19062C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19062C2D0Ev,_ZThn8_N8S19062C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v23Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19062C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N8S19062C2D1Ev,_ZThn48_N8S19062C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N8S19062C2D0Ev,_ZThn48_N8S19062C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C93v24Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S19062C2[0]),
  (VTBL_ENTRY)&_ZN11S19062C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt3v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S19062C2[0]),
  (VTBL_ENTRY)&_ZN8S19062C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v15Ev,
  0,
  ABISELECT(-256,-164),
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI8S19062C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19062C2D1Ev,_ZTv0_n12_N8S19062C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19062C2D0Ev,_ZTv0_n12_N8S19062C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S19062C2[];
extern void _ZN8S19062C6D1Ev();
extern void _ZN8S19062C6D0Ev();
extern void _ZN8S19062C83v16Ev();
extern void _ZN8S19062C83v17Ev();
extern void _ZN8S19062C83v18Ev();
extern void _ZN8S19062C83v19Ev();
extern void _ZN8S19062C63v20Ev();
extern void _ZN8S19062C63v21Ev();
extern void _ZN8S19062C63v22Ev();
extern void _ZN8S19062C63v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19062C6__8S19062C2[] = {
  ABISELECT(240,156),
  ABISELECT(112,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19062C6[0]),
  (VTBL_ENTRY)&_ZN8S19062C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19062C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v23Ev,
};
extern void _ZN8S19062C73v12Ev();
extern void _ZN8S19062C73v13Ev();
extern void _ZN8S19062C73v14Ev();
extern void _ZN8S19062C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19062C7__8S19062C6__8S19062C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S19062C6[0]),
  (VTBL_ENTRY)&_ZN8S19062C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19062C6D1Ev,_ZTv0_n12_N8S19062C6D1Ev)();
extern void ABISELECT(_ZThn240_N8S19062C6D1Ev,_ZThn156_N8S19062C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19062C6D0Ev,_ZTv0_n12_N8S19062C6D0Ev)();
extern void ABISELECT(_ZThn240_N8S19062C6D0Ev,_ZThn156_N8S19062C6D0Ev)() __attribute__((weak));
extern void _ZN8S19062C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19062C4__8S19062C6__8S19062C2[] = {
  0,
  ABISELECT(-240,-156),
  ABISELECT(-240,-156),
  (VTBL_ENTRY)&(_ZTI8S19062C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19062C6D1Ev,_ZTv0_n12_N8S19062C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19062C6D0Ev,_ZTv0_n12_N8S19062C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
};
static  VTT_ENTRY vtt_S19062C2[] = {
  {&(_ZTV8S19062C2[5]),  5,59},
  {&(_tg__ZTV8S19062C6__8S19062C2[4]),  4,14},
  {&(_tg__ZTV8S19062C7__8S19062C6__8S19062C2[6]),  6,10},
  {&(_tg__ZTV8S19062C4__8S19062C6__8S19062C2[4]),  4,7},
  {&(_ZTV8S19062C2[37]),  37,59},
  {&(_ZTV8S19062C2[15]),  15,59},
  {&(_ZTV8S19062C2[48]),  48,59},
  {&(_ZTV8S19062C2[56]),  56,59},
};
extern VTBL_ENTRY _ZTI8S19062C2[];
extern  VTBL_ENTRY _ZTV8S19062C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19062C2[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19062C6D0Ev,_ZTv0_n12_N8S19062C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19062C6D0Ev,_ZThn156_N8S19062C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19062C6D1Ev,_ZTv0_n12_N8S19062C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19062C6D1Ev,_ZThn156_N8S19062C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19062C2D0Ev,_ZTv0_n12_N8S19062C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19062C2D0Ev,_ZThn164_N8S19062C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19062C2D1Ev,_ZTv0_n12_N8S19062C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19062C2D1Ev,_ZThn164_N8S19062C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19062C2 = {  "S19062C2", // class name
  bases_S19062C2, 8,
  &(vtc_S19062C2[0]), // expected_vtbl_contents
  &(vtt_S19062C2[0]), // expected_vtt_contents
  ABISELECT(272,168), // object size
  NSPAIRA(_ZTI8S19062C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19062C2),59, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19062C2),8, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19062C11  {
  __tsi64 s19062c11f0[2];
  virtual void  v26(); // _ZN9S19062C113v26Ev
  virtual void  v27(); // _ZN9S19062C113v27Ev
  virtual void  v28(); // _ZN9S19062C113v28Ev
  ~S19062C11(); // tgen
  S19062C11(); // tgen
};
//SIG(-1 S19062C11) C1{ v1 v2 v3 FL[2]}


void  S19062C11 ::v26(){vfunc_called(this, "_ZN9S19062C113v26Ev");}
void  S19062C11 ::v27(){vfunc_called(this, "_ZN9S19062C113v27Ev");}
void  S19062C11 ::v28(){vfunc_called(this, "_ZN9S19062C113v28Ev");}
S19062C11 ::~S19062C11(){ note_dtor("S19062C11", this);} // tgen
S19062C11 ::S19062C11(){ note_ctor("S19062C11", this);} // tgen

static void Test_S19062C11()
{
  extern Class_Descriptor cd_S19062C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S19062C11, buf);
    S19062C11 *dp, &lv = *(dp=new (buf) S19062C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S19062C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19062C11)");
    check_field_offset(lv, s19062c11f0, ABISELECT(8,4), "S19062C11.s19062c11f0");
    test_class_info(&lv, &cd_S19062C11);
    dp->~S19062C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19062C11(Test_S19062C11, "S19062C11", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN9S19062C11C1Ev();
extern void _ZN9S19062C11D1Ev();
Name_Map name_map_S19062C11[] = {
  NSPAIR(_ZN9S19062C11C1Ev),
  NSPAIR(_ZN9S19062C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19062C11[];
extern void _ZN9S19062C113v26Ev();
extern void _ZN9S19062C113v27Ev();
extern void _ZN9S19062C113v28Ev();
static  VTBL_ENTRY vtc_S19062C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19062C11[0]),
  (VTBL_ENTRY)&_ZN9S19062C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19062C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19062C113v28Ev,
};
extern VTBL_ENTRY _ZTI9S19062C11[];
extern  VTBL_ENTRY _ZTV9S19062C11[];
Class_Descriptor cd_S19062C11 = {  "S19062C11", // class name
  0,0,//no base classes
  &(vtc_S19062C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI9S19062C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19062C11),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  S19062C13  : S19062C4 {
  void *s19062c13f0;
  __tsi64 s19062c13f1:7;
  virtual  ~S19062C13(); // _ZN9S19062C13D1Ev
  virtual void  v29(); // _ZN9S19062C133v29Ev
  virtual void  v30(); // _ZN9S19062C133v30Ev
  virtual void  v31(); // _ZN9S19062C133v31Ev
  virtual void  v32(); // _ZN9S19062C133v32Ev
  virtual void  v33(); // _ZN9S19062C133v33Ev
  S19062C13(); // tgen
};
//SIG(-1 S19062C13) C1{ BC2{ vd v6} vd v1 v2 v3 v4 v5 Fp FL:7}


 S19062C13 ::~S19062C13(){ note_dtor("S19062C13", this);}
void  S19062C13 ::v29(){vfunc_called(this, "_ZN9S19062C133v29Ev");}
void  S19062C13 ::v30(){vfunc_called(this, "_ZN9S19062C133v30Ev");}
void  S19062C13 ::v31(){vfunc_called(this, "_ZN9S19062C133v31Ev");}
void  S19062C13 ::v32(){vfunc_called(this, "_ZN9S19062C133v32Ev");}
void  S19062C13 ::v33(){vfunc_called(this, "_ZN9S19062C133v33Ev");}
S19062C13 ::S19062C13(){ note_ctor("S19062C13", this);} // tgen

static void Test_S19062C13()
{
  extern Class_Descriptor cd_S19062C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S19062C13, buf);
    S19062C13 *dp, &lv = *(dp=new (buf) S19062C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19062C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19062C13)");
    check_base_class_offset(lv, (S19062C4*), 0, "S19062C13");
    check_field_offset(lv, s19062c13f0, ABISELECT(8,4), "S19062C13.s19062c13f0");
    set_bf_and_test(lv, s19062c13f1, ABISELECT(16,8), 0, 7, 1, "S19062C13");
    set_bf_and_test(lv, s19062c13f1, ABISELECT(16,8), 0, 7, hide_sll(1LL<<6), "S19062C13");
    test_class_info(&lv, &cd_S19062C13);
    dp->~S19062C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19062C13(Test_S19062C13, "S19062C13", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S19062C13C1Ev();
extern void _ZN9S19062C13D1Ev();
Name_Map name_map_S19062C13[] = {
  NSPAIR(_ZN9S19062C13C1Ev),
  NSPAIR(_ZN9S19062C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19062C4;
extern VTBL_ENTRY _ZTI8S19062C4[];
extern  VTBL_ENTRY _ZTV8S19062C4[];
static Base_Class bases_S19062C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19062C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI9S19062C13[];
extern void _ZN9S19062C13D1Ev();
extern void _ZN9S19062C13D0Ev();
extern void _ZN8S19062C42v4Ev();
extern void _ZN9S19062C133v29Ev();
extern void _ZN9S19062C133v30Ev();
extern void _ZN9S19062C133v31Ev();
extern void _ZN9S19062C133v32Ev();
extern void _ZN9S19062C133v33Ev();
static  VTBL_ENTRY vtc_S19062C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19062C13[0]),
  (VTBL_ENTRY)&_ZN9S19062C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19062C13D0Ev,
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v33Ev,
};
extern VTBL_ENTRY _ZTI9S19062C13[];
extern  VTBL_ENTRY _ZTV9S19062C13[];
Class_Descriptor cd_S19062C13 = {  "S19062C13", // class name
  bases_S19062C13, 1,
  &(vtc_S19062C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S19062C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19062C13),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19062C12  : S19062C13 , virtual S19062C7 {
  int s19062c12f0;
  virtual  ~S19062C12(); // _ZN9S19062C12D2Ev
  virtual void  v34(); // _ZN9S19062C123v34Ev
  virtual void  v35(); // _ZN9S19062C123v35Ev
  virtual void  v36(); // _ZN9S19062C123v36Ev
  virtual void  v37(); // _ZN9S19062C123v37Ev
  virtual void  v38(); // _ZN9S19062C123v38Ev
  virtual void  v39(); // _ZN9S19062C123v39Ev
  S19062C12(); // tgen
};
//SIG(-1 S19062C12) C1{ BC2{ BC3{ vd v7} vd v8 v9 v10 v11 v12 Fp FL:7} VBC4{ v13 v14 v15 v16 Fc FD[7]} vd v1 v2 v3 v4 v5 v6 Fi}


 S19062C12 ::~S19062C12(){ note_dtor("S19062C12", this);}
void  S19062C12 ::v34(){vfunc_called(this, "_ZN9S19062C123v34Ev");}
void  S19062C12 ::v35(){vfunc_called(this, "_ZN9S19062C123v35Ev");}
void  S19062C12 ::v36(){vfunc_called(this, "_ZN9S19062C123v36Ev");}
void  S19062C12 ::v37(){vfunc_called(this, "_ZN9S19062C123v37Ev");}
void  S19062C12 ::v38(){vfunc_called(this, "_ZN9S19062C123v38Ev");}
void  S19062C12 ::v39(){vfunc_called(this, "_ZN9S19062C123v39Ev");}
S19062C12 ::S19062C12(){ note_ctor("S19062C12", this);} // tgen

static void Test_S19062C12()
{
  extern Class_Descriptor cd_S19062C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S19062C12, buf);
    S19062C12 *dp, &lv = *(dp=new (buf) S19062C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S19062C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19062C12)");
    check_base_class_offset(lv, (S19062C4*)(S19062C13*), 0, "S19062C12");
    check_base_class_offset(lv, (S19062C13*), 0, "S19062C12");
    check_base_class_offset(lv, (S19062C7*), ABISELECT(32,16), "S19062C12");
    check_field_offset(lv, s19062c12f0, ABISELECT(20,12), "S19062C12.s19062c12f0");
    test_class_info(&lv, &cd_S19062C12);
    dp->~S19062C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19062C12(Test_S19062C12, "S19062C12", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN9S19062C12C1Ev();
extern void _ZN9S19062C12D2Ev();
Name_Map name_map_S19062C12[] = {
  NSPAIR(_ZN9S19062C12C1Ev),
  NSPAIR(_ZN9S19062C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19062C4;
extern VTBL_ENTRY _ZTI8S19062C4[];
extern  VTBL_ENTRY _ZTV8S19062C4[];
extern Class_Descriptor cd_S19062C13;
extern VTBL_ENTRY _ZTI9S19062C13[];
extern  VTBL_ENTRY _ZTV9S19062C13[];
extern Class_Descriptor cd_S19062C7;
extern VTBL_ENTRY _ZTI8S19062C7[];
extern  VTBL_ENTRY _ZTV8S19062C7[];
static Base_Class bases_S19062C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19062C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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
  0, 0},
  {&cd_S19062C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19062C7,    ABISELECT(32,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19062C12[];
extern void _ZN9S19062C12D1Ev();
extern void _ZN9S19062C12D0Ev();
extern void _ZN8S19062C42v4Ev();
extern void _ZN9S19062C133v29Ev();
extern void _ZN9S19062C133v30Ev();
extern void _ZN9S19062C133v31Ev();
extern void _ZN9S19062C133v32Ev();
extern void _ZN9S19062C133v33Ev();
extern void _ZN9S19062C123v34Ev();
extern void _ZN9S19062C123v35Ev();
extern void _ZN9S19062C123v36Ev();
extern void _ZN9S19062C123v37Ev();
extern void _ZN9S19062C123v38Ev();
extern void _ZN9S19062C123v39Ev();
extern void _ZN8S19062C73v12Ev();
extern void _ZN8S19062C73v13Ev();
extern void _ZN8S19062C73v14Ev();
extern void _ZN8S19062C73v15Ev();
static  VTBL_ENTRY vtc_S19062C12[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19062C12[0]),
  (VTBL_ENTRY)&_ZN9S19062C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19062C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v39Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19062C12[0]),
  (VTBL_ENTRY)&_ZN8S19062C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v15Ev,
};
extern VTBL_ENTRY _ZTV9S19062C12[];
static  VTT_ENTRY vtt_S19062C12[] = {
  {&(_ZTV9S19062C12[3]),  3,27},
  {&(_ZTV9S19062C12[23]),  23,27},
};
extern VTBL_ENTRY _ZTI9S19062C12[];
extern  VTBL_ENTRY _ZTV9S19062C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19062C12[];
Class_Descriptor cd_S19062C12 = {  "S19062C12", // class name
  bases_S19062C12, 3,
  &(vtc_S19062C12[0]), // expected_vtbl_contents
  &(vtt_S19062C12[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI9S19062C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19062C12),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19062C12),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19062C14  : virtual S19062C12 {
  __tsi64 s19062c14f0;
  int s19062c14f1;
  virtual  ~S19062C14(); // _ZN9S19062C14D2Ev
  virtual void  v40(); // _ZN9S19062C143v40Ev
  virtual void  v41(); // _ZN9S19062C143v41Ev
  virtual void  v42(); // _ZN9S19062C143v42Ev
  virtual void  v43(); // _ZN9S19062C143v43Ev
  virtual void  v44(); // _ZN9S19062C143v44Ev
  virtual void  v45(); // _ZN9S19062C143v45Ev
  S19062C14(); // tgen
};
//SIG(-1 S19062C14) C1{ VBC2{ BC3{ BC4{ vd v7} vd v8 v9 v10 v11 v12 Fp FL:7} VBC5{ v13 v14 v15 v16 Fc FD[7]} vd v17 v18 v19 v20 v21 v22 Fi} vd v1 v2 v3 v4 v5 v6 FL Fi}


 S19062C14 ::~S19062C14(){ note_dtor("S19062C14", this);}
void  S19062C14 ::v40(){vfunc_called(this, "_ZN9S19062C143v40Ev");}
void  S19062C14 ::v41(){vfunc_called(this, "_ZN9S19062C143v41Ev");}
void  S19062C14 ::v42(){vfunc_called(this, "_ZN9S19062C143v42Ev");}
void  S19062C14 ::v43(){vfunc_called(this, "_ZN9S19062C143v43Ev");}
void  S19062C14 ::v44(){vfunc_called(this, "_ZN9S19062C143v44Ev");}
void  S19062C14 ::v45(){vfunc_called(this, "_ZN9S19062C143v45Ev");}
S19062C14 ::S19062C14(){ note_ctor("S19062C14", this);} // tgen

static void Test_S19062C14()
{
  extern Class_Descriptor cd_S19062C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,32)];
    init_test(&cd_S19062C14, buf);
    S19062C14 *dp, &lv = *(dp=new (buf) S19062C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,124), "sizeof(S19062C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19062C14)");
    check_base_class_offset(lv, (S19062C4*)(S19062C13*)(S19062C12*), ABISELECT(24,16), "S19062C14");
    check_base_class_offset(lv, (S19062C13*)(S19062C12*), ABISELECT(24,16), "S19062C14");
    check_base_class_offset(lv, (S19062C7*)(S19062C12*), ABISELECT(48,32), "S19062C14");
    check_base_class_offset(lv, (S19062C12*), ABISELECT(24,16), "S19062C14");
    check_field_offset(lv, s19062c14f0, ABISELECT(8,4), "S19062C14.s19062c14f0");
    check_field_offset(lv, s19062c14f1, ABISELECT(16,12), "S19062C14.s19062c14f1");
    test_class_info(&lv, &cd_S19062C14);
    dp->~S19062C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19062C14(Test_S19062C14, "S19062C14", ABISELECT(176,124));

#else // __cplusplus

extern void _ZN9S19062C14C1Ev();
extern void _ZN9S19062C14D2Ev();
Name_Map name_map_S19062C14[] = {
  NSPAIR(_ZN9S19062C14C1Ev),
  NSPAIR(_ZN9S19062C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19062C4;
extern VTBL_ENTRY _ZTI8S19062C4[];
extern  VTBL_ENTRY _ZTV8S19062C4[];
extern Class_Descriptor cd_S19062C13;
extern VTBL_ENTRY _ZTI9S19062C13[];
extern  VTBL_ENTRY _ZTV9S19062C13[];
extern Class_Descriptor cd_S19062C7;
extern VTBL_ENTRY _ZTI8S19062C7[];
extern  VTBL_ENTRY _ZTV8S19062C7[];
extern Class_Descriptor cd_S19062C12;
extern VTBL_ENTRY _ZTI9S19062C12[];
extern  VTBL_ENTRY _ZTV9S19062C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19062C12[];
static Base_Class bases_S19062C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19062C4,    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
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19062C13,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19062C7,    ABISELECT(48,32), //bcp->offset
    42, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19062C12,    ABISELECT(24,16), //bcp->offset
    12, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19062C14[];
extern void _ZN9S19062C14D1Ev();
extern void _ZN9S19062C14D0Ev();
extern void _ZN9S19062C143v40Ev();
extern void _ZN9S19062C143v41Ev();
extern void _ZN9S19062C143v42Ev();
extern void _ZN9S19062C143v43Ev();
extern void _ZN9S19062C143v44Ev();
extern void _ZN9S19062C143v45Ev();
extern void ABISELECT(_ZTv0_n32_N9S19062C14D1Ev,_ZTv0_n16_N9S19062C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S19062C14D1Ev,_ZThn16_N9S19062C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19062C14D0Ev,_ZTv0_n16_N9S19062C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S19062C14D0Ev,_ZThn16_N9S19062C14D0Ev)() __attribute__((weak));
extern void _ZN8S19062C42v4Ev();
extern void _ZN9S19062C133v29Ev();
extern void _ZN9S19062C133v30Ev();
extern void _ZN9S19062C133v31Ev();
extern void _ZN9S19062C133v32Ev();
extern void _ZN9S19062C133v33Ev();
extern void _ZN9S19062C123v34Ev();
extern void _ZN9S19062C123v35Ev();
extern void _ZN9S19062C123v36Ev();
extern void _ZN9S19062C123v37Ev();
extern void _ZN9S19062C123v38Ev();
extern void _ZN9S19062C123v39Ev();
extern void _ZN8S19062C73v12Ev();
extern void _ZN8S19062C73v13Ev();
extern void _ZN8S19062C73v14Ev();
extern void _ZN8S19062C73v15Ev();
static  VTBL_ENTRY vtc_S19062C14[] = {
  ABISELECT(48,32),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19062C14[0]),
  (VTBL_ENTRY)&_ZN9S19062C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19062C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v40Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v41Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v45Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(24,16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19062C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19062C14D1Ev,_ZTv0_n16_N9S19062C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19062C14D0Ev,_ZTv0_n16_N9S19062C14D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v39Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S19062C14[0]),
  (VTBL_ENTRY)&_ZN8S19062C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v15Ev,
};
extern VTBL_ENTRY _ZTV9S19062C14[];
extern void _ZN9S19062C12D1Ev();
extern void _ZN9S19062C12D0Ev();
extern void _ZN8S19062C42v4Ev();
extern void _ZN9S19062C133v29Ev();
extern void _ZN9S19062C133v30Ev();
extern void _ZN9S19062C133v31Ev();
extern void _ZN9S19062C133v32Ev();
extern void _ZN9S19062C133v33Ev();
extern void _ZN9S19062C123v34Ev();
extern void _ZN9S19062C123v35Ev();
extern void _ZN9S19062C123v36Ev();
extern void _ZN9S19062C123v37Ev();
extern void _ZN9S19062C123v38Ev();
extern void _ZN9S19062C123v39Ev();
static  VTBL_ENTRY _tg__ZTV9S19062C12__9S19062C14[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19062C12[0]),
  (VTBL_ENTRY)&_ZN9S19062C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19062C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v39Ev,
};
extern void _ZN8S19062C73v12Ev();
extern void _ZN8S19062C73v13Ev();
extern void _ZN8S19062C73v14Ev();
extern void _ZN8S19062C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19062C7__9S19062C12__9S19062C14[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19062C12[0]),
  (VTBL_ENTRY)&_ZN8S19062C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v15Ev,
};
static  VTT_ENTRY vtt_S19062C14[] = {
  {&(_ZTV9S19062C14[4]),  4,52},
  {&(_ZTV9S19062C14[28]),  28,52},
  {&(_ZTV9S19062C14[48]),  48,52},
  {&(_tg__ZTV9S19062C12__9S19062C14[3]),  3,17},
  {&(_tg__ZTV8S19062C7__9S19062C12__9S19062C14[6]),  6,10},
};
extern VTBL_ENTRY _ZTI9S19062C14[];
extern  VTBL_ENTRY _ZTV9S19062C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19062C14[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19062C14D0Ev,_ZTv0_n16_N9S19062C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19062C14D0Ev,_ZThn16_N9S19062C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19062C14D1Ev,_ZTv0_n16_N9S19062C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19062C14D1Ev,_ZThn16_N9S19062C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19062C14 = {  "S19062C14", // class name
  bases_S19062C14, 4,
  &(vtc_S19062C14[0]), // expected_vtbl_contents
  &(vtt_S19062C14[0]), // expected_vtt_contents
  ABISELECT(176,124), // object size
  NSPAIRA(_ZTI9S19062C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19062C14),52, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19062C14),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19062C10  : S19062C11 , virtual S19062C12 , S19062C7 , S19062C5_nt , S19062C14 {
  virtual void  v46(); // _ZN9S19062C103v46Ev
  ~S19062C10(); // tgen
  S19062C10(); // tgen
};
//SIG(-1 S19062C10) C1{ BC2{ v2 v3 v4 FL[2]} VBC3{ BC4{ BC5{ vd v5} vd v6 v7 v8 v9 v10 Fp FL:7} VBC6{ v11 v12 v13 v14 Fc FD[7]} vd v15 v16 v17 v18 v19 v20 Fi} BC6 BC7{ v21 v22 v23 v24 v25 Fp[4]} BC8{ VBC3 vd v26 v27 v28 v29 v30 v31 FL Fi} v1}


void  S19062C10 ::v46(){vfunc_called(this, "_ZN9S19062C103v46Ev");}
S19062C10 ::~S19062C10(){ note_dtor("S19062C10", this);} // tgen
S19062C10 ::S19062C10(){ note_ctor("S19062C10", this);} // tgen

static void Test_S19062C10()
{
  extern Class_Descriptor cd_S19062C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,65)];
    init_test(&cd_S19062C10, buf);
    S19062C10 *dp, &lv = *(dp=new (buf) S19062C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,256), "sizeof(S19062C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19062C10)");
    check_base_class_offset(lv, (S19062C11*), 0, "S19062C10");
    check_base_class_offset(lv, (S19062C4*)(S19062C13*)(S19062C12*), ABISELECT(224,148), "S19062C10");
    check_base_class_offset(lv, (S19062C13*)(S19062C12*), ABISELECT(224,148), "S19062C10");
    check_base_class_offset(lv, (S19062C7*)(S19062C12*), ABISELECT(256,164), "S19062C10");
    check_base_class_offset(lv, (S19062C12*), ABISELECT(224,148), "S19062C10");
    check_base_class_offset(lv, (S19062C12*)(S19062C14*), ABISELECT(224,148), "S19062C10");
    /*is_ambiguous_... S19062C10::S19062C7 */ AMB_check_base_class_offset(lv, (S19062C7*), ABISELECT(32,20), "S19062C10");
    check_base_class_offset(lv, (S19062C5_nt*), ABISELECT(160,112), "S19062C10");
    check_base_class_offset(lv, (S19062C14*), ABISELECT(200,132), "S19062C10");
    test_class_info(&lv, &cd_S19062C10);
    dp->~S19062C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19062C10(Test_S19062C10, "S19062C10", ABISELECT(384,256));

#else // __cplusplus

extern void _ZN9S19062C10C1Ev();
extern void _ZN9S19062C10D1Ev();
Name_Map name_map_S19062C10[] = {
  NSPAIR(_ZN9S19062C10C1Ev),
  NSPAIR(_ZN9S19062C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19062C11;
extern VTBL_ENTRY _ZTI9S19062C11[];
extern  VTBL_ENTRY _ZTV9S19062C11[];
extern Class_Descriptor cd_S19062C4;
extern VTBL_ENTRY _ZTI8S19062C4[];
extern  VTBL_ENTRY _ZTV8S19062C4[];
extern Class_Descriptor cd_S19062C13;
extern VTBL_ENTRY _ZTI9S19062C13[];
extern  VTBL_ENTRY _ZTV9S19062C13[];
extern Class_Descriptor cd_S19062C7;
extern VTBL_ENTRY _ZTI8S19062C7[];
extern  VTBL_ENTRY _ZTV8S19062C7[];
extern Class_Descriptor cd_S19062C12;
extern VTBL_ENTRY _ZTI9S19062C12[];
extern  VTBL_ENTRY _ZTV9S19062C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19062C12[];
extern Class_Descriptor cd_S19062C7;
extern VTBL_ENTRY _ZTI8S19062C7[];
extern  VTBL_ENTRY _ZTV8S19062C7[];
extern Class_Descriptor cd_S19062C5_nt;
extern VTBL_ENTRY _ZTI11S19062C5_nt[];
extern  VTBL_ENTRY _ZTV11S19062C5_nt[];
extern Class_Descriptor cd_S19062C14;
extern VTBL_ENTRY _ZTI9S19062C14[];
extern  VTBL_ENTRY _ZTV9S19062C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19062C14[];
static Base_Class bases_S19062C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19062C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19062C4,    ABISELECT(224,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19062C13,    ABISELECT(224,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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19062C7,    ABISELECT(256,164), //bcp->offset
    65, //bcp->virtual_function_table_offset
    6, //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_S19062C12,    ABISELECT(224,148), //bcp->offset
    35, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19062C7,    ABISELECT(32,20), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19062C5_nt,    ABISELECT(160,112), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19062C14,    ABISELECT(200,132), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //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 _ZTI9S19062C10[];
extern void _ZN9S19062C113v26Ev();
extern void _ZN9S19062C113v27Ev();
extern void _ZN9S19062C113v28Ev();
extern void _ZN9S19062C103v46Ev();
extern void _ZN9S19062C10D1Ev();
extern void _ZN9S19062C10D0Ev();
extern void _ZN8S19062C73v12Ev();
extern void _ZN8S19062C73v13Ev();
extern void _ZN8S19062C73v14Ev();
extern void _ZN8S19062C73v15Ev();
extern void _ZN11S19062C5_nt2v7Ev();
extern void _ZN11S19062C5_nt2v8Ev();
extern void _ZN11S19062C5_nt2v9Ev();
extern void _ZN11S19062C5_nt3v10Ev();
extern void _ZN11S19062C5_nt3v11Ev();
extern void ABISELECT(_ZThn200_N9S19062C10D1Ev,_ZThn132_N9S19062C10D1Ev)();
extern void ABISELECT(_ZThn200_N9S19062C10D0Ev,_ZThn132_N9S19062C10D0Ev)();
extern void _ZN9S19062C143v40Ev();
extern void _ZN9S19062C143v41Ev();
extern void _ZN9S19062C143v42Ev();
extern void _ZN9S19062C143v43Ev();
extern void _ZN9S19062C143v44Ev();
extern void _ZN9S19062C143v45Ev();
extern void ABISELECT(_ZTv0_n32_N9S19062C10D1Ev,_ZTv0_n16_N9S19062C10D1Ev)();
extern void ABISELECT(_ZThn224_N9S19062C10D1Ev,_ZThn148_N9S19062C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19062C10D0Ev,_ZTv0_n16_N9S19062C10D0Ev)();
extern void ABISELECT(_ZThn224_N9S19062C10D0Ev,_ZThn148_N9S19062C10D0Ev)() __attribute__((weak));
extern void _ZN8S19062C42v4Ev();
extern void _ZN9S19062C133v29Ev();
extern void _ZN9S19062C133v30Ev();
extern void _ZN9S19062C133v31Ev();
extern void _ZN9S19062C133v32Ev();
extern void _ZN9S19062C133v33Ev();
extern void _ZN9S19062C123v34Ev();
extern void _ZN9S19062C123v35Ev();
extern void _ZN9S19062C123v36Ev();
extern void _ZN9S19062C123v37Ev();
extern void _ZN9S19062C123v38Ev();
extern void _ZN9S19062C123v39Ev();
extern void _ZN8S19062C73v12Ev();
extern void _ZN8S19062C73v13Ev();
extern void _ZN8S19062C73v14Ev();
extern void _ZN8S19062C73v15Ev();
static  VTBL_ENTRY vtc_S19062C10[] = {
  ABISELECT(256,164),
  ABISELECT(224,148),
  0,
  (VTBL_ENTRY)&(_ZTI9S19062C10[0]),
  (VTBL_ENTRY)&_ZN9S19062C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19062C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19062C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19062C103v46Ev,
  (VTBL_ENTRY)&_ZN9S19062C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19062C10D0Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19062C10[0]),
  (VTBL_ENTRY)&_ZN8S19062C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v15Ev,
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI9S19062C10[0]),
  (VTBL_ENTRY)&_ZN11S19062C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt3v11Ev,
  ABISELECT(56,32),
  ABISELECT(24,16),
  ABISELECT(-200,-132),
  (VTBL_ENTRY)&(_ZTI9S19062C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N9S19062C10D1Ev,_ZThn132_N9S19062C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N9S19062C10D0Ev,_ZThn132_N9S19062C10D0Ev),
  (VTBL_ENTRY)&_ZN9S19062C143v40Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v41Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v45Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-148),
  ABISELECT(32,16),
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI9S19062C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19062C10D1Ev,_ZTv0_n16_N9S19062C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19062C10D0Ev,_ZTv0_n16_N9S19062C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v39Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI9S19062C10[0]),
  (VTBL_ENTRY)&_ZN8S19062C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v15Ev,
};
extern VTBL_ENTRY _ZTV9S19062C10[];
extern void _ZN9S19062C14D1Ev();
extern void _ZN9S19062C14D0Ev();
extern void _ZN9S19062C143v40Ev();
extern void _ZN9S19062C143v41Ev();
extern void _ZN9S19062C143v42Ev();
extern void _ZN9S19062C143v43Ev();
extern void _ZN9S19062C143v44Ev();
extern void _ZN9S19062C143v45Ev();
static  VTBL_ENTRY _tg__ZTV9S19062C14__9S19062C10[] = {
  ABISELECT(56,32),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19062C14[0]),
  (VTBL_ENTRY)&_ZN9S19062C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19062C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v40Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v41Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v45Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19062C14D1Ev,_ZTv0_n16_N9S19062C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S19062C14D1Ev,_ZThn16_N9S19062C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19062C14D0Ev,_ZTv0_n16_N9S19062C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S19062C14D0Ev,_ZThn16_N9S19062C14D0Ev)() __attribute__((weak));
extern void _ZN8S19062C42v4Ev();
extern void _ZN9S19062C133v29Ev();
extern void _ZN9S19062C133v30Ev();
extern void _ZN9S19062C133v31Ev();
extern void _ZN9S19062C133v32Ev();
extern void _ZN9S19062C133v33Ev();
extern void _ZN9S19062C123v34Ev();
extern void _ZN9S19062C123v35Ev();
extern void _ZN9S19062C123v36Ev();
extern void _ZN9S19062C123v37Ev();
extern void _ZN9S19062C123v38Ev();
extern void _ZN9S19062C123v39Ev();
static  VTBL_ENTRY _tg__ZTV9S19062C12__9S19062C14__9S19062C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(32,16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19062C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19062C14D1Ev,_ZTv0_n16_N9S19062C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19062C14D0Ev,_ZTv0_n16_N9S19062C14D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v39Ev,
};
extern void _ZN8S19062C73v12Ev();
extern void _ZN8S19062C73v13Ev();
extern void _ZN8S19062C73v14Ev();
extern void _ZN8S19062C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19062C7__9S19062C14__9S19062C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI9S19062C14[0]),
  (VTBL_ENTRY)&_ZN8S19062C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v15Ev,
};
extern void _ZN9S19062C12D1Ev();
extern void _ZN9S19062C12D0Ev();
extern void _ZN8S19062C42v4Ev();
extern void _ZN9S19062C133v29Ev();
extern void _ZN9S19062C133v30Ev();
extern void _ZN9S19062C133v31Ev();
extern void _ZN9S19062C133v32Ev();
extern void _ZN9S19062C133v33Ev();
extern void _ZN9S19062C123v34Ev();
extern void _ZN9S19062C123v35Ev();
extern void _ZN9S19062C123v36Ev();
extern void _ZN9S19062C123v37Ev();
extern void _ZN9S19062C123v38Ev();
extern void _ZN9S19062C123v39Ev();
static  VTBL_ENTRY _tg__ZTV9S19062C12__9S19062C10[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19062C12[0]),
  (VTBL_ENTRY)&_ZN9S19062C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19062C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v39Ev,
};
extern void _ZN8S19062C73v12Ev();
extern void _ZN8S19062C73v13Ev();
extern void _ZN8S19062C73v14Ev();
extern void _ZN8S19062C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19062C7__9S19062C12__9S19062C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19062C12[0]),
  (VTBL_ENTRY)&_ZN8S19062C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v15Ev,
};
static  VTT_ENTRY vtt_S19062C10[] = {
  {&(_ZTV9S19062C10[4]),  4,75},
  {&(_tg__ZTV9S19062C14__9S19062C10[4]),  4,12},
  {&(_tg__ZTV9S19062C12__9S19062C14__9S19062C10[16]),  16,30},
  {&(_tg__ZTV8S19062C7__9S19062C14__9S19062C10[6]),  6,10},
  {&(_ZTV9S19062C10[51]),  51,75},
  {&(_ZTV9S19062C10[71]),  71,75},
  {&(_ZTV9S19062C10[27]),  27,75},
  {&(_tg__ZTV9S19062C12__9S19062C10[3]),  3,17},
  {&(_tg__ZTV8S19062C7__9S19062C12__9S19062C10[6]),  6,10},
};
extern VTBL_ENTRY _ZTI9S19062C10[];
extern  VTBL_ENTRY _ZTV9S19062C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19062C10[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19062C14D0Ev,_ZTv0_n16_N9S19062C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19062C14D0Ev,_ZThn16_N9S19062C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19062C14D1Ev,_ZTv0_n16_N9S19062C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19062C14D1Ev,_ZThn16_N9S19062C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19062C10D0Ev,_ZTv0_n16_N9S19062C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19062C10D0Ev,_ZThn148_N9S19062C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19062C10D1Ev,_ZTv0_n16_N9S19062C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19062C10D1Ev,_ZThn148_N9S19062C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19062C10 = {  "S19062C10", // class name
  bases_S19062C10, 8,
  &(vtc_S19062C10[0]), // expected_vtbl_contents
  &(vtt_S19062C10[0]), // expected_vtt_contents
  ABISELECT(384,256), // object size
  NSPAIRA(_ZTI9S19062C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19062C10),75, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19062C10),9, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19062C1  : virtual S19062C2 , S19062C10 , virtual S19062C9 {
  __tsi64 s19062c1f0:28;
  __tsi64 s19062c1f1;
  virtual  ~S19062C1(); // _ZN8S19062C1D2Ev
  virtual void  v1(); // _ZN8S19062C12v1Ev
  virtual void  v2(); // _ZN8S19062C12v2Ev
  virtual void  v3(); // _ZN8S19062C12v3Ev
  S19062C1(); // tgen
};
//SIG(1 S19062C1) C1{ VBC2{ BC3{ BC4{ vd v4} vd v5 v6 FC4} VBC5{ v7 v8 v9 v10 v11 Fp[4]} BC6{ VBC7{ v12 v13 v14 v15 Fc FD[7]} BC8{ vd v16 v17 v18 v19 FC4} VBC4 vd v20 v21 v22 v23 Fp Fi FL[3]} BC9{ vd v24} v25} BC10{ BC11{ v26 v27 v28 FL[2]} VBC12{ BC13{ BC4 vd v29 v30 v31 v32 v33 Fp FL:7} VBC7 vd v34 v35 v36 v37 v38 v39 Fi} BC7 BC5 BC14{ VBC12 vd v40 v41 v42 v43 v44 v45 FL Fi} v46} VBC9 vd v1 v2 v3 FL:28 FL}


 S19062C1 ::~S19062C1(){ note_dtor("S19062C1", this);}
void  S19062C1 ::v1(){vfunc_called(this, "_ZN8S19062C12v1Ev");}
void  S19062C1 ::v2(){vfunc_called(this, "_ZN8S19062C12v2Ev");}
void  S19062C1 ::v3(){vfunc_called(this, "_ZN8S19062C12v3Ev");}
S19062C1 ::S19062C1(){ note_ctor("S19062C1", this);} // tgen

static void Test_S19062C1()
{
  extern Class_Descriptor cd_S19062C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,88)];
    init_test(&cd_S19062C1, buf);
    S19062C1 *dp, &lv = *(dp=new (buf) S19062C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,348), "sizeof(S19062C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19062C1)");
    check_base_class_offset(lv, (S19062C4*)(S19062C3*)(S19062C2*), ABISELECT(232,160), "S19062C1");
    check_base_class_offset(lv, (S19062C3*)(S19062C2*), ABISELECT(232,160), "S19062C1");
    check_base_class_offset(lv, (S19062C5_nt*)(S19062C2*), ABISELECT(312,212), "S19062C1");
    check_base_class_offset(lv, (S19062C7*)(S19062C6*)(S19062C2*), ABISELECT(352,232), "S19062C1");
    check_base_class_offset(lv, (S19062C7*)(S19062C12*), ABISELECT(352,232), "S19062C1");
    check_base_class_offset(lv, (S19062C8*)(S19062C6*)(S19062C2*), ABISELECT(248,168), "S19062C1");
    check_base_class_offset(lv, (S19062C4*)(S19062C6*)(S19062C2*), ABISELECT(480,324), "S19062C1");
    check_base_class_offset(lv, (S19062C6*)(S19062C2*), ABISELECT(248,168), "S19062C1");
    check_base_class_offset(lv, (S19062C9*)(S19062C2*), ABISELECT(304,208), "S19062C1");
    check_base_class_offset(lv, (S19062C2*), ABISELECT(232,160), "S19062C1");
    check_base_class_offset(lv, (S19062C11*)(S19062C10*), 0, "S19062C1");
    check_base_class_offset(lv, (S19062C4*)(S19062C13*)(S19062C12*), ABISELECT(488,328), "S19062C1");
    check_base_class_offset(lv, (S19062C13*)(S19062C12*), ABISELECT(488,328), "S19062C1");
    check_base_class_offset(lv, (S19062C12*)(S19062C10*), ABISELECT(488,328), "S19062C1");
    check_base_class_offset(lv, (S19062C12*)(S19062C14*)(S19062C10*), ABISELECT(488,328), "S19062C1");
    /*is_ambiguous_... S19062C10::S19062C7 */ AMB_check_base_class_offset(lv, (S19062C7*)(S19062C10*), ABISELECT(32,20), "S19062C1");
    check_base_class_offset(lv, (S19062C5_nt*)(S19062C10*), ABISELECT(160,112), "S19062C1");
    check_base_class_offset(lv, (S19062C14*)(S19062C10*), ABISELECT(200,132), "S19062C1");
    check_base_class_offset(lv, (S19062C10*), 0, "S19062C1");
    /*is_ambiguous_... S19062C1::S19062C9 */ AMB_check_base_class_offset(lv, (S19062C9*), ABISELECT(512,344), "S19062C1");
    set_bf_and_test(lv, s19062c1f0, ABISELECT(220,148), 0, 28, 1, "S19062C1");
    set_bf_and_test(lv, s19062c1f0, ABISELECT(220,148), 0, 28, hide_sll(1LL<<27), "S19062C1");
    check_field_offset(lv, s19062c1f1, ABISELECT(224,152), "S19062C1.s19062c1f1");
    test_class_info(&lv, &cd_S19062C1);
    dp->~S19062C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19062C1(Test_S19062C1, "S19062C1", ABISELECT(528,348));

#else // __cplusplus

extern void _ZN8S19062C1C1Ev();
extern void _ZN8S19062C1D2Ev();
Name_Map name_map_S19062C1[] = {
  NSPAIR(_ZN8S19062C1C1Ev),
  NSPAIR(_ZN8S19062C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19062C4;
extern VTBL_ENTRY _ZTI8S19062C4[];
extern  VTBL_ENTRY _ZTV8S19062C4[];
extern Class_Descriptor cd_S19062C3;
extern VTBL_ENTRY _ZTI8S19062C3[];
extern  VTBL_ENTRY _ZTV8S19062C3[];
extern Class_Descriptor cd_S19062C5_nt;
extern VTBL_ENTRY _ZTI11S19062C5_nt[];
extern  VTBL_ENTRY _ZTV11S19062C5_nt[];
extern Class_Descriptor cd_S19062C7;
extern VTBL_ENTRY _ZTI8S19062C7[];
extern  VTBL_ENTRY _ZTV8S19062C7[];
extern Class_Descriptor cd_S19062C8;
extern VTBL_ENTRY _ZTI8S19062C8[];
extern  VTBL_ENTRY _ZTV8S19062C8[];
extern Class_Descriptor cd_S19062C4;
extern VTBL_ENTRY _ZTI8S19062C4[];
extern  VTBL_ENTRY _ZTV8S19062C4[];
extern Class_Descriptor cd_S19062C6;
extern VTBL_ENTRY _ZTI8S19062C6[];
extern  VTBL_ENTRY _ZTV8S19062C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19062C6[];
extern Class_Descriptor cd_S19062C9;
extern VTBL_ENTRY _ZTI8S19062C9[];
extern  VTBL_ENTRY _ZTV8S19062C9[];
extern Class_Descriptor cd_S19062C2;
extern VTBL_ENTRY _ZTI8S19062C2[];
extern  VTBL_ENTRY _ZTV8S19062C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19062C2[];
extern Class_Descriptor cd_S19062C11;
extern VTBL_ENTRY _ZTI9S19062C11[];
extern  VTBL_ENTRY _ZTV9S19062C11[];
extern Class_Descriptor cd_S19062C4;
extern VTBL_ENTRY _ZTI8S19062C4[];
extern  VTBL_ENTRY _ZTV8S19062C4[];
extern Class_Descriptor cd_S19062C13;
extern VTBL_ENTRY _ZTI9S19062C13[];
extern  VTBL_ENTRY _ZTV9S19062C13[];
extern Class_Descriptor cd_S19062C12;
extern VTBL_ENTRY _ZTI9S19062C12[];
extern  VTBL_ENTRY _ZTV9S19062C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19062C12[];
extern Class_Descriptor cd_S19062C7;
extern VTBL_ENTRY _ZTI8S19062C7[];
extern  VTBL_ENTRY _ZTV8S19062C7[];
extern Class_Descriptor cd_S19062C5_nt;
extern VTBL_ENTRY _ZTI11S19062C5_nt[];
extern  VTBL_ENTRY _ZTV11S19062C5_nt[];
extern Class_Descriptor cd_S19062C14;
extern VTBL_ENTRY _ZTI9S19062C14[];
extern  VTBL_ENTRY _ZTV9S19062C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19062C14[];
extern Class_Descriptor cd_S19062C10;
extern VTBL_ENTRY _ZTI9S19062C10[];
extern  VTBL_ENTRY _ZTV9S19062C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19062C10[];
extern Class_Descriptor cd_S19062C9;
extern VTBL_ENTRY _ZTI8S19062C9[];
extern  VTBL_ENTRY _ZTV8S19062C9[];
static Base_Class bases_S19062C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19062C4,    ABISELECT(232,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
    4, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19062C3,    ABISELECT(232,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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19062C5_nt,    ABISELECT(312,212), //bcp->offset
    86, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19062C7,    ABISELECT(352,232), //bcp->offset
    98, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19062C8,    ABISELECT(248,168), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19062C4,    ABISELECT(480,324), //bcp->offset
    108, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19062C6,    ABISELECT(248,168), //bcp->offset
    67, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19062C9,    ABISELECT(304,208), //bcp->offset
    81, //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
    8, //immediately_derived
  0, 0},
  {&cd_S19062C2,    ABISELECT(232,160), //bcp->offset
    42, //bcp->virtual_function_table_offset
    19, //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},
  {&cd_S19062C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19062C4,    ABISELECT(488,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19062C13,    ABISELECT(488,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19062C12,    ABISELECT(488,328), //bcp->offset
    115, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19062C7,    ABISELECT(32,20), //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
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19062C5_nt,    ABISELECT(160,112), //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
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19062C14,    ABISELECT(200,132), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19062C10,    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_S19062C9,    ABISELECT(512,344), //bcp->offset
    145, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19062C1[];
extern void _ZN9S19062C113v26Ev();
extern void _ZN9S19062C113v27Ev();
extern void _ZN9S19062C113v28Ev();
extern void _ZN9S19062C103v46Ev();
extern void _ZN8S19062C1D1Ev();
extern void _ZN8S19062C1D0Ev();
extern void _ZN8S19062C12v1Ev();
extern void _ZN8S19062C12v2Ev();
extern void _ZN8S19062C12v3Ev();
extern void _ZN8S19062C73v12Ev();
extern void _ZN8S19062C73v13Ev();
extern void _ZN8S19062C73v14Ev();
extern void _ZN8S19062C73v15Ev();
extern void _ZN11S19062C5_nt2v7Ev();
extern void _ZN11S19062C5_nt2v8Ev();
extern void _ZN11S19062C5_nt2v9Ev();
extern void _ZN11S19062C5_nt3v10Ev();
extern void _ZN11S19062C5_nt3v11Ev();
extern void ABISELECT(_ZThn200_N8S19062C1D1Ev,_ZThn132_N8S19062C1D1Ev)();
extern void ABISELECT(_ZThn200_N8S19062C1D0Ev,_ZThn132_N8S19062C1D0Ev)();
extern void _ZN9S19062C143v40Ev();
extern void _ZN9S19062C143v41Ev();
extern void _ZN9S19062C143v42Ev();
extern void _ZN9S19062C143v43Ev();
extern void _ZN9S19062C143v44Ev();
extern void _ZN9S19062C143v45Ev();
extern void ABISELECT(_ZTv0_n48_N8S19062C1D1Ev,_ZTv0_n24_N8S19062C1D1Ev)();
extern void ABISELECT(_ZThn232_N8S19062C1D1Ev,_ZThn160_N8S19062C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19062C1D0Ev,_ZTv0_n24_N8S19062C1D0Ev)();
extern void ABISELECT(_ZThn232_N8S19062C1D0Ev,_ZThn160_N8S19062C1D0Ev)() __attribute__((weak));
extern void _ZN8S19062C42v4Ev();
extern void _ZN8S19062C32v5Ev();
extern void _ZN8S19062C32v6Ev();
extern void _ZN8S19062C23v25Ev();
extern void ABISELECT(_ZTvn16_n48_N8S19062C1D1Ev,_ZTvn8_n24_N8S19062C1D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S19062C1D0Ev,_ZTvn8_n24_N8S19062C1D0Ev)();
extern void _ZN8S19062C83v16Ev();
extern void _ZN8S19062C83v17Ev();
extern void _ZN8S19062C83v18Ev();
extern void _ZN8S19062C83v19Ev();
extern void _ZN8S19062C63v20Ev();
extern void _ZN8S19062C63v21Ev();
extern void _ZN8S19062C63v22Ev();
extern void _ZN8S19062C63v23Ev();
extern void ABISELECT(_ZTvn72_n48_N8S19062C1D1Ev,_ZTvn48_n24_N8S19062C1D1Ev)();
extern void ABISELECT(_ZTvn72_n48_N8S19062C1D0Ev,_ZTvn48_n24_N8S19062C1D0Ev)();
extern void _ZN8S19062C93v24Ev();
extern void _ZN11S19062C5_nt2v7Ev();
extern void _ZN11S19062C5_nt2v8Ev();
extern void _ZN11S19062C5_nt2v9Ev();
extern void _ZN11S19062C5_nt3v10Ev();
extern void _ZN11S19062C5_nt3v11Ev();
extern void _ZN8S19062C73v12Ev();
extern void _ZN8S19062C73v13Ev();
extern void _ZN8S19062C73v14Ev();
extern void _ZN8S19062C73v15Ev();
extern void ABISELECT(_ZTv0_n24_N8S19062C1D1Ev,_ZTv0_n12_N8S19062C1D1Ev)();
extern void ABISELECT(_ZThn480_N8S19062C1D1Ev,_ZThn324_N8S19062C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19062C1D0Ev,_ZTv0_n12_N8S19062C1D0Ev)();
extern void ABISELECT(_ZThn480_N8S19062C1D0Ev,_ZThn324_N8S19062C1D0Ev)() __attribute__((weak));
extern void _ZN8S19062C42v4Ev();
extern void ABISELECT(_ZTv0_n32_N8S19062C1D1Ev,_ZTv0_n16_N8S19062C1D1Ev)();
extern void ABISELECT(_ZThn488_N8S19062C1D1Ev,_ZThn328_N8S19062C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19062C1D0Ev,_ZTv0_n16_N8S19062C1D0Ev)();
extern void ABISELECT(_ZThn488_N8S19062C1D0Ev,_ZThn328_N8S19062C1D0Ev)() __attribute__((weak));
extern void _ZN8S19062C42v4Ev();
extern void _ZN9S19062C133v29Ev();
extern void _ZN9S19062C133v30Ev();
extern void _ZN9S19062C133v31Ev();
extern void _ZN9S19062C133v32Ev();
extern void _ZN9S19062C133v33Ev();
extern void _ZN9S19062C123v34Ev();
extern void _ZN9S19062C123v35Ev();
extern void _ZN9S19062C123v36Ev();
extern void _ZN9S19062C123v37Ev();
extern void _ZN9S19062C123v38Ev();
extern void _ZN9S19062C123v39Ev();
extern void ABISELECT(_ZTv0_n24_N8S19062C1D1Ev,_ZTv0_n12_N8S19062C1D1Ev)();
extern void ABISELECT(_ZThn512_N8S19062C1D1Ev,_ZThn344_N8S19062C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19062C1D0Ev,_ZTv0_n12_N8S19062C1D0Ev)();
extern void ABISELECT(_ZThn512_N8S19062C1D0Ev,_ZThn344_N8S19062C1D0Ev)() __attribute__((weak));
extern void _ZN8S19062C93v24Ev();
static  VTBL_ENTRY vtc_S19062C1[] = {
  ABISELECT(512,344),
  ABISELECT(480,324),
  ABISELECT(312,212),
  ABISELECT(232,160),
  ABISELECT(352,232),
  ABISELECT(488,328),
  0,
  (VTBL_ENTRY)&(_ZTI8S19062C1[0]),
  (VTBL_ENTRY)&_ZN9S19062C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19062C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19062C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19062C103v46Ev,
  (VTBL_ENTRY)&_ZN8S19062C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19062C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19062C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19062C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19062C12v3Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19062C1[0]),
  (VTBL_ENTRY)&_ZN8S19062C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v15Ev,
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S19062C1[0]),
  (VTBL_ENTRY)&_ZN11S19062C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt3v11Ev,
  ABISELECT(152,100),
  ABISELECT(288,196),
  ABISELECT(-200,-132),
  (VTBL_ENTRY)&(_ZTI8S19062C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N8S19062C1D1Ev,_ZThn132_N8S19062C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N8S19062C1D0Ev,_ZThn132_N8S19062C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19062C143v40Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v41Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v45Ev,
  ABISELECT(72,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-232,-160),
  ABISELECT(248,164),
  ABISELECT(120,72),
  ABISELECT(80,52),
  ABISELECT(-232,-160),
  (VTBL_ENTRY)&(_ZTI8S19062C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19062C1D1Ev,_ZTv0_n24_N8S19062C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19062C1D0Ev,_ZTv0_n24_N8S19062C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19062C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19062C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19062C23v25Ev,
  ABISELECT(232,156),
  ABISELECT(104,64),
  ABISELECT(-248,-168),
  (VTBL_ENTRY)&(_ZTI8S19062C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19062C1D1Ev,_ZTvn8_n24_N8S19062C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19062C1D0Ev,_ZTvn8_n24_N8S19062C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v23Ev,
  ABISELECT(-304,-208),
  (VTBL_ENTRY)&(_ZTI8S19062C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn72_n48_N8S19062C1D1Ev,_ZTvn48_n24_N8S19062C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn72_n48_N8S19062C1D0Ev,_ZTvn48_n24_N8S19062C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C93v24Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-212),
  (VTBL_ENTRY)&(_ZTI8S19062C1[0]),
  (VTBL_ENTRY)&_ZN11S19062C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt3v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-232),
  (VTBL_ENTRY)&(_ZTI8S19062C1[0]),
  (VTBL_ENTRY)&_ZN8S19062C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v15Ev,
  0,
  ABISELECT(-480,-324),
  ABISELECT(-480,-324),
  (VTBL_ENTRY)&(_ZTI8S19062C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19062C1D1Ev,_ZTv0_n12_N8S19062C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19062C1D0Ev,_ZTv0_n12_N8S19062C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-488,-328),
  ABISELECT(-136,-96),
  ABISELECT(-488,-328),
  (VTBL_ENTRY)&(_ZTI8S19062C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19062C1D1Ev,_ZTv0_n16_N8S19062C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19062C1D0Ev,_ZTv0_n16_N8S19062C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v39Ev,
  0,
  ABISELECT(-512,-344),
  ABISELECT(-512,-344),
  (VTBL_ENTRY)&(_ZTI8S19062C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19062C1D1Ev,_ZTv0_n12_N8S19062C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19062C1D0Ev,_ZTv0_n12_N8S19062C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C93v24Ev,
};
extern VTBL_ENTRY _ZTV8S19062C1[];
extern void _ZN9S19062C113v26Ev();
extern void _ZN9S19062C113v27Ev();
extern void _ZN9S19062C113v28Ev();
extern void _ZN9S19062C103v46Ev();
extern void _ZN9S19062C10D1Ev();
extern void _ZN9S19062C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19062C10__8S19062C1[] = {
  ABISELECT(352,232),
  ABISELECT(488,328),
  0,
  (VTBL_ENTRY)&(_ZTI9S19062C10[0]),
  (VTBL_ENTRY)&_ZN9S19062C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19062C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19062C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19062C103v46Ev,
  (VTBL_ENTRY)&_ZN9S19062C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19062C10D0Ev,
};
extern void _ZN9S19062C14D1Ev();
extern void _ZN9S19062C14D0Ev();
extern void _ZN9S19062C143v40Ev();
extern void _ZN9S19062C143v41Ev();
extern void _ZN9S19062C143v42Ev();
extern void _ZN9S19062C143v43Ev();
extern void _ZN9S19062C143v44Ev();
extern void _ZN9S19062C143v45Ev();
static  VTBL_ENTRY _tg__ZTV9S19062C149S19062C10__8S19062C1[] = {
  ABISELECT(152,100),
  ABISELECT(288,196),
  0,
  (VTBL_ENTRY)&(_ZTI9S19062C14[0]),
  (VTBL_ENTRY)&_ZN9S19062C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19062C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v40Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v41Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v45Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19062C14D1Ev,_ZTv0_n16_N9S19062C14D1Ev)();
extern void ABISELECT(_ZThn288_N9S19062C14D1Ev,_ZThn196_N9S19062C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19062C14D0Ev,_ZTv0_n16_N9S19062C14D0Ev)();
extern void ABISELECT(_ZThn288_N9S19062C14D0Ev,_ZThn196_N9S19062C14D0Ev)() __attribute__((weak));
extern void _ZN8S19062C42v4Ev();
extern void _ZN9S19062C133v29Ev();
extern void _ZN9S19062C133v30Ev();
extern void _ZN9S19062C133v31Ev();
extern void _ZN9S19062C133v32Ev();
extern void _ZN9S19062C133v33Ev();
extern void _ZN9S19062C123v34Ev();
extern void _ZN9S19062C123v35Ev();
extern void _ZN9S19062C123v36Ev();
extern void _ZN9S19062C123v37Ev();
extern void _ZN9S19062C123v38Ev();
extern void _ZN9S19062C123v39Ev();
static  VTBL_ENTRY _tg__ZTV9S19062C12__9S19062C149S19062C10__8S19062C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-288,-196),
  ABISELECT(-136,-96),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI9S19062C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19062C14D1Ev,_ZTv0_n16_N9S19062C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19062C14D0Ev,_ZTv0_n16_N9S19062C14D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v39Ev,
};
extern void _ZN8S19062C73v12Ev();
extern void _ZN8S19062C73v13Ev();
extern void _ZN8S19062C73v14Ev();
extern void _ZN8S19062C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19062C7__9S19062C149S19062C10__8S19062C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19062C14[0]),
  (VTBL_ENTRY)&_ZN8S19062C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v15Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19062C10D1Ev,_ZTv0_n16_N9S19062C10D1Ev)();
extern void ABISELECT(_ZThn488_N9S19062C10D1Ev,_ZThn328_N9S19062C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19062C10D0Ev,_ZTv0_n16_N9S19062C10D0Ev)();
extern void ABISELECT(_ZThn488_N9S19062C10D0Ev,_ZThn328_N9S19062C10D0Ev)() __attribute__((weak));
extern void _ZN8S19062C42v4Ev();
extern void _ZN9S19062C133v29Ev();
extern void _ZN9S19062C133v30Ev();
extern void _ZN9S19062C133v31Ev();
extern void _ZN9S19062C133v32Ev();
extern void _ZN9S19062C133v33Ev();
extern void _ZN9S19062C123v34Ev();
extern void _ZN9S19062C123v35Ev();
extern void _ZN9S19062C123v36Ev();
extern void _ZN9S19062C123v37Ev();
extern void _ZN9S19062C123v38Ev();
extern void _ZN9S19062C123v39Ev();
static  VTBL_ENTRY _tg__ZTV9S19062C12__9S19062C10__8S19062C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-488,-328),
  ABISELECT(-136,-96),
  ABISELECT(-488,-328),
  (VTBL_ENTRY)&(_ZTI9S19062C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19062C10D1Ev,_ZTv0_n16_N9S19062C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19062C10D0Ev,_ZTv0_n16_N9S19062C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v39Ev,
};
extern void _ZN8S19062C73v12Ev();
extern void _ZN8S19062C73v13Ev();
extern void _ZN8S19062C73v14Ev();
extern void _ZN8S19062C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19062C7__9S19062C10__8S19062C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-352,-232),
  (VTBL_ENTRY)&(_ZTI9S19062C10[0]),
  (VTBL_ENTRY)&_ZN8S19062C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v15Ev,
};
extern void ABISELECT(_ZThn200_N9S19062C10D1Ev,_ZThn132_N9S19062C10D1Ev)();
extern void ABISELECT(_ZThn200_N9S19062C10D0Ev,_ZThn132_N9S19062C10D0Ev)();
extern void _ZN9S19062C143v40Ev();
extern void _ZN9S19062C143v41Ev();
extern void _ZN9S19062C143v42Ev();
extern void _ZN9S19062C143v43Ev();
extern void _ZN9S19062C143v44Ev();
extern void _ZN9S19062C143v45Ev();
static  VTBL_ENTRY _tg__ZTV9S19062C14__9S19062C10__8S19062C1[] = {
  ABISELECT(152,100),
  ABISELECT(288,196),
  ABISELECT(-200,-132),
  (VTBL_ENTRY)&(_ZTI9S19062C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N9S19062C10D1Ev,_ZThn132_N9S19062C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N9S19062C10D0Ev,_ZThn132_N9S19062C10D0Ev),
  (VTBL_ENTRY)&_ZN9S19062C143v40Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v41Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19062C143v45Ev,
};
extern void _ZN8S19062C2D1Ev();
extern void _ZN8S19062C2D0Ev();
extern void _ZN8S19062C42v4Ev();
extern void _ZN8S19062C32v5Ev();
extern void _ZN8S19062C32v6Ev();
extern void _ZN8S19062C23v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19062C2__8S19062C1[] = {
  ABISELECT(248,164),
  ABISELECT(120,72),
  ABISELECT(80,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19062C2[0]),
  (VTBL_ENTRY)&_ZN8S19062C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19062C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19062C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19062C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19062C23v25Ev,
};
extern void _ZN8S19062C6D1Ev();
extern void _ZN8S19062C6D0Ev();
extern void _ZN8S19062C83v16Ev();
extern void _ZN8S19062C83v17Ev();
extern void _ZN8S19062C83v18Ev();
extern void _ZN8S19062C83v19Ev();
extern void _ZN8S19062C63v20Ev();
extern void _ZN8S19062C63v21Ev();
extern void _ZN8S19062C63v22Ev();
extern void _ZN8S19062C63v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19062C68S19062C2__8S19062C1[] = {
  ABISELECT(232,156),
  ABISELECT(104,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19062C6[0]),
  (VTBL_ENTRY)&_ZN8S19062C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19062C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v23Ev,
};
extern void _ZN8S19062C73v12Ev();
extern void _ZN8S19062C73v13Ev();
extern void _ZN8S19062C73v14Ev();
extern void _ZN8S19062C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19062C7__8S19062C68S19062C2__8S19062C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI8S19062C6[0]),
  (VTBL_ENTRY)&_ZN8S19062C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19062C6D1Ev,_ZTv0_n12_N8S19062C6D1Ev)();
extern void ABISELECT(_ZThn232_N8S19062C6D1Ev,_ZThn156_N8S19062C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19062C6D0Ev,_ZTv0_n12_N8S19062C6D0Ev)();
extern void ABISELECT(_ZThn232_N8S19062C6D0Ev,_ZThn156_N8S19062C6D0Ev)() __attribute__((weak));
extern void _ZN8S19062C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19062C4__8S19062C68S19062C2__8S19062C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S19062C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19062C6D1Ev,_ZTv0_n12_N8S19062C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19062C6D0Ev,_ZTv0_n12_N8S19062C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
};
extern void _ZN11S19062C5_nt2v7Ev();
extern void _ZN11S19062C5_nt2v8Ev();
extern void _ZN11S19062C5_nt2v9Ev();
extern void _ZN11S19062C5_nt3v10Ev();
extern void _ZN11S19062C5_nt3v11Ev();
static  VTBL_ENTRY _tg__ZTV11S19062C5_nt__8S19062C2__8S19062C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S19062C2[0]),
  (VTBL_ENTRY)&_ZN11S19062C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19062C5_nt3v11Ev,
};
extern void ABISELECT(_ZThn16_N8S19062C2D1Ev,_ZThn8_N8S19062C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19062C2D0Ev,_ZThn8_N8S19062C2D0Ev)();
extern void _ZN8S19062C83v16Ev();
extern void _ZN8S19062C83v17Ev();
extern void _ZN8S19062C83v18Ev();
extern void _ZN8S19062C83v19Ev();
extern void _ZN8S19062C63v20Ev();
extern void _ZN8S19062C63v21Ev();
extern void _ZN8S19062C63v22Ev();
extern void _ZN8S19062C63v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19062C6__8S19062C2__8S19062C1[] = {
  ABISELECT(232,156),
  ABISELECT(104,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19062C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19062C2D1Ev,_ZThn8_N8S19062C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19062C2D0Ev,_ZThn8_N8S19062C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19062C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19062C63v23Ev,
};
extern void _ZN8S19062C73v12Ev();
extern void _ZN8S19062C73v13Ev();
extern void _ZN8S19062C73v14Ev();
extern void _ZN8S19062C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19062C7__8S19062C2__8S19062C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI8S19062C2[0]),
  (VTBL_ENTRY)&_ZN8S19062C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19062C2D1Ev,_ZTv0_n12_N8S19062C2D1Ev)();
extern void ABISELECT(_ZThn248_N8S19062C2D1Ev,_ZThn164_N8S19062C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19062C2D0Ev,_ZTv0_n12_N8S19062C2D0Ev)();
extern void ABISELECT(_ZThn248_N8S19062C2D0Ev,_ZThn164_N8S19062C2D0Ev)() __attribute__((weak));
extern void _ZN8S19062C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19062C4__A1__8S19062C2__8S19062C1[] = {
  0,
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  (VTBL_ENTRY)&(_ZTI8S19062C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19062C2D1Ev,_ZTv0_n12_N8S19062C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19062C2D0Ev,_ZTv0_n12_N8S19062C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
};
extern void _ZN9S19062C12D1Ev();
extern void _ZN9S19062C12D0Ev();
extern void _ZN8S19062C42v4Ev();
extern void _ZN9S19062C133v29Ev();
extern void _ZN9S19062C133v30Ev();
extern void _ZN9S19062C133v31Ev();
extern void _ZN9S19062C133v32Ev();
extern void _ZN9S19062C133v33Ev();
extern void _ZN9S19062C123v34Ev();
extern void _ZN9S19062C123v35Ev();
extern void _ZN9S19062C123v36Ev();
extern void _ZN9S19062C123v37Ev();
extern void _ZN9S19062C123v38Ev();
extern void _ZN9S19062C123v39Ev();
static  VTBL_ENTRY _tg__ZTV9S19062C12__8S19062C1[] = {
  ABISELECT(-136,-96),
  0,
  (VTBL_ENTRY)&(_ZTI9S19062C12[0]),
  (VTBL_ENTRY)&_ZN9S19062C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19062C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19062C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19062C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19062C123v39Ev,
};
extern void _ZN8S19062C73v12Ev();
extern void _ZN8S19062C73v13Ev();
extern void _ZN8S19062C73v14Ev();
extern void _ZN8S19062C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19062C7__9S19062C12__8S19062C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(136,96),
  (VTBL_ENTRY)&(_ZTI9S19062C12[0]),
  (VTBL_ENTRY)&_ZN8S19062C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19062C73v15Ev,
};
static  VTT_ENTRY vtt_S19062C1[] = {
  {&(_ZTV8S19062C1[8]),  8,152},
  {&(_tg__ZTV9S19062C10__8S19062C1[4]),  4,10},
  {&(_tg__ZTV9S19062C149S19062C10__8S19062C1[4]),  4,12},
  {&(_tg__ZTV9S19062C12__9S19062C149S19062C10__8S19062C1[16]),  16,30},
  {&(_tg__ZTV8S19062C7__9S19062C149S19062C10__8S19062C1[6]),  6,10},
  {&(_tg__ZTV9S19062C12__9S19062C10__8S19062C1[16]),  16,30},
  {&(_tg__ZTV8S19062C7__9S19062C10__8S19062C1[6]),  6,10},
  {&(_tg__ZTV9S19062C14__9S19062C10__8S19062C1[4]),  4,12},
  {&(_ZTV8S19062C1[61]),  61,152},
  {&(_ZTV8S19062C1[93]),  93,152},
  {&(_ZTV8S19062C1[71]),  71,152},
  {&(_ZTV8S19062C1[104]),  104,152},
  {&(_ZTV8S19062C1[112]),  112,152},
  {&(_ZTV8S19062C1[83]),  83,152},
  {&(_ZTV8S19062C1[131]),  131,152},
  {&(_ZTV8S19062C1[34]),  34,152},
  {&(_ZTV8S19062C1[149]),  149,152},
  {&(_tg__ZTV8S19062C2__8S19062C1[5]),  5,11},
  {&(_tg__ZTV8S19062C68S19062C2__8S19062C1[4]),  4,14},
  {&(_tg__ZTV8S19062C7__8S19062C68S19062C2__8S19062C1[6]),  6,10},
  {&(_tg__ZTV8S19062C4__8S19062C68S19062C2__8S19062C1[4]),  4,7},
  {&(_tg__ZTV11S19062C5_nt__8S19062C2__8S19062C1[7]),  7,12},
  {&(_tg__ZTV8S19062C6__8S19062C2__8S19062C1[4]),  4,14},
  {&(_tg__ZTV8S19062C7__8S19062C2__8S19062C1[6]),  6,10},
  {&(_tg__ZTV8S19062C4__A1__8S19062C2__8S19062C1[4]),  4,7},
  {&(_tg__ZTV9S19062C12__8S19062C1[3]),  3,17},
  {&(_tg__ZTV8S19062C7__9S19062C12__8S19062C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S19062C1[];
extern  VTBL_ENTRY _ZTV8S19062C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19062C1[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19062C2D0Ev,_ZTv0_n12_N8S19062C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19062C2D0Ev,_ZThn164_N8S19062C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19062C2D1Ev,_ZTv0_n12_N8S19062C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19062C2D1Ev,_ZThn164_N8S19062C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19062C6D0Ev,_ZTv0_n12_N8S19062C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19062C6D0Ev,_ZThn156_N8S19062C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19062C6D1Ev,_ZTv0_n12_N8S19062C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19062C6D1Ev,_ZThn156_N8S19062C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19062C10D0Ev,_ZTv0_n16_N9S19062C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19062C10D0Ev,_ZThn328_N9S19062C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19062C10D1Ev,_ZTv0_n16_N9S19062C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19062C10D1Ev,_ZThn328_N9S19062C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19062C14D0Ev,_ZTv0_n16_N9S19062C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19062C14D0Ev,_ZThn196_N9S19062C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19062C14D1Ev,_ZTv0_n16_N9S19062C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19062C14D1Ev,_ZThn196_N9S19062C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19062C1D0Ev,_ZTv0_n16_N8S19062C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19062C1D0Ev,_ZThn328_N8S19062C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19062C1D1Ev,_ZTv0_n16_N8S19062C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19062C1D1Ev,_ZThn328_N8S19062C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19062C1D0Ev,_ZTv0_n12_N8S19062C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N8S19062C1D0Ev,_ZThn344_N8S19062C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19062C1D0Ev,_ZThn324_N8S19062C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19062C1D1Ev,_ZTv0_n12_N8S19062C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N8S19062C1D1Ev,_ZThn344_N8S19062C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19062C1D1Ev,_ZThn324_N8S19062C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19062C1D0Ev,_ZTv0_n24_N8S19062C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19062C1D0Ev,_ZThn160_N8S19062C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19062C1D1Ev,_ZTv0_n24_N8S19062C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19062C1D1Ev,_ZThn160_N8S19062C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19062C1 = {  "S19062C1", // class name
  bases_S19062C1, 18,
  &(vtc_S19062C1[0]), // expected_vtbl_contents
  &(vtt_S19062C1[0]), // expected_vtt_contents
  ABISELECT(528,348), // object size
  NSPAIRA(_ZTI8S19062C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19062C1),152, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19062C1),27, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19061C4  {
  virtual  ~S19061C4(); // _ZN8S19061C4D1Ev
  virtual void  v4(); // _ZN8S19061C42v4Ev
  S19061C4(); // tgen
};
//SIG(-1 S19061C4) C1{ vd v1}


 S19061C4 ::~S19061C4(){ note_dtor("S19061C4", this);}
void  S19061C4 ::v4(){vfunc_called(this, "_ZN8S19061C42v4Ev");}
S19061C4 ::S19061C4(){ note_ctor("S19061C4", this);} // tgen

static void Test_S19061C4()
{
  extern Class_Descriptor cd_S19061C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19061C4, buf);
    S19061C4 *dp, &lv = *(dp=new (buf) S19061C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19061C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19061C4)");
    test_class_info(&lv, &cd_S19061C4);
    dp->~S19061C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19061C4(Test_S19061C4, "S19061C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19061C4C1Ev();
extern void _ZN8S19061C4D1Ev();
Name_Map name_map_S19061C4[] = {
  NSPAIR(_ZN8S19061C4C1Ev),
  NSPAIR(_ZN8S19061C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19061C4[];
extern void _ZN8S19061C4D1Ev();
extern void _ZN8S19061C4D0Ev();
extern void _ZN8S19061C42v4Ev();
static  VTBL_ENTRY vtc_S19061C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19061C4[0]),
  (VTBL_ENTRY)&_ZN8S19061C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19061C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
};
extern VTBL_ENTRY _ZTI8S19061C4[];
extern  VTBL_ENTRY _ZTV8S19061C4[];
Class_Descriptor cd_S19061C4 = {  "S19061C4", // class name
  0,0,//no base classes
  &(vtc_S19061C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19061C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19061C4),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  S19061C3  : S19061C4 {
  ::S19061C4 s19061c3f0;
  virtual  ~S19061C3(); // _ZN8S19061C3D1Ev
  virtual void  v5(); // _ZN8S19061C32v5Ev
  virtual void  v6(); // _ZN8S19061C32v6Ev
  S19061C3(); // tgen
};
//SIG(-1 S19061C3) C1{ BC2{ vd v3} vd v1 v2 FC2}


 S19061C3 ::~S19061C3(){ note_dtor("S19061C3", this);}
void  S19061C3 ::v5(){vfunc_called(this, "_ZN8S19061C32v5Ev");}
void  S19061C3 ::v6(){vfunc_called(this, "_ZN8S19061C32v6Ev");}
S19061C3 ::S19061C3(){ note_ctor("S19061C3", this);} // tgen

static void Test_S19061C3()
{
  extern Class_Descriptor cd_S19061C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19061C3, buf);
    S19061C3 *dp, &lv = *(dp=new (buf) S19061C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19061C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19061C3)");
    check_base_class_offset(lv, (S19061C4*), 0, "S19061C3");
    check_field_offset(lv, s19061c3f0, ABISELECT(8,4), "S19061C3.s19061c3f0");
    test_class_info(&lv, &cd_S19061C3);
    dp->~S19061C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19061C3(Test_S19061C3, "S19061C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19061C3C1Ev();
extern void _ZN8S19061C3D1Ev();
Name_Map name_map_S19061C3[] = {
  NSPAIR(_ZN8S19061C3C1Ev),
  NSPAIR(_ZN8S19061C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19061C4;
extern VTBL_ENTRY _ZTI8S19061C4[];
extern  VTBL_ENTRY _ZTV8S19061C4[];
static Base_Class bases_S19061C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19061C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S19061C3[];
extern void _ZN8S19061C3D1Ev();
extern void _ZN8S19061C3D0Ev();
extern void _ZN8S19061C42v4Ev();
extern void _ZN8S19061C32v5Ev();
extern void _ZN8S19061C32v6Ev();
static  VTBL_ENTRY vtc_S19061C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19061C3[0]),
  (VTBL_ENTRY)&_ZN8S19061C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19061C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19061C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19061C32v6Ev,
};
extern VTBL_ENTRY _ZTI8S19061C3[];
extern  VTBL_ENTRY _ZTV8S19061C3[];
Class_Descriptor cd_S19061C3 = {  "S19061C3", // class name
  bases_S19061C3, 1,
  &(vtc_S19061C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19061C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19061C3),7, //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  S19061C5  {
  void *s19061c5f0[4];
  virtual void  v7(); // _ZN8S19061C52v7Ev
  virtual void  v8(); // _ZN8S19061C52v8Ev
  virtual void  v9(); // _ZN8S19061C52v9Ev
  virtual void  v10(); // _ZN8S19061C53v10Ev
  virtual void  v11(); // _ZN8S19061C53v11Ev
  ~S19061C5(); // tgen
  S19061C5(); // tgen
};
//SIG(-1 S19061C5) C1{ v1 v2 v3 v4 v5 Fp[4]}


void  S19061C5 ::v7(){vfunc_called(this, "_ZN8S19061C52v7Ev");}
void  S19061C5 ::v8(){vfunc_called(this, "_ZN8S19061C52v8Ev");}
void  S19061C5 ::v9(){vfunc_called(this, "_ZN8S19061C52v9Ev");}
void  S19061C5 ::v10(){vfunc_called(this, "_ZN8S19061C53v10Ev");}
void  S19061C5 ::v11(){vfunc_called(this, "_ZN8S19061C53v11Ev");}
S19061C5 ::~S19061C5(){ note_dtor("S19061C5", this);} // tgen
S19061C5 ::S19061C5(){ note_ctor("S19061C5", this);} // tgen

static void Test_S19061C5()
{
  extern Class_Descriptor cd_S19061C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19061C5, buf);
    S19061C5 *dp, &lv = *(dp=new (buf) S19061C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19061C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19061C5)");
    check_field_offset(lv, s19061c5f0, ABISELECT(8,4), "S19061C5.s19061c5f0");
    test_class_info(&lv, &cd_S19061C5);
    dp->~S19061C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19061C5(Test_S19061C5, "S19061C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19061C5C1Ev();
extern void _ZN8S19061C5D1Ev();
Name_Map name_map_S19061C5[] = {
  NSPAIR(_ZN8S19061C5C1Ev),
  NSPAIR(_ZN8S19061C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19061C5[];
extern void _ZN8S19061C52v7Ev();
extern void _ZN8S19061C52v8Ev();
extern void _ZN8S19061C52v9Ev();
extern void _ZN8S19061C53v10Ev();
extern void _ZN8S19061C53v11Ev();
static  VTBL_ENTRY vtc_S19061C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19061C5[0]),
  (VTBL_ENTRY)&_ZN8S19061C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19061C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19061C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19061C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19061C53v11Ev,
};
extern VTBL_ENTRY _ZTI8S19061C5[];
extern  VTBL_ENTRY _ZTV8S19061C5[];
Class_Descriptor cd_S19061C5 = {  "S19061C5", // class name
  0,0,//no base classes
  &(vtc_S19061C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19061C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19061C5),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  S19061C7  {
  char s19061c7f0;
  long double s19061c7f1[7];
  virtual void  v12(); // _ZN8S19061C73v12Ev
  virtual void  v13(); // _ZN8S19061C73v13Ev
  virtual void  v14(); // _ZN8S19061C73v14Ev
  virtual void  v15(); // _ZN8S19061C73v15Ev
  ~S19061C7(); // tgen
  S19061C7(); // tgen
};
//SIG(-1 S19061C7) C1{ v1 v2 v3 v4 Fc FD[7]}


void  S19061C7 ::v12(){vfunc_called(this, "_ZN8S19061C73v12Ev");}
void  S19061C7 ::v13(){vfunc_called(this, "_ZN8S19061C73v13Ev");}
void  S19061C7 ::v14(){vfunc_called(this, "_ZN8S19061C73v14Ev");}
void  S19061C7 ::v15(){vfunc_called(this, "_ZN8S19061C73v15Ev");}
S19061C7 ::~S19061C7(){ note_dtor("S19061C7", this);} // tgen
S19061C7 ::S19061C7(){ note_ctor("S19061C7", this);} // tgen

static void Test_S19061C7()
{
  extern Class_Descriptor cd_S19061C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,24)];
    init_test(&cd_S19061C7, buf);
    S19061C7 *dp, &lv = *(dp=new (buf) S19061C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,92), "sizeof(S19061C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19061C7)");
    check_field_offset(lv, s19061c7f0, ABISELECT(8,4), "S19061C7.s19061c7f0");
    check_field_offset(lv, s19061c7f1, ABISELECT(16,8), "S19061C7.s19061c7f1");
    test_class_info(&lv, &cd_S19061C7);
    dp->~S19061C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19061C7(Test_S19061C7, "S19061C7", ABISELECT(128,92));

#else // __cplusplus

extern void _ZN8S19061C7C1Ev();
extern void _ZN8S19061C7D1Ev();
Name_Map name_map_S19061C7[] = {
  NSPAIR(_ZN8S19061C7C1Ev),
  NSPAIR(_ZN8S19061C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19061C7[];
extern void _ZN8S19061C73v12Ev();
extern void _ZN8S19061C73v13Ev();
extern void _ZN8S19061C73v14Ev();
extern void _ZN8S19061C73v15Ev();
static  VTBL_ENTRY vtc_S19061C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19061C7[0]),
  (VTBL_ENTRY)&_ZN8S19061C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v15Ev,
};
extern VTBL_ENTRY _ZTI8S19061C7[];
extern  VTBL_ENTRY _ZTV8S19061C7[];
Class_Descriptor cd_S19061C7 = {  "S19061C7", // class name
  0,0,//no base classes
  &(vtc_S19061C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,92), // object size
  NSPAIRA(_ZTI8S19061C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19061C7),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  S19061C8  {
  ::S19061C4 s19061c8f0;
  virtual  ~S19061C8(); // _ZN8S19061C8D1Ev
  virtual void  v16(); // _ZN8S19061C83v16Ev
  virtual void  v17(); // _ZN8S19061C83v17Ev
  virtual void  v18(); // _ZN8S19061C83v18Ev
  virtual void  v19(); // _ZN8S19061C83v19Ev
  S19061C8(); // tgen
};
//SIG(-1 S19061C8) C1{ vd v1 v2 v3 v4 FC2{ vd v5}}


 S19061C8 ::~S19061C8(){ note_dtor("S19061C8", this);}
void  S19061C8 ::v16(){vfunc_called(this, "_ZN8S19061C83v16Ev");}
void  S19061C8 ::v17(){vfunc_called(this, "_ZN8S19061C83v17Ev");}
void  S19061C8 ::v18(){vfunc_called(this, "_ZN8S19061C83v18Ev");}
void  S19061C8 ::v19(){vfunc_called(this, "_ZN8S19061C83v19Ev");}
S19061C8 ::S19061C8(){ note_ctor("S19061C8", this);} // tgen

static void Test_S19061C8()
{
  extern Class_Descriptor cd_S19061C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19061C8, buf);
    S19061C8 *dp, &lv = *(dp=new (buf) S19061C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19061C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19061C8)");
    check_field_offset(lv, s19061c8f0, ABISELECT(8,4), "S19061C8.s19061c8f0");
    test_class_info(&lv, &cd_S19061C8);
    dp->~S19061C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19061C8(Test_S19061C8, "S19061C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19061C8C1Ev();
extern void _ZN8S19061C8D1Ev();
Name_Map name_map_S19061C8[] = {
  NSPAIR(_ZN8S19061C8C1Ev),
  NSPAIR(_ZN8S19061C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19061C8[];
extern void _ZN8S19061C8D1Ev();
extern void _ZN8S19061C8D0Ev();
extern void _ZN8S19061C83v16Ev();
extern void _ZN8S19061C83v17Ev();
extern void _ZN8S19061C83v18Ev();
extern void _ZN8S19061C83v19Ev();
static  VTBL_ENTRY vtc_S19061C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19061C8[0]),
  (VTBL_ENTRY)&_ZN8S19061C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19061C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v19Ev,
};
extern VTBL_ENTRY _ZTI8S19061C8[];
extern  VTBL_ENTRY _ZTV8S19061C8[];
Class_Descriptor cd_S19061C8 = {  "S19061C8", // class name
  0,0,//no base classes
  &(vtc_S19061C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19061C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19061C8),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19061C6  : virtual S19061C7 , S19061C8 , virtual S19061C4 {
  void *s19061c6f0;
  int s19061c6f1;
  __tsi64 s19061c6f2[3];
  virtual  ~S19061C6(); // _ZN8S19061C6D2Ev
  virtual void  v20(); // _ZN8S19061C63v20Ev
  virtual void  v21(); // _ZN8S19061C63v21Ev
  virtual void  v22(); // _ZN8S19061C63v22Ev
  virtual void  v23(); // _ZN8S19061C63v23Ev
  S19061C6(); // tgen
};
//SIG(-1 S19061C6) C1{ VBC2{ v5 v6 v7 v8 Fc FD[7]} BC3{ vd v9 v10 v11 v12 FC4{ vd v13}} VBC4 vd v1 v2 v3 v4 Fp Fi FL[3]}


 S19061C6 ::~S19061C6(){ note_dtor("S19061C6", this);}
void  S19061C6 ::v20(){vfunc_called(this, "_ZN8S19061C63v20Ev");}
void  S19061C6 ::v21(){vfunc_called(this, "_ZN8S19061C63v21Ev");}
void  S19061C6 ::v22(){vfunc_called(this, "_ZN8S19061C63v22Ev");}
void  S19061C6 ::v23(){vfunc_called(this, "_ZN8S19061C63v23Ev");}
S19061C6 ::S19061C6(){ note_ctor("S19061C6", this);} // tgen

static void Test_S19061C6()
{
  extern Class_Descriptor cd_S19061C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,35)];
    init_test(&cd_S19061C6, buf);
    S19061C6 *dp, &lv = *(dp=new (buf) S19061C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,136), "sizeof(S19061C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19061C6)");
    check_base_class_offset(lv, (S19061C7*), ABISELECT(64,40), "S19061C6");
    check_base_class_offset(lv, (S19061C8*), 0, "S19061C6");
    check_base_class_offset(lv, (S19061C4*), ABISELECT(192,132), "S19061C6");
    check_field_offset(lv, s19061c6f0, ABISELECT(16,8), "S19061C6.s19061c6f0");
    check_field_offset(lv, s19061c6f1, ABISELECT(24,12), "S19061C6.s19061c6f1");
    check_field_offset(lv, s19061c6f2, ABISELECT(32,16), "S19061C6.s19061c6f2");
    test_class_info(&lv, &cd_S19061C6);
    dp->~S19061C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19061C6(Test_S19061C6, "S19061C6", ABISELECT(208,136));

#else // __cplusplus

extern void _ZN8S19061C6C1Ev();
extern void _ZN8S19061C6D2Ev();
Name_Map name_map_S19061C6[] = {
  NSPAIR(_ZN8S19061C6C1Ev),
  NSPAIR(_ZN8S19061C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19061C7;
extern VTBL_ENTRY _ZTI8S19061C7[];
extern  VTBL_ENTRY _ZTV8S19061C7[];
extern Class_Descriptor cd_S19061C8;
extern VTBL_ENTRY _ZTI8S19061C8[];
extern  VTBL_ENTRY _ZTV8S19061C8[];
extern Class_Descriptor cd_S19061C4;
extern VTBL_ENTRY _ZTI8S19061C4[];
extern  VTBL_ENTRY _ZTV8S19061C4[];
static Base_Class bases_S19061C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19061C7,    ABISELECT(64,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19061C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19061C4,    ABISELECT(192,132), //bcp->offset
    24, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19061C6[];
extern void _ZN8S19061C6D1Ev();
extern void _ZN8S19061C6D0Ev();
extern void _ZN8S19061C83v16Ev();
extern void _ZN8S19061C83v17Ev();
extern void _ZN8S19061C83v18Ev();
extern void _ZN8S19061C83v19Ev();
extern void _ZN8S19061C63v20Ev();
extern void _ZN8S19061C63v21Ev();
extern void _ZN8S19061C63v22Ev();
extern void _ZN8S19061C63v23Ev();
extern void _ZN8S19061C73v12Ev();
extern void _ZN8S19061C73v13Ev();
extern void _ZN8S19061C73v14Ev();
extern void _ZN8S19061C73v15Ev();
extern void ABISELECT(_ZTv0_n24_N8S19061C6D1Ev,_ZTv0_n12_N8S19061C6D1Ev)();
extern void ABISELECT(_ZThn192_N8S19061C6D1Ev,_ZThn132_N8S19061C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19061C6D0Ev,_ZTv0_n12_N8S19061C6D0Ev)();
extern void ABISELECT(_ZThn192_N8S19061C6D0Ev,_ZThn132_N8S19061C6D0Ev)() __attribute__((weak));
extern void _ZN8S19061C42v4Ev();
static  VTBL_ENTRY vtc_S19061C6[] = {
  ABISELECT(192,132),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19061C6[0]),
  (VTBL_ENTRY)&_ZN8S19061C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19061C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19061C6[0]),
  (VTBL_ENTRY)&_ZN8S19061C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v15Ev,
  0,
  ABISELECT(-192,-132),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI8S19061C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19061C6D1Ev,_ZTv0_n12_N8S19061C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19061C6D0Ev,_ZTv0_n12_N8S19061C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S19061C6[];
static  VTT_ENTRY vtt_S19061C6[] = {
  {&(_ZTV8S19061C6[4]),  4,31},
  {&(_ZTV8S19061C6[20]),  20,31},
  {&(_ZTV8S19061C6[28]),  28,31},
};
extern VTBL_ENTRY _ZTI8S19061C6[];
extern  VTBL_ENTRY _ZTV8S19061C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19061C6[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19061C6D0Ev,_ZTv0_n12_N8S19061C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19061C6D0Ev,_ZThn132_N8S19061C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19061C6D1Ev,_ZTv0_n12_N8S19061C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19061C6D1Ev,_ZThn132_N8S19061C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19061C6 = {  "S19061C6", // class name
  bases_S19061C6, 3,
  &(vtc_S19061C6[0]), // expected_vtbl_contents
  &(vtt_S19061C6[0]), // expected_vtt_contents
  ABISELECT(208,136), // object size
  NSPAIRA(_ZTI8S19061C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19061C6),31, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19061C6),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19061C9  {
  virtual  ~S19061C9(); // _ZN8S19061C9D1Ev
  virtual void  v24(); // _ZN8S19061C93v24Ev
  S19061C9(); // tgen
};
//SIG(-1 S19061C9) C1{ vd v1}


 S19061C9 ::~S19061C9(){ note_dtor("S19061C9", this);}
void  S19061C9 ::v24(){vfunc_called(this, "_ZN8S19061C93v24Ev");}
S19061C9 ::S19061C9(){ note_ctor("S19061C9", this);} // tgen

static void Test_S19061C9()
{
  extern Class_Descriptor cd_S19061C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19061C9, buf);
    S19061C9 *dp, &lv = *(dp=new (buf) S19061C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19061C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19061C9)");
    test_class_info(&lv, &cd_S19061C9);
    dp->~S19061C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19061C9(Test_S19061C9, "S19061C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19061C9C1Ev();
extern void _ZN8S19061C9D1Ev();
Name_Map name_map_S19061C9[] = {
  NSPAIR(_ZN8S19061C9C1Ev),
  NSPAIR(_ZN8S19061C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19061C9[];
extern void _ZN8S19061C9D1Ev();
extern void _ZN8S19061C9D0Ev();
extern void _ZN8S19061C93v24Ev();
static  VTBL_ENTRY vtc_S19061C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19061C9[0]),
  (VTBL_ENTRY)&_ZN8S19061C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19061C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19061C93v24Ev,
};
extern VTBL_ENTRY _ZTI8S19061C9[];
extern  VTBL_ENTRY _ZTV8S19061C9[];
Class_Descriptor cd_S19061C9 = {  "S19061C9", // class name
  0,0,//no base classes
  &(vtc_S19061C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19061C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19061C9),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  S19061C2  : S19061C3 , virtual S19061C5 , S19061C6 , S19061C9 {
  virtual void  v25(); // _ZN8S19061C23v25Ev
  ~S19061C2(); // tgen
  S19061C2(); // tgen
};
//SIG(-1 S19061C2) C1{ BC2{ BC3{ vd v2} vd v3 v4 FC3} VBC4{ v5 v6 v7 v8 v9 Fp[4]} BC5{ VBC6{ v10 v11 v12 v13 Fc FD[7]} BC7{ vd v14 v15 v16 v17 FC3} VBC3 vd v18 v19 v20 v21 Fp Fi FL[3]} BC8{ vd v22} v1}


void  S19061C2 ::v25(){vfunc_called(this, "_ZN8S19061C23v25Ev");}
S19061C2 ::~S19061C2(){ note_dtor("S19061C2", this);} // tgen
S19061C2 ::S19061C2(){ note_ctor("S19061C2", this);} // tgen

static void Test_S19061C2()
{
  extern Class_Descriptor cd_S19061C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,43)];
    init_test(&cd_S19061C2, buf);
    S19061C2 *dp, &lv = *(dp=new (buf) S19061C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,168), "sizeof(S19061C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19061C2)");
    check_base_class_offset(lv, (S19061C4*)(S19061C3*), 0, "S19061C2");
    check_base_class_offset(lv, (S19061C3*), 0, "S19061C2");
    check_base_class_offset(lv, (S19061C5*), ABISELECT(80,52), "S19061C2");
    check_base_class_offset(lv, (S19061C7*)(S19061C6*), ABISELECT(128,72), "S19061C2");
    check_base_class_offset(lv, (S19061C8*)(S19061C6*), ABISELECT(16,8), "S19061C2");
    check_base_class_offset(lv, (S19061C4*)(S19061C6*), ABISELECT(256,164), "S19061C2");
    check_base_class_offset(lv, (S19061C6*), ABISELECT(16,8), "S19061C2");
    check_base_class_offset(lv, (S19061C9*), ABISELECT(72,48), "S19061C2");
    test_class_info(&lv, &cd_S19061C2);
    dp->~S19061C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19061C2(Test_S19061C2, "S19061C2", ABISELECT(272,168));

#else // __cplusplus

extern void _ZN8S19061C2C1Ev();
extern void _ZN8S19061C2D1Ev();
Name_Map name_map_S19061C2[] = {
  NSPAIR(_ZN8S19061C2C1Ev),
  NSPAIR(_ZN8S19061C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19061C4;
extern VTBL_ENTRY _ZTI8S19061C4[];
extern  VTBL_ENTRY _ZTV8S19061C4[];
extern Class_Descriptor cd_S19061C3;
extern VTBL_ENTRY _ZTI8S19061C3[];
extern  VTBL_ENTRY _ZTV8S19061C3[];
extern Class_Descriptor cd_S19061C5;
extern VTBL_ENTRY _ZTI8S19061C5[];
extern  VTBL_ENTRY _ZTV8S19061C5[];
extern Class_Descriptor cd_S19061C7;
extern VTBL_ENTRY _ZTI8S19061C7[];
extern  VTBL_ENTRY _ZTV8S19061C7[];
extern Class_Descriptor cd_S19061C8;
extern VTBL_ENTRY _ZTI8S19061C8[];
extern  VTBL_ENTRY _ZTV8S19061C8[];
extern Class_Descriptor cd_S19061C4;
extern VTBL_ENTRY _ZTI8S19061C4[];
extern  VTBL_ENTRY _ZTV8S19061C4[];
extern Class_Descriptor cd_S19061C6;
extern VTBL_ENTRY _ZTI8S19061C6[];
extern  VTBL_ENTRY _ZTV8S19061C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19061C6[];
extern Class_Descriptor cd_S19061C9;
extern VTBL_ENTRY _ZTI8S19061C9[];
extern  VTBL_ENTRY _ZTV8S19061C9[];
static Base_Class bases_S19061C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19061C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19061C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19061C5,    ABISELECT(80,52), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19061C7,    ABISELECT(128,72), //bcp->offset
    42, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19061C8,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19061C4,    ABISELECT(256,164), //bcp->offset
    52, //bcp->virtual_function_table_offset
    4, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19061C6,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19061C9,    ABISELECT(72,48), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19061C2[];
extern void _ZN8S19061C2D1Ev();
extern void _ZN8S19061C2D0Ev();
extern void _ZN8S19061C42v4Ev();
extern void _ZN8S19061C32v5Ev();
extern void _ZN8S19061C32v6Ev();
extern void _ZN8S19061C23v25Ev();
extern void ABISELECT(_ZThn16_N8S19061C2D1Ev,_ZThn8_N8S19061C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19061C2D0Ev,_ZThn8_N8S19061C2D0Ev)();
extern void _ZN8S19061C83v16Ev();
extern void _ZN8S19061C83v17Ev();
extern void _ZN8S19061C83v18Ev();
extern void _ZN8S19061C83v19Ev();
extern void _ZN8S19061C63v20Ev();
extern void _ZN8S19061C63v21Ev();
extern void _ZN8S19061C63v22Ev();
extern void _ZN8S19061C63v23Ev();
extern void ABISELECT(_ZThn72_N8S19061C2D1Ev,_ZThn48_N8S19061C2D1Ev)();
extern void ABISELECT(_ZThn72_N8S19061C2D0Ev,_ZThn48_N8S19061C2D0Ev)();
extern void _ZN8S19061C93v24Ev();
extern void _ZN8S19061C52v7Ev();
extern void _ZN8S19061C52v8Ev();
extern void _ZN8S19061C52v9Ev();
extern void _ZN8S19061C53v10Ev();
extern void _ZN8S19061C53v11Ev();
extern void _ZN8S19061C73v12Ev();
extern void _ZN8S19061C73v13Ev();
extern void _ZN8S19061C73v14Ev();
extern void _ZN8S19061C73v15Ev();
extern void ABISELECT(_ZTv0_n24_N8S19061C2D1Ev,_ZTv0_n12_N8S19061C2D1Ev)();
extern void ABISELECT(_ZThn256_N8S19061C2D1Ev,_ZThn164_N8S19061C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19061C2D0Ev,_ZTv0_n12_N8S19061C2D0Ev)();
extern void ABISELECT(_ZThn256_N8S19061C2D0Ev,_ZThn164_N8S19061C2D0Ev)() __attribute__((weak));
extern void _ZN8S19061C42v4Ev();
static  VTBL_ENTRY vtc_S19061C2[] = {
  ABISELECT(256,164),
  ABISELECT(128,72),
  ABISELECT(80,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19061C2[0]),
  (VTBL_ENTRY)&_ZN8S19061C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19061C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19061C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19061C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19061C23v25Ev,
  ABISELECT(240,156),
  ABISELECT(112,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19061C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19061C2D1Ev,_ZThn8_N8S19061C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19061C2D0Ev,_ZThn8_N8S19061C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v23Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19061C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N8S19061C2D1Ev,_ZThn48_N8S19061C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N8S19061C2D0Ev,_ZThn48_N8S19061C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C93v24Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S19061C2[0]),
  (VTBL_ENTRY)&_ZN8S19061C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19061C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19061C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19061C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19061C53v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S19061C2[0]),
  (VTBL_ENTRY)&_ZN8S19061C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v15Ev,
  0,
  ABISELECT(-256,-164),
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI8S19061C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19061C2D1Ev,_ZTv0_n12_N8S19061C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19061C2D0Ev,_ZTv0_n12_N8S19061C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S19061C2[];
extern void _ZN8S19061C6D1Ev();
extern void _ZN8S19061C6D0Ev();
extern void _ZN8S19061C83v16Ev();
extern void _ZN8S19061C83v17Ev();
extern void _ZN8S19061C83v18Ev();
extern void _ZN8S19061C83v19Ev();
extern void _ZN8S19061C63v20Ev();
extern void _ZN8S19061C63v21Ev();
extern void _ZN8S19061C63v22Ev();
extern void _ZN8S19061C63v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19061C6__8S19061C2[] = {
  ABISELECT(240,156),
  ABISELECT(112,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19061C6[0]),
  (VTBL_ENTRY)&_ZN8S19061C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19061C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v23Ev,
};
extern void _ZN8S19061C73v12Ev();
extern void _ZN8S19061C73v13Ev();
extern void _ZN8S19061C73v14Ev();
extern void _ZN8S19061C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19061C7__8S19061C6__8S19061C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S19061C6[0]),
  (VTBL_ENTRY)&_ZN8S19061C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19061C6D1Ev,_ZTv0_n12_N8S19061C6D1Ev)();
extern void ABISELECT(_ZThn240_N8S19061C6D1Ev,_ZThn156_N8S19061C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19061C6D0Ev,_ZTv0_n12_N8S19061C6D0Ev)();
extern void ABISELECT(_ZThn240_N8S19061C6D0Ev,_ZThn156_N8S19061C6D0Ev)() __attribute__((weak));
extern void _ZN8S19061C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19061C4__8S19061C6__8S19061C2[] = {
  0,
  ABISELECT(-240,-156),
  ABISELECT(-240,-156),
  (VTBL_ENTRY)&(_ZTI8S19061C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19061C6D1Ev,_ZTv0_n12_N8S19061C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19061C6D0Ev,_ZTv0_n12_N8S19061C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
};
static  VTT_ENTRY vtt_S19061C2[] = {
  {&(_ZTV8S19061C2[5]),  5,59},
  {&(_tg__ZTV8S19061C6__8S19061C2[4]),  4,14},
  {&(_tg__ZTV8S19061C7__8S19061C6__8S19061C2[6]),  6,10},
  {&(_tg__ZTV8S19061C4__8S19061C6__8S19061C2[4]),  4,7},
  {&(_ZTV8S19061C2[37]),  37,59},
  {&(_ZTV8S19061C2[15]),  15,59},
  {&(_ZTV8S19061C2[48]),  48,59},
  {&(_ZTV8S19061C2[56]),  56,59},
};
extern VTBL_ENTRY _ZTI8S19061C2[];
extern  VTBL_ENTRY _ZTV8S19061C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19061C2[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19061C6D0Ev,_ZTv0_n12_N8S19061C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19061C6D0Ev,_ZThn156_N8S19061C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19061C6D1Ev,_ZTv0_n12_N8S19061C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19061C6D1Ev,_ZThn156_N8S19061C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19061C2D0Ev,_ZTv0_n12_N8S19061C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19061C2D0Ev,_ZThn164_N8S19061C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19061C2D1Ev,_ZTv0_n12_N8S19061C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19061C2D1Ev,_ZThn164_N8S19061C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19061C2 = {  "S19061C2", // class name
  bases_S19061C2, 8,
  &(vtc_S19061C2[0]), // expected_vtbl_contents
  &(vtt_S19061C2[0]), // expected_vtt_contents
  ABISELECT(272,168), // object size
  NSPAIRA(_ZTI8S19061C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19061C2),59, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19061C2),8, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19061C11  {
  long s19061c11f0[2];
  virtual void  v26(); // _ZN9S19061C113v26Ev
  virtual void  v27(); // _ZN9S19061C113v27Ev
  virtual void  v28(); // _ZN9S19061C113v28Ev
  ~S19061C11(); // tgen
  S19061C11(); // tgen
};
//SIG(-1 S19061C11) C1{ v1 v2 v3 Fl[2]}


void  S19061C11 ::v26(){vfunc_called(this, "_ZN9S19061C113v26Ev");}
void  S19061C11 ::v27(){vfunc_called(this, "_ZN9S19061C113v27Ev");}
void  S19061C11 ::v28(){vfunc_called(this, "_ZN9S19061C113v28Ev");}
S19061C11 ::~S19061C11(){ note_dtor("S19061C11", this);} // tgen
S19061C11 ::S19061C11(){ note_ctor("S19061C11", this);} // tgen

static void Test_S19061C11()
{
  extern Class_Descriptor cd_S19061C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19061C11, buf);
    S19061C11 *dp, &lv = *(dp=new (buf) S19061C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19061C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19061C11)");
    check_field_offset(lv, s19061c11f0, ABISELECT(8,4), "S19061C11.s19061c11f0");
    test_class_info(&lv, &cd_S19061C11);
    dp->~S19061C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19061C11(Test_S19061C11, "S19061C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S19061C11C1Ev();
extern void _ZN9S19061C11D1Ev();
Name_Map name_map_S19061C11[] = {
  NSPAIR(_ZN9S19061C11C1Ev),
  NSPAIR(_ZN9S19061C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19061C11[];
extern void _ZN9S19061C113v26Ev();
extern void _ZN9S19061C113v27Ev();
extern void _ZN9S19061C113v28Ev();
static  VTBL_ENTRY vtc_S19061C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19061C11[0]),
  (VTBL_ENTRY)&_ZN9S19061C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19061C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19061C113v28Ev,
};
extern VTBL_ENTRY _ZTI9S19061C11[];
extern  VTBL_ENTRY _ZTV9S19061C11[];
Class_Descriptor cd_S19061C11 = {  "S19061C11", // class name
  0,0,//no base classes
  &(vtc_S19061C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S19061C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19061C11),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  S19061C13  : S19061C4 {
  void *s19061c13f0;
  __tsi64 s19061c13f1:7;
  virtual  ~S19061C13(); // _ZN9S19061C13D1Ev
  virtual void  v29(); // _ZN9S19061C133v29Ev
  virtual void  v30(); // _ZN9S19061C133v30Ev
  virtual void  v31(); // _ZN9S19061C133v31Ev
  virtual void  v32(); // _ZN9S19061C133v32Ev
  virtual void  v33(); // _ZN9S19061C133v33Ev
  S19061C13(); // tgen
};
//SIG(-1 S19061C13) C1{ BC2{ vd v6} vd v1 v2 v3 v4 v5 Fp FL:7}


 S19061C13 ::~S19061C13(){ note_dtor("S19061C13", this);}
void  S19061C13 ::v29(){vfunc_called(this, "_ZN9S19061C133v29Ev");}
void  S19061C13 ::v30(){vfunc_called(this, "_ZN9S19061C133v30Ev");}
void  S19061C13 ::v31(){vfunc_called(this, "_ZN9S19061C133v31Ev");}
void  S19061C13 ::v32(){vfunc_called(this, "_ZN9S19061C133v32Ev");}
void  S19061C13 ::v33(){vfunc_called(this, "_ZN9S19061C133v33Ev");}
S19061C13 ::S19061C13(){ note_ctor("S19061C13", this);} // tgen

static void Test_S19061C13()
{
  extern Class_Descriptor cd_S19061C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S19061C13, buf);
    S19061C13 *dp, &lv = *(dp=new (buf) S19061C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19061C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19061C13)");
    check_base_class_offset(lv, (S19061C4*), 0, "S19061C13");
    check_field_offset(lv, s19061c13f0, ABISELECT(8,4), "S19061C13.s19061c13f0");
    set_bf_and_test(lv, s19061c13f1, ABISELECT(16,8), 0, 7, 1, "S19061C13");
    set_bf_and_test(lv, s19061c13f1, ABISELECT(16,8), 0, 7, hide_sll(1LL<<6), "S19061C13");
    test_class_info(&lv, &cd_S19061C13);
    dp->~S19061C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19061C13(Test_S19061C13, "S19061C13", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S19061C13C1Ev();
extern void _ZN9S19061C13D1Ev();
Name_Map name_map_S19061C13[] = {
  NSPAIR(_ZN9S19061C13C1Ev),
  NSPAIR(_ZN9S19061C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19061C4;
extern VTBL_ENTRY _ZTI8S19061C4[];
extern  VTBL_ENTRY _ZTV8S19061C4[];
static Base_Class bases_S19061C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19061C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI9S19061C13[];
extern void _ZN9S19061C13D1Ev();
extern void _ZN9S19061C13D0Ev();
extern void _ZN8S19061C42v4Ev();
extern void _ZN9S19061C133v29Ev();
extern void _ZN9S19061C133v30Ev();
extern void _ZN9S19061C133v31Ev();
extern void _ZN9S19061C133v32Ev();
extern void _ZN9S19061C133v33Ev();
static  VTBL_ENTRY vtc_S19061C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19061C13[0]),
  (VTBL_ENTRY)&_ZN9S19061C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19061C13D0Ev,
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v33Ev,
};
extern VTBL_ENTRY _ZTI9S19061C13[];
extern  VTBL_ENTRY _ZTV9S19061C13[];
Class_Descriptor cd_S19061C13 = {  "S19061C13", // class name
  bases_S19061C13, 1,
  &(vtc_S19061C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S19061C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19061C13),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19061C12  : S19061C13 , virtual S19061C7 {
  int s19061c12f0;
  virtual  ~S19061C12(); // _ZN9S19061C12D2Ev
  virtual void  v34(); // _ZN9S19061C123v34Ev
  virtual void  v35(); // _ZN9S19061C123v35Ev
  virtual void  v36(); // _ZN9S19061C123v36Ev
  virtual void  v37(); // _ZN9S19061C123v37Ev
  virtual void  v38(); // _ZN9S19061C123v38Ev
  virtual void  v39(); // _ZN9S19061C123v39Ev
  S19061C12(); // tgen
};
//SIG(-1 S19061C12) C1{ BC2{ BC3{ vd v7} vd v8 v9 v10 v11 v12 Fp FL:7} VBC4{ v13 v14 v15 v16 Fc FD[7]} vd v1 v2 v3 v4 v5 v6 Fi}


 S19061C12 ::~S19061C12(){ note_dtor("S19061C12", this);}
void  S19061C12 ::v34(){vfunc_called(this, "_ZN9S19061C123v34Ev");}
void  S19061C12 ::v35(){vfunc_called(this, "_ZN9S19061C123v35Ev");}
void  S19061C12 ::v36(){vfunc_called(this, "_ZN9S19061C123v36Ev");}
void  S19061C12 ::v37(){vfunc_called(this, "_ZN9S19061C123v37Ev");}
void  S19061C12 ::v38(){vfunc_called(this, "_ZN9S19061C123v38Ev");}
void  S19061C12 ::v39(){vfunc_called(this, "_ZN9S19061C123v39Ev");}
S19061C12 ::S19061C12(){ note_ctor("S19061C12", this);} // tgen

static void Test_S19061C12()
{
  extern Class_Descriptor cd_S19061C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S19061C12, buf);
    S19061C12 *dp, &lv = *(dp=new (buf) S19061C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S19061C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19061C12)");
    check_base_class_offset(lv, (S19061C4*)(S19061C13*), 0, "S19061C12");
    check_base_class_offset(lv, (S19061C13*), 0, "S19061C12");
    check_base_class_offset(lv, (S19061C7*), ABISELECT(32,16), "S19061C12");
    check_field_offset(lv, s19061c12f0, ABISELECT(20,12), "S19061C12.s19061c12f0");
    test_class_info(&lv, &cd_S19061C12);
    dp->~S19061C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19061C12(Test_S19061C12, "S19061C12", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN9S19061C12C1Ev();
extern void _ZN9S19061C12D2Ev();
Name_Map name_map_S19061C12[] = {
  NSPAIR(_ZN9S19061C12C1Ev),
  NSPAIR(_ZN9S19061C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19061C4;
extern VTBL_ENTRY _ZTI8S19061C4[];
extern  VTBL_ENTRY _ZTV8S19061C4[];
extern Class_Descriptor cd_S19061C13;
extern VTBL_ENTRY _ZTI9S19061C13[];
extern  VTBL_ENTRY _ZTV9S19061C13[];
extern Class_Descriptor cd_S19061C7;
extern VTBL_ENTRY _ZTI8S19061C7[];
extern  VTBL_ENTRY _ZTV8S19061C7[];
static Base_Class bases_S19061C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19061C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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
  0, 0},
  {&cd_S19061C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19061C7,    ABISELECT(32,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19061C12[];
extern void _ZN9S19061C12D1Ev();
extern void _ZN9S19061C12D0Ev();
extern void _ZN8S19061C42v4Ev();
extern void _ZN9S19061C133v29Ev();
extern void _ZN9S19061C133v30Ev();
extern void _ZN9S19061C133v31Ev();
extern void _ZN9S19061C133v32Ev();
extern void _ZN9S19061C133v33Ev();
extern void _ZN9S19061C123v34Ev();
extern void _ZN9S19061C123v35Ev();
extern void _ZN9S19061C123v36Ev();
extern void _ZN9S19061C123v37Ev();
extern void _ZN9S19061C123v38Ev();
extern void _ZN9S19061C123v39Ev();
extern void _ZN8S19061C73v12Ev();
extern void _ZN8S19061C73v13Ev();
extern void _ZN8S19061C73v14Ev();
extern void _ZN8S19061C73v15Ev();
static  VTBL_ENTRY vtc_S19061C12[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19061C12[0]),
  (VTBL_ENTRY)&_ZN9S19061C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19061C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v39Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19061C12[0]),
  (VTBL_ENTRY)&_ZN8S19061C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v15Ev,
};
extern VTBL_ENTRY _ZTV9S19061C12[];
static  VTT_ENTRY vtt_S19061C12[] = {
  {&(_ZTV9S19061C12[3]),  3,27},
  {&(_ZTV9S19061C12[23]),  23,27},
};
extern VTBL_ENTRY _ZTI9S19061C12[];
extern  VTBL_ENTRY _ZTV9S19061C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19061C12[];
Class_Descriptor cd_S19061C12 = {  "S19061C12", // class name
  bases_S19061C12, 3,
  &(vtc_S19061C12[0]), // expected_vtbl_contents
  &(vtt_S19061C12[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI9S19061C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19061C12),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19061C12),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19061C14  : virtual S19061C12 {
  __tsi64 s19061c14f0;
  int s19061c14f1;
  virtual  ~S19061C14(); // _ZN9S19061C14D2Ev
  virtual void  v40(); // _ZN9S19061C143v40Ev
  virtual void  v41(); // _ZN9S19061C143v41Ev
  virtual void  v42(); // _ZN9S19061C143v42Ev
  virtual void  v43(); // _ZN9S19061C143v43Ev
  virtual void  v44(); // _ZN9S19061C143v44Ev
  virtual void  v45(); // _ZN9S19061C143v45Ev
  S19061C14(); // tgen
};
//SIG(-1 S19061C14) C1{ VBC2{ BC3{ BC4{ vd v7} vd v8 v9 v10 v11 v12 Fp FL:7} VBC5{ v13 v14 v15 v16 Fc FD[7]} vd v17 v18 v19 v20 v21 v22 Fi} vd v1 v2 v3 v4 v5 v6 FL Fi}


 S19061C14 ::~S19061C14(){ note_dtor("S19061C14", this);}
void  S19061C14 ::v40(){vfunc_called(this, "_ZN9S19061C143v40Ev");}
void  S19061C14 ::v41(){vfunc_called(this, "_ZN9S19061C143v41Ev");}
void  S19061C14 ::v42(){vfunc_called(this, "_ZN9S19061C143v42Ev");}
void  S19061C14 ::v43(){vfunc_called(this, "_ZN9S19061C143v43Ev");}
void  S19061C14 ::v44(){vfunc_called(this, "_ZN9S19061C143v44Ev");}
void  S19061C14 ::v45(){vfunc_called(this, "_ZN9S19061C143v45Ev");}
S19061C14 ::S19061C14(){ note_ctor("S19061C14", this);} // tgen

static void Test_S19061C14()
{
  extern Class_Descriptor cd_S19061C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,32)];
    init_test(&cd_S19061C14, buf);
    S19061C14 *dp, &lv = *(dp=new (buf) S19061C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,124), "sizeof(S19061C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19061C14)");
    check_base_class_offset(lv, (S19061C4*)(S19061C13*)(S19061C12*), ABISELECT(24,16), "S19061C14");
    check_base_class_offset(lv, (S19061C13*)(S19061C12*), ABISELECT(24,16), "S19061C14");
    check_base_class_offset(lv, (S19061C7*)(S19061C12*), ABISELECT(48,32), "S19061C14");
    check_base_class_offset(lv, (S19061C12*), ABISELECT(24,16), "S19061C14");
    check_field_offset(lv, s19061c14f0, ABISELECT(8,4), "S19061C14.s19061c14f0");
    check_field_offset(lv, s19061c14f1, ABISELECT(16,12), "S19061C14.s19061c14f1");
    test_class_info(&lv, &cd_S19061C14);
    dp->~S19061C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19061C14(Test_S19061C14, "S19061C14", ABISELECT(176,124));

#else // __cplusplus

extern void _ZN9S19061C14C1Ev();
extern void _ZN9S19061C14D2Ev();
Name_Map name_map_S19061C14[] = {
  NSPAIR(_ZN9S19061C14C1Ev),
  NSPAIR(_ZN9S19061C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19061C4;
extern VTBL_ENTRY _ZTI8S19061C4[];
extern  VTBL_ENTRY _ZTV8S19061C4[];
extern Class_Descriptor cd_S19061C13;
extern VTBL_ENTRY _ZTI9S19061C13[];
extern  VTBL_ENTRY _ZTV9S19061C13[];
extern Class_Descriptor cd_S19061C7;
extern VTBL_ENTRY _ZTI8S19061C7[];
extern  VTBL_ENTRY _ZTV8S19061C7[];
extern Class_Descriptor cd_S19061C12;
extern VTBL_ENTRY _ZTI9S19061C12[];
extern  VTBL_ENTRY _ZTV9S19061C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19061C12[];
static Base_Class bases_S19061C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19061C4,    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
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19061C13,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19061C7,    ABISELECT(48,32), //bcp->offset
    42, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19061C12,    ABISELECT(24,16), //bcp->offset
    12, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19061C14[];
extern void _ZN9S19061C14D1Ev();
extern void _ZN9S19061C14D0Ev();
extern void _ZN9S19061C143v40Ev();
extern void _ZN9S19061C143v41Ev();
extern void _ZN9S19061C143v42Ev();
extern void _ZN9S19061C143v43Ev();
extern void _ZN9S19061C143v44Ev();
extern void _ZN9S19061C143v45Ev();
extern void ABISELECT(_ZTv0_n32_N9S19061C14D1Ev,_ZTv0_n16_N9S19061C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S19061C14D1Ev,_ZThn16_N9S19061C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19061C14D0Ev,_ZTv0_n16_N9S19061C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S19061C14D0Ev,_ZThn16_N9S19061C14D0Ev)() __attribute__((weak));
extern void _ZN8S19061C42v4Ev();
extern void _ZN9S19061C133v29Ev();
extern void _ZN9S19061C133v30Ev();
extern void _ZN9S19061C133v31Ev();
extern void _ZN9S19061C133v32Ev();
extern void _ZN9S19061C133v33Ev();
extern void _ZN9S19061C123v34Ev();
extern void _ZN9S19061C123v35Ev();
extern void _ZN9S19061C123v36Ev();
extern void _ZN9S19061C123v37Ev();
extern void _ZN9S19061C123v38Ev();
extern void _ZN9S19061C123v39Ev();
extern void _ZN8S19061C73v12Ev();
extern void _ZN8S19061C73v13Ev();
extern void _ZN8S19061C73v14Ev();
extern void _ZN8S19061C73v15Ev();
static  VTBL_ENTRY vtc_S19061C14[] = {
  ABISELECT(48,32),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19061C14[0]),
  (VTBL_ENTRY)&_ZN9S19061C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19061C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v40Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v41Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v45Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(24,16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19061C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19061C14D1Ev,_ZTv0_n16_N9S19061C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19061C14D0Ev,_ZTv0_n16_N9S19061C14D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v39Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S19061C14[0]),
  (VTBL_ENTRY)&_ZN8S19061C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v15Ev,
};
extern VTBL_ENTRY _ZTV9S19061C14[];
extern void _ZN9S19061C12D1Ev();
extern void _ZN9S19061C12D0Ev();
extern void _ZN8S19061C42v4Ev();
extern void _ZN9S19061C133v29Ev();
extern void _ZN9S19061C133v30Ev();
extern void _ZN9S19061C133v31Ev();
extern void _ZN9S19061C133v32Ev();
extern void _ZN9S19061C133v33Ev();
extern void _ZN9S19061C123v34Ev();
extern void _ZN9S19061C123v35Ev();
extern void _ZN9S19061C123v36Ev();
extern void _ZN9S19061C123v37Ev();
extern void _ZN9S19061C123v38Ev();
extern void _ZN9S19061C123v39Ev();
static  VTBL_ENTRY _tg__ZTV9S19061C12__9S19061C14[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19061C12[0]),
  (VTBL_ENTRY)&_ZN9S19061C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19061C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v39Ev,
};
extern void _ZN8S19061C73v12Ev();
extern void _ZN8S19061C73v13Ev();
extern void _ZN8S19061C73v14Ev();
extern void _ZN8S19061C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19061C7__9S19061C12__9S19061C14[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19061C12[0]),
  (VTBL_ENTRY)&_ZN8S19061C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v15Ev,
};
static  VTT_ENTRY vtt_S19061C14[] = {
  {&(_ZTV9S19061C14[4]),  4,52},
  {&(_ZTV9S19061C14[28]),  28,52},
  {&(_ZTV9S19061C14[48]),  48,52},
  {&(_tg__ZTV9S19061C12__9S19061C14[3]),  3,17},
  {&(_tg__ZTV8S19061C7__9S19061C12__9S19061C14[6]),  6,10},
};
extern VTBL_ENTRY _ZTI9S19061C14[];
extern  VTBL_ENTRY _ZTV9S19061C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19061C14[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19061C14D0Ev,_ZTv0_n16_N9S19061C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19061C14D0Ev,_ZThn16_N9S19061C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19061C14D1Ev,_ZTv0_n16_N9S19061C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19061C14D1Ev,_ZThn16_N9S19061C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19061C14 = {  "S19061C14", // class name
  bases_S19061C14, 4,
  &(vtc_S19061C14[0]), // expected_vtbl_contents
  &(vtt_S19061C14[0]), // expected_vtt_contents
  ABISELECT(176,124), // object size
  NSPAIRA(_ZTI9S19061C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19061C14),52, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19061C14),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19061C10  : S19061C11 , virtual S19061C12 , S19061C7 , S19061C5 , S19061C14 {
  virtual void  v46(); // _ZN9S19061C103v46Ev
  ~S19061C10(); // tgen
  S19061C10(); // tgen
};
//SIG(-1 S19061C10) C1{ BC2{ v2 v3 v4 Fl[2]} VBC3{ BC4{ BC5{ vd v5} vd v6 v7 v8 v9 v10 Fp FL:7} VBC6{ v11 v12 v13 v14 Fc FD[7]} vd v15 v16 v17 v18 v19 v20 Fi} BC6 BC7{ v21 v22 v23 v24 v25 Fp[4]} BC8{ VBC3 vd v26 v27 v28 v29 v30 v31 FL Fi} v1}


void  S19061C10 ::v46(){vfunc_called(this, "_ZN9S19061C103v46Ev");}
S19061C10 ::~S19061C10(){ note_dtor("S19061C10", this);} // tgen
S19061C10 ::S19061C10(){ note_ctor("S19061C10", this);} // tgen

static void Test_S19061C10()
{
  extern Class_Descriptor cd_S19061C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,63)];
    init_test(&cd_S19061C10, buf);
    S19061C10 *dp, &lv = *(dp=new (buf) S19061C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,248), "sizeof(S19061C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19061C10)");
    check_base_class_offset(lv, (S19061C11*), 0, "S19061C10");
    check_base_class_offset(lv, (S19061C4*)(S19061C13*)(S19061C12*), ABISELECT(224,140), "S19061C10");
    check_base_class_offset(lv, (S19061C13*)(S19061C12*), ABISELECT(224,140), "S19061C10");
    check_base_class_offset(lv, (S19061C7*)(S19061C12*), ABISELECT(256,156), "S19061C10");
    check_base_class_offset(lv, (S19061C12*), ABISELECT(224,140), "S19061C10");
    check_base_class_offset(lv, (S19061C12*)(S19061C14*), ABISELECT(224,140), "S19061C10");
    /*is_ambiguous_... S19061C10::S19061C7 */ AMB_check_base_class_offset(lv, (S19061C7*), ABISELECT(32,12), "S19061C10");
    check_base_class_offset(lv, (S19061C5*), ABISELECT(160,104), "S19061C10");
    check_base_class_offset(lv, (S19061C14*), ABISELECT(200,124), "S19061C10");
    test_class_info(&lv, &cd_S19061C10);
    dp->~S19061C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19061C10(Test_S19061C10, "S19061C10", ABISELECT(384,248));

#else // __cplusplus

extern void _ZN9S19061C10C1Ev();
extern void _ZN9S19061C10D1Ev();
Name_Map name_map_S19061C10[] = {
  NSPAIR(_ZN9S19061C10C1Ev),
  NSPAIR(_ZN9S19061C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19061C11;
extern VTBL_ENTRY _ZTI9S19061C11[];
extern  VTBL_ENTRY _ZTV9S19061C11[];
extern Class_Descriptor cd_S19061C4;
extern VTBL_ENTRY _ZTI8S19061C4[];
extern  VTBL_ENTRY _ZTV8S19061C4[];
extern Class_Descriptor cd_S19061C13;
extern VTBL_ENTRY _ZTI9S19061C13[];
extern  VTBL_ENTRY _ZTV9S19061C13[];
extern Class_Descriptor cd_S19061C7;
extern VTBL_ENTRY _ZTI8S19061C7[];
extern  VTBL_ENTRY _ZTV8S19061C7[];
extern Class_Descriptor cd_S19061C12;
extern VTBL_ENTRY _ZTI9S19061C12[];
extern  VTBL_ENTRY _ZTV9S19061C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19061C12[];
extern Class_Descriptor cd_S19061C7;
extern VTBL_ENTRY _ZTI8S19061C7[];
extern  VTBL_ENTRY _ZTV8S19061C7[];
extern Class_Descriptor cd_S19061C5;
extern VTBL_ENTRY _ZTI8S19061C5[];
extern  VTBL_ENTRY _ZTV8S19061C5[];
extern Class_Descriptor cd_S19061C14;
extern VTBL_ENTRY _ZTI9S19061C14[];
extern  VTBL_ENTRY _ZTV9S19061C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19061C14[];
static Base_Class bases_S19061C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19061C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19061C4,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19061C13,    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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19061C7,    ABISELECT(256,156), //bcp->offset
    65, //bcp->virtual_function_table_offset
    6, //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_S19061C12,    ABISELECT(224,140), //bcp->offset
    35, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19061C7,    ABISELECT(32,12), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19061C5,    ABISELECT(160,104), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19061C14,    ABISELECT(200,124), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //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 _ZTI9S19061C10[];
extern void _ZN9S19061C113v26Ev();
extern void _ZN9S19061C113v27Ev();
extern void _ZN9S19061C113v28Ev();
extern void _ZN9S19061C103v46Ev();
extern void _ZN9S19061C10D1Ev();
extern void _ZN9S19061C10D0Ev();
extern void _ZN8S19061C73v12Ev();
extern void _ZN8S19061C73v13Ev();
extern void _ZN8S19061C73v14Ev();
extern void _ZN8S19061C73v15Ev();
extern void _ZN8S19061C52v7Ev();
extern void _ZN8S19061C52v8Ev();
extern void _ZN8S19061C52v9Ev();
extern void _ZN8S19061C53v10Ev();
extern void _ZN8S19061C53v11Ev();
extern void ABISELECT(_ZThn200_N9S19061C10D1Ev,_ZThn124_N9S19061C10D1Ev)();
extern void ABISELECT(_ZThn200_N9S19061C10D0Ev,_ZThn124_N9S19061C10D0Ev)();
extern void _ZN9S19061C143v40Ev();
extern void _ZN9S19061C143v41Ev();
extern void _ZN9S19061C143v42Ev();
extern void _ZN9S19061C143v43Ev();
extern void _ZN9S19061C143v44Ev();
extern void _ZN9S19061C143v45Ev();
extern void ABISELECT(_ZTv0_n32_N9S19061C10D1Ev,_ZTv0_n16_N9S19061C10D1Ev)();
extern void ABISELECT(_ZThn224_N9S19061C10D1Ev,_ZThn140_N9S19061C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19061C10D0Ev,_ZTv0_n16_N9S19061C10D0Ev)();
extern void ABISELECT(_ZThn224_N9S19061C10D0Ev,_ZThn140_N9S19061C10D0Ev)() __attribute__((weak));
extern void _ZN8S19061C42v4Ev();
extern void _ZN9S19061C133v29Ev();
extern void _ZN9S19061C133v30Ev();
extern void _ZN9S19061C133v31Ev();
extern void _ZN9S19061C133v32Ev();
extern void _ZN9S19061C133v33Ev();
extern void _ZN9S19061C123v34Ev();
extern void _ZN9S19061C123v35Ev();
extern void _ZN9S19061C123v36Ev();
extern void _ZN9S19061C123v37Ev();
extern void _ZN9S19061C123v38Ev();
extern void _ZN9S19061C123v39Ev();
extern void _ZN8S19061C73v12Ev();
extern void _ZN8S19061C73v13Ev();
extern void _ZN8S19061C73v14Ev();
extern void _ZN8S19061C73v15Ev();
static  VTBL_ENTRY vtc_S19061C10[] = {
  ABISELECT(256,156),
  ABISELECT(224,140),
  0,
  (VTBL_ENTRY)&(_ZTI9S19061C10[0]),
  (VTBL_ENTRY)&_ZN9S19061C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19061C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19061C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19061C103v46Ev,
  (VTBL_ENTRY)&_ZN9S19061C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19061C10D0Ev,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19061C10[0]),
  (VTBL_ENTRY)&_ZN8S19061C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v15Ev,
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S19061C10[0]),
  (VTBL_ENTRY)&_ZN8S19061C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19061C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19061C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19061C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19061C53v11Ev,
  ABISELECT(56,32),
  ABISELECT(24,16),
  ABISELECT(-200,-124),
  (VTBL_ENTRY)&(_ZTI9S19061C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N9S19061C10D1Ev,_ZThn124_N9S19061C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N9S19061C10D0Ev,_ZThn124_N9S19061C10D0Ev),
  (VTBL_ENTRY)&_ZN9S19061C143v40Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v41Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v45Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-140),
  ABISELECT(32,16),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI9S19061C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19061C10D1Ev,_ZTv0_n16_N9S19061C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19061C10D0Ev,_ZTv0_n16_N9S19061C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v39Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  (VTBL_ENTRY)&(_ZTI9S19061C10[0]),
  (VTBL_ENTRY)&_ZN8S19061C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v15Ev,
};
extern VTBL_ENTRY _ZTV9S19061C10[];
extern void _ZN9S19061C14D1Ev();
extern void _ZN9S19061C14D0Ev();
extern void _ZN9S19061C143v40Ev();
extern void _ZN9S19061C143v41Ev();
extern void _ZN9S19061C143v42Ev();
extern void _ZN9S19061C143v43Ev();
extern void _ZN9S19061C143v44Ev();
extern void _ZN9S19061C143v45Ev();
static  VTBL_ENTRY _tg__ZTV9S19061C14__9S19061C10[] = {
  ABISELECT(56,32),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19061C14[0]),
  (VTBL_ENTRY)&_ZN9S19061C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19061C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v40Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v41Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v45Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19061C14D1Ev,_ZTv0_n16_N9S19061C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S19061C14D1Ev,_ZThn16_N9S19061C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19061C14D0Ev,_ZTv0_n16_N9S19061C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S19061C14D0Ev,_ZThn16_N9S19061C14D0Ev)() __attribute__((weak));
extern void _ZN8S19061C42v4Ev();
extern void _ZN9S19061C133v29Ev();
extern void _ZN9S19061C133v30Ev();
extern void _ZN9S19061C133v31Ev();
extern void _ZN9S19061C133v32Ev();
extern void _ZN9S19061C133v33Ev();
extern void _ZN9S19061C123v34Ev();
extern void _ZN9S19061C123v35Ev();
extern void _ZN9S19061C123v36Ev();
extern void _ZN9S19061C123v37Ev();
extern void _ZN9S19061C123v38Ev();
extern void _ZN9S19061C123v39Ev();
static  VTBL_ENTRY _tg__ZTV9S19061C12__9S19061C14__9S19061C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(32,16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19061C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19061C14D1Ev,_ZTv0_n16_N9S19061C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19061C14D0Ev,_ZTv0_n16_N9S19061C14D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v39Ev,
};
extern void _ZN8S19061C73v12Ev();
extern void _ZN8S19061C73v13Ev();
extern void _ZN8S19061C73v14Ev();
extern void _ZN8S19061C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19061C7__9S19061C14__9S19061C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI9S19061C14[0]),
  (VTBL_ENTRY)&_ZN8S19061C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v15Ev,
};
extern void _ZN9S19061C12D1Ev();
extern void _ZN9S19061C12D0Ev();
extern void _ZN8S19061C42v4Ev();
extern void _ZN9S19061C133v29Ev();
extern void _ZN9S19061C133v30Ev();
extern void _ZN9S19061C133v31Ev();
extern void _ZN9S19061C133v32Ev();
extern void _ZN9S19061C133v33Ev();
extern void _ZN9S19061C123v34Ev();
extern void _ZN9S19061C123v35Ev();
extern void _ZN9S19061C123v36Ev();
extern void _ZN9S19061C123v37Ev();
extern void _ZN9S19061C123v38Ev();
extern void _ZN9S19061C123v39Ev();
static  VTBL_ENTRY _tg__ZTV9S19061C12__9S19061C10[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19061C12[0]),
  (VTBL_ENTRY)&_ZN9S19061C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19061C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v39Ev,
};
extern void _ZN8S19061C73v12Ev();
extern void _ZN8S19061C73v13Ev();
extern void _ZN8S19061C73v14Ev();
extern void _ZN8S19061C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19061C7__9S19061C12__9S19061C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19061C12[0]),
  (VTBL_ENTRY)&_ZN8S19061C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v15Ev,
};
static  VTT_ENTRY vtt_S19061C10[] = {
  {&(_ZTV9S19061C10[4]),  4,75},
  {&(_tg__ZTV9S19061C14__9S19061C10[4]),  4,12},
  {&(_tg__ZTV9S19061C12__9S19061C14__9S19061C10[16]),  16,30},
  {&(_tg__ZTV8S19061C7__9S19061C14__9S19061C10[6]),  6,10},
  {&(_ZTV9S19061C10[51]),  51,75},
  {&(_ZTV9S19061C10[71]),  71,75},
  {&(_ZTV9S19061C10[27]),  27,75},
  {&(_tg__ZTV9S19061C12__9S19061C10[3]),  3,17},
  {&(_tg__ZTV8S19061C7__9S19061C12__9S19061C10[6]),  6,10},
};
extern VTBL_ENTRY _ZTI9S19061C10[];
extern  VTBL_ENTRY _ZTV9S19061C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19061C10[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19061C14D0Ev,_ZTv0_n16_N9S19061C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19061C14D0Ev,_ZThn16_N9S19061C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19061C14D1Ev,_ZTv0_n16_N9S19061C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19061C14D1Ev,_ZThn16_N9S19061C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19061C10D0Ev,_ZTv0_n16_N9S19061C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19061C10D0Ev,_ZThn140_N9S19061C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19061C10D1Ev,_ZTv0_n16_N9S19061C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19061C10D1Ev,_ZThn140_N9S19061C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19061C10 = {  "S19061C10", // class name
  bases_S19061C10, 8,
  &(vtc_S19061C10[0]), // expected_vtbl_contents
  &(vtt_S19061C10[0]), // expected_vtt_contents
  ABISELECT(384,248), // object size
  NSPAIRA(_ZTI9S19061C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19061C10),75, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19061C10),9, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19061C1  : virtual S19061C2 , S19061C10 , virtual S19061C9 {
  __tsi64 s19061c1f0:28;
  long s19061c1f1;
  virtual  ~S19061C1(); // _ZN8S19061C1D2Ev
  virtual void  v1(); // _ZN8S19061C12v1Ev
  virtual void  v2(); // _ZN8S19061C12v2Ev
  virtual void  v3(); // _ZN8S19061C12v3Ev
  S19061C1(); // tgen
};
//SIG(1 S19061C1) C1{ VBC2{ BC3{ BC4{ vd v4} vd v5 v6 FC4} VBC5{ v7 v8 v9 v10 v11 Fp[4]} BC6{ VBC7{ v12 v13 v14 v15 Fc FD[7]} BC8{ vd v16 v17 v18 v19 FC4} VBC4 vd v20 v21 v22 v23 Fp Fi FL[3]} BC9{ vd v24} v25} BC10{ BC11{ v26 v27 v28 Fl[2]} VBC12{ BC13{ BC4 vd v29 v30 v31 v32 v33 Fp FL:7} VBC7 vd v34 v35 v36 v37 v38 v39 Fi} BC7 BC5 BC14{ VBC12 vd v40 v41 v42 v43 v44 v45 FL Fi} v46} VBC9 vd v1 v2 v3 FL:28 Fl}


 S19061C1 ::~S19061C1(){ note_dtor("S19061C1", this);}
void  S19061C1 ::v1(){vfunc_called(this, "_ZN8S19061C12v1Ev");}
void  S19061C1 ::v2(){vfunc_called(this, "_ZN8S19061C12v2Ev");}
void  S19061C1 ::v3(){vfunc_called(this, "_ZN8S19061C12v3Ev");}
S19061C1 ::S19061C1(){ note_ctor("S19061C1", this);} // tgen

static void Test_S19061C1()
{
  extern Class_Descriptor cd_S19061C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,85)];
    init_test(&cd_S19061C1, buf);
    S19061C1 *dp, &lv = *(dp=new (buf) S19061C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,336), "sizeof(S19061C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19061C1)");
    check_base_class_offset(lv, (S19061C4*)(S19061C3*)(S19061C2*), ABISELECT(232,148), "S19061C1");
    check_base_class_offset(lv, (S19061C3*)(S19061C2*), ABISELECT(232,148), "S19061C1");
    check_base_class_offset(lv, (S19061C5*)(S19061C2*), ABISELECT(312,200), "S19061C1");
    check_base_class_offset(lv, (S19061C7*)(S19061C6*)(S19061C2*), ABISELECT(352,220), "S19061C1");
    check_base_class_offset(lv, (S19061C7*)(S19061C12*), ABISELECT(352,220), "S19061C1");
    check_base_class_offset(lv, (S19061C8*)(S19061C6*)(S19061C2*), ABISELECT(248,156), "S19061C1");
    check_base_class_offset(lv, (S19061C4*)(S19061C6*)(S19061C2*), ABISELECT(480,312), "S19061C1");
    check_base_class_offset(lv, (S19061C6*)(S19061C2*), ABISELECT(248,156), "S19061C1");
    check_base_class_offset(lv, (S19061C9*)(S19061C2*), ABISELECT(304,196), "S19061C1");
    check_base_class_offset(lv, (S19061C2*), ABISELECT(232,148), "S19061C1");
    check_base_class_offset(lv, (S19061C11*)(S19061C10*), 0, "S19061C1");
    check_base_class_offset(lv, (S19061C4*)(S19061C13*)(S19061C12*), ABISELECT(488,316), "S19061C1");
    check_base_class_offset(lv, (S19061C13*)(S19061C12*), ABISELECT(488,316), "S19061C1");
    check_base_class_offset(lv, (S19061C12*)(S19061C10*), ABISELECT(488,316), "S19061C1");
    check_base_class_offset(lv, (S19061C12*)(S19061C14*)(S19061C10*), ABISELECT(488,316), "S19061C1");
    /*is_ambiguous_... S19061C10::S19061C7 */ AMB_check_base_class_offset(lv, (S19061C7*)(S19061C10*), ABISELECT(32,12), "S19061C1");
    check_base_class_offset(lv, (S19061C5*)(S19061C10*), ABISELECT(160,104), "S19061C1");
    check_base_class_offset(lv, (S19061C14*)(S19061C10*), ABISELECT(200,124), "S19061C1");
    check_base_class_offset(lv, (S19061C10*), 0, "S19061C1");
    /*is_ambiguous_... S19061C1::S19061C9 */ AMB_check_base_class_offset(lv, (S19061C9*), ABISELECT(512,332), "S19061C1");
    set_bf_and_test(lv, s19061c1f0, ABISELECT(220,140), 0, 28, 1, "S19061C1");
    set_bf_and_test(lv, s19061c1f0, ABISELECT(220,140), 0, 28, hide_sll(1LL<<27), "S19061C1");
    check_field_offset(lv, s19061c1f1, ABISELECT(224,144), "S19061C1.s19061c1f1");
    test_class_info(&lv, &cd_S19061C1);
    dp->~S19061C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19061C1(Test_S19061C1, "S19061C1", ABISELECT(528,336));

#else // __cplusplus

extern void _ZN8S19061C1C1Ev();
extern void _ZN8S19061C1D2Ev();
Name_Map name_map_S19061C1[] = {
  NSPAIR(_ZN8S19061C1C1Ev),
  NSPAIR(_ZN8S19061C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19061C4;
extern VTBL_ENTRY _ZTI8S19061C4[];
extern  VTBL_ENTRY _ZTV8S19061C4[];
extern Class_Descriptor cd_S19061C3;
extern VTBL_ENTRY _ZTI8S19061C3[];
extern  VTBL_ENTRY _ZTV8S19061C3[];
extern Class_Descriptor cd_S19061C5;
extern VTBL_ENTRY _ZTI8S19061C5[];
extern  VTBL_ENTRY _ZTV8S19061C5[];
extern Class_Descriptor cd_S19061C7;
extern VTBL_ENTRY _ZTI8S19061C7[];
extern  VTBL_ENTRY _ZTV8S19061C7[];
extern Class_Descriptor cd_S19061C8;
extern VTBL_ENTRY _ZTI8S19061C8[];
extern  VTBL_ENTRY _ZTV8S19061C8[];
extern Class_Descriptor cd_S19061C4;
extern VTBL_ENTRY _ZTI8S19061C4[];
extern  VTBL_ENTRY _ZTV8S19061C4[];
extern Class_Descriptor cd_S19061C6;
extern VTBL_ENTRY _ZTI8S19061C6[];
extern  VTBL_ENTRY _ZTV8S19061C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19061C6[];
extern Class_Descriptor cd_S19061C9;
extern VTBL_ENTRY _ZTI8S19061C9[];
extern  VTBL_ENTRY _ZTV8S19061C9[];
extern Class_Descriptor cd_S19061C2;
extern VTBL_ENTRY _ZTI8S19061C2[];
extern  VTBL_ENTRY _ZTV8S19061C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19061C2[];
extern Class_Descriptor cd_S19061C11;
extern VTBL_ENTRY _ZTI9S19061C11[];
extern  VTBL_ENTRY _ZTV9S19061C11[];
extern Class_Descriptor cd_S19061C4;
extern VTBL_ENTRY _ZTI8S19061C4[];
extern  VTBL_ENTRY _ZTV8S19061C4[];
extern Class_Descriptor cd_S19061C13;
extern VTBL_ENTRY _ZTI9S19061C13[];
extern  VTBL_ENTRY _ZTV9S19061C13[];
extern Class_Descriptor cd_S19061C12;
extern VTBL_ENTRY _ZTI9S19061C12[];
extern  VTBL_ENTRY _ZTV9S19061C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19061C12[];
extern Class_Descriptor cd_S19061C7;
extern VTBL_ENTRY _ZTI8S19061C7[];
extern  VTBL_ENTRY _ZTV8S19061C7[];
extern Class_Descriptor cd_S19061C5;
extern VTBL_ENTRY _ZTI8S19061C5[];
extern  VTBL_ENTRY _ZTV8S19061C5[];
extern Class_Descriptor cd_S19061C14;
extern VTBL_ENTRY _ZTI9S19061C14[];
extern  VTBL_ENTRY _ZTV9S19061C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19061C14[];
extern Class_Descriptor cd_S19061C10;
extern VTBL_ENTRY _ZTI9S19061C10[];
extern  VTBL_ENTRY _ZTV9S19061C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19061C10[];
extern Class_Descriptor cd_S19061C9;
extern VTBL_ENTRY _ZTI8S19061C9[];
extern  VTBL_ENTRY _ZTV8S19061C9[];
static Base_Class bases_S19061C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19061C4,    ABISELECT(232,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
    4, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19061C3,    ABISELECT(232,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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19061C5,    ABISELECT(312,200), //bcp->offset
    86, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19061C7,    ABISELECT(352,220), //bcp->offset
    98, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19061C8,    ABISELECT(248,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
    6, //immediately_derived
  0, 0},
  {&cd_S19061C4,    ABISELECT(480,312), //bcp->offset
    108, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19061C6,    ABISELECT(248,156), //bcp->offset
    67, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19061C9,    ABISELECT(304,196), //bcp->offset
    81, //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
    8, //immediately_derived
  0, 0},
  {&cd_S19061C2,    ABISELECT(232,148), //bcp->offset
    42, //bcp->virtual_function_table_offset
    19, //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},
  {&cd_S19061C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19061C4,    ABISELECT(488,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19061C13,    ABISELECT(488,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19061C12,    ABISELECT(488,316), //bcp->offset
    115, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19061C7,    ABISELECT(32,12), //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
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19061C5,    ABISELECT(160,104), //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
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19061C14,    ABISELECT(200,124), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19061C10,    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_S19061C9,    ABISELECT(512,332), //bcp->offset
    145, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19061C1[];
extern void _ZN9S19061C113v26Ev();
extern void _ZN9S19061C113v27Ev();
extern void _ZN9S19061C113v28Ev();
extern void _ZN9S19061C103v46Ev();
extern void _ZN8S19061C1D1Ev();
extern void _ZN8S19061C1D0Ev();
extern void _ZN8S19061C12v1Ev();
extern void _ZN8S19061C12v2Ev();
extern void _ZN8S19061C12v3Ev();
extern void _ZN8S19061C73v12Ev();
extern void _ZN8S19061C73v13Ev();
extern void _ZN8S19061C73v14Ev();
extern void _ZN8S19061C73v15Ev();
extern void _ZN8S19061C52v7Ev();
extern void _ZN8S19061C52v8Ev();
extern void _ZN8S19061C52v9Ev();
extern void _ZN8S19061C53v10Ev();
extern void _ZN8S19061C53v11Ev();
extern void ABISELECT(_ZThn200_N8S19061C1D1Ev,_ZThn124_N8S19061C1D1Ev)();
extern void ABISELECT(_ZThn200_N8S19061C1D0Ev,_ZThn124_N8S19061C1D0Ev)();
extern void _ZN9S19061C143v40Ev();
extern void _ZN9S19061C143v41Ev();
extern void _ZN9S19061C143v42Ev();
extern void _ZN9S19061C143v43Ev();
extern void _ZN9S19061C143v44Ev();
extern void _ZN9S19061C143v45Ev();
extern void ABISELECT(_ZTv0_n48_N8S19061C1D1Ev,_ZTv0_n24_N8S19061C1D1Ev)();
extern void ABISELECT(_ZThn232_N8S19061C1D1Ev,_ZThn148_N8S19061C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19061C1D0Ev,_ZTv0_n24_N8S19061C1D0Ev)();
extern void ABISELECT(_ZThn232_N8S19061C1D0Ev,_ZThn148_N8S19061C1D0Ev)() __attribute__((weak));
extern void _ZN8S19061C42v4Ev();
extern void _ZN8S19061C32v5Ev();
extern void _ZN8S19061C32v6Ev();
extern void _ZN8S19061C23v25Ev();
extern void ABISELECT(_ZTvn16_n48_N8S19061C1D1Ev,_ZTvn8_n24_N8S19061C1D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S19061C1D0Ev,_ZTvn8_n24_N8S19061C1D0Ev)();
extern void _ZN8S19061C83v16Ev();
extern void _ZN8S19061C83v17Ev();
extern void _ZN8S19061C83v18Ev();
extern void _ZN8S19061C83v19Ev();
extern void _ZN8S19061C63v20Ev();
extern void _ZN8S19061C63v21Ev();
extern void _ZN8S19061C63v22Ev();
extern void _ZN8S19061C63v23Ev();
extern void ABISELECT(_ZTvn72_n48_N8S19061C1D1Ev,_ZTvn48_n24_N8S19061C1D1Ev)();
extern void ABISELECT(_ZTvn72_n48_N8S19061C1D0Ev,_ZTvn48_n24_N8S19061C1D0Ev)();
extern void _ZN8S19061C93v24Ev();
extern void _ZN8S19061C52v7Ev();
extern void _ZN8S19061C52v8Ev();
extern void _ZN8S19061C52v9Ev();
extern void _ZN8S19061C53v10Ev();
extern void _ZN8S19061C53v11Ev();
extern void _ZN8S19061C73v12Ev();
extern void _ZN8S19061C73v13Ev();
extern void _ZN8S19061C73v14Ev();
extern void _ZN8S19061C73v15Ev();
extern void ABISELECT(_ZTv0_n24_N8S19061C1D1Ev,_ZTv0_n12_N8S19061C1D1Ev)();
extern void ABISELECT(_ZThn480_N8S19061C1D1Ev,_ZThn312_N8S19061C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19061C1D0Ev,_ZTv0_n12_N8S19061C1D0Ev)();
extern void ABISELECT(_ZThn480_N8S19061C1D0Ev,_ZThn312_N8S19061C1D0Ev)() __attribute__((weak));
extern void _ZN8S19061C42v4Ev();
extern void ABISELECT(_ZTv0_n32_N8S19061C1D1Ev,_ZTv0_n16_N8S19061C1D1Ev)();
extern void ABISELECT(_ZThn488_N8S19061C1D1Ev,_ZThn316_N8S19061C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19061C1D0Ev,_ZTv0_n16_N8S19061C1D0Ev)();
extern void ABISELECT(_ZThn488_N8S19061C1D0Ev,_ZThn316_N8S19061C1D0Ev)() __attribute__((weak));
extern void _ZN8S19061C42v4Ev();
extern void _ZN9S19061C133v29Ev();
extern void _ZN9S19061C133v30Ev();
extern void _ZN9S19061C133v31Ev();
extern void _ZN9S19061C133v32Ev();
extern void _ZN9S19061C133v33Ev();
extern void _ZN9S19061C123v34Ev();
extern void _ZN9S19061C123v35Ev();
extern void _ZN9S19061C123v36Ev();
extern void _ZN9S19061C123v37Ev();
extern void _ZN9S19061C123v38Ev();
extern void _ZN9S19061C123v39Ev();
extern void ABISELECT(_ZTv0_n24_N8S19061C1D1Ev,_ZTv0_n12_N8S19061C1D1Ev)();
extern void ABISELECT(_ZThn512_N8S19061C1D1Ev,_ZThn332_N8S19061C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19061C1D0Ev,_ZTv0_n12_N8S19061C1D0Ev)();
extern void ABISELECT(_ZThn512_N8S19061C1D0Ev,_ZThn332_N8S19061C1D0Ev)() __attribute__((weak));
extern void _ZN8S19061C93v24Ev();
static  VTBL_ENTRY vtc_S19061C1[] = {
  ABISELECT(512,332),
  ABISELECT(480,312),
  ABISELECT(312,200),
  ABISELECT(232,148),
  ABISELECT(352,220),
  ABISELECT(488,316),
  0,
  (VTBL_ENTRY)&(_ZTI8S19061C1[0]),
  (VTBL_ENTRY)&_ZN9S19061C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19061C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19061C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19061C103v46Ev,
  (VTBL_ENTRY)&_ZN8S19061C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19061C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19061C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19061C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19061C12v3Ev,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S19061C1[0]),
  (VTBL_ENTRY)&_ZN8S19061C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v15Ev,
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI8S19061C1[0]),
  (VTBL_ENTRY)&_ZN8S19061C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19061C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19061C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19061C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19061C53v11Ev,
  ABISELECT(152,96),
  ABISELECT(288,192),
  ABISELECT(-200,-124),
  (VTBL_ENTRY)&(_ZTI8S19061C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N8S19061C1D1Ev,_ZThn124_N8S19061C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N8S19061C1D0Ev,_ZThn124_N8S19061C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19061C143v40Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v41Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v45Ev,
  ABISELECT(72,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-232,-148),
  ABISELECT(248,164),
  ABISELECT(120,72),
  ABISELECT(80,52),
  ABISELECT(-232,-148),
  (VTBL_ENTRY)&(_ZTI8S19061C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19061C1D1Ev,_ZTv0_n24_N8S19061C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19061C1D0Ev,_ZTv0_n24_N8S19061C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19061C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19061C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19061C23v25Ev,
  ABISELECT(232,156),
  ABISELECT(104,64),
  ABISELECT(-248,-156),
  (VTBL_ENTRY)&(_ZTI8S19061C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19061C1D1Ev,_ZTvn8_n24_N8S19061C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19061C1D0Ev,_ZTvn8_n24_N8S19061C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v23Ev,
  ABISELECT(-304,-196),
  (VTBL_ENTRY)&(_ZTI8S19061C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn72_n48_N8S19061C1D1Ev,_ZTvn48_n24_N8S19061C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn72_n48_N8S19061C1D0Ev,_ZTvn48_n24_N8S19061C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C93v24Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-200),
  (VTBL_ENTRY)&(_ZTI8S19061C1[0]),
  (VTBL_ENTRY)&_ZN8S19061C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19061C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19061C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19061C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19061C53v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S19061C1[0]),
  (VTBL_ENTRY)&_ZN8S19061C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v15Ev,
  0,
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI8S19061C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19061C1D1Ev,_ZTv0_n12_N8S19061C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19061C1D0Ev,_ZTv0_n12_N8S19061C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-488,-316),
  ABISELECT(-136,-96),
  ABISELECT(-488,-316),
  (VTBL_ENTRY)&(_ZTI8S19061C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19061C1D1Ev,_ZTv0_n16_N8S19061C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19061C1D0Ev,_ZTv0_n16_N8S19061C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v39Ev,
  0,
  ABISELECT(-512,-332),
  ABISELECT(-512,-332),
  (VTBL_ENTRY)&(_ZTI8S19061C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19061C1D1Ev,_ZTv0_n12_N8S19061C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19061C1D0Ev,_ZTv0_n12_N8S19061C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C93v24Ev,
};
extern VTBL_ENTRY _ZTV8S19061C1[];
extern void _ZN9S19061C113v26Ev();
extern void _ZN9S19061C113v27Ev();
extern void _ZN9S19061C113v28Ev();
extern void _ZN9S19061C103v46Ev();
extern void _ZN9S19061C10D1Ev();
extern void _ZN9S19061C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19061C10__8S19061C1[] = {
  ABISELECT(352,220),
  ABISELECT(488,316),
  0,
  (VTBL_ENTRY)&(_ZTI9S19061C10[0]),
  (VTBL_ENTRY)&_ZN9S19061C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19061C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19061C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19061C103v46Ev,
  (VTBL_ENTRY)&_ZN9S19061C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19061C10D0Ev,
};
extern void _ZN9S19061C14D1Ev();
extern void _ZN9S19061C14D0Ev();
extern void _ZN9S19061C143v40Ev();
extern void _ZN9S19061C143v41Ev();
extern void _ZN9S19061C143v42Ev();
extern void _ZN9S19061C143v43Ev();
extern void _ZN9S19061C143v44Ev();
extern void _ZN9S19061C143v45Ev();
static  VTBL_ENTRY _tg__ZTV9S19061C149S19061C10__8S19061C1[] = {
  ABISELECT(152,96),
  ABISELECT(288,192),
  0,
  (VTBL_ENTRY)&(_ZTI9S19061C14[0]),
  (VTBL_ENTRY)&_ZN9S19061C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19061C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v40Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v41Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v45Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19061C14D1Ev,_ZTv0_n16_N9S19061C14D1Ev)();
extern void ABISELECT(_ZThn288_N9S19061C14D1Ev,_ZThn192_N9S19061C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19061C14D0Ev,_ZTv0_n16_N9S19061C14D0Ev)();
extern void ABISELECT(_ZThn288_N9S19061C14D0Ev,_ZThn192_N9S19061C14D0Ev)() __attribute__((weak));
extern void _ZN8S19061C42v4Ev();
extern void _ZN9S19061C133v29Ev();
extern void _ZN9S19061C133v30Ev();
extern void _ZN9S19061C133v31Ev();
extern void _ZN9S19061C133v32Ev();
extern void _ZN9S19061C133v33Ev();
extern void _ZN9S19061C123v34Ev();
extern void _ZN9S19061C123v35Ev();
extern void _ZN9S19061C123v36Ev();
extern void _ZN9S19061C123v37Ev();
extern void _ZN9S19061C123v38Ev();
extern void _ZN9S19061C123v39Ev();
static  VTBL_ENTRY _tg__ZTV9S19061C12__9S19061C149S19061C10__8S19061C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-288,-192),
  ABISELECT(-136,-96),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI9S19061C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19061C14D1Ev,_ZTv0_n16_N9S19061C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19061C14D0Ev,_ZTv0_n16_N9S19061C14D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v39Ev,
};
extern void _ZN8S19061C73v12Ev();
extern void _ZN8S19061C73v13Ev();
extern void _ZN8S19061C73v14Ev();
extern void _ZN8S19061C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19061C7__9S19061C149S19061C10__8S19061C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-152,-96),
  (VTBL_ENTRY)&(_ZTI9S19061C14[0]),
  (VTBL_ENTRY)&_ZN8S19061C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v15Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19061C10D1Ev,_ZTv0_n16_N9S19061C10D1Ev)();
extern void ABISELECT(_ZThn488_N9S19061C10D1Ev,_ZThn316_N9S19061C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19061C10D0Ev,_ZTv0_n16_N9S19061C10D0Ev)();
extern void ABISELECT(_ZThn488_N9S19061C10D0Ev,_ZThn316_N9S19061C10D0Ev)() __attribute__((weak));
extern void _ZN8S19061C42v4Ev();
extern void _ZN9S19061C133v29Ev();
extern void _ZN9S19061C133v30Ev();
extern void _ZN9S19061C133v31Ev();
extern void _ZN9S19061C133v32Ev();
extern void _ZN9S19061C133v33Ev();
extern void _ZN9S19061C123v34Ev();
extern void _ZN9S19061C123v35Ev();
extern void _ZN9S19061C123v36Ev();
extern void _ZN9S19061C123v37Ev();
extern void _ZN9S19061C123v38Ev();
extern void _ZN9S19061C123v39Ev();
static  VTBL_ENTRY _tg__ZTV9S19061C12__9S19061C10__8S19061C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-488,-316),
  ABISELECT(-136,-96),
  ABISELECT(-488,-316),
  (VTBL_ENTRY)&(_ZTI9S19061C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19061C10D1Ev,_ZTv0_n16_N9S19061C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19061C10D0Ev,_ZTv0_n16_N9S19061C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v39Ev,
};
extern void _ZN8S19061C73v12Ev();
extern void _ZN8S19061C73v13Ev();
extern void _ZN8S19061C73v14Ev();
extern void _ZN8S19061C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19061C7__9S19061C10__8S19061C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19061C10[0]),
  (VTBL_ENTRY)&_ZN8S19061C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v15Ev,
};
extern void ABISELECT(_ZThn200_N9S19061C10D1Ev,_ZThn124_N9S19061C10D1Ev)();
extern void ABISELECT(_ZThn200_N9S19061C10D0Ev,_ZThn124_N9S19061C10D0Ev)();
extern void _ZN9S19061C143v40Ev();
extern void _ZN9S19061C143v41Ev();
extern void _ZN9S19061C143v42Ev();
extern void _ZN9S19061C143v43Ev();
extern void _ZN9S19061C143v44Ev();
extern void _ZN9S19061C143v45Ev();
static  VTBL_ENTRY _tg__ZTV9S19061C14__9S19061C10__8S19061C1[] = {
  ABISELECT(152,96),
  ABISELECT(288,192),
  ABISELECT(-200,-124),
  (VTBL_ENTRY)&(_ZTI9S19061C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N9S19061C10D1Ev,_ZThn124_N9S19061C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N9S19061C10D0Ev,_ZThn124_N9S19061C10D0Ev),
  (VTBL_ENTRY)&_ZN9S19061C143v40Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v41Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v42Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v43Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v44Ev,
  (VTBL_ENTRY)&_ZN9S19061C143v45Ev,
};
extern void _ZN8S19061C2D1Ev();
extern void _ZN8S19061C2D0Ev();
extern void _ZN8S19061C42v4Ev();
extern void _ZN8S19061C32v5Ev();
extern void _ZN8S19061C32v6Ev();
extern void _ZN8S19061C23v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19061C2__8S19061C1[] = {
  ABISELECT(248,164),
  ABISELECT(120,72),
  ABISELECT(80,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19061C2[0]),
  (VTBL_ENTRY)&_ZN8S19061C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19061C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19061C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19061C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19061C23v25Ev,
};
extern void _ZN8S19061C6D1Ev();
extern void _ZN8S19061C6D0Ev();
extern void _ZN8S19061C83v16Ev();
extern void _ZN8S19061C83v17Ev();
extern void _ZN8S19061C83v18Ev();
extern void _ZN8S19061C83v19Ev();
extern void _ZN8S19061C63v20Ev();
extern void _ZN8S19061C63v21Ev();
extern void _ZN8S19061C63v22Ev();
extern void _ZN8S19061C63v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19061C68S19061C2__8S19061C1[] = {
  ABISELECT(232,156),
  ABISELECT(104,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19061C6[0]),
  (VTBL_ENTRY)&_ZN8S19061C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19061C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v23Ev,
};
extern void _ZN8S19061C73v12Ev();
extern void _ZN8S19061C73v13Ev();
extern void _ZN8S19061C73v14Ev();
extern void _ZN8S19061C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19061C7__8S19061C68S19061C2__8S19061C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI8S19061C6[0]),
  (VTBL_ENTRY)&_ZN8S19061C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19061C6D1Ev,_ZTv0_n12_N8S19061C6D1Ev)();
extern void ABISELECT(_ZThn232_N8S19061C6D1Ev,_ZThn156_N8S19061C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19061C6D0Ev,_ZTv0_n12_N8S19061C6D0Ev)();
extern void ABISELECT(_ZThn232_N8S19061C6D0Ev,_ZThn156_N8S19061C6D0Ev)() __attribute__((weak));
extern void _ZN8S19061C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19061C4__8S19061C68S19061C2__8S19061C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S19061C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19061C6D1Ev,_ZTv0_n12_N8S19061C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19061C6D0Ev,_ZTv0_n12_N8S19061C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
};
extern void _ZN8S19061C52v7Ev();
extern void _ZN8S19061C52v8Ev();
extern void _ZN8S19061C52v9Ev();
extern void _ZN8S19061C53v10Ev();
extern void _ZN8S19061C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19061C5__8S19061C2__8S19061C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S19061C2[0]),
  (VTBL_ENTRY)&_ZN8S19061C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19061C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19061C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19061C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19061C53v11Ev,
};
extern void ABISELECT(_ZThn16_N8S19061C2D1Ev,_ZThn8_N8S19061C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19061C2D0Ev,_ZThn8_N8S19061C2D0Ev)();
extern void _ZN8S19061C83v16Ev();
extern void _ZN8S19061C83v17Ev();
extern void _ZN8S19061C83v18Ev();
extern void _ZN8S19061C83v19Ev();
extern void _ZN8S19061C63v20Ev();
extern void _ZN8S19061C63v21Ev();
extern void _ZN8S19061C63v22Ev();
extern void _ZN8S19061C63v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19061C6__8S19061C2__8S19061C1[] = {
  ABISELECT(232,156),
  ABISELECT(104,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19061C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19061C2D1Ev,_ZThn8_N8S19061C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19061C2D0Ev,_ZThn8_N8S19061C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19061C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19061C63v23Ev,
};
extern void _ZN8S19061C73v12Ev();
extern void _ZN8S19061C73v13Ev();
extern void _ZN8S19061C73v14Ev();
extern void _ZN8S19061C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19061C7__8S19061C2__8S19061C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI8S19061C2[0]),
  (VTBL_ENTRY)&_ZN8S19061C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19061C2D1Ev,_ZTv0_n12_N8S19061C2D1Ev)();
extern void ABISELECT(_ZThn248_N8S19061C2D1Ev,_ZThn164_N8S19061C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19061C2D0Ev,_ZTv0_n12_N8S19061C2D0Ev)();
extern void ABISELECT(_ZThn248_N8S19061C2D0Ev,_ZThn164_N8S19061C2D0Ev)() __attribute__((weak));
extern void _ZN8S19061C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19061C4__A1__8S19061C2__8S19061C1[] = {
  0,
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  (VTBL_ENTRY)&(_ZTI8S19061C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19061C2D1Ev,_ZTv0_n12_N8S19061C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19061C2D0Ev,_ZTv0_n12_N8S19061C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
};
extern void _ZN9S19061C12D1Ev();
extern void _ZN9S19061C12D0Ev();
extern void _ZN8S19061C42v4Ev();
extern void _ZN9S19061C133v29Ev();
extern void _ZN9S19061C133v30Ev();
extern void _ZN9S19061C133v31Ev();
extern void _ZN9S19061C133v32Ev();
extern void _ZN9S19061C133v33Ev();
extern void _ZN9S19061C123v34Ev();
extern void _ZN9S19061C123v35Ev();
extern void _ZN9S19061C123v36Ev();
extern void _ZN9S19061C123v37Ev();
extern void _ZN9S19061C123v38Ev();
extern void _ZN9S19061C123v39Ev();
static  VTBL_ENTRY _tg__ZTV9S19061C12__8S19061C1[] = {
  ABISELECT(-136,-96),
  0,
  (VTBL_ENTRY)&(_ZTI9S19061C12[0]),
  (VTBL_ENTRY)&_ZN9S19061C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19061C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19061C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v29Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v30Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v31Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v32Ev,
  (VTBL_ENTRY)&_ZN9S19061C133v33Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v34Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v35Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v36Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v37Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v38Ev,
  (VTBL_ENTRY)&_ZN9S19061C123v39Ev,
};
extern void _ZN8S19061C73v12Ev();
extern void _ZN8S19061C73v13Ev();
extern void _ZN8S19061C73v14Ev();
extern void _ZN8S19061C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19061C7__9S19061C12__8S19061C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(136,96),
  (VTBL_ENTRY)&(_ZTI9S19061C12[0]),
  (VTBL_ENTRY)&_ZN8S19061C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19061C73v15Ev,
};
static  VTT_ENTRY vtt_S19061C1[] = {
  {&(_ZTV8S19061C1[8]),  8,152},
  {&(_tg__ZTV9S19061C10__8S19061C1[4]),  4,10},
  {&(_tg__ZTV9S19061C149S19061C10__8S19061C1[4]),  4,12},
  {&(_tg__ZTV9S19061C12__9S19061C149S19061C10__8S19061C1[16]),  16,30},
  {&(_tg__ZTV8S19061C7__9S19061C149S19061C10__8S19061C1[6]),  6,10},
  {&(_tg__ZTV9S19061C12__9S19061C10__8S19061C1[16]),  16,30},
  {&(_tg__ZTV8S19061C7__9S19061C10__8S19061C1[6]),  6,10},
  {&(_tg__ZTV9S19061C14__9S19061C10__8S19061C1[4]),  4,12},
  {&(_ZTV8S19061C1[61]),  61,152},
  {&(_ZTV8S19061C1[93]),  93,152},
  {&(_ZTV8S19061C1[71]),  71,152},
  {&(_ZTV8S19061C1[104]),  104,152},
  {&(_ZTV8S19061C1[112]),  112,152},
  {&(_ZTV8S19061C1[83]),  83,152},
  {&(_ZTV8S19061C1[131]),  131,152},
  {&(_ZTV8S19061C1[34]),  34,152},
  {&(_ZTV8S19061C1[149]),  149,152},
  {&(_tg__ZTV8S19061C2__8S19061C1[5]),  5,11},
  {&(_tg__ZTV8S19061C68S19061C2__8S19061C1[4]),  4,14},
  {&(_tg__ZTV8S19061C7__8S19061C68S19061C2__8S19061C1[6]),  6,10},
  {&(_tg__ZTV8S19061C4__8S19061C68S19061C2__8S19061C1[4]),  4,7},
  {&(_tg__ZTV8S19061C5__8S19061C2__8S19061C1[7]),  7,12},
  {&(_tg__ZTV8S19061C6__8S19061C2__8S19061C1[4]),  4,14},
  {&(_tg__ZTV8S19061C7__8S19061C2__8S19061C1[6]),  6,10},
  {&(_tg__ZTV8S19061C4__A1__8S19061C2__8S19061C1[4]),  4,7},
  {&(_tg__ZTV9S19061C12__8S19061C1[3]),  3,17},
  {&(_tg__ZTV8S19061C7__9S19061C12__8S19061C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S19061C1[];
extern  VTBL_ENTRY _ZTV8S19061C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19061C1[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19061C2D0Ev,_ZTv0_n12_N8S19061C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19061C2D0Ev,_ZThn164_N8S19061C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19061C2D1Ev,_ZTv0_n12_N8S19061C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19061C2D1Ev,_ZThn164_N8S19061C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19061C6D0Ev,_ZTv0_n12_N8S19061C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19061C6D0Ev,_ZThn156_N8S19061C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19061C6D1Ev,_ZTv0_n12_N8S19061C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19061C6D1Ev,_ZThn156_N8S19061C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19061C10D0Ev,_ZTv0_n16_N9S19061C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19061C10D0Ev,_ZThn316_N9S19061C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19061C10D1Ev,_ZTv0_n16_N9S19061C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19061C10D1Ev,_ZThn316_N9S19061C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19061C14D0Ev,_ZTv0_n16_N9S19061C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19061C14D0Ev,_ZThn192_N9S19061C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19061C14D1Ev,_ZTv0_n16_N9S19061C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19061C14D1Ev,_ZThn192_N9S19061C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19061C1D0Ev,_ZTv0_n16_N8S19061C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19061C1D0Ev,_ZThn316_N8S19061C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19061C1D1Ev,_ZTv0_n16_N8S19061C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19061C1D1Ev,_ZThn316_N8S19061C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19061C1D0Ev,_ZTv0_n12_N8S19061C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N8S19061C1D0Ev,_ZThn332_N8S19061C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19061C1D0Ev,_ZThn312_N8S19061C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19061C1D1Ev,_ZTv0_n12_N8S19061C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N8S19061C1D1Ev,_ZThn332_N8S19061C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19061C1D1Ev,_ZThn312_N8S19061C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19061C1D0Ev,_ZTv0_n24_N8S19061C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19061C1D0Ev,_ZThn148_N8S19061C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19061C1D1Ev,_ZTv0_n24_N8S19061C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19061C1D1Ev,_ZThn148_N8S19061C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19061C1 = {  "S19061C1", // class name
  bases_S19061C1, 18,
  &(vtc_S19061C1[0]), // expected_vtbl_contents
  &(vtt_S19061C1[0]), // expected_vtt_contents
  ABISELECT(528,336), // object size
  NSPAIRA(_ZTI8S19061C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19061C1),152, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19061C1),27, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19042C4  {
  void *s19042c4f0;
  short s19042c4f1;
  long double s19042c4f2;
  virtual void  v1(); // _ZN8S19042C42v1Ev
  ~S19042C4(); // tgen
  S19042C4(); // tgen
};
//SIG(-1 S19042C4) C1{ v1 Fp Fs FD}


void  S19042C4 ::v1(){vfunc_called(this, "_ZN8S19042C42v1Ev");}
S19042C4 ::~S19042C4(){ note_dtor("S19042C4", this);} // tgen
S19042C4 ::S19042C4(){ note_ctor("S19042C4", this);} // tgen

static void Test_S19042C4()
{
  extern Class_Descriptor cd_S19042C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S19042C4, buf);
    S19042C4 *dp, &lv = *(dp=new (buf) S19042C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19042C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19042C4)");
    check_field_offset(lv, s19042c4f0, ABISELECT(8,4), "S19042C4.s19042c4f0");
    check_field_offset(lv, s19042c4f1, ABISELECT(16,8), "S19042C4.s19042c4f1");
    check_field_offset(lv, s19042c4f2, ABISELECT(32,12), "S19042C4.s19042c4f2");
    test_class_info(&lv, &cd_S19042C4);
    dp->~S19042C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19042C4(Test_S19042C4, "S19042C4", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19042C4C1Ev();
extern void _ZN8S19042C4D1Ev();
Name_Map name_map_S19042C4[] = {
  NSPAIR(_ZN8S19042C4C1Ev),
  NSPAIR(_ZN8S19042C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19042C4[];
extern void _ZN8S19042C42v1Ev();
static  VTBL_ENTRY vtc_S19042C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19042C4[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
};
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
Class_Descriptor cd_S19042C4 = {  "S19042C4", // class name
  0,0,//no base classes
  &(vtc_S19042C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19042C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19042C4),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  S19042C5  {
  void *s19042c5f0[2];
  long double s19042c5f1[10];
  void *s19042c5f2;
  short s19042c5f3;
  void *s19042c5f4[2];
  virtual void  v2(); // _ZN8S19042C52v2Ev
  ~S19042C5(); // tgen
  S19042C5(); // tgen
};
//SIG(-1 S19042C5) C1{ v1 Fp[2] FD[10] Fp Fs Fp[2]}


void  S19042C5 ::v2(){vfunc_called(this, "_ZN8S19042C52v2Ev");}
S19042C5 ::~S19042C5(){ note_dtor("S19042C5", this);} // tgen
S19042C5 ::S19042C5(){ note_ctor("S19042C5", this);} // tgen

static void Test_S19042C5()
{
  extern Class_Descriptor cd_S19042C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,38)];
    init_test(&cd_S19042C5, buf);
    S19042C5 *dp, &lv = *(dp=new (buf) S19042C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,148), "sizeof(S19042C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19042C5)");
    check_field_offset(lv, s19042c5f0, ABISELECT(8,4), "S19042C5.s19042c5f0");
    check_field_offset(lv, s19042c5f1, ABISELECT(32,12), "S19042C5.s19042c5f1");
    check_field_offset(lv, s19042c5f2, ABISELECT(192,132), "S19042C5.s19042c5f2");
    check_field_offset(lv, s19042c5f3, ABISELECT(200,136), "S19042C5.s19042c5f3");
    check_field_offset(lv, s19042c5f4, ABISELECT(208,140), "S19042C5.s19042c5f4");
    test_class_info(&lv, &cd_S19042C5);
    dp->~S19042C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19042C5(Test_S19042C5, "S19042C5", ABISELECT(224,148));

#else // __cplusplus

extern void _ZN8S19042C5C1Ev();
extern void _ZN8S19042C5D1Ev();
Name_Map name_map_S19042C5[] = {
  NSPAIR(_ZN8S19042C5C1Ev),
  NSPAIR(_ZN8S19042C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19042C5[];
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY vtc_S19042C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19042C5[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
Class_Descriptor cd_S19042C5 = {  "S19042C5", // class name
  0,0,//no base classes
  &(vtc_S19042C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,148), // object size
  NSPAIRA(_ZTI8S19042C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19042C5),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  S19042C3  : S19042C4 , S19042C5 {
  int s19042c3f0;
  ::S19042C4 s19042c3f1;
  void *s19042c3f2;
  virtual void  v3(); // _ZN8S19042C32v3Ev
  ~S19042C3(); // tgen
  S19042C3(); // tgen
};
//SIG(-1 S19042C3) C1{ BC2{ v2 Fp Fs FD} BC3{ v3 Fp[2] FD[10] Fp Fs Fp[2]} v1 Fi FC2 Fp}


void  S19042C3 ::v3(){vfunc_called(this, "_ZN8S19042C32v3Ev");}
S19042C3 ::~S19042C3(){ note_dtor("S19042C3", this);} // tgen
S19042C3 ::S19042C3(){ note_ctor("S19042C3", this);} // tgen

static void Test_S19042C3()
{
  extern Class_Descriptor cd_S19042C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,52)];
    init_test(&cd_S19042C3, buf);
    S19042C3 *dp, &lv = *(dp=new (buf) S19042C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,204), "sizeof(S19042C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19042C3)");
    check_base_class_offset(lv, (S19042C4*), 0, "S19042C3");
    check_base_class_offset(lv, (S19042C5*), ABISELECT(48,24), "S19042C3");
    check_field_offset(lv, s19042c3f0, ABISELECT(272,172), "S19042C3.s19042c3f0");
    check_field_offset(lv, s19042c3f1, ABISELECT(288,176), "S19042C3.s19042c3f1");
    check_field_offset(lv, s19042c3f2, ABISELECT(336,200), "S19042C3.s19042c3f2");
    test_class_info(&lv, &cd_S19042C3);
    dp->~S19042C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19042C3(Test_S19042C3, "S19042C3", ABISELECT(352,204));

#else // __cplusplus

extern void _ZN8S19042C3C1Ev();
extern void _ZN8S19042C3D1Ev();
Name_Map name_map_S19042C3[] = {
  NSPAIR(_ZN8S19042C3C1Ev),
  NSPAIR(_ZN8S19042C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
static Base_Class bases_S19042C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19042C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19042C5,    ABISELECT(48,24), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S19042C3[];
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY vtc_S19042C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19042C3[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19042C3[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern VTBL_ENTRY _ZTI8S19042C3[];
extern  VTBL_ENTRY _ZTV8S19042C3[];
Class_Descriptor cd_S19042C3 = {  "S19042C3", // class name
  bases_S19042C3, 2,
  &(vtc_S19042C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,204), // object size
  NSPAIRA(_ZTI8S19042C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19042C3),7, //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  S19042C9  : S19042C4 , S19042C5 , S19042C3 {
  char s19042c9f0;
  int s19042c9f1;
  __tsi64 s19042c9f2;
  long s19042c9f3;
  __tsi64 s19042c9f4;
  void *s19042c9f5;
  virtual  ~S19042C9(); // _ZN8S19042C9D1Ev
  virtual void  v4(); // _ZN8S19042C92v4Ev
  virtual void  v5(); // _ZN8S19042C92v5Ev
  virtual void  v6(); // _ZN8S19042C92v6Ev
  S19042C9(); // tgen
};
//SIG(-1 S19042C9) C1{ BC2{ v4 Fp Fs FD} BC3{ v5 Fp[2] FD[10] Fp Fs Fp[2]} BC4{ BC2 BC3 v6 Fi FC2 Fp} vd v1 v2 v3 Fc Fi FL Fl FL Fp}


 S19042C9 ::~S19042C9(){ note_dtor("S19042C9", this);}
void  S19042C9 ::v4(){vfunc_called(this, "_ZN8S19042C92v4Ev");}
void  S19042C9 ::v5(){vfunc_called(this, "_ZN8S19042C92v5Ev");}
void  S19042C9 ::v6(){vfunc_called(this, "_ZN8S19042C92v6Ev");}
S19042C9 ::S19042C9(){ note_ctor("S19042C9", this);} // tgen

static void Test_S19042C9()
{
  extern Class_Descriptor cd_S19042C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(42,103)];
    init_test(&cd_S19042C9, buf);
    S19042C9 *dp, &lv = *(dp=new (buf) S19042C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(656,408), "sizeof(S19042C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19042C9)");
    /*is_ambiguous_... S19042C9::S19042C4 */ AMB_check_base_class_offset(lv, (S19042C4*), 0, "S19042C9");
    /*is_ambiguous_... S19042C9::S19042C5 */ AMB_check_base_class_offset(lv, (S19042C5*), ABISELECT(48,24), "S19042C9");
    check_base_class_offset(lv, (S19042C4*)(S19042C3*), ABISELECT(272,172), "S19042C9");
    check_base_class_offset(lv, (S19042C5*)(S19042C3*), ABISELECT(320,196), "S19042C9");
    check_base_class_offset(lv, (S19042C3*), ABISELECT(272,172), "S19042C9");
    check_field_offset(lv, s19042c9f0, ABISELECT(616,376), "S19042C9.s19042c9f0");
    check_field_offset(lv, s19042c9f1, ABISELECT(620,380), "S19042C9.s19042c9f1");
    check_field_offset(lv, s19042c9f2, ABISELECT(624,384), "S19042C9.s19042c9f2");
    check_field_offset(lv, s19042c9f3, ABISELECT(632,392), "S19042C9.s19042c9f3");
    check_field_offset(lv, s19042c9f4, ABISELECT(640,396), "S19042C9.s19042c9f4");
    check_field_offset(lv, s19042c9f5, ABISELECT(648,404), "S19042C9.s19042c9f5");
    test_class_info(&lv, &cd_S19042C9);
    dp->~S19042C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19042C9(Test_S19042C9, "S19042C9", ABISELECT(656,408));

#else // __cplusplus

extern void _ZN8S19042C9C1Ev();
extern void _ZN8S19042C9D1Ev();
Name_Map name_map_S19042C9[] = {
  NSPAIR(_ZN8S19042C9C1Ev),
  NSPAIR(_ZN8S19042C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C3;
extern VTBL_ENTRY _ZTI8S19042C3[];
extern  VTBL_ENTRY _ZTV8S19042C3[];
static Base_Class bases_S19042C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19042C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19042C5,    ABISELECT(48,24), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19042C4,    ABISELECT(272,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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19042C5,    ABISELECT(320,196), //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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19042C3,    ABISELECT(272,172), //bcp->offset
    11, //bcp->virtual_function_table_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 _ZTI8S19042C9[];
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C9D1Ev();
extern void _ZN8S19042C9D0Ev();
extern void _ZN8S19042C92v4Ev();
extern void _ZN8S19042C92v5Ev();
extern void _ZN8S19042C92v6Ev();
extern void _ZN8S19042C52v2Ev();
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY vtc_S19042C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19042C9[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19042C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v6Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19042C9[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
  ABISELECT(-272,-172),
  (VTBL_ENTRY)&(_ZTI8S19042C9[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
  ABISELECT(-320,-196),
  (VTBL_ENTRY)&(_ZTI8S19042C9[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern VTBL_ENTRY _ZTI8S19042C9[];
extern  VTBL_ENTRY _ZTV8S19042C9[];
Class_Descriptor cd_S19042C9 = {  "S19042C9", // class name
  bases_S19042C9, 5,
  &(vtc_S19042C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(656,408), // object size
  NSPAIRA(_ZTI8S19042C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19042C9),18, //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  S19042C8  : virtual S19042C9 , S19042C4 {
  short s19042c8f0[4];
  int s19042c8f1;
  long double s19042c8f2;
  int s19042c8f3;
  void *s19042c8f4[5];
  __tsi64 s19042c8f5;
  virtual  ~S19042C8(); // _ZN8S19042C8D2Ev
  S19042C8(); // tgen
};
//SIG(-1 S19042C8) C1{ VBC2{ BC3{ v1 Fp Fs FD} BC4{ v2 Fp[2] FD[10] Fp Fs Fp[2]} BC5{ BC3 BC4 v3 Fi FC3 Fp} vd v4 v5 v6 Fc Fi FL Fl FL Fp} BC3 vd Fs[4] Fi FD Fi Fp[5] FL}


 S19042C8 ::~S19042C8(){ note_dtor("S19042C8", this);}
S19042C8 ::S19042C8(){ note_ctor("S19042C8", this);} // tgen

static void Test_S19042C8()
{
  extern Class_Descriptor cd_S19042C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(51,123)];
    init_test(&cd_S19042C8, buf);
    S19042C8 *dp, &lv = *(dp=new (buf) S19042C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(800,488), "sizeof(S19042C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19042C8)");
    /*is_ambiguous_... S19042C9::S19042C4 */ AMB_check_base_class_offset(lv, (S19042C4*)(S19042C9*), ABISELECT(144,80), "S19042C8");
    /*is_ambiguous_... S19042C9::S19042C5 */ AMB_check_base_class_offset(lv, (S19042C5*)(S19042C9*), ABISELECT(192,104), "S19042C8");
    check_base_class_offset(lv, (S19042C4*)(S19042C3*)(S19042C9*), ABISELECT(416,252), "S19042C8");
    check_base_class_offset(lv, (S19042C5*)(S19042C3*)(S19042C9*), ABISELECT(464,276), "S19042C8");
    check_base_class_offset(lv, (S19042C3*)(S19042C9*), ABISELECT(416,252), "S19042C8");
    check_base_class_offset(lv, (S19042C9*), ABISELECT(144,80), "S19042C8");
    /*is_ambiguous_... S19042C8::S19042C4 */ AMB_check_base_class_offset(lv, (S19042C4*), 0, "S19042C8");
    check_field_offset(lv, s19042c8f0, ABISELECT(48,24), "S19042C8.s19042c8f0");
    check_field_offset(lv, s19042c8f1, ABISELECT(56,32), "S19042C8.s19042c8f1");
    check_field_offset(lv, s19042c8f2, ABISELECT(64,36), "S19042C8.s19042c8f2");
    check_field_offset(lv, s19042c8f3, ABISELECT(80,48), "S19042C8.s19042c8f3");
    check_field_offset(lv, s19042c8f4, ABISELECT(88,52), "S19042C8.s19042c8f4");
    check_field_offset(lv, s19042c8f5, ABISELECT(128,72), "S19042C8.s19042c8f5");
    test_class_info(&lv, &cd_S19042C8);
    dp->~S19042C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19042C8(Test_S19042C8, "S19042C8", ABISELECT(800,488));

#else // __cplusplus

extern void _ZN8S19042C8C1Ev();
extern void _ZN8S19042C8D2Ev();
Name_Map name_map_S19042C8[] = {
  NSPAIR(_ZN8S19042C8C1Ev),
  NSPAIR(_ZN8S19042C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C3;
extern VTBL_ENTRY _ZTI8S19042C3[];
extern  VTBL_ENTRY _ZTV8S19042C3[];
extern Class_Descriptor cd_S19042C9;
extern VTBL_ENTRY _ZTI8S19042C9[];
extern  VTBL_ENTRY _ZTV8S19042C9[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
static Base_Class bases_S19042C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19042C4,    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
    5, //immediately_derived
  0, 0},
  {&cd_S19042C5,    ABISELECT(192,104), //bcp->offset
    21, //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19042C4,    ABISELECT(416,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19042C5,    ABISELECT(464,276), //bcp->offset
    28, //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_S19042C3,    ABISELECT(416,252), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19042C9,    ABISELECT(144,80), //bcp->offset
    6, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19042C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19042C8[];
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C8D1Ev();
extern void _ZN8S19042C8D0Ev();
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19042C8D1Ev,_ZTv0_n16_N8S19042C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19042C8D1Ev,_ZThn80_N8S19042C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19042C8D0Ev,_ZTv0_n16_N8S19042C8D0Ev)();
extern void ABISELECT(_ZThn144_N8S19042C8D0Ev,_ZThn80_N8S19042C8D0Ev)() __attribute__((weak));
extern void _ZN8S19042C92v4Ev();
extern void _ZN8S19042C92v5Ev();
extern void _ZN8S19042C92v6Ev();
extern void _ZN8S19042C52v2Ev();
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY vtc_S19042C8[] = {
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19042C8D0Ev,
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-144,-80),
  0,
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19042C8D1Ev,_ZTv0_n16_N8S19042C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19042C8D0Ev,_ZTv0_n16_N8S19042C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19042C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v6Ev,
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
  ABISELECT(-416,-252),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
  ABISELECT(-464,-276),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S19042C8[];
static  VTT_ENTRY vtt_S19042C8[] = {
  {&(_ZTV8S19042C8[3]),  3,31},
  {&(_ZTV8S19042C8[15]),  15,31},
  {&(_ZTV8S19042C8[23]),  23,31},
  {&(_ZTV8S19042C8[26]),  26,31},
  {&(_ZTV8S19042C8[30]),  30,31},
};
extern VTBL_ENTRY _ZTI8S19042C8[];
extern  VTBL_ENTRY _ZTV8S19042C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19042C8[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19042C8D0Ev,_ZTv0_n16_N8S19042C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19042C8D0Ev,_ZThn80_N8S19042C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19042C8D1Ev,_ZTv0_n16_N8S19042C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19042C8D1Ev,_ZThn80_N8S19042C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19042C8 = {  "S19042C8", // class name
  bases_S19042C8, 7,
  &(vtc_S19042C8[0]), // expected_vtbl_contents
  &(vtt_S19042C8[0]), // expected_vtt_contents
  ABISELECT(800,488), // object size
  NSPAIRA(_ZTI8S19042C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19042C8),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19042C8),5, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19042C2  : S19042C3 , S19252C4 , virtual S19042C8 , virtual S19043C10 , S19042C5 {
  void *s19042c2f0;
  virtual  ~S19042C2(); // _ZN8S19042C2D2Ev
  S19042C2(); // tgen
};
//SIG(-1 S19042C2) C1{ BC2{ BC3{ v1 Fp Fs FD} BC4{ v2 Fp[2] FD[10] Fp Fs Fp[2]} v3 Fi FC3 Fp} BC5{ m Fi Fc Fp FC6{}} VBC7{ VBC8{ BC3 BC4 BC2 vd v4 v5 v6 Fc Fi FL Fl FL Fp} BC3 vd Fs[4] Fi FD Fi Fp[5] FL} VBC9{ m Fi[2] Fs FC10{ vd v7 v8 Fi FU11{ m Fp} Fs:16 FC12{ v9 Fp[2] FD[10] Fp Fs Fp[2]} FC6}} BC4 vd Fp}


 S19042C2 ::~S19042C2(){ note_dtor("S19042C2", this);}
S19042C2 ::S19042C2(){ note_ctor("S19042C2", this);} // tgen

static void Test_S19042C2()
{
  extern Class_Descriptor cd_S19042C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(107,261)];
    init_test(&cd_S19042C2, buf);
    S19042C2 *dp, &lv = *(dp=new (buf) S19042C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1696,1040), "sizeof(S19042C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19042C2)");
    /*is_ambiguous_... S19042C2::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C4*)(S19042C3*), 0, "S19042C2");
    /*is_ambiguous_... S19042C2::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C5*)(S19042C3*), ABISELECT(48,24), "S19042C2");
    /*is_ambiguous_... S19042C2::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C3*), 0, "S19042C2");
    check_base_class_offset(lv, (S19252C4*), ABISELECT(344,204), "S19042C2");
    /*is_ambiguous_... S19042C9::S19042C4 */ AMB_check_base_class_offset(lv, (S19042C4*)(S19042C9*), ABISELECT(752,452), "S19042C2");
    /*is_ambiguous_... S19042C9::S19042C5 */ AMB_check_base_class_offset(lv, (S19042C5*)(S19042C9*), ABISELECT(800,476), "S19042C2");
    check_base_class_offset(lv, (S19042C4*)(S19042C3*)(S19042C9*), ABISELECT(1024,624), "S19042C2");
    check_base_class_offset(lv, (S19042C5*)(S19042C3*)(S19042C9*), ABISELECT(1072,648), "S19042C2");
    check_base_class_offset(lv, (S19042C3*)(S19042C9*), ABISELECT(1024,624), "S19042C2");
    check_base_class_offset(lv, (S19042C9*)(S19042C8*), ABISELECT(752,452), "S19042C2");
    /*is_ambiguous_... S19042C8::S19042C4 */ AMB_check_base_class_offset(lv, (S19042C4*)(S19042C8*), ABISELECT(608,372), "S19042C2");
    check_base_class_offset(lv, (S19042C8*), ABISELECT(608,372), "S19042C2");
    check_base_class_offset(lv, (S19043C10*), ABISELECT(1408,860), "S19042C2");
    /*is_ambiguous_... S19042C2::S19042C5 */ AMB_check_base_class_offset(lv, (S19042C5*), ABISELECT(368,220), "S19042C2");
    check_field_offset(lv, s19042c2f0, ABISELECT(592,368), "S19042C2.s19042c2f0");
    test_class_info(&lv, &cd_S19042C2);
    dp->~S19042C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19042C2(Test_S19042C2, "S19042C2", ABISELECT(1696,1040));

#else // __cplusplus

extern void _ZN8S19042C2C1Ev();
extern void _ZN8S19042C2D2Ev();
Name_Map name_map_S19042C2[] = {
  NSPAIR(_ZN8S19042C2C1Ev),
  NSPAIR(_ZN8S19042C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C3;
extern VTBL_ENTRY _ZTI8S19042C3[];
extern  VTBL_ENTRY _ZTV8S19042C3[];
extern Class_Descriptor cd_S19252C4;
extern VTBL_ENTRY _ZTI8S19252C4[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C3;
extern VTBL_ENTRY _ZTI8S19042C3[];
extern  VTBL_ENTRY _ZTV8S19042C3[];
extern Class_Descriptor cd_S19042C9;
extern VTBL_ENTRY _ZTI8S19042C9[];
extern  VTBL_ENTRY _ZTV8S19042C9[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C8;
extern VTBL_ENTRY _ZTI8S19042C8[];
extern  VTBL_ENTRY _ZTV8S19042C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19042C8[];
extern Class_Descriptor cd_S19043C10;
extern VTBL_ENTRY _ZTI9S19043C10[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
static Base_Class bases_S19042C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19042C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S19042C5,    ABISELECT(48,24), //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
    10, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19042C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19252C4,    ABISELECT(344,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19042C4,    ABISELECT(752,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19042C5,    ABISELECT(800,476), //bcp->offset
    38, //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19042C4,    ABISELECT(1024,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19042C5,    ABISELECT(1072,648), //bcp->offset
    45, //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19042C3,    ABISELECT(1024,624), //bcp->offset
    41, //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_S19042C9,    ABISELECT(752,452), //bcp->offset
    23, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19042C4,    ABISELECT(608,372), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19042C8,    ABISELECT(608,372), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //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},
  {&cd_S19043C10,    ABISELECT(1408,860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19042C5,    ABISELECT(368,220), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19042C2[];
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
extern void _ZN8S19042C2D1Ev();
extern void _ZN8S19042C2D0Ev();
extern void _ZN8S19042C52v2Ev();
extern void _ZN8S19042C52v2Ev();
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n40_N8S19042C2D1Ev,_ZTv0_n20_N8S19042C2D1Ev)();
extern void ABISELECT(_ZThn608_N8S19042C2D1Ev,_ZThn372_N8S19042C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19042C2D0Ev,_ZTv0_n20_N8S19042C2D0Ev)();
extern void ABISELECT(_ZThn608_N8S19042C2D0Ev,_ZThn372_N8S19042C2D0Ev)() __attribute__((weak));
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19042C2D1Ev,_ZTv0_n16_N8S19042C2D1Ev)();
extern void ABISELECT(_ZThn752_N8S19042C2D1Ev,_ZThn452_N8S19042C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19042C2D0Ev,_ZTv0_n16_N8S19042C2D0Ev)();
extern void ABISELECT(_ZThn752_N8S19042C2D0Ev,_ZThn452_N8S19042C2D0Ev)() __attribute__((weak));
extern void _ZN8S19042C92v4Ev();
extern void _ZN8S19042C92v5Ev();
extern void _ZN8S19042C92v6Ev();
extern void _ZN8S19042C52v2Ev();
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY vtc_S19042C2[] = {
  ABISELECT(1408,860),
  ABISELECT(752,452),
  ABISELECT(608,372),
  0,
  (VTBL_ENTRY)&(_ZTI8S19042C2[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19042C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19042C2D0Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19042C2[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI8S19042C2[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
  ABISELECT(-608,-372),
  0,
  ABISELECT(144,80),
  ABISELECT(-608,-372),
  (VTBL_ENTRY)&(_ZTI8S19042C2[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19042C2D1Ev,_ZTv0_n20_N8S19042C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19042C2D0Ev,_ZTv0_n20_N8S19042C2D0Ev),
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-752,-452),
  0,
  ABISELECT(-752,-452),
  (VTBL_ENTRY)&(_ZTI8S19042C2[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19042C2D1Ev,_ZTv0_n16_N8S19042C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19042C2D0Ev,_ZTv0_n16_N8S19042C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19042C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v6Ev,
  ABISELECT(-800,-476),
  (VTBL_ENTRY)&(_ZTI8S19042C2[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
  ABISELECT(-1024,-624),
  (VTBL_ENTRY)&(_ZTI8S19042C2[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
  ABISELECT(-1072,-648),
  (VTBL_ENTRY)&(_ZTI8S19042C2[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S19042C2[];
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C8D1Ev();
extern void _ZN8S19042C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C8__8S19042C2[] = {
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19042C8D0Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19042C8D1Ev,_ZTv0_n16_N8S19042C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19042C8D1Ev,_ZThn80_N8S19042C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19042C8D0Ev,_ZTv0_n16_N8S19042C8D0Ev)();
extern void ABISELECT(_ZThn144_N8S19042C8D0Ev,_ZThn80_N8S19042C8D0Ev)() __attribute__((weak));
extern void _ZN8S19042C92v4Ev();
extern void _ZN8S19042C92v5Ev();
extern void _ZN8S19042C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C9__8S19042C8__8S19042C2[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-144,-80),
  0,
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19042C8D1Ev,_ZTv0_n16_N8S19042C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19042C8D0Ev,_ZTv0_n16_N8S19042C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19042C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v6Ev,
};
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C58S19042C9__8S19042C8__8S19042C2[] = {
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C38S19042C9__8S19042C8__8S19042C2[] = {
  ABISELECT(-416,-252),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
};
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C58S19042C38S19042C9__A1__8S19042C8__8S19042C2[] = {
  ABISELECT(-464,-276),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
static  VTT_ENTRY vtt_S19042C2[] = {
  {&(_ZTV8S19042C2[5]),  5,48},
  {&(_ZTV8S19042C2[20]),  20,48},
  {&(_ZTV8S19042C2[32]),  32,48},
  {&(_ZTV8S19042C2[40]),  40,48},
  {&(_ZTV8S19042C2[43]),  43,48},
  {&(_ZTV8S19042C2[47]),  47,48},
  {&(_tg__ZTV8S19042C8__8S19042C2[3]),  3,6},
  {&(_tg__ZTV8S19042C9__8S19042C8__8S19042C2[9]),  9,15},
  {&(_tg__ZTV8S19042C58S19042C9__8S19042C8__8S19042C2[2]),  2,3},
  {&(_tg__ZTV8S19042C38S19042C9__8S19042C8__8S19042C2[2]),  2,4},
  {&(_tg__ZTV8S19042C58S19042C38S19042C9__A1__8S19042C8__8S19042C2[2]),  2,3},
};
extern VTBL_ENTRY _ZTI8S19042C2[];
extern  VTBL_ENTRY _ZTV8S19042C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19042C2[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19042C8D0Ev,_ZTv0_n16_N8S19042C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19042C8D0Ev,_ZThn80_N8S19042C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19042C8D1Ev,_ZTv0_n16_N8S19042C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19042C8D1Ev,_ZThn80_N8S19042C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19042C2D0Ev,_ZTv0_n16_N8S19042C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S19042C2D0Ev,_ZThn452_N8S19042C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19042C2D1Ev,_ZTv0_n16_N8S19042C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S19042C2D1Ev,_ZThn452_N8S19042C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19042C2D0Ev,_ZTv0_n20_N8S19042C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19042C2D0Ev,_ZThn372_N8S19042C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19042C2D1Ev,_ZTv0_n20_N8S19042C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19042C2D1Ev,_ZThn372_N8S19042C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19042C2 = {  "S19042C2", // class name
  bases_S19042C2, 14,
  &(vtc_S19042C2[0]), // expected_vtbl_contents
  &(vtt_S19042C2[0]), // expected_vtt_contents
  ABISELECT(1696,1040), // object size
  NSPAIRA(_ZTI8S19042C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19042C2),48, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19042C2),11, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19042C11  {
  int s19042c11f0;
  ::S19252C8_nt s19042c11f1;
  short s19042c11f2:16;
  ::S19042C5 s19042c11f3;
  ::S19252C5_nt s19042c11f4;
  virtual  ~S19042C11(); // _ZN9S19042C11D1Ev
  virtual void  v7(); // _ZN9S19042C112v7Ev
  virtual void  v8(); // _ZN9S19042C112v8Ev
  S19042C11(); // tgen
};
//SIG(-1 S19042C11) C1{ vd v1 v2 Fi FU2{ m Fp} Fs:16 FC3{ v3 Fp[2] FD[10] Fp Fs Fp[2]} FC4{}}


 S19042C11 ::~S19042C11(){ note_dtor("S19042C11", this);}
void  S19042C11 ::v7(){vfunc_called(this, "_ZN9S19042C112v7Ev");}
void  S19042C11 ::v8(){vfunc_called(this, "_ZN9S19042C112v8Ev");}
S19042C11 ::S19042C11(){ note_ctor("S19042C11", this);} // tgen

static void Test_S19042C11()
{
  extern Class_Descriptor cd_S19042C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,43)];
    init_test(&cd_S19042C11, buf);
    S19042C11 *dp, &lv = *(dp=new (buf) S19042C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,168), "sizeof(S19042C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19042C11)");
    check_field_offset(lv, s19042c11f0, ABISELECT(8,4), "S19042C11.s19042c11f0");
    check_field_offset(lv, s19042c11f1, ABISELECT(16,8), "S19042C11.s19042c11f1");
    set_bf_and_test(lv, s19042c11f2, ABISELECT(24,12), 0, 16, 1, "S19042C11");
    set_bf_and_test(lv, s19042c11f2, ABISELECT(24,12), 0, 16, hide_sll(1LL<<15), "S19042C11");
    check_field_offset(lv, s19042c11f3, ABISELECT(32,16), "S19042C11.s19042c11f3");
    check_field_offset(lv, s19042c11f4, ABISELECT(256,164), "S19042C11.s19042c11f4");
    test_class_info(&lv, &cd_S19042C11);
    dp->~S19042C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19042C11(Test_S19042C11, "S19042C11", ABISELECT(272,168));

#else // __cplusplus

extern void _ZN9S19042C11C1Ev();
extern void _ZN9S19042C11D1Ev();
Name_Map name_map_S19042C11[] = {
  NSPAIR(_ZN9S19042C11C1Ev),
  NSPAIR(_ZN9S19042C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19042C11[];
extern void _ZN9S19042C11D1Ev();
extern void _ZN9S19042C11D0Ev();
extern void _ZN9S19042C112v7Ev();
extern void _ZN9S19042C112v8Ev();
static  VTBL_ENTRY vtc_S19042C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19042C11[0]),
  (VTBL_ENTRY)&_ZN9S19042C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19042C11D0Ev,
  (VTBL_ENTRY)&_ZN9S19042C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19042C112v8Ev,
};
extern VTBL_ENTRY _ZTI9S19042C11[];
extern  VTBL_ENTRY _ZTV9S19042C11[];
Class_Descriptor cd_S19042C11 = {  "S19042C11", // class name
  0,0,//no base classes
  &(vtc_S19042C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,168), // object size
  NSPAIRA(_ZTI9S19042C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19042C11),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  S19042C14  : virtual S19042C9 , virtual S19042C8 , S19042C3 {
  ::S19043C16 s19042c14f0;
  ~S19042C14(); // tgen
  S19042C14(); // tgen
};
//SIG(-1 S19042C14) C1{ VBC2{ BC3{ v1 Fp Fs FD} BC4{ v2 Fp[2] FD[10] Fp Fs Fp[2]} BC5{ BC3 BC4 v3 Fi FC3 Fp} vd v4 v5 v6 Fc Fi FL Fl FL Fp} VBC6{ VBC2 BC3 vd Fs[4] Fi FD Fi Fp[5] FL} BC5 FC7{ VBC8{ v7 Fp Fs FD} Fp FC9{ v8 Fp[2] FD[10] Fp Fs Fp[2]} Fp[2]}}


S19042C14 ::~S19042C14(){ note_dtor("S19042C14", this);} // tgen
S19042C14 ::S19042C14(){ note_ctor("S19042C14", this);} // tgen

static void Test_S19042C14()
{
  extern Class_Descriptor cd_S19042C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(92,221)];
    init_test(&cd_S19042C14, buf);
    S19042C14 *dp, &lv = *(dp=new (buf) S19042C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1456,880), "sizeof(S19042C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19042C14)");
    /*is_ambiguous_... S19042C9::S19042C4 */ AMB_check_base_class_offset(lv, (S19042C4*)(S19042C9*), ABISELECT(656,392), "S19042C14");
    /*is_ambiguous_... S19042C9::S19042C5 */ AMB_check_base_class_offset(lv, (S19042C5*)(S19042C9*), ABISELECT(704,416), "S19042C14");
    check_base_class_offset(lv, (S19042C4*)(S19042C3*)(S19042C9*), ABISELECT(928,564), "S19042C14");
    check_base_class_offset(lv, (S19042C5*)(S19042C3*)(S19042C9*), ABISELECT(976,588), "S19042C14");
    check_base_class_offset(lv, (S19042C3*)(S19042C9*), ABISELECT(928,564), "S19042C14");
    check_base_class_offset(lv, (S19042C9*), ABISELECT(656,392), "S19042C14");
    check_base_class_offset(lv, (S19042C9*)(S19042C8*), ABISELECT(656,392), "S19042C14");
    /*is_ambiguous_... S19042C8::S19042C4 */ AMB_check_base_class_offset(lv, (S19042C4*)(S19042C8*), ABISELECT(1312,800), "S19042C14");
    check_base_class_offset(lv, (S19042C8*), ABISELECT(1312,800), "S19042C14");
    /*is_ambiguous_... S19042C14::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C4*)(S19042C3*), 0, "S19042C14");
    /*is_ambiguous_... S19042C14::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C5*)(S19042C3*), ABISELECT(48,24), "S19042C14");
    /*is_ambiguous_... S19042C14::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C3*), 0, "S19042C14");
    check_field_offset(lv, s19042c14f0, ABISELECT(352,204), "S19042C14.s19042c14f0");
    test_class_info(&lv, &cd_S19042C14);
    dp->~S19042C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19042C14(Test_S19042C14, "S19042C14", ABISELECT(1456,880));

#else // __cplusplus

extern void _ZN9S19042C14C1Ev();
extern void _ZN9S19042C14D1Ev();
Name_Map name_map_S19042C14[] = {
  NSPAIR(_ZN9S19042C14C1Ev),
  NSPAIR(_ZN9S19042C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C3;
extern VTBL_ENTRY _ZTI8S19042C3[];
extern  VTBL_ENTRY _ZTV8S19042C3[];
extern Class_Descriptor cd_S19042C9;
extern VTBL_ENTRY _ZTI8S19042C9[];
extern  VTBL_ENTRY _ZTV8S19042C9[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C8;
extern VTBL_ENTRY _ZTI8S19042C8[];
extern  VTBL_ENTRY _ZTV8S19042C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19042C8[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C3;
extern VTBL_ENTRY _ZTI8S19042C3[];
extern  VTBL_ENTRY _ZTV8S19042C3[];
static Base_Class bases_S19042C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19042C4,    ABISELECT(656,392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19042C5,    ABISELECT(704,416), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19042C4,    ABISELECT(928,564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19042C5,    ABISELECT(976,588), //bcp->offset
    33, //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_S19042C3,    ABISELECT(928,564), //bcp->offset
    29, //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
    5, //immediately_derived
  0, 0},
  {&cd_S19042C9,    ABISELECT(656,392), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19042C4,    ABISELECT(1312,800), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19042C8,    ABISELECT(1312,800), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19042C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19042C5,    ABISELECT(48,24), //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
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19042C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S19042C14[];
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
extern void _ZN9S19042C14D1Ev();
extern void _ZN9S19042C14D0Ev();
extern void _ZN8S19042C52v2Ev();
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19042C14D1Ev,_ZTv0_n16_N9S19042C14D1Ev)();
extern void ABISELECT(_ZThn656_N9S19042C14D1Ev,_ZThn392_N9S19042C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19042C14D0Ev,_ZTv0_n16_N9S19042C14D0Ev)();
extern void ABISELECT(_ZThn656_N9S19042C14D0Ev,_ZThn392_N9S19042C14D0Ev)() __attribute__((weak));
extern void _ZN8S19042C92v4Ev();
extern void _ZN8S19042C92v5Ev();
extern void _ZN8S19042C92v6Ev();
extern void _ZN8S19042C52v2Ev();
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
extern void _ZN8S19042C52v2Ev();
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n40_N9S19042C14D1Ev,_ZTv0_n20_N9S19042C14D1Ev)();
extern void ABISELECT(_ZThn1312_N9S19042C14D1Ev,_ZThn800_N9S19042C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19042C14D0Ev,_ZTv0_n20_N9S19042C14D0Ev)();
extern void ABISELECT(_ZThn1312_N9S19042C14D0Ev,_ZThn800_N9S19042C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19042C14[] = {
  ABISELECT(1312,800),
  ABISELECT(656,392),
  0,
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19042C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19042C14D0Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-656,-392),
  0,
  ABISELECT(-656,-392),
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19042C14D1Ev,_ZTv0_n16_N9S19042C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19042C14D0Ev,_ZTv0_n16_N9S19042C14D0Ev),
  (VTBL_ENTRY)&_ZN8S19042C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v6Ev,
  ABISELECT(-704,-416),
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
  ABISELECT(-928,-564),
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
  ABISELECT(-976,-588),
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
  ABISELECT(-1312,-800),
  0,
  ABISELECT(-656,-408),
  ABISELECT(-1312,-800),
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19042C14D1Ev,_ZTv0_n20_N9S19042C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19042C14D0Ev,_ZTv0_n20_N9S19042C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S19042C14[];
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C8D1Ev();
extern void _ZN8S19042C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C8__9S19042C14[] = {
  ABISELECT(-656,-408),
  0,
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19042C8D0Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19042C8D1Ev,_ZTv0_n16_N8S19042C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19042C8D0Ev,_ZTv0_n16_N8S19042C8D0Ev)();
extern void _ZN8S19042C92v4Ev();
extern void _ZN8S19042C92v5Ev();
extern void _ZN8S19042C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C9__8S19042C8__9S19042C14[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(656,408),
  0,
  ABISELECT(656,408),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19042C8D1Ev,_ZTv0_n16_N8S19042C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19042C8D0Ev,_ZTv0_n16_N8S19042C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19042C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v6Ev,
};
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C58S19042C9__8S19042C8__9S19042C14[] = {
  ABISELECT(608,384),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C38S19042C9__8S19042C8__9S19042C14[] = {
  ABISELECT(384,236),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
};
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C58S19042C38S19042C9__A1__8S19042C8__9S19042C14[] = {
  ABISELECT(336,212),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
static  VTT_ENTRY vtt_S19042C14[] = {
  {&(_ZTV9S19042C14[4]),  4,44},
  {&(_ZTV9S19042C14[20]),  20,44},
  {&(_ZTV9S19042C14[28]),  28,44},
  {&(_ZTV9S19042C14[31]),  31,44},
  {&(_ZTV9S19042C14[35]),  35,44},
  {&(_ZTV9S19042C14[41]),  41,44},
  {&(_tg__ZTV8S19042C8__9S19042C14[3]),  3,6},
  {&(_tg__ZTV8S19042C9__8S19042C8__9S19042C14[9]),  9,15},
  {&(_tg__ZTV8S19042C58S19042C9__8S19042C8__9S19042C14[2]),  2,3},
  {&(_tg__ZTV8S19042C38S19042C9__8S19042C8__9S19042C14[2]),  2,4},
  {&(_tg__ZTV8S19042C58S19042C38S19042C9__A1__8S19042C8__9S19042C14[2]),  2,3},
};
extern VTBL_ENTRY _ZTI9S19042C14[];
extern  VTBL_ENTRY _ZTV9S19042C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19042C14[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19042C14D0Ev,_ZTv0_n20_N9S19042C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N9S19042C14D0Ev,_ZThn800_N9S19042C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19042C14D1Ev,_ZTv0_n20_N9S19042C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N9S19042C14D1Ev,_ZThn800_N9S19042C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19042C14D0Ev,_ZTv0_n16_N9S19042C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S19042C14D0Ev,_ZThn392_N9S19042C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19042C14D1Ev,_ZTv0_n16_N9S19042C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S19042C14D1Ev,_ZThn392_N9S19042C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19042C14 = {  "S19042C14", // class name
  bases_S19042C14, 11,
  &(vtc_S19042C14[0]), // expected_vtbl_contents
  &(vtt_S19042C14[0]), // expected_vtt_contents
  ABISELECT(1456,880), // object size
  NSPAIRA(_ZTI9S19042C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19042C14),44, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19042C14),11, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19042C13  : virtual S19042C4 , virtual S19042C8 , virtual S19042C14 , virtual S19042C3 {
  void *s19042c13f0[8];
  __tsi64 s19042c13f1;
  virtual  ~S19042C13(); // _ZN9S19042C13D2Ev
  virtual void  v9(); // _ZN9S19042C132v9Ev
  S19042C13(); // tgen
};
//SIG(-1 S19042C13) C1{ VBC2{ v2 Fp Fs FD} VBC3{ VBC4{ BC2 BC5{ v3 Fp[2] FD[10] Fp Fs Fp[2]} BC6{ BC2 BC5 v4 Fi FC2 Fp} vd v5 v6 v7 Fc Fi FL Fl FL Fp} BC2 vd Fs[4] Fi FD Fi Fp[5] FL} VBC7{ VBC4 VBC3 BC6 FC8{ VBC9{ v8 Fp Fs FD} Fp FC10{ v9 Fp[2] FD[10] Fp Fs Fp[2]} Fp[2]}} VBC6 vd v1 Fp[8] FL}


 S19042C13 ::~S19042C13(){ note_dtor("S19042C13", this);}
void  S19042C13 ::v9(){vfunc_called(this, "_ZN9S19042C132v9Ev");}
S19042C13 ::S19042C13(){ note_ctor("S19042C13", this);} // tgen

static void Test_S19042C13()
{
  extern Class_Descriptor cd_S19042C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(122,289)];
    init_test(&cd_S19042C13, buf);
    S19042C13 *dp, &lv = *(dp=new (buf) S19042C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1936,1152), "sizeof(S19042C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19042C13)");
    /*is_ambiguous_... S19042C13::S19042C4 */ AMB_check_base_class_offset(lv, (S19042C4*), ABISELECT(80,44), "S19042C13");
    /*is_ambiguous_... S19042C9::S19042C4 */ AMB_check_base_class_offset(lv, (S19042C4*)(S19042C9*), ABISELECT(272,148), "S19042C13");
    /*is_ambiguous_... S19042C9::S19042C5 */ AMB_check_base_class_offset(lv, (S19042C5*)(S19042C9*), ABISELECT(320,172), "S19042C13");
    check_base_class_offset(lv, (S19042C4*)(S19042C3*)(S19042C9*), ABISELECT(544,320), "S19042C13");
    check_base_class_offset(lv, (S19042C5*)(S19042C3*)(S19042C9*), ABISELECT(592,344), "S19042C13");
    check_base_class_offset(lv, (S19042C3*)(S19042C9*), ABISELECT(544,320), "S19042C13");
    check_base_class_offset(lv, (S19042C9*)(S19042C8*), ABISELECT(272,148), "S19042C13");
    check_base_class_offset(lv, (S19042C9*)(S19042C14*), ABISELECT(272,148), "S19042C13");
    /*is_ambiguous_... S19042C8::S19042C4 */ AMB_check_base_class_offset(lv, (S19042C4*)(S19042C8*), ABISELECT(128,68), "S19042C13");
    check_base_class_offset(lv, (S19042C8*), ABISELECT(128,68), "S19042C13");
    check_base_class_offset(lv, (S19042C8*)(S19042C14*), ABISELECT(128,68), "S19042C13");
    /*is_ambiguous_... S19042C14::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C4*)(S19042C3*)(S19042C14*), ABISELECT(928,556), "S19042C13");
    /*is_ambiguous_... S19042C14::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C5*)(S19042C3*)(S19042C14*), ABISELECT(976,580), "S19042C13");
    /*is_ambiguous_... S19042C14::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C3*)(S19042C14*), ABISELECT(928,556), "S19042C13");
    check_base_class_offset(lv, (S19042C14*), ABISELECT(928,556), "S19042C13");
    /*is_ambiguous_... S19042C13::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C4*)(S19042C3*), ABISELECT(1584,948), "S19042C13");
    /*is_ambiguous_... S19042C13::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C5*)(S19042C3*), ABISELECT(1632,972), "S19042C13");
    /*is_ambiguous_... S19042C13::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C3*), ABISELECT(1584,948), "S19042C13");
    check_field_offset(lv, s19042c13f0, ABISELECT(8,4), "S19042C13.s19042c13f0");
    check_field_offset(lv, s19042c13f1, ABISELECT(72,36), "S19042C13.s19042c13f1");
    test_class_info(&lv, &cd_S19042C13);
    dp->~S19042C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19042C13(Test_S19042C13, "S19042C13", ABISELECT(1936,1152));

#else // __cplusplus

extern void _ZN9S19042C13C1Ev();
extern void _ZN9S19042C13D2Ev();
Name_Map name_map_S19042C13[] = {
  NSPAIR(_ZN9S19042C13C1Ev),
  NSPAIR(_ZN9S19042C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C3;
extern VTBL_ENTRY _ZTI8S19042C3[];
extern  VTBL_ENTRY _ZTV8S19042C3[];
extern Class_Descriptor cd_S19042C9;
extern VTBL_ENTRY _ZTI8S19042C9[];
extern  VTBL_ENTRY _ZTV8S19042C9[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C8;
extern VTBL_ENTRY _ZTI8S19042C8[];
extern  VTBL_ENTRY _ZTV8S19042C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19042C8[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C3;
extern VTBL_ENTRY _ZTI8S19042C3[];
extern  VTBL_ENTRY _ZTV8S19042C3[];
extern Class_Descriptor cd_S19042C14;
extern VTBL_ENTRY _ZTI9S19042C14[];
extern  VTBL_ENTRY _ZTV9S19042C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19042C14[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C3;
extern VTBL_ENTRY _ZTI8S19042C3[];
extern  VTBL_ENTRY _ZTV8S19042C3[];
static Base_Class bases_S19042C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19042C4,    ABISELECT(80,44), //bcp->offset
    10, //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_S19042C4,    ABISELECT(272,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
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19042C5,    ABISELECT(320,172), //bcp->offset
    37, //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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19042C4,    ABISELECT(544,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
    5, //immediately_derived
  0, 0},
  {&cd_S19042C5,    ABISELECT(592,344), //bcp->offset
    44, //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
    5, //immediately_derived
  0, 0},
  {&cd_S19042C3,    ABISELECT(544,320), //bcp->offset
    40, //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_S19042C9,    ABISELECT(272,148), //bcp->offset
    22, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19042C4,    ABISELECT(128,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
    8, //immediately_derived
  0, 0},
  {&cd_S19042C8,    ABISELECT(128,68), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19042C4,    ABISELECT(928,556), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19042C5,    ABISELECT(976,580), //bcp->offset
    59, //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
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19042C3,    ABISELECT(928,556), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19042C14,    ABISELECT(928,556), //bcp->offset
    47, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19042C4,    ABISELECT(1584,948), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19042C5,    ABISELECT(1632,972), //bcp->offset
    69, //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
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19042C3,    ABISELECT(1584,948), //bcp->offset
    62, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19042C13[];
extern void _ZN9S19042C13D1Ev();
extern void _ZN9S19042C13D0Ev();
extern void _ZN9S19042C132v9Ev();
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n40_N9S19042C13D1Ev,_ZTv0_n20_N9S19042C13D1Ev)();
extern void ABISELECT(_ZThn128_N9S19042C13D1Ev,_ZThn68_N9S19042C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19042C13D0Ev,_ZTv0_n20_N9S19042C13D0Ev)();
extern void ABISELECT(_ZThn128_N9S19042C13D0Ev,_ZThn68_N9S19042C13D0Ev)() __attribute__((weak));
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19042C13D1Ev,_ZTv0_n16_N9S19042C13D1Ev)();
extern void ABISELECT(_ZThn272_N9S19042C13D1Ev,_ZThn148_N9S19042C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19042C13D0Ev,_ZTv0_n16_N9S19042C13D0Ev)();
extern void ABISELECT(_ZThn272_N9S19042C13D0Ev,_ZThn148_N9S19042C13D0Ev)() __attribute__((weak));
extern void _ZN8S19042C92v4Ev();
extern void _ZN8S19042C92v5Ev();
extern void _ZN8S19042C92v6Ev();
extern void _ZN8S19042C52v2Ev();
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
extern void _ZN8S19042C52v2Ev();
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19042C13D1Ev,_ZTv0_n32_N9S19042C13D1Ev)();
extern void ABISELECT(_ZThn928_N9S19042C13D1Ev,_ZThn556_N9S19042C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19042C13D0Ev,_ZTv0_n32_N9S19042C13D0Ev)();
extern void ABISELECT(_ZThn928_N9S19042C13D0Ev,_ZThn556_N9S19042C13D0Ev)() __attribute__((weak));
extern void _ZN8S19042C52v2Ev();
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY vtc_S19042C13[] = {
  ABISELECT(1584,948),
  ABISELECT(928,556),
  ABISELECT(272,148),
  ABISELECT(128,68),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN9S19042C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19042C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19042C132v9Ev,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  ABISELECT(-128,-68),
  0,
  ABISELECT(144,80),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19042C13D1Ev,_ZTv0_n20_N9S19042C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19042C13D0Ev,_ZTv0_n20_N9S19042C13D0Ev),
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-272,-148),
  0,
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19042C13D1Ev,_ZTv0_n16_N9S19042C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19042C13D0Ev,_ZTv0_n16_N9S19042C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19042C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v6Ev,
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
  ABISELECT(-544,-320),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
  ABISELECT(-592,-344),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
  ABISELECT(-928,-556),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(-800,-488),
  ABISELECT(-656,-408),
  ABISELECT(-928,-556),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19042C13D1Ev,_ZTv0_n32_N9S19042C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19042C13D0Ev,_ZTv0_n32_N9S19042C13D0Ev),
  ABISELECT(-976,-580),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(-1584,-948),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
  ABISELECT(-1632,-972),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern VTBL_ENTRY _ZTV9S19042C13[];
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C8D1Ev();
extern void _ZN8S19042C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C8__9S19042C13[] = {
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19042C8D0Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19042C8D1Ev,_ZTv0_n16_N8S19042C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19042C8D1Ev,_ZThn80_N8S19042C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19042C8D0Ev,_ZTv0_n16_N8S19042C8D0Ev)();
extern void ABISELECT(_ZThn144_N8S19042C8D0Ev,_ZThn80_N8S19042C8D0Ev)() __attribute__((weak));
extern void _ZN8S19042C92v4Ev();
extern void _ZN8S19042C92v5Ev();
extern void _ZN8S19042C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C9__8S19042C8__9S19042C13[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-144,-80),
  0,
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19042C8D1Ev,_ZTv0_n16_N8S19042C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19042C8D0Ev,_ZTv0_n16_N8S19042C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19042C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v6Ev,
};
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C58S19042C9__8S19042C8__9S19042C13[] = {
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C38S19042C9__8S19042C8__9S19042C13[] = {
  ABISELECT(-416,-252),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
};
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C58S19042C38S19042C9__A1__8S19042C8__9S19042C13[] = {
  ABISELECT(-464,-276),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
extern void _ZN9S19042C14D1Ev();
extern void _ZN9S19042C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19042C14__9S19042C13[] = {
  ABISELECT(-800,-488),
  ABISELECT(-656,-408),
  0,
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19042C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19042C14D0Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19042C14D1Ev,_ZTv0_n16_N9S19042C14D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19042C14D0Ev,_ZTv0_n16_N9S19042C14D0Ev)();
extern void _ZN8S19042C92v4Ev();
extern void _ZN8S19042C92v5Ev();
extern void _ZN8S19042C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C9__9S19042C14__9S19042C13[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(656,408),
  0,
  ABISELECT(656,408),
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19042C14D1Ev,_ZTv0_n16_N9S19042C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19042C14D0Ev,_ZTv0_n16_N9S19042C14D0Ev),
  (VTBL_ENTRY)&_ZN8S19042C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v6Ev,
};
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C58S19042C9__9S19042C14__9S19042C13[] = {
  ABISELECT(608,384),
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C38S19042C9__9S19042C14__9S19042C13[] = {
  ABISELECT(384,236),
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
};
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C58S19042C38S19042C9__A1__9S19042C14__9S19042C13[] = {
  ABISELECT(336,212),
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n40_N9S19042C14D1Ev,_ZTv0_n20_N9S19042C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19042C14D0Ev,_ZTv0_n20_N9S19042C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19042C8__9S19042C14__9S19042C13[] = {
  ABISELECT(800,488),
  0,
  ABISELECT(144,80),
  ABISELECT(800,488),
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19042C14D1Ev,_ZTv0_n20_N9S19042C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19042C14D0Ev,_ZTv0_n20_N9S19042C14D0Ev),
};
static  VTT_ENTRY vtt_S19042C13[] = {
  {&(_ZTV9S19042C13[7]),  7,72},
  {&(_ZTV9S19042C13[13]),  13,72},
  {&(_ZTV9S19042C13[19]),  19,72},
  {&(_ZTV9S19042C13[31]),  31,72},
  {&(_ZTV9S19042C13[39]),  39,72},
  {&(_ZTV9S19042C13[42]),  42,72},
  {&(_ZTV9S19042C13[46]),  46,72},
  {&(_ZTV9S19042C13[55]),  55,72},
  {&(_ZTV9S19042C13[61]),  61,72},
  {&(_ZTV9S19042C13[67]),  67,72},
  {&(_ZTV9S19042C13[71]),  71,72},
  {&(_tg__ZTV8S19042C8__9S19042C13[3]),  3,6},
  {&(_tg__ZTV8S19042C9__8S19042C8__9S19042C13[9]),  9,15},
  {&(_tg__ZTV8S19042C58S19042C9__8S19042C8__9S19042C13[2]),  2,3},
  {&(_tg__ZTV8S19042C38S19042C9__8S19042C8__9S19042C13[2]),  2,4},
  {&(_tg__ZTV8S19042C58S19042C38S19042C9__A1__8S19042C8__9S19042C13[2]),  2,3},
  {&(_tg__ZTV9S19042C14__9S19042C13[4]),  4,8},
  {&(_tg__ZTV8S19042C9__9S19042C14__9S19042C13[9]),  9,15},
  {&(_tg__ZTV8S19042C58S19042C9__9S19042C14__9S19042C13[2]),  2,3},
  {&(_tg__ZTV8S19042C38S19042C9__9S19042C14__9S19042C13[2]),  2,4},
  {&(_tg__ZTV8S19042C58S19042C38S19042C9__A1__9S19042C14__9S19042C13[2]),  2,3},
  {&(_tg__ZTV8S19042C8__9S19042C14__9S19042C13[5]),  5,8},
};
extern VTBL_ENTRY _ZTI9S19042C13[];
extern  VTBL_ENTRY _ZTV9S19042C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19042C13[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19042C8D0Ev,_ZTv0_n16_N8S19042C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19042C8D0Ev,_ZThn80_N8S19042C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19042C8D1Ev,_ZTv0_n16_N8S19042C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19042C8D1Ev,_ZThn80_N8S19042C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19042C13D0Ev,_ZTv0_n32_N9S19042C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn928_N9S19042C13D0Ev,_ZThn556_N9S19042C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19042C13D1Ev,_ZTv0_n32_N9S19042C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn928_N9S19042C13D1Ev,_ZThn556_N9S19042C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19042C13D0Ev,_ZTv0_n16_N9S19042C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19042C13D0Ev,_ZThn148_N9S19042C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19042C13D1Ev,_ZTv0_n16_N9S19042C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19042C13D1Ev,_ZThn148_N9S19042C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19042C13D0Ev,_ZTv0_n20_N9S19042C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19042C13D0Ev,_ZThn68_N9S19042C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19042C13D1Ev,_ZTv0_n20_N9S19042C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19042C13D1Ev,_ZThn68_N9S19042C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19042C13 = {  "S19042C13", // class name
  bases_S19042C13, 16,
  &(vtc_S19042C13[0]), // expected_vtbl_contents
  &(vtt_S19042C13[0]), // expected_vtt_contents
  ABISELECT(1936,1152), // object size
  NSPAIRA(_ZTI9S19042C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19042C13),72, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19042C13),22, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19042C1  : virtual S19042C2 , S19043C10 , virtual S19042C11 , S19042C13 {
  __tsi64 s19042c1f0;
  int s19042c1f1;
  __tsi64 s19042c1f2[4];
  long s19042c1f3;
  long double s19042c1f4;
  __tsi64 s19042c1f5;
  int s19042c1f6;
  virtual  ~S19042C1(); // _ZN8S19042C1D2Ev
  S19042C1(); // tgen
};
//SIG(1 S19042C1) C1{ VBC2{ BC3{ BC4{ v1 Fp Fs FD} BC5{ v2 Fp[2] FD[10] Fp Fs Fp[2]} v3 Fi FC4 Fp} BC6{ m Fi Fc Fp FC7{}} VBC8{ VBC9{ BC4 BC5 BC3 vd v4 v5 v6 Fc Fi FL Fl FL Fp} BC4 vd Fs[4] Fi FD Fi Fp[5] FL} VBC10{ m Fi[2] Fs FC11{ vd v10 v11 Fi FU12{ m Fp} Fs:16 FC13{ v12 Fp[2] FD[10] Fp Fs Fp[2]} FC7}} BC5 vd Fp} BC10 VBC14{ vd v7 v8 Fi FU12 Fs:16 FC5 FC7} BC15{ VBC4 VBC8 VBC16{ VBC9 VBC8 BC3 FC17{ VBC18{ v13 Fp Fs FD} Fp FC13 Fp Fp}} VBC3 vd v9 Fp[8] FL} vd FL Fi FL[4] Fl FD FL Fi}


 S19042C1 ::~S19042C1(){ note_dtor("S19042C1", this);}
S19042C1 ::S19042C1(){ note_ctor("S19042C1", this);} // tgen

static void Test_S19042C1()
{
  extern Class_Descriptor cd_S19042C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(219,532)];
    init_test(&cd_S19042C1, buf);
    S19042C1 *dp, &lv = *(dp=new (buf) S19042C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3488,2124), "sizeof(S19042C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19042C1)");
    /*is_ambiguous_... S19042C2::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C4*)(S19042C3*)(S19042C2*), ABISELECT(464,296), "S19042C1");
    /*is_ambiguous_... S19042C2::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C5*)(S19042C3*)(S19042C2*), ABISELECT(512,320), "S19042C1");
    /*is_ambiguous_... S19042C2::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C3*)(S19042C2*), ABISELECT(464,296), "S19042C1");
    check_base_class_offset(lv, (S19252C4*)(S19042C2*), ABISELECT(808,500), "S19042C1");
    /*is_ambiguous_... S19042C9::S19042C4 */ AMB_check_base_class_offset(lv, (S19042C4*)(S19042C9*), ABISELECT(1216,748), "S19042C1");
    /*is_ambiguous_... S19042C9::S19042C5 */ AMB_check_base_class_offset(lv, (S19042C5*)(S19042C9*), ABISELECT(1264,772), "S19042C1");
    check_base_class_offset(lv, (S19042C4*)(S19042C3*)(S19042C9*), ABISELECT(1488,920), "S19042C1");
    check_base_class_offset(lv, (S19042C5*)(S19042C3*)(S19042C9*), ABISELECT(1536,944), "S19042C1");
    check_base_class_offset(lv, (S19042C3*)(S19042C9*), ABISELECT(1488,920), "S19042C1");
    check_base_class_offset(lv, (S19042C9*)(S19042C8*), ABISELECT(1216,748), "S19042C1");
    check_base_class_offset(lv, (S19042C9*)(S19042C14*), ABISELECT(1216,748), "S19042C1");
    /*is_ambiguous_... S19042C8::S19042C4 */ AMB_check_base_class_offset(lv, (S19042C4*)(S19042C8*), ABISELECT(1072,668), "S19042C1");
    check_base_class_offset(lv, (S19042C8*)(S19042C2*), ABISELECT(1072,668), "S19042C1");
    check_base_class_offset(lv, (S19042C8*)(S19042C13*), ABISELECT(1072,668), "S19042C1");
    check_base_class_offset(lv, (S19042C8*)(S19042C14*), ABISELECT(1072,668), "S19042C1");
    check_base_class_offset(lv, (S19043C10*)(S19042C2*), ABISELECT(1872,1156), "S19042C1");
    /*is_ambiguous_... S19042C2::S19042C5 */ AMB_check_base_class_offset(lv, (S19042C5*)(S19042C2*), ABISELECT(832,516), "S19042C1");
    check_base_class_offset(lv, (S19042C2*), ABISELECT(464,296), "S19042C1");
    /*is_ambiguous_... S19042C1::S19043C10 */ AMB_check_base_class_offset(lv, (S19043C10*), ABISELECT(80,44), "S19042C1");
    check_base_class_offset(lv, (S19042C11*), ABISELECT(2160,1336), "S19042C1");
    /*is_ambiguous_... S19042C13::S19042C4 */ AMB_check_base_class_offset(lv, (S19042C4*)(S19042C13*), ABISELECT(2432,1504), "S19042C1");
    /*is_ambiguous_... S19042C14::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C4*)(S19042C3*)(S19042C14*), ABISELECT(2480,1528), "S19042C1");
    /*is_ambiguous_... S19042C14::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C5*)(S19042C3*)(S19042C14*), ABISELECT(2528,1552), "S19042C1");
    /*is_ambiguous_... S19042C14::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C3*)(S19042C14*), ABISELECT(2480,1528), "S19042C1");
    check_base_class_offset(lv, (S19042C14*)(S19042C13*), ABISELECT(2480,1528), "S19042C1");
    /*is_ambiguous_... S19042C1::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C4*)(S19042C3*), ABISELECT(3136,1920), "S19042C1");
    /*is_ambiguous_... S19042C1::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C5*)(S19042C3*), ABISELECT(3184,1944), "S19042C1");
    /*is_ambiguous_... S19042C13::S19042C3 */ AMB_check_base_class_offset(lv, (S19042C3*)(S19042C13*), ABISELECT(3136,1920), "S19042C1");
    check_base_class_offset(lv, (S19042C13*), 0, "S19042C1");
    check_field_offset(lv, s19042c1f0, ABISELECT(368,224), "S19042C1.s19042c1f0");
    check_field_offset(lv, s19042c1f1, ABISELECT(376,232), "S19042C1.s19042c1f1");
    check_field_offset(lv, s19042c1f2, ABISELECT(384,236), "S19042C1.s19042c1f2");
    check_field_offset(lv, s19042c1f3, ABISELECT(416,268), "S19042C1.s19042c1f3");
    check_field_offset(lv, s19042c1f4, ABISELECT(432,272), "S19042C1.s19042c1f4");
    check_field_offset(lv, s19042c1f5, ABISELECT(448,284), "S19042C1.s19042c1f5");
    check_field_offset(lv, s19042c1f6, ABISELECT(456,292), "S19042C1.s19042c1f6");
    test_class_info(&lv, &cd_S19042C1);
    dp->~S19042C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19042C1(Test_S19042C1, "S19042C1", ABISELECT(3488,2124));

#else // __cplusplus

extern void _ZN8S19042C1C1Ev();
extern void _ZN8S19042C1D2Ev();
Name_Map name_map_S19042C1[] = {
  NSPAIR(_ZN8S19042C1C1Ev),
  NSPAIR(_ZN8S19042C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C3;
extern VTBL_ENTRY _ZTI8S19042C3[];
extern  VTBL_ENTRY _ZTV8S19042C3[];
extern Class_Descriptor cd_S19252C4;
extern VTBL_ENTRY _ZTI8S19252C4[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C3;
extern VTBL_ENTRY _ZTI8S19042C3[];
extern  VTBL_ENTRY _ZTV8S19042C3[];
extern Class_Descriptor cd_S19042C9;
extern VTBL_ENTRY _ZTI8S19042C9[];
extern  VTBL_ENTRY _ZTV8S19042C9[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C8;
extern VTBL_ENTRY _ZTI8S19042C8[];
extern  VTBL_ENTRY _ZTV8S19042C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19042C8[];
extern Class_Descriptor cd_S19043C10;
extern VTBL_ENTRY _ZTI9S19043C10[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C2;
extern VTBL_ENTRY _ZTI8S19042C2[];
extern  VTBL_ENTRY _ZTV8S19042C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19042C2[];
extern Class_Descriptor cd_S19043C10;
extern VTBL_ENTRY _ZTI9S19043C10[];
extern Class_Descriptor cd_S19042C11;
extern VTBL_ENTRY _ZTI9S19042C11[];
extern  VTBL_ENTRY _ZTV9S19042C11[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C3;
extern VTBL_ENTRY _ZTI8S19042C3[];
extern  VTBL_ENTRY _ZTV8S19042C3[];
extern Class_Descriptor cd_S19042C14;
extern VTBL_ENTRY _ZTI9S19042C14[];
extern  VTBL_ENTRY _ZTV9S19042C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19042C14[];
extern Class_Descriptor cd_S19042C4;
extern VTBL_ENTRY _ZTI8S19042C4[];
extern  VTBL_ENTRY _ZTV8S19042C4[];
extern Class_Descriptor cd_S19042C5;
extern VTBL_ENTRY _ZTI8S19042C5[];
extern  VTBL_ENTRY _ZTV8S19042C5[];
extern Class_Descriptor cd_S19042C3;
extern VTBL_ENTRY _ZTI8S19042C3[];
extern  VTBL_ENTRY _ZTV8S19042C3[];
extern Class_Descriptor cd_S19042C13;
extern VTBL_ENTRY _ZTI9S19042C13[];
extern  VTBL_ENTRY _ZTV9S19042C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19042C13[];
static Base_Class bases_S19042C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19042C4,    ABISELECT(464,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
    9, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19042C5,    ABISELECT(512,320), //bcp->offset
    26, //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
    10, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19042C3,    ABISELECT(464,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
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19252C4,    ABISELECT(808,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19042C4,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19042C5,    ABISELECT(1264,772), //bcp->offset
    55, //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19042C4,    ABISELECT(1488,920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19042C5,    ABISELECT(1536,944), //bcp->offset
    62, //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19042C3,    ABISELECT(1488,920), //bcp->offset
    58, //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
    9, //immediately_derived
  0, 0},
  {&cd_S19042C9,    ABISELECT(1216,748), //bcp->offset
    40, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19042C4,    ABISELECT(1072,668), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19042C8,    ABISELECT(1072,668), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19043C10,    ABISELECT(1872,1156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19042C5,    ABISELECT(832,516), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19042C2,    ABISELECT(464,296), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19043C10,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S19042C11,    ABISELECT(2160,1336), //bcp->offset
    65, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19042C4,    ABISELECT(2432,1504), //bcp->offset
    74, //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
    15, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19042C4,    ABISELECT(2480,1528), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19042C5,    ABISELECT(2528,1552), //bcp->offset
    90, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19042C3,    ABISELECT(2480,1528), //bcp->offset
    -1, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S19042C14,    ABISELECT(2480,1528), //bcp->offset
    78, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19042C4,    ABISELECT(3136,1920), //bcp->offset
    -1, //bcp->virtual_function_table_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
    24, //immediately_derived
  0, 0},
  {&cd_S19042C5,    ABISELECT(3184,1944), //bcp->offset
    100, //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
    21, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19042C3,    ABISELECT(3136,1920), //bcp->offset
    93, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19042C13,    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
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19042C1[];
extern void _ZN8S19042C1D1Ev();
extern void _ZN8S19042C1D0Ev();
extern void _ZN9S19042C132v9Ev();
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S19042C1D1Ev,_ZTv0_n36_N8S19042C1D1Ev)();
extern void ABISELECT(_ZThn464_N8S19042C1D1Ev,_ZThn296_N8S19042C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19042C1D0Ev,_ZTv0_n36_N8S19042C1D0Ev)();
extern void ABISELECT(_ZThn464_N8S19042C1D0Ev,_ZThn296_N8S19042C1D0Ev)() __attribute__((weak));
extern void _ZN8S19042C52v2Ev();
extern void _ZN8S19042C52v2Ev();
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n40_N8S19042C1D1Ev,_ZTv0_n20_N8S19042C1D1Ev)();
extern void ABISELECT(_ZThn1072_N8S19042C1D1Ev,_ZThn668_N8S19042C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19042C1D0Ev,_ZTv0_n20_N8S19042C1D0Ev)();
extern void ABISELECT(_ZThn1072_N8S19042C1D0Ev,_ZThn668_N8S19042C1D0Ev)() __attribute__((weak));
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19042C1D1Ev,_ZTv0_n16_N8S19042C1D1Ev)();
extern void ABISELECT(_ZThn1216_N8S19042C1D1Ev,_ZThn748_N8S19042C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19042C1D0Ev,_ZTv0_n16_N8S19042C1D0Ev)();
extern void ABISELECT(_ZThn1216_N8S19042C1D0Ev,_ZThn748_N8S19042C1D0Ev)() __attribute__((weak));
extern void _ZN8S19042C92v4Ev();
extern void _ZN8S19042C92v5Ev();
extern void _ZN8S19042C92v6Ev();
extern void _ZN8S19042C52v2Ev();
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
extern void _ZN8S19042C52v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S19042C1D1Ev,_ZTv0_n12_N8S19042C1D1Ev)();
extern void ABISELECT(_ZThn2160_N8S19042C1D1Ev,_ZThn1336_N8S19042C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19042C1D0Ev,_ZTv0_n12_N8S19042C1D0Ev)();
extern void ABISELECT(_ZThn2160_N8S19042C1D0Ev,_ZThn1336_N8S19042C1D0Ev)() __attribute__((weak));
extern void _ZN9S19042C112v7Ev();
extern void _ZN9S19042C112v8Ev();
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19042C1D1Ev,_ZTv0_n32_N8S19042C1D1Ev)();
extern void ABISELECT(_ZThn2480_N8S19042C1D1Ev,_ZThn1528_N8S19042C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19042C1D0Ev,_ZTv0_n32_N8S19042C1D0Ev)();
extern void ABISELECT(_ZThn2480_N8S19042C1D0Ev,_ZThn1528_N8S19042C1D0Ev)() __attribute__((weak));
extern void _ZN8S19042C52v2Ev();
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY vtc_S19042C1[] = {
  ABISELECT(2160,1336),
  ABISELECT(1872,1156),
  ABISELECT(464,296),
  ABISELECT(3136,1920),
  ABISELECT(2480,1528),
  ABISELECT(1216,748),
  ABISELECT(1072,668),
  ABISELECT(2432,1504),
  0,
  (VTBL_ENTRY)&(_ZTI8S19042C1[0]),
  (VTBL_ENTRY)&_ZN8S19042C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19042C1D0Ev,
  (VTBL_ENTRY)&_ZN9S19042C132v9Ev,
  ABISELECT(-464,-296),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(1408,860),
  ABISELECT(752,452),
  ABISELECT(608,372),
  ABISELECT(-464,-296),
  (VTBL_ENTRY)&(_ZTI8S19042C1[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19042C1D1Ev,_ZTv0_n36_N8S19042C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19042C1D0Ev,_ZTv0_n36_N8S19042C1D0Ev),
  ABISELECT(-512,-320),
  (VTBL_ENTRY)&(_ZTI8S19042C1[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
  ABISELECT(-832,-516),
  (VTBL_ENTRY)&(_ZTI8S19042C1[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
  ABISELECT(-1072,-668),
  0,
  ABISELECT(144,80),
  ABISELECT(-1072,-668),
  (VTBL_ENTRY)&(_ZTI8S19042C1[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19042C1D1Ev,_ZTv0_n20_N8S19042C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19042C1D0Ev,_ZTv0_n20_N8S19042C1D0Ev),
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-1216,-748),
  0,
  ABISELECT(-1216,-748),
  (VTBL_ENTRY)&(_ZTI8S19042C1[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19042C1D1Ev,_ZTv0_n16_N8S19042C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19042C1D0Ev,_ZTv0_n16_N8S19042C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19042C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v6Ev,
  ABISELECT(-1264,-772),
  (VTBL_ENTRY)&(_ZTI8S19042C1[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
  ABISELECT(-1488,-920),
  (VTBL_ENTRY)&(_ZTI8S19042C1[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
  ABISELECT(-1536,-944),
  (VTBL_ENTRY)&(_ZTI8S19042C1[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
  0,
  0,
  ABISELECT(-2160,-1336),
  ABISELECT(-2160,-1336),
  (VTBL_ENTRY)&(_ZTI8S19042C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19042C1D1Ev,_ZTv0_n12_N8S19042C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19042C1D0Ev,_ZTv0_n12_N8S19042C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19042C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19042C112v8Ev,
  0,
  ABISELECT(-2432,-1504),
  (VTBL_ENTRY)&(_ZTI8S19042C1[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  ABISELECT(-2480,-1528),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(-1408,-860),
  ABISELECT(-1264,-780),
  ABISELECT(-2480,-1528),
  (VTBL_ENTRY)&(_ZTI8S19042C1[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19042C1D1Ev,_ZTv0_n32_N8S19042C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19042C1D0Ev,_ZTv0_n32_N8S19042C1D0Ev),
  ABISELECT(-2528,-1552),
  (VTBL_ENTRY)&(_ZTI8S19042C1[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(-3136,-1920),
  (VTBL_ENTRY)&(_ZTI8S19042C1[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
  ABISELECT(-3184,-1944),
  (VTBL_ENTRY)&(_ZTI8S19042C1[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S19042C1[];
extern void _ZN9S19042C13D1Ev();
extern void _ZN9S19042C13D0Ev();
extern void _ZN9S19042C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19042C13__8S19042C1[] = {
  ABISELECT(3136,1920),
  ABISELECT(2480,1528),
  ABISELECT(1216,748),
  ABISELECT(1072,668),
  ABISELECT(2432,1504),
  0,
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN9S19042C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19042C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19042C132v9Ev,
};
extern void _ZN8S19042C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C4__9S19042C13__8S19042C1[] = {
  0,
  ABISELECT(-2432,-1504),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n40_N9S19042C13D1Ev,_ZTv0_n20_N9S19042C13D1Ev)();
extern void ABISELECT(_ZThn1072_N9S19042C13D1Ev,_ZThn668_N9S19042C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19042C13D0Ev,_ZTv0_n20_N9S19042C13D0Ev)();
extern void ABISELECT(_ZThn1072_N9S19042C13D0Ev,_ZThn668_N9S19042C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19042C8__9S19042C13__8S19042C1[] = {
  ABISELECT(-1072,-668),
  0,
  ABISELECT(144,80),
  ABISELECT(-1072,-668),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19042C13D1Ev,_ZTv0_n20_N9S19042C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19042C13D0Ev,_ZTv0_n20_N9S19042C13D0Ev),
};
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19042C13D1Ev,_ZTv0_n16_N9S19042C13D1Ev)();
extern void ABISELECT(_ZThn1216_N9S19042C13D1Ev,_ZThn748_N9S19042C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19042C13D0Ev,_ZTv0_n16_N9S19042C13D0Ev)();
extern void ABISELECT(_ZThn1216_N9S19042C13D0Ev,_ZThn748_N9S19042C13D0Ev)() __attribute__((weak));
extern void _ZN8S19042C92v4Ev();
extern void _ZN8S19042C92v5Ev();
extern void _ZN8S19042C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C9__9S19042C13__8S19042C1[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-1216,-748),
  0,
  ABISELECT(-1216,-748),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19042C13D1Ev,_ZTv0_n16_N9S19042C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19042C13D0Ev,_ZTv0_n16_N9S19042C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19042C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v6Ev,
};
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C58S19042C9__9S19042C13__8S19042C1[] = {
  ABISELECT(-1264,-772),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C38S19042C9__9S19042C13__8S19042C1[] = {
  ABISELECT(-1488,-920),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
};
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C58S19042C38S19042C9__A1__9S19042C13__8S19042C1[] = {
  ABISELECT(-1536,-944),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19042C13D1Ev,_ZTv0_n32_N9S19042C13D1Ev)();
extern void ABISELECT(_ZThn2480_N9S19042C13D1Ev,_ZThn1528_N9S19042C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19042C13D0Ev,_ZTv0_n32_N9S19042C13D0Ev)();
extern void ABISELECT(_ZThn2480_N9S19042C13D0Ev,_ZThn1528_N9S19042C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19042C14__9S19042C13__8S19042C1[] = {
  ABISELECT(-2480,-1528),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(-1408,-860),
  ABISELECT(-1264,-780),
  ABISELECT(-2480,-1528),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19042C13D1Ev,_ZTv0_n32_N9S19042C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19042C13D0Ev,_ZTv0_n32_N9S19042C13D0Ev),
};
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C58S19042C39S19042C14__A2__9S19042C13__8S19042C1[] = {
  ABISELECT(-2528,-1552),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C3__A2__9S19042C13__8S19042C1[] = {
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(-3136,-1920),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
};
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C58S19042C3__A3__9S19042C13__8S19042C1[] = {
  ABISELECT(-3184,-1944),
  (VTBL_ENTRY)&(_ZTI9S19042C13[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
extern void _ZN8S19042C2D1Ev();
extern void _ZN8S19042C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C2__8S19042C1[] = {
  ABISELECT(1408,860),
  ABISELECT(752,452),
  ABISELECT(608,372),
  0,
  (VTBL_ENTRY)&(_ZTI8S19042C2[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19042C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19042C2D0Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n40_N8S19042C2D1Ev,_ZTv0_n20_N8S19042C2D1Ev)();
extern void ABISELECT(_ZThn608_N8S19042C2D1Ev,_ZThn372_N8S19042C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19042C2D0Ev,_ZTv0_n20_N8S19042C2D0Ev)();
extern void ABISELECT(_ZThn608_N8S19042C2D0Ev,_ZThn372_N8S19042C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19042C8__8S19042C2__8S19042C1[] = {
  ABISELECT(-608,-372),
  0,
  ABISELECT(144,80),
  ABISELECT(-608,-372),
  (VTBL_ENTRY)&(_ZTI8S19042C2[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19042C2D1Ev,_ZTv0_n20_N8S19042C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19042C2D0Ev,_ZTv0_n20_N8S19042C2D0Ev),
};
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19042C2D1Ev,_ZTv0_n16_N8S19042C2D1Ev)();
extern void ABISELECT(_ZThn752_N8S19042C2D1Ev,_ZThn452_N8S19042C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19042C2D0Ev,_ZTv0_n16_N8S19042C2D0Ev)();
extern void ABISELECT(_ZThn752_N8S19042C2D0Ev,_ZThn452_N8S19042C2D0Ev)() __attribute__((weak));
extern void _ZN8S19042C92v4Ev();
extern void _ZN8S19042C92v5Ev();
extern void _ZN8S19042C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C9__8S19042C2__8S19042C1[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-752,-452),
  0,
  ABISELECT(-752,-452),
  (VTBL_ENTRY)&(_ZTI8S19042C2[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19042C2D1Ev,_ZTv0_n16_N8S19042C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19042C2D0Ev,_ZTv0_n16_N8S19042C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19042C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v6Ev,
};
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C58S19042C9__A1__8S19042C2__8S19042C1[] = {
  ABISELECT(-800,-476),
  (VTBL_ENTRY)&(_ZTI8S19042C2[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C38S19042C9__A1__8S19042C2__8S19042C1[] = {
  ABISELECT(-1024,-624),
  (VTBL_ENTRY)&(_ZTI8S19042C2[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
};
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C58S19042C38S19042C9__A2__8S19042C2__8S19042C1[] = {
  ABISELECT(-1072,-648),
  (VTBL_ENTRY)&(_ZTI8S19042C2[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C8D1Ev();
extern void _ZN8S19042C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C8__8S19042C1[] = {
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19042C8D0Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19042C8D1Ev,_ZTv0_n16_N8S19042C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19042C8D1Ev,_ZThn80_N8S19042C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19042C8D0Ev,_ZTv0_n16_N8S19042C8D0Ev)();
extern void ABISELECT(_ZThn144_N8S19042C8D0Ev,_ZThn80_N8S19042C8D0Ev)() __attribute__((weak));
extern void _ZN8S19042C92v4Ev();
extern void _ZN8S19042C92v5Ev();
extern void _ZN8S19042C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C9__8S19042C8__8S19042C1[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-144,-80),
  0,
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19042C8D1Ev,_ZTv0_n16_N8S19042C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19042C8D0Ev,_ZTv0_n16_N8S19042C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19042C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v6Ev,
};
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C58S19042C9__8S19042C8__8S19042C1[] = {
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C38S19042C9__8S19042C8__8S19042C1[] = {
  ABISELECT(-416,-252),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
};
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C58S19042C38S19042C9__A1__8S19042C8__8S19042C1[] = {
  ABISELECT(-464,-276),
  (VTBL_ENTRY)&(_ZTI8S19042C8[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
extern void _ZN9S19042C14D1Ev();
extern void _ZN9S19042C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19042C14__8S19042C1[] = {
  ABISELECT(-1408,-860),
  ABISELECT(-1264,-780),
  0,
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19042C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19042C14D0Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19042C14D1Ev,_ZTv0_n16_N9S19042C14D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19042C14D0Ev,_ZTv0_n16_N9S19042C14D0Ev)();
extern void _ZN8S19042C92v4Ev();
extern void _ZN8S19042C92v5Ev();
extern void _ZN8S19042C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C9__9S19042C14__8S19042C1[] = {
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(1264,780),
  0,
  ABISELECT(1264,780),
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19042C14D1Ev,_ZTv0_n16_N9S19042C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19042C14D0Ev,_ZTv0_n16_N9S19042C14D0Ev),
  (VTBL_ENTRY)&_ZN8S19042C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19042C92v6Ev,
};
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C58S19042C9__9S19042C14__8S19042C1[] = {
  ABISELECT(1216,756),
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void _ZN8S19042C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C38S19042C9__9S19042C14__8S19042C1[] = {
  ABISELECT(992,608),
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19042C32v3Ev,
};
extern void _ZN8S19042C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19042C58S19042C38S19042C9__A1__9S19042C14__8S19042C1[] = {
  ABISELECT(944,584),
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C52v2Ev,
};
extern void _ZN8S19042C42v1Ev();
extern void ABISELECT(_ZTv0_n40_N9S19042C14D1Ev,_ZTv0_n20_N9S19042C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19042C14D0Ev,_ZTv0_n20_N9S19042C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19042C8__9S19042C14__8S19042C1[] = {
  ABISELECT(1408,860),
  0,
  ABISELECT(144,80),
  ABISELECT(1408,860),
  (VTBL_ENTRY)&(_ZTI9S19042C14[0]),
  (VTBL_ENTRY)&_ZN8S19042C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19042C14D1Ev,_ZTv0_n20_N9S19042C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19042C14D0Ev,_ZTv0_n20_N9S19042C14D0Ev),
};
static  VTT_ENTRY vtt_S19042C1[] = {
  {&(_ZTV8S19042C1[10]),  10,103},
  {&(_tg__ZTV9S19042C13__8S19042C1[7]),  7,10},
  {&(_tg__ZTV8S19042C4__9S19042C13__8S19042C1[3]),  3,4},
  {&(_tg__ZTV8S19042C8__9S19042C13__8S19042C1[5]),  5,8},
  {&(_tg__ZTV8S19042C9__9S19042C13__8S19042C1[9]),  9,15},
  {&(_tg__ZTV8S19042C58S19042C9__9S19042C13__8S19042C1[2]),  2,3},
  {&(_tg__ZTV8S19042C38S19042C9__9S19042C13__8S19042C1[2]),  2,4},
  {&(_tg__ZTV8S19042C58S19042C38S19042C9__A1__9S19042C13__8S19042C1[2]),  2,3},
  {&(_tg__ZTV9S19042C14__9S19042C13__8S19042C1[8]),  8,12},
  {&(_tg__ZTV8S19042C58S19042C39S19042C14__A2__9S19042C13__8S19042C1[2]),  2,3},
  {&(_tg__ZTV8S19042C3__A2__9S19042C13__8S19042C1[5]),  5,7},
  {&(_tg__ZTV8S19042C58S19042C3__A3__9S19042C13__8S19042C1[2]),  2,3},
  {&(_ZTV8S19042C1[22]),  22,103},
  {&(_ZTV8S19042C1[28]),  28,103},
  {&(_ZTV8S19042C1[37]),  37,103},
  {&(_ZTV8S19042C1[49]),  49,103},
  {&(_ZTV8S19042C1[57]),  57,103},
  {&(_ZTV8S19042C1[60]),  60,103},
  {&(_ZTV8S19042C1[64]),  64,103},
  {&(_ZTV8S19042C1[31]),  31,103},
  {&(_ZTV8S19042C1[70]),  70,103},
  {&(_ZTV8S19042C1[77]),  77,103},
  {&(_ZTV8S19042C1[86]),  86,103},
  {&(_ZTV8S19042C1[92]),  92,103},
  {&(_ZTV8S19042C1[98]),  98,103},
  {&(_ZTV8S19042C1[102]),  102,103},
  {&(_tg__ZTV8S19042C2__8S19042C1[5]),  5,9},
  {&(_tg__ZTV8S19042C8__8S19042C2__8S19042C1[5]),  5,8},
  {&(_tg__ZTV8S19042C9__8S19042C2__8S19042C1[9]),  9,15},
  {&(_tg__ZTV8S19042C58S19042C9__A1__8S19042C2__8S19042C1[2]),  2,3},
  {&(_tg__ZTV8S19042C38S19042C9__A1__8S19042C2__8S19042C1[2]),  2,4},
  {&(_tg__ZTV8S19042C58S19042C38S19042C9__A2__8S19042C2__8S19042C1[2]),  2,3},
  {&(_tg__ZTV8S19042C8__8S19042C1[3]),  3,6},
  {&(_tg__ZTV8S19042C9__8S19042C8__8S19042C1[9]),  9,15},
  {&(_tg__ZTV8S19042C58S19042C9__8S19042C8__8S19042C1[2]),  2,3},
  {&(_tg__ZTV8S19042C38S19042C9__8S19042C8__8S19042C1[2]),  2,4},
  {&(_tg__ZTV8S19042C58S19042C38S19042C9__A1__8S19042C8__8S19042C1[2]),  2,3},
  {&(_tg__ZTV9S19042C14__8S19042C1[4]),  4,8},
  {&(_tg__ZTV8S19042C9__9S19042C14__8S19042C1[9]),  9,15},
  {&(_tg__ZTV8S19042C58S19042C9__9S19042C14__8S19042C1[2]),  2,3},
  {&(_tg__ZTV8S19042C38S19042C9__9S19042C14__8S19042C1[2]),  2,4},
  {&(_tg__ZTV8S19042C58S19042C38S19042C9__A1__9S19042C14__8S19042C1[2]),  2,3},
  {&(_tg__ZTV8S19042C8__9S19042C14__8S19042C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S19042C1[];
extern  VTBL_ENTRY _ZTV8S19042C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19042C1[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19042C8D0Ev,_ZTv0_n16_N8S19042C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19042C8D0Ev,_ZThn80_N8S19042C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19042C8D1Ev,_ZTv0_n16_N8S19042C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19042C8D1Ev,_ZThn80_N8S19042C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19042C2D0Ev,_ZTv0_n16_N8S19042C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S19042C2D0Ev,_ZThn452_N8S19042C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19042C2D1Ev,_ZTv0_n16_N8S19042C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S19042C2D1Ev,_ZThn452_N8S19042C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19042C2D0Ev,_ZTv0_n20_N8S19042C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19042C2D0Ev,_ZThn372_N8S19042C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19042C2D1Ev,_ZTv0_n20_N8S19042C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19042C2D1Ev,_ZThn372_N8S19042C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19042C13D0Ev,_ZTv0_n32_N9S19042C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2480_N9S19042C13D0Ev,_ZThn1528_N9S19042C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19042C13D1Ev,_ZTv0_n32_N9S19042C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2480_N9S19042C13D1Ev,_ZThn1528_N9S19042C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19042C13D0Ev,_ZTv0_n16_N9S19042C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1216_N9S19042C13D0Ev,_ZThn748_N9S19042C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19042C13D1Ev,_ZTv0_n16_N9S19042C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1216_N9S19042C13D1Ev,_ZThn748_N9S19042C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19042C13D0Ev,_ZTv0_n20_N9S19042C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1072_N9S19042C13D0Ev,_ZThn668_N9S19042C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19042C13D1Ev,_ZTv0_n20_N9S19042C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1072_N9S19042C13D1Ev,_ZThn668_N9S19042C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19042C1D0Ev,_ZTv0_n32_N8S19042C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2480_N8S19042C1D0Ev,_ZThn1528_N8S19042C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19042C1D1Ev,_ZTv0_n32_N8S19042C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2480_N8S19042C1D1Ev,_ZThn1528_N8S19042C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19042C1D0Ev,_ZTv0_n12_N8S19042C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S19042C1D0Ev,_ZThn1336_N8S19042C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19042C1D1Ev,_ZTv0_n12_N8S19042C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S19042C1D1Ev,_ZThn1336_N8S19042C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19042C1D0Ev,_ZTv0_n16_N8S19042C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1216_N8S19042C1D0Ev,_ZThn748_N8S19042C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19042C1D1Ev,_ZTv0_n16_N8S19042C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1216_N8S19042C1D1Ev,_ZThn748_N8S19042C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19042C1D0Ev,_ZTv0_n20_N8S19042C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1072_N8S19042C1D0Ev,_ZThn668_N8S19042C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19042C1D1Ev,_ZTv0_n20_N8S19042C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1072_N8S19042C1D1Ev,_ZThn668_N8S19042C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19042C1D0Ev,_ZTv0_n36_N8S19042C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S19042C1D0Ev,_ZThn296_N8S19042C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19042C1D1Ev,_ZTv0_n36_N8S19042C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S19042C1D1Ev,_ZThn296_N8S19042C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19042C1 = {  "S19042C1", // class name
  bases_S19042C1, 26,
  &(vtc_S19042C1[0]), // expected_vtbl_contents
  &(vtt_S19042C1[0]), // expected_vtt_contents
  ABISELECT(3488,2124), // object size
  NSPAIRA(_ZTI8S19042C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19042C1),103, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19042C1),43, //virtual table table var
  23, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7056C2  {
  int s7056c2f0;
  __tsi64 s7056c2f1;
  void *s7056c2f2[4];
  int s7056c2f3[2];
  void *s7056c2f4;
  ::S1566C14_nt s7056c2f5;
  void *s7056c2f6[2];
  virtual  ~S7056C2(); // _ZN7S7056C2D1Ev
  virtual void  v6(); // _ZN7S7056C22v6Ev
  virtual void  v7(); // _ZN7S7056C22v7Ev
  virtual void  v8(); // _ZN7S7056C22v8Ev
  virtual void  v9(); // _ZN7S7056C22v9Ev
  virtual void  v10(); // _ZN7S7056C23v10Ev
  virtual void  v11(); // _ZN7S7056C23v11Ev
  virtual void  v12(); // _ZN7S7056C23v12Ev
  virtual void  v13(); // _ZN7S7056C23v13Ev
  virtual void  v14(); // _ZN7S7056C23v14Ev
  virtual void  v15(); // _ZN7S7056C23v15Ev
  virtual void  v16(); // _ZN7S7056C23v16Ev
  virtual void  v17(); // _ZN7S7056C23v17Ev
  virtual void  v18(); // _ZN7S7056C23v18Ev
  virtual void  v19(); // _ZN7S7056C23v19Ev
  virtual void  v20(); // _ZN7S7056C23v20Ev
  virtual void  v21(); // _ZN7S7056C23v21Ev
  virtual void  v22(); // _ZN7S7056C23v22Ev
  virtual void  v23(); // _ZN7S7056C23v23Ev
  virtual void  v24(); // _ZN7S7056C23v24Ev
  virtual void  v25(); // _ZN7S7056C23v25Ev
  virtual void  v26(); // _ZN7S7056C23v26Ev
  virtual void  v27(); // _ZN7S7056C23v27Ev
  virtual void  v28(); // _ZN7S7056C23v28Ev
  virtual void  v29(); // _ZN7S7056C23v29Ev
  virtual void  v30(); // _ZN7S7056C23v30Ev
  virtual void  v31(); // _ZN7S7056C23v31Ev
  virtual void  v32(); // _ZN7S7056C23v32Ev
  virtual void  v33(); // _ZN7S7056C23v33Ev
  virtual void  v34(); // _ZN7S7056C23v34Ev
  virtual void  v35(); // _ZN7S7056C23v35Ev
  virtual void  v36(); // _ZN7S7056C23v36Ev
  virtual void  v37(); // _ZN7S7056C23v37Ev
  virtual void  v38(); // _ZN7S7056C23v38Ev
  virtual void  v39(); // _ZN7S7056C23v39Ev
  virtual void  v40(); // _ZN7S7056C23v40Ev
  virtual void  v41(); // _ZN7S7056C23v41Ev
  virtual void  v42(); // _ZN7S7056C23v42Ev
  virtual void  v43(); // _ZN7S7056C23v43Ev
  virtual void  v44(); // _ZN7S7056C23v44Ev
  virtual void  v45(); // _ZN7S7056C23v45Ev
  virtual void  v46(); // _ZN7S7056C23v46Ev
  virtual void  v47(); // _ZN7S7056C23v47Ev
  virtual void  v48(); // _ZN7S7056C23v48Ev
  virtual void  v49(); // _ZN7S7056C23v49Ev
  virtual void  v50(); // _ZN7S7056C23v50Ev
  virtual void  v51(); // _ZN7S7056C23v51Ev
  virtual void  v52(); // _ZN7S7056C23v52Ev
  virtual void  v53(); // _ZN7S7056C23v53Ev
  virtual void  v54(); // _ZN7S7056C23v54Ev
  virtual void  v55(); // _ZN7S7056C23v55Ev
  virtual void  v56(); // _ZN7S7056C23v56Ev
  virtual void  v57(); // _ZN7S7056C23v57Ev
  virtual void  v58(); // _ZN7S7056C23v58Ev
  virtual void  v59(); // _ZN7S7056C23v59Ev
  virtual void  v60(); // _ZN7S7056C23v60Ev
  virtual void  v61(); // _ZN7S7056C23v61Ev
  virtual void  v62(); // _ZN7S7056C23v62Ev
  virtual void  v63(); // _ZN7S7056C23v63Ev
  virtual void  v64(); // _ZN7S7056C23v64Ev
  virtual void  v65(); // _ZN7S7056C23v65Ev
  virtual void  v66(); // _ZN7S7056C23v66Ev
  virtual void  v67(); // _ZN7S7056C23v67Ev
  virtual void  v68(); // _ZN7S7056C23v68Ev
  virtual void  v69(); // _ZN7S7056C23v69Ev
  S7056C2(); // tgen
};
//SIG(-1 S7056C2) 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]}


 S7056C2 ::~S7056C2(){ note_dtor("S7056C2", this);}
void  S7056C2 ::v6(){vfunc_called(this, "_ZN7S7056C22v6Ev");}
void  S7056C2 ::v7(){vfunc_called(this, "_ZN7S7056C22v7Ev");}
void  S7056C2 ::v8(){vfunc_called(this, "_ZN7S7056C22v8Ev");}
void  S7056C2 ::v9(){vfunc_called(this, "_ZN7S7056C22v9Ev");}
void  S7056C2 ::v10(){vfunc_called(this, "_ZN7S7056C23v10Ev");}
void  S7056C2 ::v11(){vfunc_called(this, "_ZN7S7056C23v11Ev");}
void  S7056C2 ::v12(){vfunc_called(this, "_ZN7S7056C23v12Ev");}
void  S7056C2 ::v13(){vfunc_called(this, "_ZN7S7056C23v13Ev");}
void  S7056C2 ::v14(){vfunc_called(this, "_ZN7S7056C23v14Ev");}
void  S7056C2 ::v15(){vfunc_called(this, "_ZN7S7056C23v15Ev");}
void  S7056C2 ::v16(){vfunc_called(this, "_ZN7S7056C23v16Ev");}
void  S7056C2 ::v17(){vfunc_called(this, "_ZN7S7056C23v17Ev");}
void  S7056C2 ::v18(){vfunc_called(this, "_ZN7S7056C23v18Ev");}
void  S7056C2 ::v19(){vfunc_called(this, "_ZN7S7056C23v19Ev");}
void  S7056C2 ::v20(){vfunc_called(this, "_ZN7S7056C23v20Ev");}
void  S7056C2 ::v21(){vfunc_called(this, "_ZN7S7056C23v21Ev");}
void  S7056C2 ::v22(){vfunc_called(this, "_ZN7S7056C23v22Ev");}
void  S7056C2 ::v23(){vfunc_called(this, "_ZN7S7056C23v23Ev");}
void  S7056C2 ::v24(){vfunc_called(this, "_ZN7S7056C23v24Ev");}
void  S7056C2 ::v25(){vfunc_called(this, "_ZN7S7056C23v25Ev");}
void  S7056C2 ::v26(){vfunc_called(this, "_ZN7S7056C23v26Ev");}
void  S7056C2 ::v27(){vfunc_called(this, "_ZN7S7056C23v27Ev");}
void  S7056C2 ::v28(){vfunc_called(this, "_ZN7S7056C23v28Ev");}
void  S7056C2 ::v29(){vfunc_called(this, "_ZN7S7056C23v29Ev");}
void  S7056C2 ::v30(){vfunc_called(this, "_ZN7S7056C23v30Ev");}
void  S7056C2 ::v31(){vfunc_called(this, "_ZN7S7056C23v31Ev");}
void  S7056C2 ::v32(){vfunc_called(this, "_ZN7S7056C23v32Ev");}
void  S7056C2 ::v33(){vfunc_called(this, "_ZN7S7056C23v33Ev");}
void  S7056C2 ::v34(){vfunc_called(this, "_ZN7S7056C23v34Ev");}
void  S7056C2 ::v35(){vfunc_called(this, "_ZN7S7056C23v35Ev");}
void  S7056C2 ::v36(){vfunc_called(this, "_ZN7S7056C23v36Ev");}
void  S7056C2 ::v37(){vfunc_called(this, "_ZN7S7056C23v37Ev");}
void  S7056C2 ::v38(){vfunc_called(this, "_ZN7S7056C23v38Ev");}
void  S7056C2 ::v39(){vfunc_called(this, "_ZN7S7056C23v39Ev");}
void  S7056C2 ::v40(){vfunc_called(this, "_ZN7S7056C23v40Ev");}
void  S7056C2 ::v41(){vfunc_called(this, "_ZN7S7056C23v41Ev");}
void  S7056C2 ::v42(){vfunc_called(this, "_ZN7S7056C23v42Ev");}
void  S7056C2 ::v43(){vfunc_called(this, "_ZN7S7056C23v43Ev");}
void  S7056C2 ::v44(){vfunc_called(this, "_ZN7S7056C23v44Ev");}
void  S7056C2 ::v45(){vfunc_called(this, "_ZN7S7056C23v45Ev");}
void  S7056C2 ::v46(){vfunc_called(this, "_ZN7S7056C23v46Ev");}
void  S7056C2 ::v47(){vfunc_called(this, "_ZN7S7056C23v47Ev");}
void  S7056C2 ::v48(){vfunc_called(this, "_ZN7S7056C23v48Ev");}
void  S7056C2 ::v49(){vfunc_called(this, "_ZN7S7056C23v49Ev");}
void  S7056C2 ::v50(){vfunc_called(this, "_ZN7S7056C23v50Ev");}
void  S7056C2 ::v51(){vfunc_called(this, "_ZN7S7056C23v51Ev");}
void  S7056C2 ::v52(){vfunc_called(this, "_ZN7S7056C23v52Ev");}
void  S7056C2 ::v53(){vfunc_called(this, "_ZN7S7056C23v53Ev");}
void  S7056C2 ::v54(){vfunc_called(this, "_ZN7S7056C23v54Ev");}
void  S7056C2 ::v55(){vfunc_called(this, "_ZN7S7056C23v55Ev");}
void  S7056C2 ::v56(){vfunc_called(this, "_ZN7S7056C23v56Ev");}
void  S7056C2 ::v57(){vfunc_called(this, "_ZN7S7056C23v57Ev");}
void  S7056C2 ::v58(){vfunc_called(this, "_ZN7S7056C23v58Ev");}
void  S7056C2 ::v59(){vfunc_called(this, "_ZN7S7056C23v59Ev");}
void  S7056C2 ::v60(){vfunc_called(this, "_ZN7S7056C23v60Ev");}
void  S7056C2 ::v61(){vfunc_called(this, "_ZN7S7056C23v61Ev");}
void  S7056C2 ::v62(){vfunc_called(this, "_ZN7S7056C23v62Ev");}
void  S7056C2 ::v63(){vfunc_called(this, "_ZN7S7056C23v63Ev");}
void  S7056C2 ::v64(){vfunc_called(this, "_ZN7S7056C23v64Ev");}
void  S7056C2 ::v65(){vfunc_called(this, "_ZN7S7056C23v65Ev");}
void  S7056C2 ::v66(){vfunc_called(this, "_ZN7S7056C23v66Ev");}
void  S7056C2 ::v67(){vfunc_called(this, "_ZN7S7056C23v67Ev");}
void  S7056C2 ::v68(){vfunc_called(this, "_ZN7S7056C23v68Ev");}
void  S7056C2 ::v69(){vfunc_called(this, "_ZN7S7056C23v69Ev");}
S7056C2 ::S7056C2(){ note_ctor("S7056C2", this);} // tgen

static void Test_S7056C2()
{
  extern Class_Descriptor cd_S7056C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S7056C2, buf);
    S7056C2 *dp, &lv = *(dp=new (buf) S7056C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S7056C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7056C2)");
    check_field_offset(lv, s7056c2f0, ABISELECT(8,4), "S7056C2.s7056c2f0");
    check_field_offset(lv, s7056c2f1, ABISELECT(16,8), "S7056C2.s7056c2f1");
    check_field_offset(lv, s7056c2f2, ABISELECT(24,16), "S7056C2.s7056c2f2");
    check_field_offset(lv, s7056c2f3, ABISELECT(56,32), "S7056C2.s7056c2f3");
    check_field_offset(lv, s7056c2f4, ABISELECT(64,40), "S7056C2.s7056c2f4");
    check_field_offset(lv, s7056c2f5, ABISELECT(72,44), "S7056C2.s7056c2f5");
    check_field_offset(lv, s7056c2f6, ABISELECT(80,52), "S7056C2.s7056c2f6");
    test_class_info(&lv, &cd_S7056C2);
    dp->~S7056C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7056C2(Test_S7056C2, "S7056C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S7056C2C1Ev();
extern void _ZN7S7056C2D1Ev();
Name_Map name_map_S7056C2[] = {
  NSPAIR(_ZN7S7056C2C1Ev),
  NSPAIR(_ZN7S7056C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7056C2[];
extern void _ZN7S7056C2D1Ev();
extern void _ZN7S7056C2D0Ev();
extern void _ZN7S7056C22v6Ev();
extern void _ZN7S7056C22v7Ev();
extern void _ZN7S7056C22v8Ev();
extern void _ZN7S7056C22v9Ev();
extern void _ZN7S7056C23v10Ev();
extern void _ZN7S7056C23v11Ev();
extern void _ZN7S7056C23v12Ev();
extern void _ZN7S7056C23v13Ev();
extern void _ZN7S7056C23v14Ev();
extern void _ZN7S7056C23v15Ev();
extern void _ZN7S7056C23v16Ev();
extern void _ZN7S7056C23v17Ev();
extern void _ZN7S7056C23v18Ev();
extern void _ZN7S7056C23v19Ev();
extern void _ZN7S7056C23v20Ev();
extern void _ZN7S7056C23v21Ev();
extern void _ZN7S7056C23v22Ev();
extern void _ZN7S7056C23v23Ev();
extern void _ZN7S7056C23v24Ev();
extern void _ZN7S7056C23v25Ev();
extern void _ZN7S7056C23v26Ev();
extern void _ZN7S7056C23v27Ev();
extern void _ZN7S7056C23v28Ev();
extern void _ZN7S7056C23v29Ev();
extern void _ZN7S7056C23v30Ev();
extern void _ZN7S7056C23v31Ev();
extern void _ZN7S7056C23v32Ev();
extern void _ZN7S7056C23v33Ev();
extern void _ZN7S7056C23v34Ev();
extern void _ZN7S7056C23v35Ev();
extern void _ZN7S7056C23v36Ev();
extern void _ZN7S7056C23v37Ev();
extern void _ZN7S7056C23v38Ev();
extern void _ZN7S7056C23v39Ev();
extern void _ZN7S7056C23v40Ev();
extern void _ZN7S7056C23v41Ev();
extern void _ZN7S7056C23v42Ev();
extern void _ZN7S7056C23v43Ev();
extern void _ZN7S7056C23v44Ev();
extern void _ZN7S7056C23v45Ev();
extern void _ZN7S7056C23v46Ev();
extern void _ZN7S7056C23v47Ev();
extern void _ZN7S7056C23v48Ev();
extern void _ZN7S7056C23v49Ev();
extern void _ZN7S7056C23v50Ev();
extern void _ZN7S7056C23v51Ev();
extern void _ZN7S7056C23v52Ev();
extern void _ZN7S7056C23v53Ev();
extern void _ZN7S7056C23v54Ev();
extern void _ZN7S7056C23v55Ev();
extern void _ZN7S7056C23v56Ev();
extern void _ZN7S7056C23v57Ev();
extern void _ZN7S7056C23v58Ev();
extern void _ZN7S7056C23v59Ev();
extern void _ZN7S7056C23v60Ev();
extern void _ZN7S7056C23v61Ev();
extern void _ZN7S7056C23v62Ev();
extern void _ZN7S7056C23v63Ev();
extern void _ZN7S7056C23v64Ev();
extern void _ZN7S7056C23v65Ev();
extern void _ZN7S7056C23v66Ev();
extern void _ZN7S7056C23v67Ev();
extern void _ZN7S7056C23v68Ev();
extern void _ZN7S7056C23v69Ev();
static  VTBL_ENTRY vtc_S7056C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7056C2[0]),
  (VTBL_ENTRY)&_ZN7S7056C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7056C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7056C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7056C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7056C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7056C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v27Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v33Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v34Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v35Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v36Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v37Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v38Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v39Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v40Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v41Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v42Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v43Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v44Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v50Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v51Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v52Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v53Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v54Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v55Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v56Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v57Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v58Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v59Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v60Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v61Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v62Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v63Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v64Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v65Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v66Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v67Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v68Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v69Ev,
};
extern VTBL_ENTRY _ZTI7S7056C2[];
extern  VTBL_ENTRY _ZTV7S7056C2[];
Class_Descriptor cd_S7056C2 = {  "S7056C2", // class name
  0,0,//no base classes
  &(vtc_S7056C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S7056C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7056C2),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  S7056C1  : S7056C2 {
  ::S1316C6_nt s7056c1f0;
  virtual  ~S7056C1(); // _ZN7S7056C1D1Ev
  virtual void  v1(); // _ZN7S7056C12v1Ev
  virtual void  v2(); // _ZN7S7056C12v2Ev
  virtual void  v3(); // _ZN7S7056C12v3Ev
  virtual void  v4(); // _ZN7S7056C12v4Ev
  virtual void  v5(); // _ZN7S7056C12v5Ev
  S7056C1(); // tgen
};
//SIG(1 S7056C1) 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{ BC6{ m Fp Fi[2]}} Fp}}


 S7056C1 ::~S7056C1(){ note_dtor("S7056C1", this);}
void  S7056C1 ::v1(){vfunc_called(this, "_ZN7S7056C12v1Ev");}
void  S7056C1 ::v2(){vfunc_called(this, "_ZN7S7056C12v2Ev");}
void  S7056C1 ::v3(){vfunc_called(this, "_ZN7S7056C12v3Ev");}
void  S7056C1 ::v4(){vfunc_called(this, "_ZN7S7056C12v4Ev");}
void  S7056C1 ::v5(){vfunc_called(this, "_ZN7S7056C12v5Ev");}
S7056C1 ::S7056C1(){ note_ctor("S7056C1", this);} // tgen

static void Test_S7056C1()
{
  extern Class_Descriptor cd_S7056C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S7056C1, buf);
    S7056C1 *dp, &lv = *(dp=new (buf) S7056C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S7056C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7056C1)");
    check_base_class_offset(lv, (S7056C2*), 0, "S7056C1");
    check_field_offset(lv, s7056c1f0, ABISELECT(96,60), "S7056C1.s7056c1f0");
    test_class_info(&lv, &cd_S7056C1);
    dp->~S7056C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7056C1(Test_S7056C1, "S7056C1", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S7056C1C1Ev();
extern void _ZN7S7056C1D1Ev();
Name_Map name_map_S7056C1[] = {
  NSPAIR(_ZN7S7056C1C1Ev),
  NSPAIR(_ZN7S7056C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7056C2;
extern VTBL_ENTRY _ZTI7S7056C2[];
extern  VTBL_ENTRY _ZTV7S7056C2[];
static Base_Class bases_S7056C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7056C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S7056C1[];
extern void _ZN7S7056C1D1Ev();
extern void _ZN7S7056C1D0Ev();
extern void _ZN7S7056C22v6Ev();
extern void _ZN7S7056C22v7Ev();
extern void _ZN7S7056C22v8Ev();
extern void _ZN7S7056C22v9Ev();
extern void _ZN7S7056C23v10Ev();
extern void _ZN7S7056C23v11Ev();
extern void _ZN7S7056C23v12Ev();
extern void _ZN7S7056C23v13Ev();
extern void _ZN7S7056C23v14Ev();
extern void _ZN7S7056C23v15Ev();
extern void _ZN7S7056C23v16Ev();
extern void _ZN7S7056C23v17Ev();
extern void _ZN7S7056C23v18Ev();
extern void _ZN7S7056C23v19Ev();
extern void _ZN7S7056C23v20Ev();
extern void _ZN7S7056C23v21Ev();
extern void _ZN7S7056C23v22Ev();
extern void _ZN7S7056C23v23Ev();
extern void _ZN7S7056C23v24Ev();
extern void _ZN7S7056C23v25Ev();
extern void _ZN7S7056C23v26Ev();
extern void _ZN7S7056C23v27Ev();
extern void _ZN7S7056C23v28Ev();
extern void _ZN7S7056C23v29Ev();
extern void _ZN7S7056C23v30Ev();
extern void _ZN7S7056C23v31Ev();
extern void _ZN7S7056C23v32Ev();
extern void _ZN7S7056C23v33Ev();
extern void _ZN7S7056C23v34Ev();
extern void _ZN7S7056C23v35Ev();
extern void _ZN7S7056C23v36Ev();
extern void _ZN7S7056C23v37Ev();
extern void _ZN7S7056C23v38Ev();
extern void _ZN7S7056C23v39Ev();
extern void _ZN7S7056C23v40Ev();
extern void _ZN7S7056C23v41Ev();
extern void _ZN7S7056C23v42Ev();
extern void _ZN7S7056C23v43Ev();
extern void _ZN7S7056C23v44Ev();
extern void _ZN7S7056C23v45Ev();
extern void _ZN7S7056C23v46Ev();
extern void _ZN7S7056C23v47Ev();
extern void _ZN7S7056C23v48Ev();
extern void _ZN7S7056C23v49Ev();
extern void _ZN7S7056C23v50Ev();
extern void _ZN7S7056C23v51Ev();
extern void _ZN7S7056C23v52Ev();
extern void _ZN7S7056C23v53Ev();
extern void _ZN7S7056C23v54Ev();
extern void _ZN7S7056C23v55Ev();
extern void _ZN7S7056C23v56Ev();
extern void _ZN7S7056C23v57Ev();
extern void _ZN7S7056C23v58Ev();
extern void _ZN7S7056C23v59Ev();
extern void _ZN7S7056C23v60Ev();
extern void _ZN7S7056C23v61Ev();
extern void _ZN7S7056C23v62Ev();
extern void _ZN7S7056C23v63Ev();
extern void _ZN7S7056C23v64Ev();
extern void _ZN7S7056C23v65Ev();
extern void _ZN7S7056C23v66Ev();
extern void _ZN7S7056C23v67Ev();
extern void _ZN7S7056C23v68Ev();
extern void _ZN7S7056C23v69Ev();
extern void _ZN7S7056C12v1Ev();
extern void _ZN7S7056C12v2Ev();
extern void _ZN7S7056C12v3Ev();
extern void _ZN7S7056C12v4Ev();
extern void _ZN7S7056C12v5Ev();
static  VTBL_ENTRY vtc_S7056C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7056C1[0]),
  (VTBL_ENTRY)&_ZN7S7056C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7056C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7056C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7056C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7056C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7056C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v27Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v33Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v34Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v35Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v36Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v37Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v38Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v39Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v40Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v41Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v42Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v43Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v44Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v50Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v51Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v52Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v53Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v54Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v55Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v56Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v57Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v58Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v59Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v60Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v61Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v62Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v63Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v64Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v65Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v66Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v67Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v68Ev,
  (VTBL_ENTRY)&_ZN7S7056C23v69Ev,
  (VTBL_ENTRY)&_ZN7S7056C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7056C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7056C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7056C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7056C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7056C1[];
extern  VTBL_ENTRY _ZTV7S7056C1[];
Class_Descriptor cd_S7056C1 = {  "S7056C1", // class name
  bases_S7056C1, 1,
  &(vtc_S7056C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S7056C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7056C1),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  S5798C9  {
  void *s5798c9f0;
  short s5798c9f1;
  long double s5798c9f2;
  virtual void  v1(); // _ZN7S5798C92v1Ev
  ~S5798C9(); // tgen
  S5798C9(); // tgen
};
//SIG(-1 S5798C9) C1{ v1 Fp Fs FD}


void  S5798C9 ::v1(){vfunc_called(this, "_ZN7S5798C92v1Ev");}
S5798C9 ::~S5798C9(){ note_dtor("S5798C9", this);} // tgen
S5798C9 ::S5798C9(){ note_ctor("S5798C9", this);} // tgen

static void Test_S5798C9()
{
  extern Class_Descriptor cd_S5798C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S5798C9, buf);
    S5798C9 *dp, &lv = *(dp=new (buf) S5798C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S5798C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5798C9)");
    check_field_offset(lv, s5798c9f0, ABISELECT(8,4), "S5798C9.s5798c9f0");
    check_field_offset(lv, s5798c9f1, ABISELECT(16,8), "S5798C9.s5798c9f1");
    check_field_offset(lv, s5798c9f2, ABISELECT(32,12), "S5798C9.s5798c9f2");
    test_class_info(&lv, &cd_S5798C9);
    dp->~S5798C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5798C9(Test_S5798C9, "S5798C9", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S5798C9C1Ev();
extern void _ZN7S5798C9D1Ev();
Name_Map name_map_S5798C9[] = {
  NSPAIR(_ZN7S5798C9C1Ev),
  NSPAIR(_ZN7S5798C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5798C9[];
extern void _ZN7S5798C92v1Ev();
static  VTBL_ENTRY vtc_S5798C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5798C9[0]),
  (VTBL_ENTRY)&_ZN7S5798C92v1Ev,
};
extern VTBL_ENTRY _ZTI7S5798C9[];
extern  VTBL_ENTRY _ZTV7S5798C9[];
Class_Descriptor cd_S5798C9 = {  "S5798C9", // class name
  0,0,//no base classes
  &(vtc_S5798C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S5798C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5798C9),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  S5798C5  {
  void *s5798c5f0;
  void *s5798c5f1;
  long double s5798c5f2[10];
  void *s5798c5f3;
  short s5798c5f4;
  void *s5798c5f5;
  void *s5798c5f6;
  virtual void  v2(); // _ZN7S5798C52v2Ev
  ~S5798C5(); // tgen
  S5798C5(); // tgen
};
//SIG(-1 S5798C5) C1{ v1 Fp[2] FD[10] Fp Fs Fp[2]}


void  S5798C5 ::v2(){vfunc_called(this, "_ZN7S5798C52v2Ev");}
S5798C5 ::~S5798C5(){ note_dtor("S5798C5", this);} // tgen
S5798C5 ::S5798C5(){ note_ctor("S5798C5", this);} // tgen

static void Test_S5798C5()
{
  extern Class_Descriptor cd_S5798C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,38)];
    init_test(&cd_S5798C5, buf);
    S5798C5 *dp, &lv = *(dp=new (buf) S5798C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,148), "sizeof(S5798C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5798C5)");
    check_field_offset(lv, s5798c5f0, ABISELECT(8,4), "S5798C5.s5798c5f0");
    check_field_offset(lv, s5798c5f1, ABISELECT(16,8), "S5798C5.s5798c5f1");
    check_field_offset(lv, s5798c5f2, ABISELECT(32,12), "S5798C5.s5798c5f2");
    check_field_offset(lv, s5798c5f3, ABISELECT(192,132), "S5798C5.s5798c5f3");
    check_field_offset(lv, s5798c5f4, ABISELECT(200,136), "S5798C5.s5798c5f4");
    check_field_offset(lv, s5798c5f5, ABISELECT(208,140), "S5798C5.s5798c5f5");
    check_field_offset(lv, s5798c5f6, ABISELECT(216,144), "S5798C5.s5798c5f6");
    test_class_info(&lv, &cd_S5798C5);
    dp->~S5798C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5798C5(Test_S5798C5, "S5798C5", ABISELECT(224,148));

#else // __cplusplus

extern void _ZN7S5798C5C1Ev();
extern void _ZN7S5798C5D1Ev();
Name_Map name_map_S5798C5[] = {
  NSPAIR(_ZN7S5798C5C1Ev),
  NSPAIR(_ZN7S5798C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5798C5[];
extern void _ZN7S5798C52v2Ev();
static  VTBL_ENTRY vtc_S5798C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5798C5[0]),
  (VTBL_ENTRY)&_ZN7S5798C52v2Ev,
};
extern VTBL_ENTRY _ZTI7S5798C5[];
extern  VTBL_ENTRY _ZTV7S5798C5[];
Class_Descriptor cd_S5798C5 = {  "S5798C5", // class name
  0,0,//no base classes
  &(vtc_S5798C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,148), // object size
  NSPAIRA(_ZTI7S5798C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5798C5),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  S5798C8  : S5798C9 , S5798C5 {
  void *s5798c8f0;
  __tsi64 s5798c8f1;
  short s5798c8f2;
  void *s5798c8f3;
  void *s5798c8f4[6];
  int s5798c8f5;
  ~S5798C8(); // tgen
  S5798C8(); // tgen
};
//SIG(-1 S5798C8) C1{ BC2{ v1 Fp Fs FD} BC3{ v2 Fp[2] FD[10] Fp Fs Fp[2]} Fp FL Fs Fp[7] Fi}


S5798C8 ::~S5798C8(){ note_dtor("S5798C8", this);} // tgen
S5798C8 ::S5798C8(){ note_ctor("S5798C8", this);} // tgen

static void Test_S5798C8()
{
  extern Class_Descriptor cd_S5798C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,56)];
    init_test(&cd_S5798C8, buf);
    S5798C8 *dp, &lv = *(dp=new (buf) S5798C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,220), "sizeof(S5798C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5798C8)");
    check_base_class_offset(lv, (S5798C9*), 0, "S5798C8");
    check_base_class_offset(lv, (S5798C5*), ABISELECT(48,24), "S5798C8");
    check_field_offset(lv, s5798c8f0, ABISELECT(272,172), "S5798C8.s5798c8f0");
    check_field_offset(lv, s5798c8f1, ABISELECT(280,176), "S5798C8.s5798c8f1");
    check_field_offset(lv, s5798c8f2, ABISELECT(288,184), "S5798C8.s5798c8f2");
    check_field_offset(lv, s5798c8f3, ABISELECT(296,188), "S5798C8.s5798c8f3");
    check_field_offset(lv, s5798c8f4, ABISELECT(304,192), "S5798C8.s5798c8f4");
    check_field_offset(lv, s5798c8f5, ABISELECT(352,216), "S5798C8.s5798c8f5");
    test_class_info(&lv, &cd_S5798C8);
    dp->~S5798C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5798C8(Test_S5798C8, "S5798C8", ABISELECT(368,220));

#else // __cplusplus

extern void _ZN7S5798C8C1Ev();
extern void _ZN7S5798C8D1Ev();
Name_Map name_map_S5798C8[] = {
  NSPAIR(_ZN7S5798C8C1Ev),
  NSPAIR(_ZN7S5798C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5798C9;
extern VTBL_ENTRY _ZTI7S5798C9[];
extern  VTBL_ENTRY _ZTV7S5798C9[];
extern Class_Descriptor cd_S5798C5;
extern VTBL_ENTRY _ZTI7S5798C5[];
extern  VTBL_ENTRY _ZTV7S5798C5[];
static Base_Class bases_S5798C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5798C9,    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},
  {&cd_S5798C5,    ABISELECT(48,24), //bcp->offset
    3, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5798C8[];
extern void _ZN7S5798C92v1Ev();
extern void _ZN7S5798C52v2Ev();
static  VTBL_ENTRY vtc_S5798C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5798C8[0]),
  (VTBL_ENTRY)&_ZN7S5798C92v1Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S5798C8[0]),
  (VTBL_ENTRY)&_ZN7S5798C52v2Ev,
};
extern VTBL_ENTRY _ZTI7S5798C8[];
extern  VTBL_ENTRY _ZTV7S5798C8[];
Class_Descriptor cd_S5798C8 = {  "S5798C8", // class name
  bases_S5798C8, 2,
  &(vtc_S5798C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,220), // object size
  NSPAIRA(_ZTI7S5798C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5798C8),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  S5798C10  : virtual S5798C9 {
  void *s5798c10f0;
  ::S5798C5 s5798c10f1;
  void *s5798c10f2;
  void *s5798c10f3;
  ~S5798C10(); // tgen
  S5798C10(); // tgen
};
//SIG(-1 S5798C10) C1{ VBC2{ v1 Fp Fs FD} Fp FC3{ v2 Fp[2] FD[10] Fp Fs Fp[2]} Fp[2]}


S5798C10 ::~S5798C10(){ note_dtor("S5798C10", this);} // tgen
S5798C10 ::S5798C10(){ note_ctor("S5798C10", this);} // tgen

static void Test_S5798C10()
{
  extern Class_Descriptor cd_S5798C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,48)];
    init_test(&cd_S5798C10, buf);
    S5798C10 *dp, &lv = *(dp=new (buf) S5798C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,188), "sizeof(S5798C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5798C10)");
    check_base_class_offset(lv, (S5798C9*), ABISELECT(256,164), "S5798C10");
    check_field_offset(lv, s5798c10f0, ABISELECT(8,4), "S5798C10.s5798c10f0");
    check_field_offset(lv, s5798c10f1, ABISELECT(16,8), "S5798C10.s5798c10f1");
    check_field_offset(lv, s5798c10f2, ABISELECT(240,156), "S5798C10.s5798c10f2");
    check_field_offset(lv, s5798c10f3, ABISELECT(248,160), "S5798C10.s5798c10f3");
    test_class_info(&lv, &cd_S5798C10);
    dp->~S5798C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5798C10(Test_S5798C10, "S5798C10", ABISELECT(304,188));

#else // __cplusplus

extern void _ZN8S5798C10C1Ev();
extern void _ZN8S5798C10D1Ev();
Name_Map name_map_S5798C10[] = {
  NSPAIR(_ZN8S5798C10C1Ev),
  NSPAIR(_ZN8S5798C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5798C9;
extern VTBL_ENTRY _ZTI7S5798C9[];
extern  VTBL_ENTRY _ZTV7S5798C9[];
static Base_Class bases_S5798C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5798C9,    ABISELECT(256,164), //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 _ZTI8S5798C10[];
extern void _ZN7S5798C92v1Ev();
static  VTBL_ENTRY vtc_S5798C10[] = {
  ABISELECT(256,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S5798C10[0]),
  0,
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI8S5798C10[0]),
  (VTBL_ENTRY)&_ZN7S5798C92v1Ev,
};
extern VTBL_ENTRY _ZTV8S5798C10[];
static  VTT_ENTRY vtt_S5798C10[] = {
  {&(_ZTV8S5798C10[3]),  3,7},
  {&(_ZTV8S5798C10[6]),  6,7},
};
extern VTBL_ENTRY _ZTI8S5798C10[];
extern  VTBL_ENTRY _ZTV8S5798C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5798C10[];
Class_Descriptor cd_S5798C10 = {  "S5798C10", // class name
  bases_S5798C10, 1,
  &(vtc_S5798C10[0]), // expected_vtbl_contents
  &(vtt_S5798C10[0]), // expected_vtt_contents
  ABISELECT(304,188), // object size
  NSPAIRA(_ZTI8S5798C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S5798C10),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5798C10),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  S5798C3  {
  int s5798c3f0;
  ::S19252C8_nt s5798c3f1;
  short s5798c3f2:16;
  ::S5798C5 s5798c3f3;
  ::S19252C5_nt s5798c3f4;
  virtual  ~S5798C3(); // _ZN7S5798C3D1Ev
  virtual void  v3(); // _ZN7S5798C32v3Ev
  virtual void  v4(); // _ZN7S5798C32v4Ev
  S5798C3(); // tgen
};
//SIG(-1 S5798C3) C1{ vd v1 v2 Fi FU2{ m Fp} Fs:16 FC3{ v3 Fp Fp FD[10] Fp Fs Fp Fp} FC4{}}


 S5798C3 ::~S5798C3(){ note_dtor("S5798C3", this);}
void  S5798C3 ::v3(){vfunc_called(this, "_ZN7S5798C32v3Ev");}
void  S5798C3 ::v4(){vfunc_called(this, "_ZN7S5798C32v4Ev");}
S5798C3 ::S5798C3(){ note_ctor("S5798C3", this);} // tgen

static void Test_S5798C3()
{
  extern Class_Descriptor cd_S5798C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,43)];
    init_test(&cd_S5798C3, buf);
    S5798C3 *dp, &lv = *(dp=new (buf) S5798C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,168), "sizeof(S5798C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5798C3)");
    check_field_offset(lv, s5798c3f0, ABISELECT(8,4), "S5798C3.s5798c3f0");
    check_field_offset(lv, s5798c3f1, ABISELECT(16,8), "S5798C3.s5798c3f1");
    set_bf_and_test(lv, s5798c3f2, ABISELECT(24,12), 0, 16, 1, "S5798C3");
    set_bf_and_test(lv, s5798c3f2, ABISELECT(24,12), 0, 16, hide_sll(1LL<<15), "S5798C3");
    check_field_offset(lv, s5798c3f3, ABISELECT(32,16), "S5798C3.s5798c3f3");
    check_field_offset(lv, s5798c3f4, ABISELECT(256,164), "S5798C3.s5798c3f4");
    test_class_info(&lv, &cd_S5798C3);
    dp->~S5798C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5798C3(Test_S5798C3, "S5798C3", ABISELECT(272,168));

#else // __cplusplus

extern void _ZN7S5798C3C1Ev();
extern void _ZN7S5798C3D1Ev();
Name_Map name_map_S5798C3[] = {
  NSPAIR(_ZN7S5798C3C1Ev),
  NSPAIR(_ZN7S5798C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5798C3[];
extern void _ZN7S5798C3D1Ev();
extern void _ZN7S5798C3D0Ev();
extern void _ZN7S5798C32v3Ev();
extern void _ZN7S5798C32v4Ev();
static  VTBL_ENTRY vtc_S5798C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5798C3[0]),
  (VTBL_ENTRY)&_ZN7S5798C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5798C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5798C32v3Ev,
  (VTBL_ENTRY)&_ZN7S5798C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S5798C3[];
extern  VTBL_ENTRY _ZTV7S5798C3[];
Class_Descriptor cd_S5798C3 = {  "S5798C3", // class name
  0,0,//no base classes
  &(vtc_S5798C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,168), // object size
  NSPAIRA(_ZTI7S5798C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5798C3),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  S5798C13  : S5798C9 , S5798C5 {
  int s5798c13f0;
  ::S5798C9 s5798c13f1;
  void *s5798c13f2;
  virtual void  v5(); // _ZN8S5798C132v5Ev
  ~S5798C13(); // tgen
  S5798C13(); // tgen
};
//SIG(-1 S5798C13) C1{ BC2{ v2 Fp Fs FD} BC3{ v3 Fp[2] FD[10] Fp Fs Fp[2]} v1 Fi FC2 Fp}


void  S5798C13 ::v5(){vfunc_called(this, "_ZN8S5798C132v5Ev");}
S5798C13 ::~S5798C13(){ note_dtor("S5798C13", this);} // tgen
S5798C13 ::S5798C13(){ note_ctor("S5798C13", this);} // tgen

static void Test_S5798C13()
{
  extern Class_Descriptor cd_S5798C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,52)];
    init_test(&cd_S5798C13, buf);
    S5798C13 *dp, &lv = *(dp=new (buf) S5798C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,204), "sizeof(S5798C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5798C13)");
    check_base_class_offset(lv, (S5798C9*), 0, "S5798C13");
    check_base_class_offset(lv, (S5798C5*), ABISELECT(48,24), "S5798C13");
    check_field_offset(lv, s5798c13f0, ABISELECT(272,172), "S5798C13.s5798c13f0");
    check_field_offset(lv, s5798c13f1, ABISELECT(288,176), "S5798C13.s5798c13f1");
    check_field_offset(lv, s5798c13f2, ABISELECT(336,200), "S5798C13.s5798c13f2");
    test_class_info(&lv, &cd_S5798C13);
    dp->~S5798C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5798C13(Test_S5798C13, "S5798C13", ABISELECT(352,204));

#else // __cplusplus

extern void _ZN8S5798C13C1Ev();
extern void _ZN8S5798C13D1Ev();
Name_Map name_map_S5798C13[] = {
  NSPAIR(_ZN8S5798C13C1Ev),
  NSPAIR(_ZN8S5798C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5798C9;
extern VTBL_ENTRY _ZTI7S5798C9[];
extern  VTBL_ENTRY _ZTV7S5798C9[];
extern Class_Descriptor cd_S5798C5;
extern VTBL_ENTRY _ZTI7S5798C5[];
extern  VTBL_ENTRY _ZTV7S5798C5[];
static Base_Class bases_S5798C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5798C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5798C5,    ABISELECT(48,24), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S5798C13[];
extern void _ZN7S5798C92v1Ev();
extern void _ZN8S5798C132v5Ev();
extern void _ZN7S5798C52v2Ev();
static  VTBL_ENTRY vtc_S5798C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S5798C13[0]),
  (VTBL_ENTRY)&_ZN7S5798C92v1Ev,
  (VTBL_ENTRY)&_ZN8S5798C132v5Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S5798C13[0]),
  (VTBL_ENTRY)&_ZN7S5798C52v2Ev,
};
extern VTBL_ENTRY _ZTI8S5798C13[];
extern  VTBL_ENTRY _ZTV8S5798C13[];
Class_Descriptor cd_S5798C13 = {  "S5798C13", // class name
  bases_S5798C13, 2,
  &(vtc_S5798C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,204), // object size
  NSPAIRA(_ZTI8S5798C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S5798C13),7, //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  S5798C12  : S5798C9 , S5798C5 , S5798C13 {
  char s5798c12f0;
  int s5798c12f1;
  __tsi64 s5798c12f2;
  long s5798c12f3;
  __tsi64 s5798c12f4;
  void *s5798c12f5;
  virtual  ~S5798C12(); // _ZN8S5798C12D1Ev
  virtual void  v6(); // _ZN8S5798C122v6Ev
  virtual void  v7(); // _ZN8S5798C122v7Ev
  virtual void  v8(); // _ZN8S5798C122v8Ev
  S5798C12(); // tgen
};
//SIG(-1 S5798C12) C1{ BC2{ v4 Fp Fs FD} BC3{ v5 Fp[2] FD[10] Fp Fs Fp[2]} BC4{ BC2 BC3 v6 Fi FC2 Fp} vd v1 v2 v3 Fc Fi FL Fl FL Fp}


 S5798C12 ::~S5798C12(){ note_dtor("S5798C12", this);}
void  S5798C12 ::v6(){vfunc_called(this, "_ZN8S5798C122v6Ev");}
void  S5798C12 ::v7(){vfunc_called(this, "_ZN8S5798C122v7Ev");}
void  S5798C12 ::v8(){vfunc_called(this, "_ZN8S5798C122v8Ev");}
S5798C12 ::S5798C12(){ note_ctor("S5798C12", this);} // tgen

static void Test_S5798C12()
{
  extern Class_Descriptor cd_S5798C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(42,103)];
    init_test(&cd_S5798C12, buf);
    S5798C12 *dp, &lv = *(dp=new (buf) S5798C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(656,408), "sizeof(S5798C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5798C12)");
    /*is_ambiguous_... S5798C12::S5798C9 */ AMB_check_base_class_offset(lv, (S5798C9*), 0, "S5798C12");
    /*is_ambiguous_... S5798C12::S5798C5 */ AMB_check_base_class_offset(lv, (S5798C5*), ABISELECT(48,24), "S5798C12");
    check_base_class_offset(lv, (S5798C9*)(S5798C13*), ABISELECT(272,172), "S5798C12");
    check_base_class_offset(lv, (S5798C5*)(S5798C13*), ABISELECT(320,196), "S5798C12");
    check_base_class_offset(lv, (S5798C13*), ABISELECT(272,172), "S5798C12");
    check_field_offset(lv, s5798c12f0, ABISELECT(616,376), "S5798C12.s5798c12f0");
    check_field_offset(lv, s5798c12f1, ABISELECT(620,380), "S5798C12.s5798c12f1");
    check_field_offset(lv, s5798c12f2, ABISELECT(624,384), "S5798C12.s5798c12f2");
    check_field_offset(lv, s5798c12f3, ABISELECT(632,392), "S5798C12.s5798c12f3");
    check_field_offset(lv, s5798c12f4, ABISELECT(640,396), "S5798C12.s5798c12f4");
    check_field_offset(lv, s5798c12f5, ABISELECT(648,404), "S5798C12.s5798c12f5");
    test_class_info(&lv, &cd_S5798C12);
    dp->~S5798C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5798C12(Test_S5798C12, "S5798C12", ABISELECT(656,408));

#else // __cplusplus

extern void _ZN8S5798C12C1Ev();
extern void _ZN8S5798C12D1Ev();
Name_Map name_map_S5798C12[] = {
  NSPAIR(_ZN8S5798C12C1Ev),
  NSPAIR(_ZN8S5798C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5798C9;
extern VTBL_ENTRY _ZTI7S5798C9[];
extern  VTBL_ENTRY _ZTV7S5798C9[];
extern Class_Descriptor cd_S5798C5;
extern VTBL_ENTRY _ZTI7S5798C5[];
extern  VTBL_ENTRY _ZTV7S5798C5[];
extern Class_Descriptor cd_S5798C9;
extern VTBL_ENTRY _ZTI7S5798C9[];
extern  VTBL_ENTRY _ZTV7S5798C9[];
extern Class_Descriptor cd_S5798C5;
extern VTBL_ENTRY _ZTI7S5798C5[];
extern  VTBL_ENTRY _ZTV7S5798C5[];
extern Class_Descriptor cd_S5798C13;
extern VTBL_ENTRY _ZTI8S5798C13[];
extern  VTBL_ENTRY _ZTV8S5798C13[];
static Base_Class bases_S5798C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5798C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5798C5,    ABISELECT(48,24), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5798C9,    ABISELECT(272,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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5798C5,    ABISELECT(320,196), //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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5798C13,    ABISELECT(272,172), //bcp->offset
    11, //bcp->virtual_function_table_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 _ZTI8S5798C12[];
extern void _ZN7S5798C92v1Ev();
extern void _ZN8S5798C12D1Ev();
extern void _ZN8S5798C12D0Ev();
extern void _ZN8S5798C122v6Ev();
extern void _ZN8S5798C122v7Ev();
extern void _ZN8S5798C122v8Ev();
extern void _ZN7S5798C52v2Ev();
extern void _ZN7S5798C92v1Ev();
extern void _ZN8S5798C132v5Ev();
extern void _ZN7S5798C52v2Ev();
static  VTBL_ENTRY vtc_S5798C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S5798C12[0]),
  (VTBL_ENTRY)&_ZN7S5798C92v1Ev,
  (VTBL_ENTRY)&_ZN8S5798C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5798C12D0Ev,
  (VTBL_ENTRY)&_ZN8S5798C122v6Ev,
  (VTBL_ENTRY)&_ZN8S5798C122v7Ev,
  (VTBL_ENTRY)&_ZN8S5798C122v8Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S5798C12[0]),
  (VTBL_ENTRY)&_ZN7S5798C52v2Ev,
  ABISELECT(-272,-172),
  (VTBL_ENTRY)&(_ZTI8S5798C12[0]),
  (VTBL_ENTRY)&_ZN7S5798C92v1Ev,
  (VTBL_ENTRY)&_ZN8S5798C132v5Ev,
  ABISELECT(-320,-196),
  (VTBL_ENTRY)&(_ZTI8S5798C12[0]),
  (VTBL_ENTRY)&_ZN7S5798C52v2Ev,
};
extern VTBL_ENTRY _ZTI8S5798C12[];
extern  VTBL_ENTRY _ZTV8S5798C12[];
Class_Descriptor cd_S5798C12 = {  "S5798C12", // class name
  bases_S5798C12, 5,
  &(vtc_S5798C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(656,408), // object size
  NSPAIRA(_ZTI8S5798C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S5798C12),18, //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  S5798C11  : virtual S5798C12 , S5798C9 {
  short s5798c11f0[4];
  int s5798c11f1;
  long double s5798c11f2;
  int s5798c11f3;
  void *s5798c11f4[5];
  __tsi64 s5798c11f5;
  virtual  ~S5798C11(); // _ZN8S5798C11D2Ev
  S5798C11(); // tgen
};
//SIG(-1 S5798C11) C1{ VBC2{ BC3{ v1 Fp Fs FD} BC4{ v2 Fp[2] FD[10] Fp Fs Fp[2]} BC5{ BC3 BC4 v3 Fi FC3 Fp} vd v4 v5 v6 Fc Fi FL Fl FL Fp} BC3 vd Fs[4] Fi FD Fi Fp[5] FL}


 S5798C11 ::~S5798C11(){ note_dtor("S5798C11", this);}
S5798C11 ::S5798C11(){ note_ctor("S5798C11", this);} // tgen

static void Test_S5798C11()
{
  extern Class_Descriptor cd_S5798C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(51,123)];
    init_test(&cd_S5798C11, buf);
    S5798C11 *dp, &lv = *(dp=new (buf) S5798C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(800,488), "sizeof(S5798C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5798C11)");
    /*is_ambiguous_... S5798C12::S5798C9 */ AMB_check_base_class_offset(lv, (S5798C9*)(S5798C12*), ABISELECT(144,80), "S5798C11");
    /*is_ambiguous_... S5798C12::S5798C5 */ AMB_check_base_class_offset(lv, (S5798C5*)(S5798C12*), ABISELECT(192,104), "S5798C11");
    check_base_class_offset(lv, (S5798C9*)(S5798C13*)(S5798C12*), ABISELECT(416,252), "S5798C11");
    check_base_class_offset(lv, (S5798C5*)(S5798C13*)(S5798C12*), ABISELECT(464,276), "S5798C11");
    check_base_class_offset(lv, (S5798C13*)(S5798C12*), ABISELECT(416,252), "S5798C11");
    check_base_class_offset(lv, (S5798C12*), ABISELECT(144,80), "S5798C11");
    /*is_ambiguous_... S5798C11::S5798C9 */ AMB_check_base_class_offset(lv, (S5798C9*), 0, "S5798C11");
    check_field_offset(lv, s5798c11f0, ABISELECT(48,24), "S5798C11.s5798c11f0");
    check_field_offset(lv, s5798c11f1, ABISELECT(56,32), "S5798C11.s5798c11f1");
    check_field_offset(lv, s5798c11f2, ABISELECT(64,36), "S5798C11.s5798c11f2");
    check_field_offset(lv, s5798c11f3, ABISELECT(80,48), "S5798C11.s5798c11f3");
    check_field_offset(lv, s5798c11f4, ABISELECT(88,52), "S5798C11.s5798c11f4");
    check_field_offset(lv, s5798c11f5, ABISELECT(128,72), "S5798C11.s5798c11f5");
    test_class_info(&lv, &cd_S5798C11);
    dp->~S5798C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5798C11(Test_S5798C11, "S5798C11", ABISELECT(800,488));

#else // __cplusplus

extern void _ZN8S5798C11C1Ev();
extern void _ZN8S5798C11D2Ev();
Name_Map name_map_S5798C11[] = {
  NSPAIR(_ZN8S5798C11C1Ev),
  NSPAIR(_ZN8S5798C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5798C9;
extern VTBL_ENTRY _ZTI7S5798C9[];
extern  VTBL_ENTRY _ZTV7S5798C9[];
extern Class_Descriptor cd_S5798C5;
extern VTBL_ENTRY _ZTI7S5798C5[];
extern  VTBL_ENTRY _ZTV7S5798C5[];
extern Class_Descriptor cd_S5798C9;
extern VTBL_ENTRY _ZTI7S5798C9[];
extern  VTBL_ENTRY _ZTV7S5798C9[];
extern Class_Descriptor cd_S5798C5;
extern VTBL_ENTRY _ZTI7S5798C5[];
extern  VTBL_ENTRY _ZTV7S5798C5[];
extern Class_Descriptor cd_S5798C13;
extern VTBL_ENTRY _ZTI8S5798C13[];
extern  VTBL_ENTRY _ZTV8S5798C13[];
extern Class_Descriptor cd_S5798C12;
extern VTBL_ENTRY _ZTI8S5798C12[];
extern  VTBL_ENTRY _ZTV8S5798C12[];
extern Class_Descriptor cd_S5798C9;
extern VTBL_ENTRY _ZTI7S5798C9[];
extern  VTBL_ENTRY _ZTV7S5798C9[];
static Base_Class bases_S5798C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5798C9,    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
    5, //immediately_derived
  0, 0},
  {&cd_S5798C5,    ABISELECT(192,104), //bcp->offset
    21, //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5798C9,    ABISELECT(416,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5798C5,    ABISELECT(464,276), //bcp->offset
    28, //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_S5798C13,    ABISELECT(416,252), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5798C12,    ABISELECT(144,80), //bcp->offset
    6, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5798C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S5798C11[];
extern void _ZN7S5798C92v1Ev();
extern void _ZN8S5798C11D1Ev();
extern void _ZN8S5798C11D0Ev();
extern void _ZN7S5798C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S5798C11D1Ev,_ZTv0_n16_N8S5798C11D1Ev)();
extern void ABISELECT(_ZThn144_N8S5798C11D1Ev,_ZThn80_N8S5798C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S5798C11D0Ev,_ZTv0_n16_N8S5798C11D0Ev)();
extern void ABISELECT(_ZThn144_N8S5798C11D0Ev,_ZThn80_N8S5798C11D0Ev)() __attribute__((weak));
extern void _ZN8S5798C122v6Ev();
extern void _ZN8S5798C122v7Ev();
extern void _ZN8S5798C122v8Ev();
extern void _ZN7S5798C52v2Ev();
extern void _ZN7S5798C92v1Ev();
extern void _ZN8S5798C132v5Ev();
extern void _ZN7S5798C52v2Ev();
static  VTBL_ENTRY vtc_S5798C11[] = {
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S5798C11[0]),
  (VTBL_ENTRY)&_ZN7S5798C92v1Ev,
  (VTBL_ENTRY)&_ZN8S5798C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5798C11D0Ev,
  ABISELECT(272,172),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-144,-80),
  0,
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI8S5798C11[0]),
  (VTBL_ENTRY)&_ZN7S5798C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S5798C11D1Ev,_ZTv0_n16_N8S5798C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S5798C11D0Ev,_ZTv0_n16_N8S5798C11D0Ev),
  (VTBL_ENTRY)&_ZN8S5798C122v6Ev,
  (VTBL_ENTRY)&_ZN8S5798C122v7Ev,
  (VTBL_ENTRY)&_ZN8S5798C122v8Ev,
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S5798C11[0]),
  (VTBL_ENTRY)&_ZN7S5798C52v2Ev,
  ABISELECT(-416,-252),
  (VTBL_ENTRY)&(_ZTI8S5798C11[0]),
  (VTBL_ENTRY)&_ZN7S5798C92v1Ev,
  (VTBL_ENTRY)&_ZN8S5798C132v5Ev,
  ABISELECT(-464,-276),
  (VTBL_ENTRY)&(_ZTI8S5798C11[0]),
  (VTBL_ENTRY)&_ZN7S5798C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S5798C11[];
static  VTT_ENTRY vtt_S5798C11[] = {
  {&(_ZTV8S5798C11[3]),  3,31},
  {&(_ZTV8S5798C11[15]),  15,31},
  {&(_ZTV8S5798C11[23]),  23,31},
  {&(_ZTV8S5798C11[26]),  26,31},
  {&(_ZTV8S5798C11[30]),  30,31},
};
extern VTBL_ENTRY _ZTI8S5798C11[];
extern  VTBL_ENTRY _ZTV8S5798C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5798C11[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S5798C11D0Ev,_ZTv0_n16_N8S5798C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S5798C11D0Ev,_ZThn80_N8S5798C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S5798C11D1Ev,_ZTv0_n16_N8S5798C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S5798C11D1Ev,_ZThn80_N8S5798C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5798C11 = {  "S5798C11", // class name
  bases_S5798C11, 7,
  &(vtc_S5798C11[0]), // expected_vtbl_contents
  &(vtt_S5798C11[0]), // expected_vtt_contents
  ABISELECT(800,488), // object size
  NSPAIRA(_ZTI8S5798C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S5798C11),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5798C11),5, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5798C7  : S5798C8 , S5798C10 , S5798C3 {
  int s5798c7f0;
  ::S5798C11 s5798c7f1;
  void *s5798c7f2;
  char s5798c7f3[8];
  void *s5798c7f4;
  ::S19252C6 s5798c7f5;
  __tsi64 s5798c7f6;
  ~S5798C7(); // tgen
  S5798C7(); // tgen
};
//SIG(-1 S5798C7) C1{ BC2{ BC3{ v1 Fp Fs FD} BC4{ v2 Fp[2] FD[10] Fp Fs Fp[2]} Fp FL Fs Fp[7] Fi} BC5{ VBC3 Fp FC4 Fp[2]} BC6{ vd v3 v4 Fi FU7{ m Fp} Fs:16 FC4 FC8{}} Fi FC9{ VBC10{ BC3 BC4 BC11{ BC3 BC4 v5 Fi FC3 Fp} vd v6 v7 v8 Fc Fi FL Fl FL Fp} BC3 vd Fs[4] Fi FD Fi Fp[5] FL} Fp Fc[8] Fp FC12{ m Fi[2] Fs FC13{ vd v9 v10 Fi FU7 Fs:16 FC14{ v11 Fp Fp FD[10] Fp Fs Fp Fp} FC8}} FL}


S5798C7 ::~S5798C7(){ note_dtor("S5798C7", this);} // tgen
S5798C7 ::S5798C7(){ note_ctor("S5798C7", this);} // tgen

static void Test_S5798C7()
{
  extern Class_Descriptor cd_S5798C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(131,319)];
    init_test(&cd_S5798C7, buf);
    S5798C7 *dp, &lv = *(dp=new (buf) S5798C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2080,1272), "sizeof(S5798C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5798C7)");
    check_base_class_offset(lv, (S5798C9*)(S5798C8*), 0, "S5798C7");
    check_base_class_offset(lv, (S5798C5*)(S5798C8*), ABISELECT(48,24), "S5798C7");
    check_base_class_offset(lv, (S5798C8*), 0, "S5798C7");
    check_base_class_offset(lv, (S5798C9*)(S5798C10*), ABISELECT(2032,1248), "S5798C7");
    check_base_class_offset(lv, (S5798C10*), ABISELECT(368,220), "S5798C7");
    check_base_class_offset(lv, (S5798C3*), ABISELECT(624,384), "S5798C7");
    check_field_offset(lv, s5798c7f0, ABISELECT(884,552), "S5798C7.s5798c7f0");
    check_field_offset(lv, s5798c7f1, ABISELECT(896,556), "S5798C7.s5798c7f1");
    check_field_offset(lv, s5798c7f2, ABISELECT(1696,1044), "S5798C7.s5798c7f2");
    check_field_offset(lv, s5798c7f3, ABISELECT(1704,1048), "S5798C7.s5798c7f3");
    check_field_offset(lv, s5798c7f4, ABISELECT(1712,1056), "S5798C7.s5798c7f4");
    check_field_offset(lv, s5798c7f5, ABISELECT(1728,1060), "S5798C7.s5798c7f5");
    check_field_offset(lv, s5798c7f6, ABISELECT(2016,1240), "S5798C7.s5798c7f6");
    test_class_info(&lv, &cd_S5798C7);
    dp->~S5798C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5798C7(Test_S5798C7, "S5798C7", ABISELECT(2080,1272));

#else // __cplusplus

extern void _ZN7S5798C7C1Ev();
extern void _ZN7S5798C7D1Ev();
Name_Map name_map_S5798C7[] = {
  NSPAIR(_ZN7S5798C7C1Ev),
  NSPAIR(_ZN7S5798C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5798C9;
extern VTBL_ENTRY _ZTI7S5798C9[];
extern  VTBL_ENTRY _ZTV7S5798C9[];
extern Class_Descriptor cd_S5798C5;
extern VTBL_ENTRY _ZTI7S5798C5[];
extern  VTBL_ENTRY _ZTV7S5798C5[];
extern Class_Descriptor cd_S5798C8;
extern VTBL_ENTRY _ZTI7S5798C8[];
extern  VTBL_ENTRY _ZTV7S5798C8[];
extern Class_Descriptor cd_S5798C9;
extern VTBL_ENTRY _ZTI7S5798C9[];
extern  VTBL_ENTRY _ZTV7S5798C9[];
extern Class_Descriptor cd_S5798C10;
extern VTBL_ENTRY _ZTI8S5798C10[];
extern  VTBL_ENTRY _ZTV8S5798C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5798C10[];
extern Class_Descriptor cd_S5798C3;
extern VTBL_ENTRY _ZTI7S5798C3[];
extern  VTBL_ENTRY _ZTV7S5798C3[];
static Base_Class bases_S5798C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5798C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5798C5,    ABISELECT(48,24), //bcp->offset
    6, //bcp->virtual_function_table_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_S5798C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S5798C9,    ABISELECT(2032,1248), //bcp->offset
    18, //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
    4, //immediately_derived
  0, 1},
  {&cd_S5798C10,    ABISELECT(368,220), //bcp->offset
    9, //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5798C3,    ABISELECT(624,384), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5798C7[];
extern void _ZN7S5798C92v1Ev();
extern void _ZN7S5798C7D1Ev();
extern void _ZN7S5798C7D0Ev();
extern void _ZN7S5798C52v2Ev();
extern void ABISELECT(_ZThn624_N7S5798C7D1Ev,_ZThn384_N7S5798C7D1Ev)();
extern void ABISELECT(_ZThn624_N7S5798C7D0Ev,_ZThn384_N7S5798C7D0Ev)();
extern void _ZN7S5798C32v3Ev();
extern void _ZN7S5798C32v4Ev();
extern void _ZN7S5798C92v1Ev();
static  VTBL_ENTRY vtc_S5798C7[] = {
  ABISELECT(2032,1248),
  0,
  (VTBL_ENTRY)&(_ZTI7S5798C7[0]),
  (VTBL_ENTRY)&_ZN7S5798C92v1Ev,
  (VTBL_ENTRY)&_ZN7S5798C7D1Ev,
  (VTBL_ENTRY)&_ZN7S5798C7D0Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S5798C7[0]),
  (VTBL_ENTRY)&_ZN7S5798C52v2Ev,
  ABISELECT(1664,1028),
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI7S5798C7[0]),
  ABISELECT(-624,-384),
  (VTBL_ENTRY)&(_ZTI7S5798C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn624_N7S5798C7D1Ev,_ZThn384_N7S5798C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn624_N7S5798C7D0Ev,_ZThn384_N7S5798C7D0Ev),
  (VTBL_ENTRY)&_ZN7S5798C32v3Ev,
  (VTBL_ENTRY)&_ZN7S5798C32v4Ev,
  0,
  ABISELECT(-2032,-1248),
  (VTBL_ENTRY)&(_ZTI7S5798C7[0]),
  (VTBL_ENTRY)&_ZN7S5798C92v1Ev,
};
extern VTBL_ENTRY _ZTV7S5798C7[];
static  VTBL_ENTRY _tg__ZTV8S5798C10__7S5798C7[] = {
  ABISELECT(1664,1028),
  0,
  (VTBL_ENTRY)&(_ZTI8S5798C10[0]),
};
extern void _ZN7S5798C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S5798C9__8S5798C10__7S5798C7[] = {
  0,
  ABISELECT(-1664,-1028),
  (VTBL_ENTRY)&(_ZTI8S5798C10[0]),
  (VTBL_ENTRY)&_ZN7S5798C92v1Ev,
};
static  VTT_ENTRY vtt_S5798C7[] = {
  {&(_ZTV7S5798C7[3]),  3,22},
  {&(_tg__ZTV8S5798C10__7S5798C7[3]),  3,3},
  {&(_tg__ZTV7S5798C9__8S5798C10__7S5798C7[3]),  3,4},
  {&(_ZTV7S5798C7[12]),  12,22},
  {&(_ZTV7S5798C7[21]),  21,22},
};
extern VTBL_ENTRY _ZTI7S5798C7[];
extern  VTBL_ENTRY _ZTV7S5798C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5798C7[];
Class_Descriptor cd_S5798C7 = {  "S5798C7", // class name
  bases_S5798C7, 6,
  &(vtc_S5798C7[0]), // expected_vtbl_contents
  &(vtt_S5798C7[0]), // expected_vtt_contents
  ABISELECT(2080,1272), // object size
  NSPAIRA(_ZTI7S5798C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5798C7),22, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5798C7),5, //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  S5798C1  : S19252C6 , virtual S5798C7 {
  int s5798c1f0;
  void *s5798c1f1[7];
  void *s5798c1f2[2];
  ::S19252C15 s5798c1f3;
  __tsi64 s5798c1f4;
  long double s5798c1f5;
  virtual  ~S5798C1(); // _ZN7S5798C1D2Ev
  S5798C1(); // tgen
};
//SIG(1 S5798C1) C1{ BC2{ m Fi[2] Fs FC3{ vd v5 v6 Fi FU4{ m Fp} Fs:16 FC5{ v7 Fp Fp FD[10] Fp Fs Fp Fp} FC6{}}} VBC7{ BC8{ BC9{ v1 Fp Fs FD} BC10{ v2 Fp Fp FD[10] Fp Fs Fp Fp} Fp FL Fs Fp Fp[6] Fi} BC11{ VBC9 Fp FC10 Fp Fp} BC12{ vd v3 v4 Fi FU4 Fs:16 FC10 FC6} Fi FC13{ VBC14{ BC9 BC10 BC15{ BC9 BC10 v13 Fi FC9 Fp} vd v14 v15 v16 Fc Fi FL Fl FL Fp} BC9 vd Fs[4] Fi FD Fi Fp[5] FL} Fp Fc[8] Fp FC2 FL} vd Fi Fp[7] Fp[2] FC16{ VBC17{ BC18{ v8 Fp Fs FD} BC5 BC19{ BC18 BC5 v9 Fi FC18 Fp} vd v10 v11 v12 Fc Fi FL Fl FL Fp} VBC20{ VBC17 BC18 vd Fs[4] Fi FD Fi Fp[5] FL} BC19 FC21{ VBC18 Fp FC5 Fp Fp}} FL FD}


 S5798C1 ::~S5798C1(){ note_dtor("S5798C1", this);}
S5798C1 ::S5798C1(){ note_ctor("S5798C1", this);} // tgen

static void Test_S5798C1()
{
  extern Class_Descriptor cd_S5798C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(248,600)];
    init_test(&cd_S5798C1, buf);
    S5798C1 *dp, &lv = *(dp=new (buf) S5798C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3952,2396), "sizeof(S5798C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5798C1)");
    check_base_class_offset(lv, (S19252C6*), ABISELECT(16,4), "S5798C1");
    check_base_class_offset(lv, (S5798C9*)(S5798C8*)(S5798C7*), ABISELECT(1872,1124), "S5798C1");
    check_base_class_offset(lv, (S5798C5*)(S5798C8*)(S5798C7*), ABISELECT(1920,1148), "S5798C1");
    check_base_class_offset(lv, (S5798C8*)(S5798C7*), ABISELECT(1872,1124), "S5798C1");
    check_base_class_offset(lv, (S5798C9*)(S5798C10*)(S5798C7*), ABISELECT(3904,2372), "S5798C1");
    check_base_class_offset(lv, (S5798C10*)(S5798C7*), ABISELECT(2240,1344), "S5798C1");
    check_base_class_offset(lv, (S5798C3*)(S5798C7*), ABISELECT(2496,1508), "S5798C1");
    check_base_class_offset(lv, (S5798C7*), ABISELECT(1872,1124), "S5798C1");
    check_field_offset(lv, s5798c1f0, ABISELECT(304,184), "S5798C1.s5798c1f0");
    check_field_offset(lv, s5798c1f1, ABISELECT(312,188), "S5798C1.s5798c1f1");
    check_field_offset(lv, s5798c1f2, ABISELECT(368,216), "S5798C1.s5798c1f2");
    check_field_offset(lv, s5798c1f3, ABISELECT(384,224), "S5798C1.s5798c1f3");
    check_field_offset(lv, s5798c1f4, ABISELECT(1840,1104), "S5798C1.s5798c1f4");
    check_field_offset(lv, s5798c1f5, ABISELECT(1856,1112), "S5798C1.s5798c1f5");
    test_class_info(&lv, &cd_S5798C1);
    dp->~S5798C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5798C1(Test_S5798C1, "S5798C1", ABISELECT(3952,2396));

#else // __cplusplus

extern void _ZN7S5798C1C1Ev();
extern void _ZN7S5798C1D2Ev();
Name_Map name_map_S5798C1[] = {
  NSPAIR(_ZN7S5798C1C1Ev),
  NSPAIR(_ZN7S5798C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19252C6;
extern VTBL_ENTRY _ZTI8S19252C6[];
extern Class_Descriptor cd_S5798C9;
extern VTBL_ENTRY _ZTI7S5798C9[];
extern  VTBL_ENTRY _ZTV7S5798C9[];
extern Class_Descriptor cd_S5798C5;
extern VTBL_ENTRY _ZTI7S5798C5[];
extern  VTBL_ENTRY _ZTV7S5798C5[];
extern Class_Descriptor cd_S5798C8;
extern VTBL_ENTRY _ZTI7S5798C8[];
extern  VTBL_ENTRY _ZTV7S5798C8[];
extern Class_Descriptor cd_S5798C9;
extern VTBL_ENTRY _ZTI7S5798C9[];
extern  VTBL_ENTRY _ZTV7S5798C9[];
extern Class_Descriptor cd_S5798C10;
extern VTBL_ENTRY _ZTI8S5798C10[];
extern  VTBL_ENTRY _ZTV8S5798C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5798C10[];
extern Class_Descriptor cd_S5798C3;
extern VTBL_ENTRY _ZTI7S5798C3[];
extern  VTBL_ENTRY _ZTV7S5798C3[];
extern Class_Descriptor cd_S5798C7;
extern VTBL_ENTRY _ZTI7S5798C7[];
extern  VTBL_ENTRY _ZTV7S5798C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5798C7[];
static Base_Class bases_S5798C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19252C6,    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_S5798C9,    ABISELECT(1872,1124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5798C5,    ABISELECT(1920,1148), //bcp->offset
    17, //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
    3, //immediately_derived
  0, 0},
  {&cd_S5798C8,    ABISELECT(1872,1124), //bcp->offset
    -1, //bcp->virtual_function_table_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_S5798C9,    ABISELECT(3904,2372), //bcp->offset
    29, //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
    5, //immediately_derived
  0, 1},
  {&cd_S5798C10,    ABISELECT(2240,1344), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S5798C3,    ABISELECT(2496,1508), //bcp->offset
    23, //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
    7, //immediately_derived
  0, 0},
  {&cd_S5798C7,    ABISELECT(1872,1124), //bcp->offset
    6, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5798C1[];
extern void _ZN7S5798C1D1Ev();
extern void _ZN7S5798C1D0Ev();
extern void _ZN7S5798C92v1Ev();
extern void ABISELECT(_ZTv0_n48_N7S5798C1D1Ev,_ZTv0_n24_N7S5798C1D1Ev)();
extern void ABISELECT(_ZThn1872_N7S5798C1D1Ev,_ZThn1124_N7S5798C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5798C1D0Ev,_ZTv0_n24_N7S5798C1D0Ev)();
extern void ABISELECT(_ZThn1872_N7S5798C1D0Ev,_ZThn1124_N7S5798C1D0Ev)() __attribute__((weak));
extern void _ZN7S5798C52v2Ev();
extern void ABISELECT(_ZTvn624_n48_N7S5798C1D1Ev,_ZTvn384_n24_N7S5798C1D1Ev)();
extern void ABISELECT(_ZTvn624_n48_N7S5798C1D0Ev,_ZTvn384_n24_N7S5798C1D0Ev)();
extern void _ZN7S5798C32v3Ev();
extern void _ZN7S5798C32v4Ev();
extern void _ZN7S5798C92v1Ev();
static  VTBL_ENTRY vtc_S5798C1[] = {
  ABISELECT(3904,2372),
  ABISELECT(1872,1124),
  0,
  (VTBL_ENTRY)&(_ZTI7S5798C1[0]),
  (VTBL_ENTRY)&_ZN7S5798C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5798C1D0Ev,
  ABISELECT(624,384),
  ABISELECT(624,384),
  ABISELECT(-1872,-1124),
  ABISELECT(48,24),
  0,
  ABISELECT(2032,1248),
  ABISELECT(-1872,-1124),
  (VTBL_ENTRY)&(_ZTI7S5798C1[0]),
  (VTBL_ENTRY)&_ZN7S5798C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5798C1D1Ev,_ZTv0_n24_N7S5798C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5798C1D0Ev,_ZTv0_n24_N7S5798C1D0Ev),
  ABISELECT(-1920,-1148),
  (VTBL_ENTRY)&(_ZTI7S5798C1[0]),
  (VTBL_ENTRY)&_ZN7S5798C52v2Ev,
  ABISELECT(1664,1028),
  ABISELECT(-2240,-1344),
  (VTBL_ENTRY)&(_ZTI7S5798C1[0]),
  ABISELECT(-2496,-1508),
  (VTBL_ENTRY)&(_ZTI7S5798C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn624_n48_N7S5798C1D1Ev,_ZTvn384_n24_N7S5798C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn624_n48_N7S5798C1D0Ev,_ZTvn384_n24_N7S5798C1D0Ev),
  (VTBL_ENTRY)&_ZN7S5798C32v3Ev,
  (VTBL_ENTRY)&_ZN7S5798C32v4Ev,
  0,
  ABISELECT(-3904,-2372),
  (VTBL_ENTRY)&(_ZTI7S5798C1[0]),
  (VTBL_ENTRY)&_ZN7S5798C92v1Ev,
};
extern VTBL_ENTRY _ZTV7S5798C1[];
extern void _ZN7S5798C92v1Ev();
extern void _ZN7S5798C7D1Ev();
extern void _ZN7S5798C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5798C7__7S5798C1[] = {
  ABISELECT(2032,1248),
  0,
  (VTBL_ENTRY)&(_ZTI7S5798C7[0]),
  (VTBL_ENTRY)&_ZN7S5798C92v1Ev,
  (VTBL_ENTRY)&_ZN7S5798C7D1Ev,
  (VTBL_ENTRY)&_ZN7S5798C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S5798C107S5798C7__7S5798C1[] = {
  ABISELECT(1664,1028),
  0,
  (VTBL_ENTRY)&(_ZTI8S5798C10[0]),
};
extern void _ZN7S5798C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S5798C9__8S5798C107S5798C7__7S5798C1[] = {
  0,
  ABISELECT(-1664,-1028),
  (VTBL_ENTRY)&(_ZTI8S5798C10[0]),
  (VTBL_ENTRY)&_ZN7S5798C92v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S5798C10__7S5798C7__7S5798C1[] = {
  ABISELECT(1664,1028),
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI7S5798C7[0]),
};
extern void _ZN7S5798C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S5798C9__A1__7S5798C7__7S5798C1[] = {
  0,
  ABISELECT(-2032,-1248),
  (VTBL_ENTRY)&(_ZTI7S5798C7[0]),
  (VTBL_ENTRY)&_ZN7S5798C92v1Ev,
};
static  VTT_ENTRY vtt_S5798C1[] = {
  {&(_ZTV7S5798C1[4]),  4,33},
  {&(_ZTV7S5798C1[14]),  14,33},
  {&(_ZTV7S5798C1[19]),  19,33},
  {&(_ZTV7S5798C1[23]),  23,33},
  {&(_ZTV7S5798C1[32]),  32,33},
  {&(_ZTV7S5798C1[25]),  25,33},
  {&(_tg__ZTV7S5798C7__7S5798C1[3]),  3,6},
  {&(_tg__ZTV8S5798C107S5798C7__7S5798C1[3]),  3,3},
  {&(_tg__ZTV7S5798C9__8S5798C107S5798C7__7S5798C1[3]),  3,4},
  {&(_tg__ZTV8S5798C10__7S5798C7__7S5798C1[3]),  3,3},
  {&(_tg__ZTV7S5798C9__A1__7S5798C7__7S5798C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S5798C1[];
extern  VTBL_ENTRY _ZTV7S5798C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5798C1[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5798C1D0Ev,_ZTv0_n24_N7S5798C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N7S5798C1D0Ev,_ZThn1124_N7S5798C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5798C1D1Ev,_ZTv0_n24_N7S5798C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N7S5798C1D1Ev,_ZThn1124_N7S5798C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5798C1 = {  "S5798C1", // class name
  bases_S5798C1, 8,
  &(vtc_S5798C1[0]), // expected_vtbl_contents
  &(vtt_S5798C1[0]), // expected_vtt_contents
  ABISELECT(3952,2396), // object size
  NSPAIRA(_ZTI7S5798C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5798C1),33, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5798C1),11, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6981C2  {
  virtual  ~S6981C2(); // _ZN7S6981C2D1Ev
  virtual void  v5(); // _ZN7S6981C22v5Ev
  S6981C2(); // tgen
};
//SIG(-1 S6981C2) C1{ vd v1}


 S6981C2 ::~S6981C2(){ note_dtor("S6981C2", this);}
void  S6981C2 ::v5(){vfunc_called(this, "_ZN7S6981C22v5Ev");}
S6981C2 ::S6981C2(){ note_ctor("S6981C2", this);} // tgen

static void Test_S6981C2()
{
  extern Class_Descriptor cd_S6981C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6981C2, buf);
    S6981C2 *dp, &lv = *(dp=new (buf) S6981C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6981C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6981C2)");
    test_class_info(&lv, &cd_S6981C2);
    dp->~S6981C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6981C2(Test_S6981C2, "S6981C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6981C2C1Ev();
extern void _ZN7S6981C2D1Ev();
Name_Map name_map_S6981C2[] = {
  NSPAIR(_ZN7S6981C2C1Ev),
  NSPAIR(_ZN7S6981C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6981C2[];
extern void _ZN7S6981C2D1Ev();
extern void _ZN7S6981C2D0Ev();
extern void _ZN7S6981C22v5Ev();
static  VTBL_ENTRY vtc_S6981C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6981C2[0]),
  (VTBL_ENTRY)&_ZN7S6981C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6981C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S6981C2[];
extern  VTBL_ENTRY _ZTV7S6981C2[];
Class_Descriptor cd_S6981C2 = {  "S6981C2", // class name
  0,0,//no base classes
  &(vtc_S6981C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6981C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6981C2),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  S6981C5  : S6981C2 {
  void *s6981c5f0;
  __tsi64 s6981c5f1:7;
  virtual  ~S6981C5(); // _ZN7S6981C5D1Ev
  virtual void  v6(); // _ZN7S6981C52v6Ev
  virtual void  v7(); // _ZN7S6981C52v7Ev
  virtual void  v8(); // _ZN7S6981C52v8Ev
  virtual void  v9(); // _ZN7S6981C52v9Ev
  virtual void  v10(); // _ZN7S6981C53v10Ev
  S6981C5(); // tgen
};
//SIG(-1 S6981C5) C1{ BC2{ vd v6} vd v1 v2 v3 v4 v5 Fp FL:7}


 S6981C5 ::~S6981C5(){ note_dtor("S6981C5", this);}
void  S6981C5 ::v6(){vfunc_called(this, "_ZN7S6981C52v6Ev");}
void  S6981C5 ::v7(){vfunc_called(this, "_ZN7S6981C52v7Ev");}
void  S6981C5 ::v8(){vfunc_called(this, "_ZN7S6981C52v8Ev");}
void  S6981C5 ::v9(){vfunc_called(this, "_ZN7S6981C52v9Ev");}
void  S6981C5 ::v10(){vfunc_called(this, "_ZN7S6981C53v10Ev");}
S6981C5 ::S6981C5(){ note_ctor("S6981C5", this);} // tgen

static void Test_S6981C5()
{
  extern Class_Descriptor cd_S6981C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S6981C5, buf);
    S6981C5 *dp, &lv = *(dp=new (buf) S6981C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6981C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6981C5)");
    check_base_class_offset(lv, (S6981C2*), 0, "S6981C5");
    check_field_offset(lv, s6981c5f0, ABISELECT(8,4), "S6981C5.s6981c5f0");
    set_bf_and_test(lv, s6981c5f1, ABISELECT(16,8), 0, 7, 1, "S6981C5");
    set_bf_and_test(lv, s6981c5f1, ABISELECT(16,8), 0, 7, hide_sll(1LL<<6), "S6981C5");
    test_class_info(&lv, &cd_S6981C5);
    dp->~S6981C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6981C5(Test_S6981C5, "S6981C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6981C5C1Ev();
extern void _ZN7S6981C5D1Ev();
Name_Map name_map_S6981C5[] = {
  NSPAIR(_ZN7S6981C5C1Ev),
  NSPAIR(_ZN7S6981C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6981C2;
extern VTBL_ENTRY _ZTI7S6981C2[];
extern  VTBL_ENTRY _ZTV7S6981C2[];
static Base_Class bases_S6981C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6981C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S6981C5[];
extern void _ZN7S6981C5D1Ev();
extern void _ZN7S6981C5D0Ev();
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C52v6Ev();
extern void _ZN7S6981C52v7Ev();
extern void _ZN7S6981C52v8Ev();
extern void _ZN7S6981C52v9Ev();
extern void _ZN7S6981C53v10Ev();
static  VTBL_ENTRY vtc_S6981C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6981C5[0]),
  (VTBL_ENTRY)&_ZN7S6981C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6981C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6981C53v10Ev,
};
extern VTBL_ENTRY _ZTI7S6981C5[];
extern  VTBL_ENTRY _ZTV7S6981C5[];
Class_Descriptor cd_S6981C5 = {  "S6981C5", // class name
  bases_S6981C5, 1,
  &(vtc_S6981C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6981C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6981C5),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6981C6  {
  char s6981c6f0;
  long double s6981c6f1[7];
  virtual void  v11(); // _ZN7S6981C63v11Ev
  virtual void  v12(); // _ZN7S6981C63v12Ev
  virtual void  v13(); // _ZN7S6981C63v13Ev
  virtual void  v14(); // _ZN7S6981C63v14Ev
  ~S6981C6(); // tgen
  S6981C6(); // tgen
};
//SIG(-1 S6981C6) C1{ v1 v2 v3 v4 Fc FD[7]}


void  S6981C6 ::v11(){vfunc_called(this, "_ZN7S6981C63v11Ev");}
void  S6981C6 ::v12(){vfunc_called(this, "_ZN7S6981C63v12Ev");}
void  S6981C6 ::v13(){vfunc_called(this, "_ZN7S6981C63v13Ev");}
void  S6981C6 ::v14(){vfunc_called(this, "_ZN7S6981C63v14Ev");}
S6981C6 ::~S6981C6(){ note_dtor("S6981C6", this);} // tgen
S6981C6 ::S6981C6(){ note_ctor("S6981C6", this);} // tgen

static void Test_S6981C6()
{
  extern Class_Descriptor cd_S6981C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,24)];
    init_test(&cd_S6981C6, buf);
    S6981C6 *dp, &lv = *(dp=new (buf) S6981C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,92), "sizeof(S6981C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6981C6)");
    check_field_offset(lv, s6981c6f0, ABISELECT(8,4), "S6981C6.s6981c6f0");
    check_field_offset(lv, s6981c6f1, ABISELECT(16,8), "S6981C6.s6981c6f1");
    test_class_info(&lv, &cd_S6981C6);
    dp->~S6981C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6981C6(Test_S6981C6, "S6981C6", ABISELECT(128,92));

#else // __cplusplus

extern void _ZN7S6981C6C1Ev();
extern void _ZN7S6981C6D1Ev();
Name_Map name_map_S6981C6[] = {
  NSPAIR(_ZN7S6981C6C1Ev),
  NSPAIR(_ZN7S6981C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6981C6[];
extern void _ZN7S6981C63v11Ev();
extern void _ZN7S6981C63v12Ev();
extern void _ZN7S6981C63v13Ev();
extern void _ZN7S6981C63v14Ev();
static  VTBL_ENTRY vtc_S6981C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6981C6[0]),
  (VTBL_ENTRY)&_ZN7S6981C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v14Ev,
};
extern VTBL_ENTRY _ZTI7S6981C6[];
extern  VTBL_ENTRY _ZTV7S6981C6[];
Class_Descriptor cd_S6981C6 = {  "S6981C6", // class name
  0,0,//no base classes
  &(vtc_S6981C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,92), // object size
  NSPAIRA(_ZTI7S6981C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6981C6),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  S6981C4  : S6981C5 , virtual S6981C6 {
  int s6981c4f0;
  virtual  ~S6981C4(); // _ZN7S6981C4D2Ev
  virtual void  v15(); // _ZN7S6981C43v15Ev
  virtual void  v16(); // _ZN7S6981C43v16Ev
  virtual void  v17(); // _ZN7S6981C43v17Ev
  virtual void  v18(); // _ZN7S6981C43v18Ev
  virtual void  v19(); // _ZN7S6981C43v19Ev
  virtual void  v20(); // _ZN7S6981C43v20Ev
  S6981C4(); // tgen
};
//SIG(-1 S6981C4) C1{ BC2{ BC3{ vd v7} vd v8 v9 v10 v11 v12 Fp FL:7} VBC4{ v13 v14 v15 v16 Fc FD[7]} vd v1 v2 v3 v4 v5 v6 Fi}


 S6981C4 ::~S6981C4(){ note_dtor("S6981C4", this);}
void  S6981C4 ::v15(){vfunc_called(this, "_ZN7S6981C43v15Ev");}
void  S6981C4 ::v16(){vfunc_called(this, "_ZN7S6981C43v16Ev");}
void  S6981C4 ::v17(){vfunc_called(this, "_ZN7S6981C43v17Ev");}
void  S6981C4 ::v18(){vfunc_called(this, "_ZN7S6981C43v18Ev");}
void  S6981C4 ::v19(){vfunc_called(this, "_ZN7S6981C43v19Ev");}
void  S6981C4 ::v20(){vfunc_called(this, "_ZN7S6981C43v20Ev");}
S6981C4 ::S6981C4(){ note_ctor("S6981C4", this);} // tgen

static void Test_S6981C4()
{
  extern Class_Descriptor cd_S6981C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S6981C4, buf);
    S6981C4 *dp, &lv = *(dp=new (buf) S6981C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S6981C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6981C4)");
    check_base_class_offset(lv, (S6981C2*)(S6981C5*), 0, "S6981C4");
    check_base_class_offset(lv, (S6981C5*), 0, "S6981C4");
    check_base_class_offset(lv, (S6981C6*), ABISELECT(32,16), "S6981C4");
    check_field_offset(lv, s6981c4f0, ABISELECT(20,12), "S6981C4.s6981c4f0");
    test_class_info(&lv, &cd_S6981C4);
    dp->~S6981C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6981C4(Test_S6981C4, "S6981C4", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN7S6981C4C1Ev();
extern void _ZN7S6981C4D2Ev();
Name_Map name_map_S6981C4[] = {
  NSPAIR(_ZN7S6981C4C1Ev),
  NSPAIR(_ZN7S6981C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6981C2;
extern VTBL_ENTRY _ZTI7S6981C2[];
extern  VTBL_ENTRY _ZTV7S6981C2[];
extern Class_Descriptor cd_S6981C5;
extern VTBL_ENTRY _ZTI7S6981C5[];
extern  VTBL_ENTRY _ZTV7S6981C5[];
extern Class_Descriptor cd_S6981C6;
extern VTBL_ENTRY _ZTI7S6981C6[];
extern  VTBL_ENTRY _ZTV7S6981C6[];
static Base_Class bases_S6981C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6981C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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
  0, 0},
  {&cd_S6981C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6981C6,    ABISELECT(32,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6981C4[];
extern void _ZN7S6981C4D1Ev();
extern void _ZN7S6981C4D0Ev();
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C52v6Ev();
extern void _ZN7S6981C52v7Ev();
extern void _ZN7S6981C52v8Ev();
extern void _ZN7S6981C52v9Ev();
extern void _ZN7S6981C53v10Ev();
extern void _ZN7S6981C43v15Ev();
extern void _ZN7S6981C43v16Ev();
extern void _ZN7S6981C43v17Ev();
extern void _ZN7S6981C43v18Ev();
extern void _ZN7S6981C43v19Ev();
extern void _ZN7S6981C43v20Ev();
extern void _ZN7S6981C63v11Ev();
extern void _ZN7S6981C63v12Ev();
extern void _ZN7S6981C63v13Ev();
extern void _ZN7S6981C63v14Ev();
static  VTBL_ENTRY vtc_S6981C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6981C4[0]),
  (VTBL_ENTRY)&_ZN7S6981C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6981C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6981C53v10Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v16Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v17Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v18Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v19Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6981C4[0]),
  (VTBL_ENTRY)&_ZN7S6981C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v14Ev,
};
extern VTBL_ENTRY _ZTV7S6981C4[];
static  VTT_ENTRY vtt_S6981C4[] = {
  {&(_ZTV7S6981C4[3]),  3,27},
  {&(_ZTV7S6981C4[23]),  23,27},
};
extern VTBL_ENTRY _ZTI7S6981C4[];
extern  VTBL_ENTRY _ZTV7S6981C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6981C4[];
Class_Descriptor cd_S6981C4 = {  "S6981C4", // class name
  bases_S6981C4, 3,
  &(vtc_S6981C4[0]), // expected_vtbl_contents
  &(vtt_S6981C4[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI7S6981C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6981C4),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6981C4),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6981C7  : virtual S6981C5 , S6981C2 {
  ::S6981C2 s6981c7f0;
  int s6981c7f1;
  ::S6981C2 s6981c7f2[9];
  virtual  ~S6981C7(); // _ZN7S6981C7D2Ev
  virtual void  v21(); // _ZN7S6981C73v21Ev
  virtual void  v22(); // _ZN7S6981C73v22Ev
  virtual void  v23(); // _ZN7S6981C73v23Ev
  virtual void  v24(); // _ZN7S6981C73v24Ev
  S6981C7(); // tgen
};
//SIG(-1 S6981C7) C1{ VBC2{ BC3{ vd v5} vd v6 v7 v8 v9 v10 Fp FL:7} BC3 vd v1 v2 v3 v4 FC3 Fi FC3[9]}


 S6981C7 ::~S6981C7(){ note_dtor("S6981C7", this);}
void  S6981C7 ::v21(){vfunc_called(this, "_ZN7S6981C73v21Ev");}
void  S6981C7 ::v22(){vfunc_called(this, "_ZN7S6981C73v22Ev");}
void  S6981C7 ::v23(){vfunc_called(this, "_ZN7S6981C73v23Ev");}
void  S6981C7 ::v24(){vfunc_called(this, "_ZN7S6981C73v24Ev");}
S6981C7 ::S6981C7(){ note_ctor("S6981C7", this);} // tgen

static void Test_S6981C7()
{
  extern Class_Descriptor cd_S6981C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,16)];
    init_test(&cd_S6981C7, buf);
    S6981C7 *dp, &lv = *(dp=new (buf) S6981C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S6981C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6981C7)");
    check_base_class_offset(lv, (S6981C2*)(S6981C5*), ABISELECT(96,48), "S6981C7");
    check_base_class_offset(lv, (S6981C5*), ABISELECT(96,48), "S6981C7");
    /*is_ambiguous_... S6981C7::S6981C2 */ AMB_check_base_class_offset(lv, (S6981C2*), 0, "S6981C7");
    check_field_offset(lv, s6981c7f0, ABISELECT(8,4), "S6981C7.s6981c7f0");
    check_field_offset(lv, s6981c7f1, ABISELECT(16,8), "S6981C7.s6981c7f1");
    check_field_offset(lv, s6981c7f2, ABISELECT(24,12), "S6981C7.s6981c7f2");
    test_class_info(&lv, &cd_S6981C7);
    dp->~S6981C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6981C7(Test_S6981C7, "S6981C7", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN7S6981C7C1Ev();
extern void _ZN7S6981C7D2Ev();
Name_Map name_map_S6981C7[] = {
  NSPAIR(_ZN7S6981C7C1Ev),
  NSPAIR(_ZN7S6981C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6981C2;
extern VTBL_ENTRY _ZTI7S6981C2[];
extern  VTBL_ENTRY _ZTV7S6981C2[];
extern Class_Descriptor cd_S6981C5;
extern VTBL_ENTRY _ZTI7S6981C5[];
extern  VTBL_ENTRY _ZTV7S6981C5[];
extern Class_Descriptor cd_S6981C2;
extern VTBL_ENTRY _ZTI7S6981C2[];
extern  VTBL_ENTRY _ZTV7S6981C2[];
static Base_Class bases_S6981C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6981C2,    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
    1, //immediately_derived
  0, 0},
  {&cd_S6981C5,    ABISELECT(96,48), //bcp->offset
    10, //bcp->virtual_function_table_offset
    9, //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_S6981C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S6981C7[];
extern void _ZN7S6981C7D1Ev();
extern void _ZN7S6981C7D0Ev();
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C73v21Ev();
extern void _ZN7S6981C73v22Ev();
extern void _ZN7S6981C73v23Ev();
extern void _ZN7S6981C73v24Ev();
extern void ABISELECT(_ZTv0_n24_N7S6981C7D1Ev,_ZTv0_n12_N7S6981C7D1Ev)();
extern void ABISELECT(_ZThn96_N7S6981C7D1Ev,_ZThn48_N7S6981C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6981C7D0Ev,_ZTv0_n12_N7S6981C7D0Ev)();
extern void ABISELECT(_ZThn96_N7S6981C7D0Ev,_ZThn48_N7S6981C7D0Ev)() __attribute__((weak));
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C52v6Ev();
extern void _ZN7S6981C52v7Ev();
extern void _ZN7S6981C52v8Ev();
extern void _ZN7S6981C52v9Ev();
extern void _ZN7S6981C53v10Ev();
static  VTBL_ENTRY vtc_S6981C7[] = {
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S6981C7[0]),
  (VTBL_ENTRY)&_ZN7S6981C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6981C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v21Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v22Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v23Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S6981C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C7D1Ev,_ZTv0_n12_N7S6981C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C7D0Ev,_ZTv0_n12_N7S6981C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6981C53v10Ev,
};
extern VTBL_ENTRY _ZTV7S6981C7[];
static  VTT_ENTRY vtt_S6981C7[] = {
  {&(_ZTV7S6981C7[3]),  3,27},
  {&(_ZTV7S6981C7[19]),  19,27},
};
extern VTBL_ENTRY _ZTI7S6981C7[];
extern  VTBL_ENTRY _ZTV7S6981C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6981C7[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6981C7D0Ev,_ZTv0_n12_N7S6981C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6981C7D0Ev,_ZThn48_N7S6981C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6981C7D1Ev,_ZTv0_n12_N7S6981C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6981C7D1Ev,_ZThn48_N7S6981C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6981C7 = {  "S6981C7", // class name
  bases_S6981C7, 3,
  &(vtc_S6981C7[0]), // expected_vtbl_contents
  &(vtt_S6981C7[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI7S6981C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6981C7),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6981C7),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6981C9  {
  ::S6981C2 s6981c9f0;
  virtual  ~S6981C9(); // _ZN7S6981C9D1Ev
  virtual void  v25(); // _ZN7S6981C93v25Ev
  virtual void  v26(); // _ZN7S6981C93v26Ev
  virtual void  v27(); // _ZN7S6981C93v27Ev
  virtual void  v28(); // _ZN7S6981C93v28Ev
  S6981C9(); // tgen
};
//SIG(-1 S6981C9) C1{ vd v1 v2 v3 v4 FC2{ vd v5}}


 S6981C9 ::~S6981C9(){ note_dtor("S6981C9", this);}
void  S6981C9 ::v25(){vfunc_called(this, "_ZN7S6981C93v25Ev");}
void  S6981C9 ::v26(){vfunc_called(this, "_ZN7S6981C93v26Ev");}
void  S6981C9 ::v27(){vfunc_called(this, "_ZN7S6981C93v27Ev");}
void  S6981C9 ::v28(){vfunc_called(this, "_ZN7S6981C93v28Ev");}
S6981C9 ::S6981C9(){ note_ctor("S6981C9", this);} // tgen

static void Test_S6981C9()
{
  extern Class_Descriptor cd_S6981C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6981C9, buf);
    S6981C9 *dp, &lv = *(dp=new (buf) S6981C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6981C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6981C9)");
    check_field_offset(lv, s6981c9f0, ABISELECT(8,4), "S6981C9.s6981c9f0");
    test_class_info(&lv, &cd_S6981C9);
    dp->~S6981C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6981C9(Test_S6981C9, "S6981C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6981C9C1Ev();
extern void _ZN7S6981C9D1Ev();
Name_Map name_map_S6981C9[] = {
  NSPAIR(_ZN7S6981C9C1Ev),
  NSPAIR(_ZN7S6981C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6981C9[];
extern void _ZN7S6981C9D1Ev();
extern void _ZN7S6981C9D0Ev();
extern void _ZN7S6981C93v25Ev();
extern void _ZN7S6981C93v26Ev();
extern void _ZN7S6981C93v27Ev();
extern void _ZN7S6981C93v28Ev();
static  VTBL_ENTRY vtc_S6981C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6981C9[0]),
  (VTBL_ENTRY)&_ZN7S6981C9D1Ev,
  (VTBL_ENTRY)&_ZN7S6981C9D0Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v25Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v26Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v27Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v28Ev,
};
extern VTBL_ENTRY _ZTI7S6981C9[];
extern  VTBL_ENTRY _ZTV7S6981C9[];
Class_Descriptor cd_S6981C9 = {  "S6981C9", // class name
  0,0,//no base classes
  &(vtc_S6981C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6981C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6981C9),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6981C8  : virtual S6981C6 , S6981C9 , virtual S6981C2 {
  void *s6981c8f0;
  int s6981c8f1;
  __tsi64 s6981c8f2[3];
  virtual  ~S6981C8(); // _ZN7S6981C8D2Ev
  virtual void  v29(); // _ZN7S6981C83v29Ev
  virtual void  v30(); // _ZN7S6981C83v30Ev
  virtual void  v31(); // _ZN7S6981C83v31Ev
  virtual void  v32(); // _ZN7S6981C83v32Ev
  S6981C8(); // tgen
};
//SIG(-1 S6981C8) C1{ VBC2{ v5 v6 v7 v8 Fc FD[7]} BC3{ vd v9 v10 v11 v12 FC4{ vd v13}} VBC4 vd v1 v2 v3 v4 Fp Fi FL[3]}


 S6981C8 ::~S6981C8(){ note_dtor("S6981C8", this);}
void  S6981C8 ::v29(){vfunc_called(this, "_ZN7S6981C83v29Ev");}
void  S6981C8 ::v30(){vfunc_called(this, "_ZN7S6981C83v30Ev");}
void  S6981C8 ::v31(){vfunc_called(this, "_ZN7S6981C83v31Ev");}
void  S6981C8 ::v32(){vfunc_called(this, "_ZN7S6981C83v32Ev");}
S6981C8 ::S6981C8(){ note_ctor("S6981C8", this);} // tgen

static void Test_S6981C8()
{
  extern Class_Descriptor cd_S6981C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,35)];
    init_test(&cd_S6981C8, buf);
    S6981C8 *dp, &lv = *(dp=new (buf) S6981C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,136), "sizeof(S6981C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6981C8)");
    check_base_class_offset(lv, (S6981C6*), ABISELECT(64,40), "S6981C8");
    check_base_class_offset(lv, (S6981C9*), 0, "S6981C8");
    check_base_class_offset(lv, (S6981C2*), ABISELECT(192,132), "S6981C8");
    check_field_offset(lv, s6981c8f0, ABISELECT(16,8), "S6981C8.s6981c8f0");
    check_field_offset(lv, s6981c8f1, ABISELECT(24,12), "S6981C8.s6981c8f1");
    check_field_offset(lv, s6981c8f2, ABISELECT(32,16), "S6981C8.s6981c8f2");
    test_class_info(&lv, &cd_S6981C8);
    dp->~S6981C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6981C8(Test_S6981C8, "S6981C8", ABISELECT(208,136));

#else // __cplusplus

extern void _ZN7S6981C8C1Ev();
extern void _ZN7S6981C8D2Ev();
Name_Map name_map_S6981C8[] = {
  NSPAIR(_ZN7S6981C8C1Ev),
  NSPAIR(_ZN7S6981C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6981C6;
extern VTBL_ENTRY _ZTI7S6981C6[];
extern  VTBL_ENTRY _ZTV7S6981C6[];
extern Class_Descriptor cd_S6981C9;
extern VTBL_ENTRY _ZTI7S6981C9[];
extern  VTBL_ENTRY _ZTV7S6981C9[];
extern Class_Descriptor cd_S6981C2;
extern VTBL_ENTRY _ZTI7S6981C2[];
extern  VTBL_ENTRY _ZTV7S6981C2[];
static Base_Class bases_S6981C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6981C6,    ABISELECT(64,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6981C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6981C2,    ABISELECT(192,132), //bcp->offset
    24, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6981C8[];
extern void _ZN7S6981C8D1Ev();
extern void _ZN7S6981C8D0Ev();
extern void _ZN7S6981C93v25Ev();
extern void _ZN7S6981C93v26Ev();
extern void _ZN7S6981C93v27Ev();
extern void _ZN7S6981C93v28Ev();
extern void _ZN7S6981C83v29Ev();
extern void _ZN7S6981C83v30Ev();
extern void _ZN7S6981C83v31Ev();
extern void _ZN7S6981C83v32Ev();
extern void _ZN7S6981C63v11Ev();
extern void _ZN7S6981C63v12Ev();
extern void _ZN7S6981C63v13Ev();
extern void _ZN7S6981C63v14Ev();
extern void ABISELECT(_ZTv0_n24_N7S6981C8D1Ev,_ZTv0_n12_N7S6981C8D1Ev)();
extern void ABISELECT(_ZThn192_N7S6981C8D1Ev,_ZThn132_N7S6981C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6981C8D0Ev,_ZTv0_n12_N7S6981C8D0Ev)();
extern void ABISELECT(_ZThn192_N7S6981C8D0Ev,_ZThn132_N7S6981C8D0Ev)() __attribute__((weak));
extern void _ZN7S6981C22v5Ev();
static  VTBL_ENTRY vtc_S6981C8[] = {
  ABISELECT(192,132),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S6981C8[0]),
  (VTBL_ENTRY)&_ZN7S6981C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6981C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v25Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v26Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v27Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v28Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v29Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v30Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v31Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v32Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S6981C8[0]),
  (VTBL_ENTRY)&_ZN7S6981C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v14Ev,
  0,
  ABISELECT(-192,-132),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI7S6981C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C8D1Ev,_ZTv0_n12_N7S6981C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C8D0Ev,_ZTv0_n12_N7S6981C8D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
};
extern VTBL_ENTRY _ZTV7S6981C8[];
static  VTT_ENTRY vtt_S6981C8[] = {
  {&(_ZTV7S6981C8[4]),  4,31},
  {&(_ZTV7S6981C8[20]),  20,31},
  {&(_ZTV7S6981C8[28]),  28,31},
};
extern VTBL_ENTRY _ZTI7S6981C8[];
extern  VTBL_ENTRY _ZTV7S6981C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6981C8[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6981C8D0Ev,_ZTv0_n12_N7S6981C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S6981C8D0Ev,_ZThn132_N7S6981C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6981C8D1Ev,_ZTv0_n12_N7S6981C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S6981C8D1Ev,_ZThn132_N7S6981C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6981C8 = {  "S6981C8", // class name
  bases_S6981C8, 3,
  &(vtc_S6981C8[0]), // expected_vtbl_contents
  &(vtt_S6981C8[0]), // expected_vtt_contents
  ABISELECT(208,136), // object size
  NSPAIRA(_ZTI7S6981C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6981C8),31, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6981C8),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6981C3  : S6981C4 , virtual S6981C7 , virtual S6981C2 , virtual S6981C8 {
  int s6981c3f0[2];
  char s6981c3f1;
  virtual  ~S6981C3(); // _ZN7S6981C3D2Ev
  S6981C3(); // tgen
};
//SIG(-1 S6981C3) C1{ BC2{ BC3{ BC4{ vd v1} vd v2 v3 v4 v5 v6 Fp FL:7} VBC5{ v7 v8 v9 v10 Fc FD[7]} vd v11 v12 v13 v14 v15 v16 Fi} VBC6{ VBC3 BC4 vd v17 v18 v19 v20 FC4 Fi FC4[9]} VBC4 VBC7{ VBC5 BC8{ vd v21 v22 v23 v24 FC4} VBC4 vd v25 v26 v27 v28 Fp Fi FL[3]} vd Fi[2] Fc}


 S6981C3 ::~S6981C3(){ note_dtor("S6981C3", this);}
S6981C3 ::S6981C3(){ note_ctor("S6981C3", this);} // tgen

static void Test_S6981C3()
{
  extern Class_Descriptor cd_S6981C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,57)];
    init_test(&cd_S6981C3, buf);
    S6981C3 *dp, &lv = *(dp=new (buf) S6981C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,224), "sizeof(S6981C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6981C3)");
    check_base_class_offset(lv, (S6981C2*)(S6981C5*)(S6981C4*), 0, "S6981C3");
    check_base_class_offset(lv, (S6981C5*)(S6981C4*), 0, "S6981C3");
    check_base_class_offset(lv, (S6981C6*)(S6981C4*), ABISELECT(48,28), "S6981C3");
    check_base_class_offset(lv, (S6981C6*)(S6981C8*), ABISELECT(48,28), "S6981C3");
    check_base_class_offset(lv, (S6981C4*), 0, "S6981C3");
    /*is_ambiguous_... S6981C3::S6981C5 */ AMB_check_base_class_offset(lv, (S6981C2*)(S6981C5*), ABISELECT(272,168), "S6981C3");
    check_base_class_offset(lv, (S6981C5*)(S6981C7*), ABISELECT(272,168), "S6981C3");
    /*is_ambiguous_... S6981C7::S6981C2 */ AMB_check_base_class_offset(lv, (S6981C2*)(S6981C7*), ABISELECT(176,120), "S6981C3");
    check_base_class_offset(lv, (S6981C7*), ABISELECT(176,120), "S6981C3");
    /*is_ambiguous_... S6981C3::S6981C2 */ AMB_check_base_class_offset(lv, (S6981C2*), ABISELECT(296,180), "S6981C3");
    check_base_class_offset(lv, (S6981C2*)(S6981C8*), ABISELECT(296,180), "S6981C3");
    check_base_class_offset(lv, (S6981C9*)(S6981C8*), ABISELECT(304,184), "S6981C3");
    check_base_class_offset(lv, (S6981C8*), ABISELECT(304,184), "S6981C3");
    check_field_offset(lv, s6981c3f0, ABISELECT(24,16), "S6981C3.s6981c3f0");
    check_field_offset(lv, s6981c3f1, ABISELECT(32,24), "S6981C3.s6981c3f1");
    test_class_info(&lv, &cd_S6981C3);
    dp->~S6981C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6981C3(Test_S6981C3, "S6981C3", ABISELECT(368,224));

#else // __cplusplus

extern void _ZN7S6981C3C1Ev();
extern void _ZN7S6981C3D2Ev();
Name_Map name_map_S6981C3[] = {
  NSPAIR(_ZN7S6981C3C1Ev),
  NSPAIR(_ZN7S6981C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6981C2;
extern VTBL_ENTRY _ZTI7S6981C2[];
extern  VTBL_ENTRY _ZTV7S6981C2[];
extern Class_Descriptor cd_S6981C5;
extern VTBL_ENTRY _ZTI7S6981C5[];
extern  VTBL_ENTRY _ZTV7S6981C5[];
extern Class_Descriptor cd_S6981C6;
extern VTBL_ENTRY _ZTI7S6981C6[];
extern  VTBL_ENTRY _ZTV7S6981C6[];
extern Class_Descriptor cd_S6981C4;
extern VTBL_ENTRY _ZTI7S6981C4[];
extern  VTBL_ENTRY _ZTV7S6981C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6981C4[];
extern Class_Descriptor cd_S6981C2;
extern VTBL_ENTRY _ZTI7S6981C2[];
extern  VTBL_ENTRY _ZTV7S6981C2[];
extern Class_Descriptor cd_S6981C5;
extern VTBL_ENTRY _ZTI7S6981C5[];
extern  VTBL_ENTRY _ZTV7S6981C5[];
extern Class_Descriptor cd_S6981C2;
extern VTBL_ENTRY _ZTI7S6981C2[];
extern  VTBL_ENTRY _ZTV7S6981C2[];
extern Class_Descriptor cd_S6981C7;
extern VTBL_ENTRY _ZTI7S6981C7[];
extern  VTBL_ENTRY _ZTV7S6981C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6981C7[];
extern Class_Descriptor cd_S6981C2;
extern VTBL_ENTRY _ZTI7S6981C2[];
extern  VTBL_ENTRY _ZTV7S6981C2[];
extern Class_Descriptor cd_S6981C9;
extern VTBL_ENTRY _ZTI7S6981C9[];
extern  VTBL_ENTRY _ZTV7S6981C9[];
extern Class_Descriptor cd_S6981C8;
extern VTBL_ENTRY _ZTI7S6981C8[];
extern  VTBL_ENTRY _ZTV7S6981C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6981C8[];
static Base_Class bases_S6981C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6981C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S6981C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S6981C6,    ABISELECT(48,28), //bcp->offset
    21, //bcp->virtual_function_table_offset
    6, //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
    3, //immediately_derived
  0, 1},
  {&cd_S6981C4,    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_S6981C2,    ABISELECT(272,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6981C5,    ABISELECT(272,168), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //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
    7, //immediately_derived
  0, 1},
  {&cd_S6981C2,    ABISELECT(176,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
    7, //immediately_derived
  0, 0},
  {&cd_S6981C7,    ABISELECT(176,120), //bcp->offset
    31, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6981C2,    ABISELECT(296,180), //bcp->offset
    64, //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_S6981C9,    ABISELECT(304,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
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6981C8,    ABISELECT(304,184), //bcp->offset
    71, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6981C3[];
extern void _ZN7S6981C3D1Ev();
extern void _ZN7S6981C3D0Ev();
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C52v6Ev();
extern void _ZN7S6981C52v7Ev();
extern void _ZN7S6981C52v8Ev();
extern void _ZN7S6981C52v9Ev();
extern void _ZN7S6981C53v10Ev();
extern void _ZN7S6981C43v15Ev();
extern void _ZN7S6981C43v16Ev();
extern void _ZN7S6981C43v17Ev();
extern void _ZN7S6981C43v18Ev();
extern void _ZN7S6981C43v19Ev();
extern void _ZN7S6981C43v20Ev();
extern void _ZN7S6981C63v11Ev();
extern void _ZN7S6981C63v12Ev();
extern void _ZN7S6981C63v13Ev();
extern void _ZN7S6981C63v14Ev();
extern void ABISELECT(_ZTv0_n32_N7S6981C3D1Ev,_ZTv0_n16_N7S6981C3D1Ev)();
extern void ABISELECT(_ZThn176_N7S6981C3D1Ev,_ZThn120_N7S6981C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6981C3D0Ev,_ZTv0_n16_N7S6981C3D0Ev)();
extern void ABISELECT(_ZThn176_N7S6981C3D0Ev,_ZThn120_N7S6981C3D0Ev)() __attribute__((weak));
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C73v21Ev();
extern void _ZN7S6981C73v22Ev();
extern void _ZN7S6981C73v23Ev();
extern void _ZN7S6981C73v24Ev();
extern void ABISELECT(_ZTv0_n24_N7S6981C3D1Ev,_ZTv0_n12_N7S6981C3D1Ev)();
extern void ABISELECT(_ZThn272_N7S6981C3D1Ev,_ZThn168_N7S6981C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6981C3D0Ev,_ZTv0_n12_N7S6981C3D0Ev)();
extern void ABISELECT(_ZThn272_N7S6981C3D0Ev,_ZThn168_N7S6981C3D0Ev)() __attribute__((weak));
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C52v6Ev();
extern void _ZN7S6981C52v7Ev();
extern void _ZN7S6981C52v8Ev();
extern void _ZN7S6981C52v9Ev();
extern void _ZN7S6981C53v10Ev();
extern void ABISELECT(_ZTv0_n24_N7S6981C3D1Ev,_ZTv0_n12_N7S6981C3D1Ev)();
extern void ABISELECT(_ZThn296_N7S6981C3D1Ev,_ZThn180_N7S6981C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6981C3D0Ev,_ZTv0_n12_N7S6981C3D0Ev)();
extern void ABISELECT(_ZThn296_N7S6981C3D0Ev,_ZThn180_N7S6981C3D0Ev)() __attribute__((weak));
extern void _ZN7S6981C22v5Ev();
extern void ABISELECT(_ZTv0_n40_N7S6981C3D1Ev,_ZTv0_n20_N7S6981C3D1Ev)();
extern void ABISELECT(_ZThn304_N7S6981C3D1Ev,_ZThn184_N7S6981C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6981C3D0Ev,_ZTv0_n20_N7S6981C3D0Ev)();
extern void ABISELECT(_ZThn304_N7S6981C3D0Ev,_ZThn184_N7S6981C3D0Ev)() __attribute__((weak));
extern void _ZN7S6981C93v25Ev();
extern void _ZN7S6981C93v26Ev();
extern void _ZN7S6981C93v27Ev();
extern void _ZN7S6981C93v28Ev();
extern void _ZN7S6981C83v29Ev();
extern void _ZN7S6981C83v30Ev();
extern void _ZN7S6981C83v31Ev();
extern void _ZN7S6981C83v32Ev();
static  VTBL_ENTRY vtc_S6981C3[] = {
  ABISELECT(304,184),
  ABISELECT(296,180),
  ABISELECT(272,168),
  ABISELECT(176,120),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6981C3[0]),
  (VTBL_ENTRY)&_ZN7S6981C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6981C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6981C53v10Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v16Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v17Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v18Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v19Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S6981C3[0]),
  (VTBL_ENTRY)&_ZN7S6981C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v14Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-120),
  ABISELECT(96,48),
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI7S6981C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6981C3D1Ev,_ZTv0_n16_N7S6981C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6981C3D0Ev,_ZTv0_n16_N7S6981C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v21Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v22Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v23Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-272,-168),
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI7S6981C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C3D1Ev,_ZTv0_n12_N7S6981C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C3D0Ev,_ZTv0_n12_N7S6981C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6981C53v10Ev,
  0,
  ABISELECT(-296,-180),
  ABISELECT(-296,-180),
  (VTBL_ENTRY)&(_ZTI7S6981C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C3D1Ev,_ZTv0_n12_N7S6981C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C3D0Ev,_ZTv0_n12_N7S6981C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-184),
  ABISELECT(-8,-4),
  ABISELECT(-256,-156),
  ABISELECT(-304,-184),
  (VTBL_ENTRY)&(_ZTI7S6981C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6981C3D1Ev,_ZTv0_n20_N7S6981C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6981C3D0Ev,_ZTv0_n20_N7S6981C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C93v25Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v26Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v27Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v28Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v29Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v30Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v31Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v32Ev,
};
extern VTBL_ENTRY _ZTV7S6981C3[];
extern void _ZN7S6981C4D1Ev();
extern void _ZN7S6981C4D0Ev();
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C52v6Ev();
extern void _ZN7S6981C52v7Ev();
extern void _ZN7S6981C52v8Ev();
extern void _ZN7S6981C52v9Ev();
extern void _ZN7S6981C53v10Ev();
extern void _ZN7S6981C43v15Ev();
extern void _ZN7S6981C43v16Ev();
extern void _ZN7S6981C43v17Ev();
extern void _ZN7S6981C43v18Ev();
extern void _ZN7S6981C43v19Ev();
extern void _ZN7S6981C43v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C4__7S6981C3[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6981C4[0]),
  (VTBL_ENTRY)&_ZN7S6981C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6981C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6981C53v10Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v16Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v17Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v18Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v19Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v20Ev,
};
extern void _ZN7S6981C63v11Ev();
extern void _ZN7S6981C63v12Ev();
extern void _ZN7S6981C63v13Ev();
extern void _ZN7S6981C63v14Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C6__7S6981C4__7S6981C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S6981C4[0]),
  (VTBL_ENTRY)&_ZN7S6981C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v14Ev,
};
extern void _ZN7S6981C7D1Ev();
extern void _ZN7S6981C7D0Ev();
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C73v21Ev();
extern void _ZN7S6981C73v22Ev();
extern void _ZN7S6981C73v23Ev();
extern void _ZN7S6981C73v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C7__7S6981C3[] = {
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S6981C7[0]),
  (VTBL_ENTRY)&_ZN7S6981C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6981C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v21Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v22Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v23Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6981C7D1Ev,_ZTv0_n12_N7S6981C7D1Ev)();
extern void ABISELECT(_ZThn96_N7S6981C7D1Ev,_ZThn48_N7S6981C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6981C7D0Ev,_ZTv0_n12_N7S6981C7D0Ev)();
extern void ABISELECT(_ZThn96_N7S6981C7D0Ev,_ZThn48_N7S6981C7D0Ev)() __attribute__((weak));
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C52v6Ev();
extern void _ZN7S6981C52v7Ev();
extern void _ZN7S6981C52v8Ev();
extern void _ZN7S6981C52v9Ev();
extern void _ZN7S6981C53v10Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C5__7S6981C7__7S6981C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S6981C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C7D1Ev,_ZTv0_n12_N7S6981C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C7D0Ev,_ZTv0_n12_N7S6981C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6981C53v10Ev,
};
extern void _ZN7S6981C8D1Ev();
extern void _ZN7S6981C8D0Ev();
extern void _ZN7S6981C93v25Ev();
extern void _ZN7S6981C93v26Ev();
extern void _ZN7S6981C93v27Ev();
extern void _ZN7S6981C93v28Ev();
extern void _ZN7S6981C83v29Ev();
extern void _ZN7S6981C83v30Ev();
extern void _ZN7S6981C83v31Ev();
extern void _ZN7S6981C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C8__7S6981C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S6981C8[0]),
  (VTBL_ENTRY)&_ZN7S6981C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6981C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v25Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v26Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v27Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v28Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v29Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v30Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v31Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v32Ev,
};
extern void _ZN7S6981C63v11Ev();
extern void _ZN7S6981C63v12Ev();
extern void _ZN7S6981C63v13Ev();
extern void _ZN7S6981C63v14Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C6__7S6981C8__7S6981C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(256,156),
  (VTBL_ENTRY)&(_ZTI7S6981C8[0]),
  (VTBL_ENTRY)&_ZN7S6981C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6981C8D1Ev,_ZTv0_n12_N7S6981C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S6981C8D0Ev,_ZTv0_n12_N7S6981C8D0Ev)();
extern void _ZN7S6981C22v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C2__7S6981C8__7S6981C3[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S6981C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C8D1Ev,_ZTv0_n12_N7S6981C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C8D0Ev,_ZTv0_n12_N7S6981C8D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
};
static  VTT_ENTRY vtt_S6981C3[] = {
  {&(_ZTV7S6981C3[7]),  7,94},
  {&(_tg__ZTV7S6981C4__7S6981C3[3]),  3,17},
  {&(_tg__ZTV7S6981C6__7S6981C4__7S6981C3[6]),  6,10},
  {&(_ZTV7S6981C3[27]),  27,94},
  {&(_ZTV7S6981C3[40]),  40,94},
  {&(_ZTV7S6981C3[56]),  56,94},
  {&(_ZTV7S6981C3[68]),  68,94},
  {&(_ZTV7S6981C3[84]),  84,94},
  {&(_tg__ZTV7S6981C7__7S6981C3[3]),  3,10},
  {&(_tg__ZTV7S6981C5__7S6981C7__7S6981C3[9]),  9,17},
  {&(_tg__ZTV7S6981C8__7S6981C3[4]),  4,14},
  {&(_tg__ZTV7S6981C6__7S6981C8__7S6981C3[6]),  6,10},
  {&(_tg__ZTV7S6981C2__7S6981C8__7S6981C3[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S6981C3[];
extern  VTBL_ENTRY _ZTV7S6981C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6981C3[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6981C7D0Ev,_ZTv0_n12_N7S6981C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6981C7D0Ev,_ZThn48_N7S6981C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6981C7D1Ev,_ZTv0_n12_N7S6981C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6981C7D1Ev,_ZThn48_N7S6981C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6981C3D0Ev,_ZTv0_n20_N7S6981C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S6981C3D0Ev,_ZThn184_N7S6981C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6981C3D1Ev,_ZTv0_n20_N7S6981C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S6981C3D1Ev,_ZThn184_N7S6981C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6981C3D0Ev,_ZTv0_n12_N7S6981C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N7S6981C3D0Ev,_ZThn180_N7S6981C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S6981C3D0Ev,_ZThn168_N7S6981C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6981C3D1Ev,_ZTv0_n12_N7S6981C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N7S6981C3D1Ev,_ZThn180_N7S6981C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S6981C3D1Ev,_ZThn168_N7S6981C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6981C3D0Ev,_ZTv0_n16_N7S6981C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S6981C3D0Ev,_ZThn120_N7S6981C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6981C3D1Ev,_ZTv0_n16_N7S6981C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S6981C3D1Ev,_ZThn120_N7S6981C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6981C3 = {  "S6981C3", // class name
  bases_S6981C3, 11,
  &(vtc_S6981C3[0]), // expected_vtbl_contents
  &(vtt_S6981C3[0]), // expected_vtt_contents
  ABISELECT(368,224), // object size
  NSPAIRA(_ZTI7S6981C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6981C3),94, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6981C3),13, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6981C11  {
  __tsi64 s6981c11f0[2];
  virtual void  v33(); // _ZN8S6981C113v33Ev
  virtual void  v34(); // _ZN8S6981C113v34Ev
  virtual void  v35(); // _ZN8S6981C113v35Ev
  ~S6981C11(); // tgen
  S6981C11(); // tgen
};
//SIG(-1 S6981C11) C1{ v1 v2 v3 FL[2]}


void  S6981C11 ::v33(){vfunc_called(this, "_ZN8S6981C113v33Ev");}
void  S6981C11 ::v34(){vfunc_called(this, "_ZN8S6981C113v34Ev");}
void  S6981C11 ::v35(){vfunc_called(this, "_ZN8S6981C113v35Ev");}
S6981C11 ::~S6981C11(){ note_dtor("S6981C11", this);} // tgen
S6981C11 ::S6981C11(){ note_ctor("S6981C11", this);} // tgen

static void Test_S6981C11()
{
  extern Class_Descriptor cd_S6981C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S6981C11, buf);
    S6981C11 *dp, &lv = *(dp=new (buf) S6981C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S6981C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6981C11)");
    check_field_offset(lv, s6981c11f0, ABISELECT(8,4), "S6981C11.s6981c11f0");
    test_class_info(&lv, &cd_S6981C11);
    dp->~S6981C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6981C11(Test_S6981C11, "S6981C11", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN8S6981C11C1Ev();
extern void _ZN8S6981C11D1Ev();
Name_Map name_map_S6981C11[] = {
  NSPAIR(_ZN8S6981C11C1Ev),
  NSPAIR(_ZN8S6981C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S6981C11[];
extern void _ZN8S6981C113v33Ev();
extern void _ZN8S6981C113v34Ev();
extern void _ZN8S6981C113v35Ev();
static  VTBL_ENTRY vtc_S6981C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6981C11[0]),
  (VTBL_ENTRY)&_ZN8S6981C113v33Ev,
  (VTBL_ENTRY)&_ZN8S6981C113v34Ev,
  (VTBL_ENTRY)&_ZN8S6981C113v35Ev,
};
extern VTBL_ENTRY _ZTI8S6981C11[];
extern  VTBL_ENTRY _ZTV8S6981C11[];
Class_Descriptor cd_S6981C11 = {  "S6981C11", // class name
  0,0,//no base classes
  &(vtc_S6981C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI8S6981C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S6981C11),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  S6981C10  : virtual S6981C11 {
  virtual  ~S6981C10(); // _ZN8S6981C10D2Ev
  virtual void  v36(); // _ZN8S6981C103v36Ev
  virtual void  v37(); // _ZN8S6981C103v37Ev
  virtual void  v38(); // _ZN8S6981C103v38Ev
  virtual void  v39(); // _ZN8S6981C103v39Ev
  virtual void  v40(); // _ZN8S6981C103v40Ev
  virtual void  v41(); // _ZN8S6981C103v41Ev
  virtual void  v42(); // _ZN8S6981C103v42Ev
  S6981C10(); // tgen
};
//SIG(-1 S6981C10) C1{ VBC2{ v8 v9 v10 FL[2]} vd v1 v2 v3 v4 v5 v6 v7}


 S6981C10 ::~S6981C10(){ note_dtor("S6981C10", this);}
void  S6981C10 ::v36(){vfunc_called(this, "_ZN8S6981C103v36Ev");}
void  S6981C10 ::v37(){vfunc_called(this, "_ZN8S6981C103v37Ev");}
void  S6981C10 ::v38(){vfunc_called(this, "_ZN8S6981C103v38Ev");}
void  S6981C10 ::v39(){vfunc_called(this, "_ZN8S6981C103v39Ev");}
void  S6981C10 ::v40(){vfunc_called(this, "_ZN8S6981C103v40Ev");}
void  S6981C10 ::v41(){vfunc_called(this, "_ZN8S6981C103v41Ev");}
void  S6981C10 ::v42(){vfunc_called(this, "_ZN8S6981C103v42Ev");}
S6981C10 ::S6981C10(){ note_ctor("S6981C10", this);} // tgen

static void Test_S6981C10()
{
  extern Class_Descriptor cd_S6981C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S6981C10, buf);
    S6981C10 *dp, &lv = *(dp=new (buf) S6981C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S6981C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6981C10)");
    check_base_class_offset(lv, (S6981C11*), ABISELECT(8,4), "S6981C10");
    test_class_info(&lv, &cd_S6981C10);
    dp->~S6981C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6981C10(Test_S6981C10, "S6981C10", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S6981C10C1Ev();
extern void _ZN8S6981C10D2Ev();
Name_Map name_map_S6981C10[] = {
  NSPAIR(_ZN8S6981C10C1Ev),
  NSPAIR(_ZN8S6981C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6981C11;
extern VTBL_ENTRY _ZTI8S6981C11[];
extern  VTBL_ENTRY _ZTV8S6981C11[];
static Base_Class bases_S6981C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6981C11,    ABISELECT(8,4), //bcp->offset
    12, //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 _ZTI8S6981C10[];
extern void _ZN8S6981C10D1Ev();
extern void _ZN8S6981C10D0Ev();
extern void _ZN8S6981C103v36Ev();
extern void _ZN8S6981C103v37Ev();
extern void _ZN8S6981C103v38Ev();
extern void _ZN8S6981C103v39Ev();
extern void _ZN8S6981C103v40Ev();
extern void _ZN8S6981C103v41Ev();
extern void _ZN8S6981C103v42Ev();
extern void _ZN8S6981C113v33Ev();
extern void _ZN8S6981C113v34Ev();
extern void _ZN8S6981C113v35Ev();
static  VTBL_ENTRY vtc_S6981C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6981C10[0]),
  (VTBL_ENTRY)&_ZN8S6981C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6981C10D0Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v36Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v37Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v38Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v39Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v40Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v41Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v42Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6981C10[0]),
  (VTBL_ENTRY)&_ZN8S6981C113v33Ev,
  (VTBL_ENTRY)&_ZN8S6981C113v34Ev,
  (VTBL_ENTRY)&_ZN8S6981C113v35Ev,
};
extern VTBL_ENTRY _ZTV8S6981C10[];
static  VTT_ENTRY vtt_S6981C10[] = {
  {&(_ZTV8S6981C10[3]),  3,20},
  {&(_ZTV8S6981C10[17]),  17,20},
};
extern VTBL_ENTRY _ZTI8S6981C10[];
extern  VTBL_ENTRY _ZTV8S6981C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6981C10[];
Class_Descriptor cd_S6981C10 = {  "S6981C10", // class name
  bases_S6981C10, 1,
  &(vtc_S6981C10[0]), // expected_vtbl_contents
  &(vtt_S6981C10[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S6981C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S6981C10),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6981C10),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  S6981C12  {
  virtual  ~S6981C12(); // _ZN8S6981C12D1Ev
  virtual void  v43(); // _ZN8S6981C123v43Ev
  S6981C12(); // tgen
};
//SIG(-1 S6981C12) C1{ vd v1}


 S6981C12 ::~S6981C12(){ note_dtor("S6981C12", this);}
void  S6981C12 ::v43(){vfunc_called(this, "_ZN8S6981C123v43Ev");}
S6981C12 ::S6981C12(){ note_ctor("S6981C12", this);} // tgen

static void Test_S6981C12()
{
  extern Class_Descriptor cd_S6981C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6981C12, buf);
    S6981C12 *dp, &lv = *(dp=new (buf) S6981C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6981C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6981C12)");
    test_class_info(&lv, &cd_S6981C12);
    dp->~S6981C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6981C12(Test_S6981C12, "S6981C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S6981C12C1Ev();
extern void _ZN8S6981C12D1Ev();
Name_Map name_map_S6981C12[] = {
  NSPAIR(_ZN8S6981C12C1Ev),
  NSPAIR(_ZN8S6981C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S6981C12[];
extern void _ZN8S6981C12D1Ev();
extern void _ZN8S6981C12D0Ev();
extern void _ZN8S6981C123v43Ev();
static  VTBL_ENTRY vtc_S6981C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6981C12[0]),
  (VTBL_ENTRY)&_ZN8S6981C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6981C12D0Ev,
  (VTBL_ENTRY)&_ZN8S6981C123v43Ev,
};
extern VTBL_ENTRY _ZTI8S6981C12[];
extern  VTBL_ENTRY _ZTV8S6981C12[];
Class_Descriptor cd_S6981C12 = {  "S6981C12", // class name
  0,0,//no base classes
  &(vtc_S6981C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S6981C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S6981C12),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  S6981C1  : S6981C2 , virtual S6981C3 , virtual S6981C10 , S6981C12 {
  virtual  ~S6981C1(); // _ZN7S6981C1D2Ev
  virtual void  v1(); // _ZN7S6981C12v1Ev
  virtual void  v2(); // _ZN7S6981C12v2Ev
  virtual void  v3(); // _ZN7S6981C12v3Ev
  virtual void  v4(); // _ZN7S6981C12v4Ev
  S6981C1(); // tgen
};
//SIG(1 S6981C1) C1{ BC2{ vd v5} VBC3{ BC4{ BC5{ BC2 vd v6 v7 v8 v9 v10 Fp FL:7} VBC6{ v11 v12 v13 v14 Fc FD[7]} vd v15 v16 v17 v18 v19 v20 Fi} VBC7{ VBC5 BC2 vd v21 v22 v23 v24 FC2 Fi FC2[9]} VBC2 VBC8{ VBC6 BC9{ vd v25 v26 v27 v28 FC2} VBC2 vd v29 v30 v31 v32 Fp Fi FL[3]} vd Fi[2] Fc} VBC10{ VBC11{ v33 v34 v35 FL[2]} vd v36 v37 v38 v39 v40 v41 v42} BC12{ vd v43} vd v1 v2 v3 v4}


 S6981C1 ::~S6981C1(){ note_dtor("S6981C1", this);}
void  S6981C1 ::v1(){vfunc_called(this, "_ZN7S6981C12v1Ev");}
void  S6981C1 ::v2(){vfunc_called(this, "_ZN7S6981C12v2Ev");}
void  S6981C1 ::v3(){vfunc_called(this, "_ZN7S6981C12v3Ev");}
void  S6981C1 ::v4(){vfunc_called(this, "_ZN7S6981C12v4Ev");}
S6981C1 ::S6981C1(){ note_ctor("S6981C1", this);} // tgen

static void Test_S6981C1()
{
  extern Class_Descriptor cd_S6981C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,65)];
    init_test(&cd_S6981C1, buf);
    S6981C1 *dp, &lv = *(dp=new (buf) S6981C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,256), "sizeof(S6981C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6981C1)");
    /*is_ambiguous_... S6981C1::S6981C2 */ AMB_check_base_class_offset(lv, (S6981C2*), 0, "S6981C1");
    check_base_class_offset(lv, (S6981C2*)(S6981C5*)(S6981C4*)(S6981C3*), ABISELECT(16,8), "S6981C1");
    check_base_class_offset(lv, (S6981C5*)(S6981C4*)(S6981C3*), ABISELECT(16,8), "S6981C1");
    check_base_class_offset(lv, (S6981C6*)(S6981C4*)(S6981C3*), ABISELECT(64,36), "S6981C1");
    check_base_class_offset(lv, (S6981C6*)(S6981C8*), ABISELECT(64,36), "S6981C1");
    check_base_class_offset(lv, (S6981C4*)(S6981C3*), ABISELECT(16,8), "S6981C1");
    /*is_ambiguous_... S6981C1::S6981C5 */ AMB_check_base_class_offset(lv, (S6981C2*)(S6981C5*), ABISELECT(288,176), "S6981C1");
    check_base_class_offset(lv, (S6981C5*)(S6981C7*), ABISELECT(288,176), "S6981C1");
    /*is_ambiguous_... S6981C7::S6981C2 */ AMB_check_base_class_offset(lv, (S6981C2*)(S6981C7*), ABISELECT(192,128), "S6981C1");
    check_base_class_offset(lv, (S6981C7*)(S6981C3*), ABISELECT(192,128), "S6981C1");
    /*is_ambiguous_... S6981C3::S6981C2 */ AMB_check_base_class_offset(lv, (S6981C2*)(S6981C3*), ABISELECT(312,188), "S6981C1");
    check_base_class_offset(lv, (S6981C2*)(S6981C8*), ABISELECT(312,188), "S6981C1");
    check_base_class_offset(lv, (S6981C9*)(S6981C8*), ABISELECT(320,192), "S6981C1");
    check_base_class_offset(lv, (S6981C8*)(S6981C3*), ABISELECT(320,192), "S6981C1");
    check_base_class_offset(lv, (S6981C3*), ABISELECT(16,8), "S6981C1");
    check_base_class_offset(lv, (S6981C11*)(S6981C10*), ABISELECT(384,236), "S6981C1");
    check_base_class_offset(lv, (S6981C10*), ABISELECT(376,232), "S6981C1");
    check_base_class_offset(lv, (S6981C12*), ABISELECT(8,4), "S6981C1");
    test_class_info(&lv, &cd_S6981C1);
    dp->~S6981C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6981C1(Test_S6981C1, "S6981C1", ABISELECT(416,256));

#else // __cplusplus

extern void _ZN7S6981C1C1Ev();
extern void _ZN7S6981C1D2Ev();
Name_Map name_map_S6981C1[] = {
  NSPAIR(_ZN7S6981C1C1Ev),
  NSPAIR(_ZN7S6981C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6981C2;
extern VTBL_ENTRY _ZTI7S6981C2[];
extern  VTBL_ENTRY _ZTV7S6981C2[];
extern Class_Descriptor cd_S6981C2;
extern VTBL_ENTRY _ZTI7S6981C2[];
extern  VTBL_ENTRY _ZTV7S6981C2[];
extern Class_Descriptor cd_S6981C5;
extern VTBL_ENTRY _ZTI7S6981C5[];
extern  VTBL_ENTRY _ZTV7S6981C5[];
extern Class_Descriptor cd_S6981C6;
extern VTBL_ENTRY _ZTI7S6981C6[];
extern  VTBL_ENTRY _ZTV7S6981C6[];
extern Class_Descriptor cd_S6981C4;
extern VTBL_ENTRY _ZTI7S6981C4[];
extern  VTBL_ENTRY _ZTV7S6981C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6981C4[];
extern Class_Descriptor cd_S6981C2;
extern VTBL_ENTRY _ZTI7S6981C2[];
extern  VTBL_ENTRY _ZTV7S6981C2[];
extern Class_Descriptor cd_S6981C5;
extern VTBL_ENTRY _ZTI7S6981C5[];
extern  VTBL_ENTRY _ZTV7S6981C5[];
extern Class_Descriptor cd_S6981C2;
extern VTBL_ENTRY _ZTI7S6981C2[];
extern  VTBL_ENTRY _ZTV7S6981C2[];
extern Class_Descriptor cd_S6981C7;
extern VTBL_ENTRY _ZTI7S6981C7[];
extern  VTBL_ENTRY _ZTV7S6981C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6981C7[];
extern Class_Descriptor cd_S6981C2;
extern VTBL_ENTRY _ZTI7S6981C2[];
extern  VTBL_ENTRY _ZTV7S6981C2[];
extern Class_Descriptor cd_S6981C9;
extern VTBL_ENTRY _ZTI7S6981C9[];
extern  VTBL_ENTRY _ZTV7S6981C9[];
extern Class_Descriptor cd_S6981C8;
extern VTBL_ENTRY _ZTI7S6981C8[];
extern  VTBL_ENTRY _ZTV7S6981C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6981C8[];
extern Class_Descriptor cd_S6981C3;
extern VTBL_ENTRY _ZTI7S6981C3[];
extern  VTBL_ENTRY _ZTV7S6981C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6981C3[];
extern Class_Descriptor cd_S6981C11;
extern VTBL_ENTRY _ZTI8S6981C11[];
extern  VTBL_ENTRY _ZTV8S6981C11[];
extern Class_Descriptor cd_S6981C10;
extern VTBL_ENTRY _ZTI8S6981C10[];
extern  VTBL_ENTRY _ZTV8S6981C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6981C10[];
extern Class_Descriptor cd_S6981C12;
extern VTBL_ENTRY _ZTI8S6981C12[];
extern  VTBL_ENTRY _ZTV8S6981C12[];
static Base_Class bases_S6981C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6981C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S6981C2,    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
    2, //immediately_derived
  0, 0},
  {&cd_S6981C5,    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
    4, //immediately_derived
  0, 0},
  {&cd_S6981C6,    ABISELECT(64,36), //bcp->offset
    56, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6981C4,    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
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6981C2,    ABISELECT(288,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
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6981C5,    ABISELECT(288,176), //bcp->offset
    82, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S6981C2,    ABISELECT(192,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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6981C7,    ABISELECT(192,128), //bcp->offset
    66, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6981C2,    ABISELECT(312,188), //bcp->offset
    99, //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
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6981C9,    ABISELECT(320,192), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S6981C8,    ABISELECT(320,192), //bcp->offset
    106, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6981C3,    ABISELECT(16,8), //bcp->offset
    22, //bcp->virtual_function_table_offset
    20, //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},
  {&cd_S6981C11,    ABISELECT(384,236), //bcp->offset
    149, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S6981C10,    ABISELECT(376,232), //bcp->offset
    129, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6981C12,    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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6981C1[];
extern void _ZN7S6981C1D1Ev();
extern void _ZN7S6981C1D0Ev();
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C12v1Ev();
extern void _ZN7S6981C12v2Ev();
extern void _ZN7S6981C12v3Ev();
extern void _ZN7S6981C12v4Ev();
extern void ABISELECT(_ZThn8_N7S6981C1D1Ev,_ZThn4_N7S6981C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S6981C1D0Ev,_ZThn4_N7S6981C1D0Ev)();
extern void _ZN8S6981C123v43Ev();
extern void ABISELECT(_ZTv0_n64_N7S6981C1D1Ev,_ZTv0_n32_N7S6981C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S6981C1D1Ev,_ZThn8_N7S6981C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6981C1D0Ev,_ZTv0_n32_N7S6981C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S6981C1D0Ev,_ZThn8_N7S6981C1D0Ev)() __attribute__((weak));
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C52v6Ev();
extern void _ZN7S6981C52v7Ev();
extern void _ZN7S6981C52v8Ev();
extern void _ZN7S6981C52v9Ev();
extern void _ZN7S6981C53v10Ev();
extern void _ZN7S6981C43v15Ev();
extern void _ZN7S6981C43v16Ev();
extern void _ZN7S6981C43v17Ev();
extern void _ZN7S6981C43v18Ev();
extern void _ZN7S6981C43v19Ev();
extern void _ZN7S6981C43v20Ev();
extern void _ZN7S6981C63v11Ev();
extern void _ZN7S6981C63v12Ev();
extern void _ZN7S6981C63v13Ev();
extern void _ZN7S6981C63v14Ev();
extern void ABISELECT(_ZTv0_n32_N7S6981C1D1Ev,_ZTv0_n16_N7S6981C1D1Ev)();
extern void ABISELECT(_ZThn192_N7S6981C1D1Ev,_ZThn128_N7S6981C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6981C1D0Ev,_ZTv0_n16_N7S6981C1D0Ev)();
extern void ABISELECT(_ZThn192_N7S6981C1D0Ev,_ZThn128_N7S6981C1D0Ev)() __attribute__((weak));
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C73v21Ev();
extern void _ZN7S6981C73v22Ev();
extern void _ZN7S6981C73v23Ev();
extern void _ZN7S6981C73v24Ev();
extern void ABISELECT(_ZTv0_n24_N7S6981C1D1Ev,_ZTv0_n12_N7S6981C1D1Ev)();
extern void ABISELECT(_ZThn288_N7S6981C1D1Ev,_ZThn176_N7S6981C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6981C1D0Ev,_ZTv0_n12_N7S6981C1D0Ev)();
extern void ABISELECT(_ZThn288_N7S6981C1D0Ev,_ZThn176_N7S6981C1D0Ev)() __attribute__((weak));
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C52v6Ev();
extern void _ZN7S6981C52v7Ev();
extern void _ZN7S6981C52v8Ev();
extern void _ZN7S6981C52v9Ev();
extern void _ZN7S6981C53v10Ev();
extern void ABISELECT(_ZTv0_n24_N7S6981C1D1Ev,_ZTv0_n12_N7S6981C1D1Ev)();
extern void ABISELECT(_ZThn312_N7S6981C1D1Ev,_ZThn188_N7S6981C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6981C1D0Ev,_ZTv0_n12_N7S6981C1D0Ev)();
extern void ABISELECT(_ZThn312_N7S6981C1D0Ev,_ZThn188_N7S6981C1D0Ev)() __attribute__((weak));
extern void _ZN7S6981C22v5Ev();
extern void ABISELECT(_ZTv0_n40_N7S6981C1D1Ev,_ZTv0_n20_N7S6981C1D1Ev)();
extern void ABISELECT(_ZThn320_N7S6981C1D1Ev,_ZThn192_N7S6981C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6981C1D0Ev,_ZTv0_n20_N7S6981C1D0Ev)();
extern void ABISELECT(_ZThn320_N7S6981C1D0Ev,_ZThn192_N7S6981C1D0Ev)() __attribute__((weak));
extern void _ZN7S6981C93v25Ev();
extern void _ZN7S6981C93v26Ev();
extern void _ZN7S6981C93v27Ev();
extern void _ZN7S6981C93v28Ev();
extern void _ZN7S6981C83v29Ev();
extern void _ZN7S6981C83v30Ev();
extern void _ZN7S6981C83v31Ev();
extern void _ZN7S6981C83v32Ev();
extern void ABISELECT(_ZTv0_n32_N7S6981C1D1Ev,_ZTv0_n16_N7S6981C1D1Ev)();
extern void ABISELECT(_ZThn376_N7S6981C1D1Ev,_ZThn232_N7S6981C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6981C1D0Ev,_ZTv0_n16_N7S6981C1D0Ev)();
extern void ABISELECT(_ZThn376_N7S6981C1D0Ev,_ZThn232_N7S6981C1D0Ev)() __attribute__((weak));
extern void _ZN8S6981C103v36Ev();
extern void _ZN8S6981C103v37Ev();
extern void _ZN8S6981C103v38Ev();
extern void _ZN8S6981C103v39Ev();
extern void _ZN8S6981C103v40Ev();
extern void _ZN8S6981C103v41Ev();
extern void _ZN8S6981C103v42Ev();
extern void _ZN8S6981C113v33Ev();
extern void _ZN8S6981C113v34Ev();
extern void _ZN8S6981C113v35Ev();
static  VTBL_ENTRY vtc_S6981C1[] = {
  ABISELECT(384,236),
  ABISELECT(376,232),
  ABISELECT(320,192),
  ABISELECT(312,188),
  ABISELECT(288,176),
  ABISELECT(192,128),
  ABISELECT(64,36),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6981C1[0]),
  (VTBL_ENTRY)&_ZN7S6981C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6981C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6981C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6981C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6981C12v4Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6981C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S6981C1D1Ev,_ZThn4_N7S6981C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S6981C1D0Ev,_ZThn4_N7S6981C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6981C123v43Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(304,184),
  ABISELECT(296,180),
  ABISELECT(272,168),
  ABISELECT(176,120),
  ABISELECT(48,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6981C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6981C1D1Ev,_ZTv0_n32_N7S6981C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6981C1D0Ev,_ZTv0_n32_N7S6981C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6981C53v10Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v16Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v17Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v18Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v19Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S6981C1[0]),
  (VTBL_ENTRY)&_ZN7S6981C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v14Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-128),
  ABISELECT(96,48),
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI7S6981C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6981C1D1Ev,_ZTv0_n16_N7S6981C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6981C1D0Ev,_ZTv0_n16_N7S6981C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v21Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v22Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v23Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-288,-176),
  ABISELECT(-288,-176),
  (VTBL_ENTRY)&(_ZTI7S6981C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C1D1Ev,_ZTv0_n12_N7S6981C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C1D0Ev,_ZTv0_n12_N7S6981C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6981C53v10Ev,
  0,
  ABISELECT(-312,-188),
  ABISELECT(-312,-188),
  (VTBL_ENTRY)&(_ZTI7S6981C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C1D1Ev,_ZTv0_n12_N7S6981C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C1D0Ev,_ZTv0_n12_N7S6981C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-192),
  ABISELECT(-8,-4),
  ABISELECT(-256,-156),
  ABISELECT(-320,-192),
  (VTBL_ENTRY)&(_ZTI7S6981C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6981C1D1Ev,_ZTv0_n20_N7S6981C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6981C1D0Ev,_ZTv0_n20_N7S6981C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C93v25Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v26Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v27Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v28Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v29Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v30Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v31Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v32Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-376,-232),
  ABISELECT(8,4),
  ABISELECT(-376,-232),
  (VTBL_ENTRY)&(_ZTI7S6981C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6981C1D1Ev,_ZTv0_n16_N7S6981C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6981C1D0Ev,_ZTv0_n16_N7S6981C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6981C103v36Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v37Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v38Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v39Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v40Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v41Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v42Ev,
  0,
  0,
  0,
  ABISELECT(-384,-236),
  (VTBL_ENTRY)&(_ZTI7S6981C1[0]),
  (VTBL_ENTRY)&_ZN8S6981C113v33Ev,
  (VTBL_ENTRY)&_ZN8S6981C113v34Ev,
  (VTBL_ENTRY)&_ZN8S6981C113v35Ev,
};
extern VTBL_ENTRY _ZTV7S6981C1[];
extern void _ZN7S6981C3D1Ev();
extern void _ZN7S6981C3D0Ev();
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C52v6Ev();
extern void _ZN7S6981C52v7Ev();
extern void _ZN7S6981C52v8Ev();
extern void _ZN7S6981C52v9Ev();
extern void _ZN7S6981C53v10Ev();
extern void _ZN7S6981C43v15Ev();
extern void _ZN7S6981C43v16Ev();
extern void _ZN7S6981C43v17Ev();
extern void _ZN7S6981C43v18Ev();
extern void _ZN7S6981C43v19Ev();
extern void _ZN7S6981C43v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C3__7S6981C1[] = {
  ABISELECT(304,184),
  ABISELECT(296,180),
  ABISELECT(272,168),
  ABISELECT(176,120),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6981C3[0]),
  (VTBL_ENTRY)&_ZN7S6981C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6981C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6981C53v10Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v16Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v17Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v18Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v19Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v20Ev,
};
extern void _ZN7S6981C4D1Ev();
extern void _ZN7S6981C4D0Ev();
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C52v6Ev();
extern void _ZN7S6981C52v7Ev();
extern void _ZN7S6981C52v8Ev();
extern void _ZN7S6981C52v9Ev();
extern void _ZN7S6981C53v10Ev();
extern void _ZN7S6981C43v15Ev();
extern void _ZN7S6981C43v16Ev();
extern void _ZN7S6981C43v17Ev();
extern void _ZN7S6981C43v18Ev();
extern void _ZN7S6981C43v19Ev();
extern void _ZN7S6981C43v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C47S6981C3__7S6981C1[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6981C4[0]),
  (VTBL_ENTRY)&_ZN7S6981C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6981C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6981C53v10Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v16Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v17Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v18Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v19Ev,
  (VTBL_ENTRY)&_ZN7S6981C43v20Ev,
};
extern void _ZN7S6981C63v11Ev();
extern void _ZN7S6981C63v12Ev();
extern void _ZN7S6981C63v13Ev();
extern void _ZN7S6981C63v14Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C6__7S6981C47S6981C3__7S6981C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S6981C4[0]),
  (VTBL_ENTRY)&_ZN7S6981C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v14Ev,
};
extern void _ZN7S6981C63v11Ev();
extern void _ZN7S6981C63v12Ev();
extern void _ZN7S6981C63v13Ev();
extern void _ZN7S6981C63v14Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C6__7S6981C3__7S6981C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S6981C3[0]),
  (VTBL_ENTRY)&_ZN7S6981C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v14Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S6981C3D1Ev,_ZTv0_n16_N7S6981C3D1Ev)();
extern void ABISELECT(_ZThn176_N7S6981C3D1Ev,_ZThn120_N7S6981C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6981C3D0Ev,_ZTv0_n16_N7S6981C3D0Ev)();
extern void ABISELECT(_ZThn176_N7S6981C3D0Ev,_ZThn120_N7S6981C3D0Ev)() __attribute__((weak));
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C73v21Ev();
extern void _ZN7S6981C73v22Ev();
extern void _ZN7S6981C73v23Ev();
extern void _ZN7S6981C73v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C7__7S6981C3__7S6981C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-120),
  ABISELECT(96,48),
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI7S6981C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6981C3D1Ev,_ZTv0_n16_N7S6981C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6981C3D0Ev,_ZTv0_n16_N7S6981C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v21Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v22Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v23Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6981C3D1Ev,_ZTv0_n12_N7S6981C3D1Ev)();
extern void ABISELECT(_ZThn272_N7S6981C3D1Ev,_ZThn168_N7S6981C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6981C3D0Ev,_ZTv0_n12_N7S6981C3D0Ev)();
extern void ABISELECT(_ZThn272_N7S6981C3D0Ev,_ZThn168_N7S6981C3D0Ev)() __attribute__((weak));
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C52v6Ev();
extern void _ZN7S6981C52v7Ev();
extern void _ZN7S6981C52v8Ev();
extern void _ZN7S6981C52v9Ev();
extern void _ZN7S6981C53v10Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C5__A1__7S6981C3__7S6981C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-272,-168),
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI7S6981C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C3D1Ev,_ZTv0_n12_N7S6981C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C3D0Ev,_ZTv0_n12_N7S6981C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6981C53v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6981C3D1Ev,_ZTv0_n12_N7S6981C3D1Ev)();
extern void ABISELECT(_ZThn296_N7S6981C3D1Ev,_ZThn180_N7S6981C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6981C3D0Ev,_ZTv0_n12_N7S6981C3D0Ev)();
extern void ABISELECT(_ZThn296_N7S6981C3D0Ev,_ZThn180_N7S6981C3D0Ev)() __attribute__((weak));
extern void _ZN7S6981C22v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C2__A3__7S6981C3__7S6981C1[] = {
  0,
  ABISELECT(-296,-180),
  ABISELECT(-296,-180),
  (VTBL_ENTRY)&(_ZTI7S6981C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C3D1Ev,_ZTv0_n12_N7S6981C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C3D0Ev,_ZTv0_n12_N7S6981C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S6981C3D1Ev,_ZTv0_n20_N7S6981C3D1Ev)();
extern void ABISELECT(_ZThn304_N7S6981C3D1Ev,_ZThn184_N7S6981C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6981C3D0Ev,_ZTv0_n20_N7S6981C3D0Ev)();
extern void ABISELECT(_ZThn304_N7S6981C3D0Ev,_ZThn184_N7S6981C3D0Ev)() __attribute__((weak));
extern void _ZN7S6981C93v25Ev();
extern void _ZN7S6981C93v26Ev();
extern void _ZN7S6981C93v27Ev();
extern void _ZN7S6981C93v28Ev();
extern void _ZN7S6981C83v29Ev();
extern void _ZN7S6981C83v30Ev();
extern void _ZN7S6981C83v31Ev();
extern void _ZN7S6981C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C8__7S6981C3__7S6981C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-184),
  ABISELECT(-8,-4),
  ABISELECT(-256,-156),
  ABISELECT(-304,-184),
  (VTBL_ENTRY)&(_ZTI7S6981C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6981C3D1Ev,_ZTv0_n20_N7S6981C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6981C3D0Ev,_ZTv0_n20_N7S6981C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C93v25Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v26Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v27Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v28Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v29Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v30Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v31Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v32Ev,
};
extern void _ZN7S6981C7D1Ev();
extern void _ZN7S6981C7D0Ev();
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C73v21Ev();
extern void _ZN7S6981C73v22Ev();
extern void _ZN7S6981C73v23Ev();
extern void _ZN7S6981C73v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C7__7S6981C1[] = {
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S6981C7[0]),
  (VTBL_ENTRY)&_ZN7S6981C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6981C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v21Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v22Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v23Ev,
  (VTBL_ENTRY)&_ZN7S6981C73v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6981C7D1Ev,_ZTv0_n12_N7S6981C7D1Ev)();
extern void ABISELECT(_ZThn96_N7S6981C7D1Ev,_ZThn48_N7S6981C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6981C7D0Ev,_ZTv0_n12_N7S6981C7D0Ev)();
extern void ABISELECT(_ZThn96_N7S6981C7D0Ev,_ZThn48_N7S6981C7D0Ev)() __attribute__((weak));
extern void _ZN7S6981C22v5Ev();
extern void _ZN7S6981C52v6Ev();
extern void _ZN7S6981C52v7Ev();
extern void _ZN7S6981C52v8Ev();
extern void _ZN7S6981C52v9Ev();
extern void _ZN7S6981C53v10Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C5__7S6981C7__7S6981C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S6981C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C7D1Ev,_ZTv0_n12_N7S6981C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C7D0Ev,_ZTv0_n12_N7S6981C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6981C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6981C53v10Ev,
};
extern void _ZN7S6981C8D1Ev();
extern void _ZN7S6981C8D0Ev();
extern void _ZN7S6981C93v25Ev();
extern void _ZN7S6981C93v26Ev();
extern void _ZN7S6981C93v27Ev();
extern void _ZN7S6981C93v28Ev();
extern void _ZN7S6981C83v29Ev();
extern void _ZN7S6981C83v30Ev();
extern void _ZN7S6981C83v31Ev();
extern void _ZN7S6981C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C8__7S6981C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S6981C8[0]),
  (VTBL_ENTRY)&_ZN7S6981C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6981C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v25Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v26Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v27Ev,
  (VTBL_ENTRY)&_ZN7S6981C93v28Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v29Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v30Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v31Ev,
  (VTBL_ENTRY)&_ZN7S6981C83v32Ev,
};
extern void _ZN7S6981C63v11Ev();
extern void _ZN7S6981C63v12Ev();
extern void _ZN7S6981C63v13Ev();
extern void _ZN7S6981C63v14Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C6__7S6981C8__7S6981C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(256,156),
  (VTBL_ENTRY)&(_ZTI7S6981C8[0]),
  (VTBL_ENTRY)&_ZN7S6981C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6981C63v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6981C8D1Ev,_ZTv0_n12_N7S6981C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S6981C8D0Ev,_ZTv0_n12_N7S6981C8D0Ev)();
extern void _ZN7S6981C22v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6981C2__7S6981C8__7S6981C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S6981C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C8D1Ev,_ZTv0_n12_N7S6981C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6981C8D0Ev,_ZTv0_n12_N7S6981C8D0Ev),
  (VTBL_ENTRY)&_ZN7S6981C22v5Ev,
};
extern void _ZN8S6981C10D1Ev();
extern void _ZN8S6981C10D0Ev();
extern void _ZN8S6981C103v36Ev();
extern void _ZN8S6981C103v37Ev();
extern void _ZN8S6981C103v38Ev();
extern void _ZN8S6981C103v39Ev();
extern void _ZN8S6981C103v40Ev();
extern void _ZN8S6981C103v41Ev();
extern void _ZN8S6981C103v42Ev();
static  VTBL_ENTRY _tg__ZTV8S6981C10__7S6981C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6981C10[0]),
  (VTBL_ENTRY)&_ZN8S6981C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6981C10D0Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v36Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v37Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v38Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v39Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v40Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v41Ev,
  (VTBL_ENTRY)&_ZN8S6981C103v42Ev,
};
extern void _ZN8S6981C113v33Ev();
extern void _ZN8S6981C113v34Ev();
extern void _ZN8S6981C113v35Ev();
static  VTBL_ENTRY _tg__ZTV8S6981C11__8S6981C10__7S6981C1[] = {
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6981C10[0]),
  (VTBL_ENTRY)&_ZN8S6981C113v33Ev,
  (VTBL_ENTRY)&_ZN8S6981C113v34Ev,
  (VTBL_ENTRY)&_ZN8S6981C113v35Ev,
};
static  VTT_ENTRY vtt_S6981C1[] = {
  {&(_ZTV7S6981C1[10]),  10,157},
  {&(_ZTV7S6981C1[42]),  42,157},
  {&(_ZTV7S6981C1[62]),  62,157},
  {&(_ZTV7S6981C1[75]),  75,157},
  {&(_ZTV7S6981C1[91]),  91,157},
  {&(_ZTV7S6981C1[103]),  103,157},
  {&(_ZTV7S6981C1[119]),  119,157},
  {&(_ZTV7S6981C1[140]),  140,157},
  {&(_ZTV7S6981C1[154]),  154,157},
  {&(_tg__ZTV7S6981C3__7S6981C1[7]),  7,21},
  {&(_tg__ZTV7S6981C47S6981C3__7S6981C1[3]),  3,17},
  {&(_tg__ZTV7S6981C6__7S6981C47S6981C3__7S6981C1[6]),  6,10},
  {&(_tg__ZTV7S6981C6__7S6981C3__7S6981C1[6]),  6,10},
  {&(_tg__ZTV7S6981C7__7S6981C3__7S6981C1[9]),  9,16},
  {&(_tg__ZTV7S6981C5__A1__7S6981C3__7S6981C1[9]),  9,17},
  {&(_tg__ZTV7S6981C2__A3__7S6981C3__7S6981C1[4]),  4,7},
  {&(_tg__ZTV7S6981C8__7S6981C3__7S6981C1[13]),  13,23},
  {&(_tg__ZTV7S6981C7__7S6981C1[3]),  3,10},
  {&(_tg__ZTV7S6981C5__7S6981C7__7S6981C1[9]),  9,17},
  {&(_tg__ZTV7S6981C8__7S6981C1[4]),  4,14},
  {&(_tg__ZTV7S6981C6__7S6981C8__7S6981C1[6]),  6,10},
  {&(_tg__ZTV7S6981C2__7S6981C8__7S6981C1[4]),  4,7},
  {&(_tg__ZTV8S6981C10__7S6981C1[3]),  3,12},
  {&(_tg__ZTV8S6981C11__8S6981C10__7S6981C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI7S6981C1[];
extern  VTBL_ENTRY _ZTV7S6981C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6981C1[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6981C7D0Ev,_ZTv0_n12_N7S6981C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6981C7D0Ev,_ZThn48_N7S6981C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6981C7D1Ev,_ZTv0_n12_N7S6981C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6981C7D1Ev,_ZThn48_N7S6981C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6981C3D0Ev,_ZTv0_n20_N7S6981C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S6981C3D0Ev,_ZThn184_N7S6981C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6981C3D1Ev,_ZTv0_n20_N7S6981C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S6981C3D1Ev,_ZThn184_N7S6981C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6981C3D0Ev,_ZTv0_n12_N7S6981C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N7S6981C3D0Ev,_ZThn180_N7S6981C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S6981C3D0Ev,_ZThn168_N7S6981C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6981C3D1Ev,_ZTv0_n12_N7S6981C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N7S6981C3D1Ev,_ZThn180_N7S6981C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S6981C3D1Ev,_ZThn168_N7S6981C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6981C3D0Ev,_ZTv0_n16_N7S6981C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S6981C3D0Ev,_ZThn120_N7S6981C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6981C3D1Ev,_ZTv0_n16_N7S6981C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S6981C3D1Ev,_ZThn120_N7S6981C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6981C1D0Ev,_ZTv0_n20_N7S6981C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S6981C1D0Ev,_ZThn192_N7S6981C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6981C1D1Ev,_ZTv0_n20_N7S6981C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S6981C1D1Ev,_ZThn192_N7S6981C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6981C1D0Ev,_ZTv0_n12_N7S6981C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S6981C1D0Ev,_ZThn188_N7S6981C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S6981C1D0Ev,_ZThn176_N7S6981C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6981C1D1Ev,_ZTv0_n12_N7S6981C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S6981C1D1Ev,_ZThn188_N7S6981C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S6981C1D1Ev,_ZThn176_N7S6981C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6981C1D0Ev,_ZTv0_n16_N7S6981C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N7S6981C1D0Ev,_ZThn232_N7S6981C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S6981C1D0Ev,_ZThn128_N7S6981C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6981C1D1Ev,_ZTv0_n16_N7S6981C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N7S6981C1D1Ev,_ZThn232_N7S6981C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S6981C1D1Ev,_ZThn128_N7S6981C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6981C1D0Ev,_ZTv0_n32_N7S6981C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S6981C1D0Ev,_ZThn8_N7S6981C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6981C1D1Ev,_ZTv0_n32_N7S6981C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S6981C1D1Ev,_ZThn8_N7S6981C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6981C1 = {  "S6981C1", // class name
  bases_S6981C1, 16,
  &(vtc_S6981C1[0]), // expected_vtbl_contents
  &(vtt_S6981C1[0]), // expected_vtt_contents
  ABISELECT(416,256), // object size
  NSPAIRA(_ZTI7S6981C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6981C1),157, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6981C1),24, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6980C2  {
  virtual  ~S6980C2(); // _ZN7S6980C2D1Ev
  virtual void  v5(); // _ZN7S6980C22v5Ev
  S6980C2(); // tgen
};
//SIG(-1 S6980C2) C1{ vd v1}


 S6980C2 ::~S6980C2(){ note_dtor("S6980C2", this);}
void  S6980C2 ::v5(){vfunc_called(this, "_ZN7S6980C22v5Ev");}
S6980C2 ::S6980C2(){ note_ctor("S6980C2", this);} // tgen

static void Test_S6980C2()
{
  extern Class_Descriptor cd_S6980C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6980C2, buf);
    S6980C2 *dp, &lv = *(dp=new (buf) S6980C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6980C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6980C2)");
    test_class_info(&lv, &cd_S6980C2);
    dp->~S6980C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6980C2(Test_S6980C2, "S6980C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6980C2C1Ev();
extern void _ZN7S6980C2D1Ev();
Name_Map name_map_S6980C2[] = {
  NSPAIR(_ZN7S6980C2C1Ev),
  NSPAIR(_ZN7S6980C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6980C2[];
extern void _ZN7S6980C2D1Ev();
extern void _ZN7S6980C2D0Ev();
extern void _ZN7S6980C22v5Ev();
static  VTBL_ENTRY vtc_S6980C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6980C2[0]),
  (VTBL_ENTRY)&_ZN7S6980C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6980C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S6980C2[];
extern  VTBL_ENTRY _ZTV7S6980C2[];
Class_Descriptor cd_S6980C2 = {  "S6980C2", // class name
  0,0,//no base classes
  &(vtc_S6980C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6980C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6980C2),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  S6980C5  : S6980C2 {
  void *s6980c5f0;
  __tsi64 s6980c5f1:7;
  virtual  ~S6980C5(); // _ZN7S6980C5D1Ev
  virtual void  v6(); // _ZN7S6980C52v6Ev
  virtual void  v7(); // _ZN7S6980C52v7Ev
  virtual void  v8(); // _ZN7S6980C52v8Ev
  virtual void  v9(); // _ZN7S6980C52v9Ev
  virtual void  v10(); // _ZN7S6980C53v10Ev
  S6980C5(); // tgen
};
//SIG(-1 S6980C5) C1{ BC2{ vd v6} vd v1 v2 v3 v4 v5 Fp FL:7}


 S6980C5 ::~S6980C5(){ note_dtor("S6980C5", this);}
void  S6980C5 ::v6(){vfunc_called(this, "_ZN7S6980C52v6Ev");}
void  S6980C5 ::v7(){vfunc_called(this, "_ZN7S6980C52v7Ev");}
void  S6980C5 ::v8(){vfunc_called(this, "_ZN7S6980C52v8Ev");}
void  S6980C5 ::v9(){vfunc_called(this, "_ZN7S6980C52v9Ev");}
void  S6980C5 ::v10(){vfunc_called(this, "_ZN7S6980C53v10Ev");}
S6980C5 ::S6980C5(){ note_ctor("S6980C5", this);} // tgen

static void Test_S6980C5()
{
  extern Class_Descriptor cd_S6980C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S6980C5, buf);
    S6980C5 *dp, &lv = *(dp=new (buf) S6980C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6980C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6980C5)");
    check_base_class_offset(lv, (S6980C2*), 0, "S6980C5");
    check_field_offset(lv, s6980c5f0, ABISELECT(8,4), "S6980C5.s6980c5f0");
    set_bf_and_test(lv, s6980c5f1, ABISELECT(16,8), 0, 7, 1, "S6980C5");
    set_bf_and_test(lv, s6980c5f1, ABISELECT(16,8), 0, 7, hide_sll(1LL<<6), "S6980C5");
    test_class_info(&lv, &cd_S6980C5);
    dp->~S6980C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6980C5(Test_S6980C5, "S6980C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6980C5C1Ev();
extern void _ZN7S6980C5D1Ev();
Name_Map name_map_S6980C5[] = {
  NSPAIR(_ZN7S6980C5C1Ev),
  NSPAIR(_ZN7S6980C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6980C2;
extern VTBL_ENTRY _ZTI7S6980C2[];
extern  VTBL_ENTRY _ZTV7S6980C2[];
static Base_Class bases_S6980C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6980C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S6980C5[];
extern void _ZN7S6980C5D1Ev();
extern void _ZN7S6980C5D0Ev();
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C52v6Ev();
extern void _ZN7S6980C52v7Ev();
extern void _ZN7S6980C52v8Ev();
extern void _ZN7S6980C52v9Ev();
extern void _ZN7S6980C53v10Ev();
static  VTBL_ENTRY vtc_S6980C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6980C5[0]),
  (VTBL_ENTRY)&_ZN7S6980C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6980C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6980C53v10Ev,
};
extern VTBL_ENTRY _ZTI7S6980C5[];
extern  VTBL_ENTRY _ZTV7S6980C5[];
Class_Descriptor cd_S6980C5 = {  "S6980C5", // class name
  bases_S6980C5, 1,
  &(vtc_S6980C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6980C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6980C5),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6980C6  {
  char s6980c6f0;
  long double s6980c6f1[7];
  virtual void  v11(); // _ZN7S6980C63v11Ev
  virtual void  v12(); // _ZN7S6980C63v12Ev
  virtual void  v13(); // _ZN7S6980C63v13Ev
  virtual void  v14(); // _ZN7S6980C63v14Ev
  ~S6980C6(); // tgen
  S6980C6(); // tgen
};
//SIG(-1 S6980C6) C1{ v1 v2 v3 v4 Fc FD[7]}


void  S6980C6 ::v11(){vfunc_called(this, "_ZN7S6980C63v11Ev");}
void  S6980C6 ::v12(){vfunc_called(this, "_ZN7S6980C63v12Ev");}
void  S6980C6 ::v13(){vfunc_called(this, "_ZN7S6980C63v13Ev");}
void  S6980C6 ::v14(){vfunc_called(this, "_ZN7S6980C63v14Ev");}
S6980C6 ::~S6980C6(){ note_dtor("S6980C6", this);} // tgen
S6980C6 ::S6980C6(){ note_ctor("S6980C6", this);} // tgen

static void Test_S6980C6()
{
  extern Class_Descriptor cd_S6980C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,24)];
    init_test(&cd_S6980C6, buf);
    S6980C6 *dp, &lv = *(dp=new (buf) S6980C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,92), "sizeof(S6980C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6980C6)");
    check_field_offset(lv, s6980c6f0, ABISELECT(8,4), "S6980C6.s6980c6f0");
    check_field_offset(lv, s6980c6f1, ABISELECT(16,8), "S6980C6.s6980c6f1");
    test_class_info(&lv, &cd_S6980C6);
    dp->~S6980C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6980C6(Test_S6980C6, "S6980C6", ABISELECT(128,92));

#else // __cplusplus

extern void _ZN7S6980C6C1Ev();
extern void _ZN7S6980C6D1Ev();
Name_Map name_map_S6980C6[] = {
  NSPAIR(_ZN7S6980C6C1Ev),
  NSPAIR(_ZN7S6980C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6980C6[];
extern void _ZN7S6980C63v11Ev();
extern void _ZN7S6980C63v12Ev();
extern void _ZN7S6980C63v13Ev();
extern void _ZN7S6980C63v14Ev();
static  VTBL_ENTRY vtc_S6980C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6980C6[0]),
  (VTBL_ENTRY)&_ZN7S6980C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v14Ev,
};
extern VTBL_ENTRY _ZTI7S6980C6[];
extern  VTBL_ENTRY _ZTV7S6980C6[];
Class_Descriptor cd_S6980C6 = {  "S6980C6", // class name
  0,0,//no base classes
  &(vtc_S6980C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,92), // object size
  NSPAIRA(_ZTI7S6980C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6980C6),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  S6980C4  : S6980C5 , virtual S6980C6 {
  int s6980c4f0;
  virtual  ~S6980C4(); // _ZN7S6980C4D2Ev
  virtual void  v15(); // _ZN7S6980C43v15Ev
  virtual void  v16(); // _ZN7S6980C43v16Ev
  virtual void  v17(); // _ZN7S6980C43v17Ev
  virtual void  v18(); // _ZN7S6980C43v18Ev
  virtual void  v19(); // _ZN7S6980C43v19Ev
  virtual void  v20(); // _ZN7S6980C43v20Ev
  S6980C4(); // tgen
};
//SIG(-1 S6980C4) C1{ BC2{ BC3{ vd v7} vd v8 v9 v10 v11 v12 Fp FL:7} VBC4{ v13 v14 v15 v16 Fc FD[7]} vd v1 v2 v3 v4 v5 v6 Fi}


 S6980C4 ::~S6980C4(){ note_dtor("S6980C4", this);}
void  S6980C4 ::v15(){vfunc_called(this, "_ZN7S6980C43v15Ev");}
void  S6980C4 ::v16(){vfunc_called(this, "_ZN7S6980C43v16Ev");}
void  S6980C4 ::v17(){vfunc_called(this, "_ZN7S6980C43v17Ev");}
void  S6980C4 ::v18(){vfunc_called(this, "_ZN7S6980C43v18Ev");}
void  S6980C4 ::v19(){vfunc_called(this, "_ZN7S6980C43v19Ev");}
void  S6980C4 ::v20(){vfunc_called(this, "_ZN7S6980C43v20Ev");}
S6980C4 ::S6980C4(){ note_ctor("S6980C4", this);} // tgen

static void Test_S6980C4()
{
  extern Class_Descriptor cd_S6980C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S6980C4, buf);
    S6980C4 *dp, &lv = *(dp=new (buf) S6980C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S6980C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6980C4)");
    check_base_class_offset(lv, (S6980C2*)(S6980C5*), 0, "S6980C4");
    check_base_class_offset(lv, (S6980C5*), 0, "S6980C4");
    check_base_class_offset(lv, (S6980C6*), ABISELECT(32,16), "S6980C4");
    check_field_offset(lv, s6980c4f0, ABISELECT(20,12), "S6980C4.s6980c4f0");
    test_class_info(&lv, &cd_S6980C4);
    dp->~S6980C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6980C4(Test_S6980C4, "S6980C4", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN7S6980C4C1Ev();
extern void _ZN7S6980C4D2Ev();
Name_Map name_map_S6980C4[] = {
  NSPAIR(_ZN7S6980C4C1Ev),
  NSPAIR(_ZN7S6980C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6980C2;
extern VTBL_ENTRY _ZTI7S6980C2[];
extern  VTBL_ENTRY _ZTV7S6980C2[];
extern Class_Descriptor cd_S6980C5;
extern VTBL_ENTRY _ZTI7S6980C5[];
extern  VTBL_ENTRY _ZTV7S6980C5[];
extern Class_Descriptor cd_S6980C6;
extern VTBL_ENTRY _ZTI7S6980C6[];
extern  VTBL_ENTRY _ZTV7S6980C6[];
static Base_Class bases_S6980C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6980C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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
  0, 0},
  {&cd_S6980C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6980C6,    ABISELECT(32,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6980C4[];
extern void _ZN7S6980C4D1Ev();
extern void _ZN7S6980C4D0Ev();
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C52v6Ev();
extern void _ZN7S6980C52v7Ev();
extern void _ZN7S6980C52v8Ev();
extern void _ZN7S6980C52v9Ev();
extern void _ZN7S6980C53v10Ev();
extern void _ZN7S6980C43v15Ev();
extern void _ZN7S6980C43v16Ev();
extern void _ZN7S6980C43v17Ev();
extern void _ZN7S6980C43v18Ev();
extern void _ZN7S6980C43v19Ev();
extern void _ZN7S6980C43v20Ev();
extern void _ZN7S6980C63v11Ev();
extern void _ZN7S6980C63v12Ev();
extern void _ZN7S6980C63v13Ev();
extern void _ZN7S6980C63v14Ev();
static  VTBL_ENTRY vtc_S6980C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6980C4[0]),
  (VTBL_ENTRY)&_ZN7S6980C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6980C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6980C53v10Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v16Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v17Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v18Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v19Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6980C4[0]),
  (VTBL_ENTRY)&_ZN7S6980C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v14Ev,
};
extern VTBL_ENTRY _ZTV7S6980C4[];
static  VTT_ENTRY vtt_S6980C4[] = {
  {&(_ZTV7S6980C4[3]),  3,27},
  {&(_ZTV7S6980C4[23]),  23,27},
};
extern VTBL_ENTRY _ZTI7S6980C4[];
extern  VTBL_ENTRY _ZTV7S6980C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6980C4[];
Class_Descriptor cd_S6980C4 = {  "S6980C4", // class name
  bases_S6980C4, 3,
  &(vtc_S6980C4[0]), // expected_vtbl_contents
  &(vtt_S6980C4[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI7S6980C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6980C4),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6980C4),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6980C7  : virtual S6980C5 , S6980C2 {
  ::S6980C2 s6980c7f0;
  int s6980c7f1;
  ::S6980C2 s6980c7f2[9];
  virtual  ~S6980C7(); // _ZN7S6980C7D2Ev
  virtual void  v21(); // _ZN7S6980C73v21Ev
  virtual void  v22(); // _ZN7S6980C73v22Ev
  virtual void  v23(); // _ZN7S6980C73v23Ev
  virtual void  v24(); // _ZN7S6980C73v24Ev
  S6980C7(); // tgen
};
//SIG(-1 S6980C7) C1{ VBC2{ BC3{ vd v5} vd v6 v7 v8 v9 v10 Fp FL:7} BC3 vd v1 v2 v3 v4 FC3 Fi FC3[9]}


 S6980C7 ::~S6980C7(){ note_dtor("S6980C7", this);}
void  S6980C7 ::v21(){vfunc_called(this, "_ZN7S6980C73v21Ev");}
void  S6980C7 ::v22(){vfunc_called(this, "_ZN7S6980C73v22Ev");}
void  S6980C7 ::v23(){vfunc_called(this, "_ZN7S6980C73v23Ev");}
void  S6980C7 ::v24(){vfunc_called(this, "_ZN7S6980C73v24Ev");}
S6980C7 ::S6980C7(){ note_ctor("S6980C7", this);} // tgen

static void Test_S6980C7()
{
  extern Class_Descriptor cd_S6980C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,16)];
    init_test(&cd_S6980C7, buf);
    S6980C7 *dp, &lv = *(dp=new (buf) S6980C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S6980C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6980C7)");
    check_base_class_offset(lv, (S6980C2*)(S6980C5*), ABISELECT(96,48), "S6980C7");
    check_base_class_offset(lv, (S6980C5*), ABISELECT(96,48), "S6980C7");
    /*is_ambiguous_... S6980C7::S6980C2 */ AMB_check_base_class_offset(lv, (S6980C2*), 0, "S6980C7");
    check_field_offset(lv, s6980c7f0, ABISELECT(8,4), "S6980C7.s6980c7f0");
    check_field_offset(lv, s6980c7f1, ABISELECT(16,8), "S6980C7.s6980c7f1");
    check_field_offset(lv, s6980c7f2, ABISELECT(24,12), "S6980C7.s6980c7f2");
    test_class_info(&lv, &cd_S6980C7);
    dp->~S6980C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6980C7(Test_S6980C7, "S6980C7", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN7S6980C7C1Ev();
extern void _ZN7S6980C7D2Ev();
Name_Map name_map_S6980C7[] = {
  NSPAIR(_ZN7S6980C7C1Ev),
  NSPAIR(_ZN7S6980C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6980C2;
extern VTBL_ENTRY _ZTI7S6980C2[];
extern  VTBL_ENTRY _ZTV7S6980C2[];
extern Class_Descriptor cd_S6980C5;
extern VTBL_ENTRY _ZTI7S6980C5[];
extern  VTBL_ENTRY _ZTV7S6980C5[];
extern Class_Descriptor cd_S6980C2;
extern VTBL_ENTRY _ZTI7S6980C2[];
extern  VTBL_ENTRY _ZTV7S6980C2[];
static Base_Class bases_S6980C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6980C2,    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
    1, //immediately_derived
  0, 0},
  {&cd_S6980C5,    ABISELECT(96,48), //bcp->offset
    10, //bcp->virtual_function_table_offset
    9, //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_S6980C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S6980C7[];
extern void _ZN7S6980C7D1Ev();
extern void _ZN7S6980C7D0Ev();
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C73v21Ev();
extern void _ZN7S6980C73v22Ev();
extern void _ZN7S6980C73v23Ev();
extern void _ZN7S6980C73v24Ev();
extern void ABISELECT(_ZTv0_n24_N7S6980C7D1Ev,_ZTv0_n12_N7S6980C7D1Ev)();
extern void ABISELECT(_ZThn96_N7S6980C7D1Ev,_ZThn48_N7S6980C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6980C7D0Ev,_ZTv0_n12_N7S6980C7D0Ev)();
extern void ABISELECT(_ZThn96_N7S6980C7D0Ev,_ZThn48_N7S6980C7D0Ev)() __attribute__((weak));
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C52v6Ev();
extern void _ZN7S6980C52v7Ev();
extern void _ZN7S6980C52v8Ev();
extern void _ZN7S6980C52v9Ev();
extern void _ZN7S6980C53v10Ev();
static  VTBL_ENTRY vtc_S6980C7[] = {
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S6980C7[0]),
  (VTBL_ENTRY)&_ZN7S6980C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6980C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v21Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v22Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v23Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S6980C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C7D1Ev,_ZTv0_n12_N7S6980C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C7D0Ev,_ZTv0_n12_N7S6980C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6980C53v10Ev,
};
extern VTBL_ENTRY _ZTV7S6980C7[];
static  VTT_ENTRY vtt_S6980C7[] = {
  {&(_ZTV7S6980C7[3]),  3,27},
  {&(_ZTV7S6980C7[19]),  19,27},
};
extern VTBL_ENTRY _ZTI7S6980C7[];
extern  VTBL_ENTRY _ZTV7S6980C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6980C7[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6980C7D0Ev,_ZTv0_n12_N7S6980C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6980C7D0Ev,_ZThn48_N7S6980C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6980C7D1Ev,_ZTv0_n12_N7S6980C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6980C7D1Ev,_ZThn48_N7S6980C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6980C7 = {  "S6980C7", // class name
  bases_S6980C7, 3,
  &(vtc_S6980C7[0]), // expected_vtbl_contents
  &(vtt_S6980C7[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI7S6980C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6980C7),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6980C7),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6980C9  {
  ::S6980C2 s6980c9f0;
  virtual  ~S6980C9(); // _ZN7S6980C9D1Ev
  virtual void  v25(); // _ZN7S6980C93v25Ev
  virtual void  v26(); // _ZN7S6980C93v26Ev
  virtual void  v27(); // _ZN7S6980C93v27Ev
  virtual void  v28(); // _ZN7S6980C93v28Ev
  S6980C9(); // tgen
};
//SIG(-1 S6980C9) C1{ vd v1 v2 v3 v4 FC2{ vd v5}}


 S6980C9 ::~S6980C9(){ note_dtor("S6980C9", this);}
void  S6980C9 ::v25(){vfunc_called(this, "_ZN7S6980C93v25Ev");}
void  S6980C9 ::v26(){vfunc_called(this, "_ZN7S6980C93v26Ev");}
void  S6980C9 ::v27(){vfunc_called(this, "_ZN7S6980C93v27Ev");}
void  S6980C9 ::v28(){vfunc_called(this, "_ZN7S6980C93v28Ev");}
S6980C9 ::S6980C9(){ note_ctor("S6980C9", this);} // tgen

static void Test_S6980C9()
{
  extern Class_Descriptor cd_S6980C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6980C9, buf);
    S6980C9 *dp, &lv = *(dp=new (buf) S6980C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6980C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6980C9)");
    check_field_offset(lv, s6980c9f0, ABISELECT(8,4), "S6980C9.s6980c9f0");
    test_class_info(&lv, &cd_S6980C9);
    dp->~S6980C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6980C9(Test_S6980C9, "S6980C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6980C9C1Ev();
extern void _ZN7S6980C9D1Ev();
Name_Map name_map_S6980C9[] = {
  NSPAIR(_ZN7S6980C9C1Ev),
  NSPAIR(_ZN7S6980C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6980C9[];
extern void _ZN7S6980C9D1Ev();
extern void _ZN7S6980C9D0Ev();
extern void _ZN7S6980C93v25Ev();
extern void _ZN7S6980C93v26Ev();
extern void _ZN7S6980C93v27Ev();
extern void _ZN7S6980C93v28Ev();
static  VTBL_ENTRY vtc_S6980C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6980C9[0]),
  (VTBL_ENTRY)&_ZN7S6980C9D1Ev,
  (VTBL_ENTRY)&_ZN7S6980C9D0Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v25Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v26Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v27Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v28Ev,
};
extern VTBL_ENTRY _ZTI7S6980C9[];
extern  VTBL_ENTRY _ZTV7S6980C9[];
Class_Descriptor cd_S6980C9 = {  "S6980C9", // class name
  0,0,//no base classes
  &(vtc_S6980C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6980C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6980C9),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6980C8  : virtual S6980C6 , S6980C9 , virtual S6980C2 {
  void *s6980c8f0;
  int s6980c8f1;
  __tsi64 s6980c8f2[3];
  virtual  ~S6980C8(); // _ZN7S6980C8D2Ev
  virtual void  v29(); // _ZN7S6980C83v29Ev
  virtual void  v30(); // _ZN7S6980C83v30Ev
  virtual void  v31(); // _ZN7S6980C83v31Ev
  virtual void  v32(); // _ZN7S6980C83v32Ev
  S6980C8(); // tgen
};
//SIG(-1 S6980C8) C1{ VBC2{ v5 v6 v7 v8 Fc FD[7]} BC3{ vd v9 v10 v11 v12 FC4{ vd v13}} VBC4 vd v1 v2 v3 v4 Fp Fi FL[3]}


 S6980C8 ::~S6980C8(){ note_dtor("S6980C8", this);}
void  S6980C8 ::v29(){vfunc_called(this, "_ZN7S6980C83v29Ev");}
void  S6980C8 ::v30(){vfunc_called(this, "_ZN7S6980C83v30Ev");}
void  S6980C8 ::v31(){vfunc_called(this, "_ZN7S6980C83v31Ev");}
void  S6980C8 ::v32(){vfunc_called(this, "_ZN7S6980C83v32Ev");}
S6980C8 ::S6980C8(){ note_ctor("S6980C8", this);} // tgen

static void Test_S6980C8()
{
  extern Class_Descriptor cd_S6980C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,35)];
    init_test(&cd_S6980C8, buf);
    S6980C8 *dp, &lv = *(dp=new (buf) S6980C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,136), "sizeof(S6980C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6980C8)");
    check_base_class_offset(lv, (S6980C6*), ABISELECT(64,40), "S6980C8");
    check_base_class_offset(lv, (S6980C9*), 0, "S6980C8");
    check_base_class_offset(lv, (S6980C2*), ABISELECT(192,132), "S6980C8");
    check_field_offset(lv, s6980c8f0, ABISELECT(16,8), "S6980C8.s6980c8f0");
    check_field_offset(lv, s6980c8f1, ABISELECT(24,12), "S6980C8.s6980c8f1");
    check_field_offset(lv, s6980c8f2, ABISELECT(32,16), "S6980C8.s6980c8f2");
    test_class_info(&lv, &cd_S6980C8);
    dp->~S6980C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6980C8(Test_S6980C8, "S6980C8", ABISELECT(208,136));

#else // __cplusplus

extern void _ZN7S6980C8C1Ev();
extern void _ZN7S6980C8D2Ev();
Name_Map name_map_S6980C8[] = {
  NSPAIR(_ZN7S6980C8C1Ev),
  NSPAIR(_ZN7S6980C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6980C6;
extern VTBL_ENTRY _ZTI7S6980C6[];
extern  VTBL_ENTRY _ZTV7S6980C6[];
extern Class_Descriptor cd_S6980C9;
extern VTBL_ENTRY _ZTI7S6980C9[];
extern  VTBL_ENTRY _ZTV7S6980C9[];
extern Class_Descriptor cd_S6980C2;
extern VTBL_ENTRY _ZTI7S6980C2[];
extern  VTBL_ENTRY _ZTV7S6980C2[];
static Base_Class bases_S6980C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6980C6,    ABISELECT(64,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6980C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6980C2,    ABISELECT(192,132), //bcp->offset
    24, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6980C8[];
extern void _ZN7S6980C8D1Ev();
extern void _ZN7S6980C8D0Ev();
extern void _ZN7S6980C93v25Ev();
extern void _ZN7S6980C93v26Ev();
extern void _ZN7S6980C93v27Ev();
extern void _ZN7S6980C93v28Ev();
extern void _ZN7S6980C83v29Ev();
extern void _ZN7S6980C83v30Ev();
extern void _ZN7S6980C83v31Ev();
extern void _ZN7S6980C83v32Ev();
extern void _ZN7S6980C63v11Ev();
extern void _ZN7S6980C63v12Ev();
extern void _ZN7S6980C63v13Ev();
extern void _ZN7S6980C63v14Ev();
extern void ABISELECT(_ZTv0_n24_N7S6980C8D1Ev,_ZTv0_n12_N7S6980C8D1Ev)();
extern void ABISELECT(_ZThn192_N7S6980C8D1Ev,_ZThn132_N7S6980C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6980C8D0Ev,_ZTv0_n12_N7S6980C8D0Ev)();
extern void ABISELECT(_ZThn192_N7S6980C8D0Ev,_ZThn132_N7S6980C8D0Ev)() __attribute__((weak));
extern void _ZN7S6980C22v5Ev();
static  VTBL_ENTRY vtc_S6980C8[] = {
  ABISELECT(192,132),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S6980C8[0]),
  (VTBL_ENTRY)&_ZN7S6980C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6980C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v25Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v26Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v27Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v28Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v29Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v30Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v31Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v32Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S6980C8[0]),
  (VTBL_ENTRY)&_ZN7S6980C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v14Ev,
  0,
  ABISELECT(-192,-132),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI7S6980C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C8D1Ev,_ZTv0_n12_N7S6980C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C8D0Ev,_ZTv0_n12_N7S6980C8D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
};
extern VTBL_ENTRY _ZTV7S6980C8[];
static  VTT_ENTRY vtt_S6980C8[] = {
  {&(_ZTV7S6980C8[4]),  4,31},
  {&(_ZTV7S6980C8[20]),  20,31},
  {&(_ZTV7S6980C8[28]),  28,31},
};
extern VTBL_ENTRY _ZTI7S6980C8[];
extern  VTBL_ENTRY _ZTV7S6980C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6980C8[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6980C8D0Ev,_ZTv0_n12_N7S6980C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S6980C8D0Ev,_ZThn132_N7S6980C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6980C8D1Ev,_ZTv0_n12_N7S6980C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S6980C8D1Ev,_ZThn132_N7S6980C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6980C8 = {  "S6980C8", // class name
  bases_S6980C8, 3,
  &(vtc_S6980C8[0]), // expected_vtbl_contents
  &(vtt_S6980C8[0]), // expected_vtt_contents
  ABISELECT(208,136), // object size
  NSPAIRA(_ZTI7S6980C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6980C8),31, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6980C8),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6980C3  : S6980C4 , virtual S6980C7 , virtual S6980C2 , virtual S6980C8 {
  int s6980c3f0[2];
  char s6980c3f1;
  virtual  ~S6980C3(); // _ZN7S6980C3D2Ev
  S6980C3(); // tgen
};
//SIG(-1 S6980C3) C1{ BC2{ BC3{ BC4{ vd v1} vd v2 v3 v4 v5 v6 Fp FL:7} VBC5{ v7 v8 v9 v10 Fc FD[7]} vd v11 v12 v13 v14 v15 v16 Fi} VBC6{ VBC3 BC4 vd v17 v18 v19 v20 FC4 Fi FC4[9]} VBC4 VBC7{ VBC5 BC8{ vd v21 v22 v23 v24 FC4} VBC4 vd v25 v26 v27 v28 Fp Fi FL[3]} vd Fi[2] Fc}


 S6980C3 ::~S6980C3(){ note_dtor("S6980C3", this);}
S6980C3 ::S6980C3(){ note_ctor("S6980C3", this);} // tgen

static void Test_S6980C3()
{
  extern Class_Descriptor cd_S6980C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,57)];
    init_test(&cd_S6980C3, buf);
    S6980C3 *dp, &lv = *(dp=new (buf) S6980C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,224), "sizeof(S6980C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6980C3)");
    check_base_class_offset(lv, (S6980C2*)(S6980C5*)(S6980C4*), 0, "S6980C3");
    check_base_class_offset(lv, (S6980C5*)(S6980C4*), 0, "S6980C3");
    check_base_class_offset(lv, (S6980C6*)(S6980C4*), ABISELECT(48,28), "S6980C3");
    check_base_class_offset(lv, (S6980C6*)(S6980C8*), ABISELECT(48,28), "S6980C3");
    check_base_class_offset(lv, (S6980C4*), 0, "S6980C3");
    /*is_ambiguous_... S6980C3::S6980C5 */ AMB_check_base_class_offset(lv, (S6980C2*)(S6980C5*), ABISELECT(272,168), "S6980C3");
    check_base_class_offset(lv, (S6980C5*)(S6980C7*), ABISELECT(272,168), "S6980C3");
    /*is_ambiguous_... S6980C7::S6980C2 */ AMB_check_base_class_offset(lv, (S6980C2*)(S6980C7*), ABISELECT(176,120), "S6980C3");
    check_base_class_offset(lv, (S6980C7*), ABISELECT(176,120), "S6980C3");
    /*is_ambiguous_... S6980C3::S6980C2 */ AMB_check_base_class_offset(lv, (S6980C2*), ABISELECT(296,180), "S6980C3");
    check_base_class_offset(lv, (S6980C2*)(S6980C8*), ABISELECT(296,180), "S6980C3");
    check_base_class_offset(lv, (S6980C9*)(S6980C8*), ABISELECT(304,184), "S6980C3");
    check_base_class_offset(lv, (S6980C8*), ABISELECT(304,184), "S6980C3");
    check_field_offset(lv, s6980c3f0, ABISELECT(24,16), "S6980C3.s6980c3f0");
    check_field_offset(lv, s6980c3f1, ABISELECT(32,24), "S6980C3.s6980c3f1");
    test_class_info(&lv, &cd_S6980C3);
    dp->~S6980C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6980C3(Test_S6980C3, "S6980C3", ABISELECT(368,224));

#else // __cplusplus

extern void _ZN7S6980C3C1Ev();
extern void _ZN7S6980C3D2Ev();
Name_Map name_map_S6980C3[] = {
  NSPAIR(_ZN7S6980C3C1Ev),
  NSPAIR(_ZN7S6980C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6980C2;
extern VTBL_ENTRY _ZTI7S6980C2[];
extern  VTBL_ENTRY _ZTV7S6980C2[];
extern Class_Descriptor cd_S6980C5;
extern VTBL_ENTRY _ZTI7S6980C5[];
extern  VTBL_ENTRY _ZTV7S6980C5[];
extern Class_Descriptor cd_S6980C6;
extern VTBL_ENTRY _ZTI7S6980C6[];
extern  VTBL_ENTRY _ZTV7S6980C6[];
extern Class_Descriptor cd_S6980C4;
extern VTBL_ENTRY _ZTI7S6980C4[];
extern  VTBL_ENTRY _ZTV7S6980C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6980C4[];
extern Class_Descriptor cd_S6980C2;
extern VTBL_ENTRY _ZTI7S6980C2[];
extern  VTBL_ENTRY _ZTV7S6980C2[];
extern Class_Descriptor cd_S6980C5;
extern VTBL_ENTRY _ZTI7S6980C5[];
extern  VTBL_ENTRY _ZTV7S6980C5[];
extern Class_Descriptor cd_S6980C2;
extern VTBL_ENTRY _ZTI7S6980C2[];
extern  VTBL_ENTRY _ZTV7S6980C2[];
extern Class_Descriptor cd_S6980C7;
extern VTBL_ENTRY _ZTI7S6980C7[];
extern  VTBL_ENTRY _ZTV7S6980C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6980C7[];
extern Class_Descriptor cd_S6980C2;
extern VTBL_ENTRY _ZTI7S6980C2[];
extern  VTBL_ENTRY _ZTV7S6980C2[];
extern Class_Descriptor cd_S6980C9;
extern VTBL_ENTRY _ZTI7S6980C9[];
extern  VTBL_ENTRY _ZTV7S6980C9[];
extern Class_Descriptor cd_S6980C8;
extern VTBL_ENTRY _ZTI7S6980C8[];
extern  VTBL_ENTRY _ZTV7S6980C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6980C8[];
static Base_Class bases_S6980C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6980C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S6980C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S6980C6,    ABISELECT(48,28), //bcp->offset
    21, //bcp->virtual_function_table_offset
    6, //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
    3, //immediately_derived
  0, 1},
  {&cd_S6980C4,    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_S6980C2,    ABISELECT(272,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6980C5,    ABISELECT(272,168), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //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
    7, //immediately_derived
  0, 1},
  {&cd_S6980C2,    ABISELECT(176,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
    7, //immediately_derived
  0, 0},
  {&cd_S6980C7,    ABISELECT(176,120), //bcp->offset
    31, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6980C2,    ABISELECT(296,180), //bcp->offset
    64, //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_S6980C9,    ABISELECT(304,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
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6980C8,    ABISELECT(304,184), //bcp->offset
    71, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6980C3[];
extern void _ZN7S6980C3D1Ev();
extern void _ZN7S6980C3D0Ev();
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C52v6Ev();
extern void _ZN7S6980C52v7Ev();
extern void _ZN7S6980C52v8Ev();
extern void _ZN7S6980C52v9Ev();
extern void _ZN7S6980C53v10Ev();
extern void _ZN7S6980C43v15Ev();
extern void _ZN7S6980C43v16Ev();
extern void _ZN7S6980C43v17Ev();
extern void _ZN7S6980C43v18Ev();
extern void _ZN7S6980C43v19Ev();
extern void _ZN7S6980C43v20Ev();
extern void _ZN7S6980C63v11Ev();
extern void _ZN7S6980C63v12Ev();
extern void _ZN7S6980C63v13Ev();
extern void _ZN7S6980C63v14Ev();
extern void ABISELECT(_ZTv0_n32_N7S6980C3D1Ev,_ZTv0_n16_N7S6980C3D1Ev)();
extern void ABISELECT(_ZThn176_N7S6980C3D1Ev,_ZThn120_N7S6980C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6980C3D0Ev,_ZTv0_n16_N7S6980C3D0Ev)();
extern void ABISELECT(_ZThn176_N7S6980C3D0Ev,_ZThn120_N7S6980C3D0Ev)() __attribute__((weak));
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C73v21Ev();
extern void _ZN7S6980C73v22Ev();
extern void _ZN7S6980C73v23Ev();
extern void _ZN7S6980C73v24Ev();
extern void ABISELECT(_ZTv0_n24_N7S6980C3D1Ev,_ZTv0_n12_N7S6980C3D1Ev)();
extern void ABISELECT(_ZThn272_N7S6980C3D1Ev,_ZThn168_N7S6980C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6980C3D0Ev,_ZTv0_n12_N7S6980C3D0Ev)();
extern void ABISELECT(_ZThn272_N7S6980C3D0Ev,_ZThn168_N7S6980C3D0Ev)() __attribute__((weak));
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C52v6Ev();
extern void _ZN7S6980C52v7Ev();
extern void _ZN7S6980C52v8Ev();
extern void _ZN7S6980C52v9Ev();
extern void _ZN7S6980C53v10Ev();
extern void ABISELECT(_ZTv0_n24_N7S6980C3D1Ev,_ZTv0_n12_N7S6980C3D1Ev)();
extern void ABISELECT(_ZThn296_N7S6980C3D1Ev,_ZThn180_N7S6980C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6980C3D0Ev,_ZTv0_n12_N7S6980C3D0Ev)();
extern void ABISELECT(_ZThn296_N7S6980C3D0Ev,_ZThn180_N7S6980C3D0Ev)() __attribute__((weak));
extern void _ZN7S6980C22v5Ev();
extern void ABISELECT(_ZTv0_n40_N7S6980C3D1Ev,_ZTv0_n20_N7S6980C3D1Ev)();
extern void ABISELECT(_ZThn304_N7S6980C3D1Ev,_ZThn184_N7S6980C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6980C3D0Ev,_ZTv0_n20_N7S6980C3D0Ev)();
extern void ABISELECT(_ZThn304_N7S6980C3D0Ev,_ZThn184_N7S6980C3D0Ev)() __attribute__((weak));
extern void _ZN7S6980C93v25Ev();
extern void _ZN7S6980C93v26Ev();
extern void _ZN7S6980C93v27Ev();
extern void _ZN7S6980C93v28Ev();
extern void _ZN7S6980C83v29Ev();
extern void _ZN7S6980C83v30Ev();
extern void _ZN7S6980C83v31Ev();
extern void _ZN7S6980C83v32Ev();
static  VTBL_ENTRY vtc_S6980C3[] = {
  ABISELECT(304,184),
  ABISELECT(296,180),
  ABISELECT(272,168),
  ABISELECT(176,120),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6980C3[0]),
  (VTBL_ENTRY)&_ZN7S6980C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6980C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6980C53v10Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v16Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v17Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v18Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v19Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S6980C3[0]),
  (VTBL_ENTRY)&_ZN7S6980C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v14Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-120),
  ABISELECT(96,48),
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI7S6980C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6980C3D1Ev,_ZTv0_n16_N7S6980C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6980C3D0Ev,_ZTv0_n16_N7S6980C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v21Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v22Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v23Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-272,-168),
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI7S6980C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C3D1Ev,_ZTv0_n12_N7S6980C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C3D0Ev,_ZTv0_n12_N7S6980C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6980C53v10Ev,
  0,
  ABISELECT(-296,-180),
  ABISELECT(-296,-180),
  (VTBL_ENTRY)&(_ZTI7S6980C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C3D1Ev,_ZTv0_n12_N7S6980C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C3D0Ev,_ZTv0_n12_N7S6980C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-184),
  ABISELECT(-8,-4),
  ABISELECT(-256,-156),
  ABISELECT(-304,-184),
  (VTBL_ENTRY)&(_ZTI7S6980C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6980C3D1Ev,_ZTv0_n20_N7S6980C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6980C3D0Ev,_ZTv0_n20_N7S6980C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C93v25Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v26Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v27Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v28Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v29Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v30Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v31Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v32Ev,
};
extern VTBL_ENTRY _ZTV7S6980C3[];
extern void _ZN7S6980C4D1Ev();
extern void _ZN7S6980C4D0Ev();
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C52v6Ev();
extern void _ZN7S6980C52v7Ev();
extern void _ZN7S6980C52v8Ev();
extern void _ZN7S6980C52v9Ev();
extern void _ZN7S6980C53v10Ev();
extern void _ZN7S6980C43v15Ev();
extern void _ZN7S6980C43v16Ev();
extern void _ZN7S6980C43v17Ev();
extern void _ZN7S6980C43v18Ev();
extern void _ZN7S6980C43v19Ev();
extern void _ZN7S6980C43v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C4__7S6980C3[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6980C4[0]),
  (VTBL_ENTRY)&_ZN7S6980C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6980C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6980C53v10Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v16Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v17Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v18Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v19Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v20Ev,
};
extern void _ZN7S6980C63v11Ev();
extern void _ZN7S6980C63v12Ev();
extern void _ZN7S6980C63v13Ev();
extern void _ZN7S6980C63v14Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C6__7S6980C4__7S6980C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S6980C4[0]),
  (VTBL_ENTRY)&_ZN7S6980C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v14Ev,
};
extern void _ZN7S6980C7D1Ev();
extern void _ZN7S6980C7D0Ev();
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C73v21Ev();
extern void _ZN7S6980C73v22Ev();
extern void _ZN7S6980C73v23Ev();
extern void _ZN7S6980C73v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C7__7S6980C3[] = {
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S6980C7[0]),
  (VTBL_ENTRY)&_ZN7S6980C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6980C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v21Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v22Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v23Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6980C7D1Ev,_ZTv0_n12_N7S6980C7D1Ev)();
extern void ABISELECT(_ZThn96_N7S6980C7D1Ev,_ZThn48_N7S6980C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6980C7D0Ev,_ZTv0_n12_N7S6980C7D0Ev)();
extern void ABISELECT(_ZThn96_N7S6980C7D0Ev,_ZThn48_N7S6980C7D0Ev)() __attribute__((weak));
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C52v6Ev();
extern void _ZN7S6980C52v7Ev();
extern void _ZN7S6980C52v8Ev();
extern void _ZN7S6980C52v9Ev();
extern void _ZN7S6980C53v10Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C5__7S6980C7__7S6980C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S6980C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C7D1Ev,_ZTv0_n12_N7S6980C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C7D0Ev,_ZTv0_n12_N7S6980C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6980C53v10Ev,
};
extern void _ZN7S6980C8D1Ev();
extern void _ZN7S6980C8D0Ev();
extern void _ZN7S6980C93v25Ev();
extern void _ZN7S6980C93v26Ev();
extern void _ZN7S6980C93v27Ev();
extern void _ZN7S6980C93v28Ev();
extern void _ZN7S6980C83v29Ev();
extern void _ZN7S6980C83v30Ev();
extern void _ZN7S6980C83v31Ev();
extern void _ZN7S6980C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C8__7S6980C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S6980C8[0]),
  (VTBL_ENTRY)&_ZN7S6980C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6980C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v25Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v26Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v27Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v28Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v29Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v30Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v31Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v32Ev,
};
extern void _ZN7S6980C63v11Ev();
extern void _ZN7S6980C63v12Ev();
extern void _ZN7S6980C63v13Ev();
extern void _ZN7S6980C63v14Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C6__7S6980C8__7S6980C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(256,156),
  (VTBL_ENTRY)&(_ZTI7S6980C8[0]),
  (VTBL_ENTRY)&_ZN7S6980C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6980C8D1Ev,_ZTv0_n12_N7S6980C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S6980C8D0Ev,_ZTv0_n12_N7S6980C8D0Ev)();
extern void _ZN7S6980C22v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C2__7S6980C8__7S6980C3[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S6980C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C8D1Ev,_ZTv0_n12_N7S6980C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C8D0Ev,_ZTv0_n12_N7S6980C8D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
};
static  VTT_ENTRY vtt_S6980C3[] = {
  {&(_ZTV7S6980C3[7]),  7,94},
  {&(_tg__ZTV7S6980C4__7S6980C3[3]),  3,17},
  {&(_tg__ZTV7S6980C6__7S6980C4__7S6980C3[6]),  6,10},
  {&(_ZTV7S6980C3[27]),  27,94},
  {&(_ZTV7S6980C3[40]),  40,94},
  {&(_ZTV7S6980C3[56]),  56,94},
  {&(_ZTV7S6980C3[68]),  68,94},
  {&(_ZTV7S6980C3[84]),  84,94},
  {&(_tg__ZTV7S6980C7__7S6980C3[3]),  3,10},
  {&(_tg__ZTV7S6980C5__7S6980C7__7S6980C3[9]),  9,17},
  {&(_tg__ZTV7S6980C8__7S6980C3[4]),  4,14},
  {&(_tg__ZTV7S6980C6__7S6980C8__7S6980C3[6]),  6,10},
  {&(_tg__ZTV7S6980C2__7S6980C8__7S6980C3[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S6980C3[];
extern  VTBL_ENTRY _ZTV7S6980C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6980C3[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6980C7D0Ev,_ZTv0_n12_N7S6980C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6980C7D0Ev,_ZThn48_N7S6980C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6980C7D1Ev,_ZTv0_n12_N7S6980C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6980C7D1Ev,_ZThn48_N7S6980C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6980C3D0Ev,_ZTv0_n20_N7S6980C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S6980C3D0Ev,_ZThn184_N7S6980C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6980C3D1Ev,_ZTv0_n20_N7S6980C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S6980C3D1Ev,_ZThn184_N7S6980C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6980C3D0Ev,_ZTv0_n12_N7S6980C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N7S6980C3D0Ev,_ZThn180_N7S6980C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S6980C3D0Ev,_ZThn168_N7S6980C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6980C3D1Ev,_ZTv0_n12_N7S6980C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N7S6980C3D1Ev,_ZThn180_N7S6980C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S6980C3D1Ev,_ZThn168_N7S6980C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6980C3D0Ev,_ZTv0_n16_N7S6980C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S6980C3D0Ev,_ZThn120_N7S6980C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6980C3D1Ev,_ZTv0_n16_N7S6980C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S6980C3D1Ev,_ZThn120_N7S6980C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6980C3 = {  "S6980C3", // class name
  bases_S6980C3, 11,
  &(vtc_S6980C3[0]), // expected_vtbl_contents
  &(vtt_S6980C3[0]), // expected_vtt_contents
  ABISELECT(368,224), // object size
  NSPAIRA(_ZTI7S6980C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6980C3),94, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6980C3),13, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names49,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6980C11  {
  long s6980c11f0[2];
  virtual void  v33(); // _ZN8S6980C113v33Ev
  virtual void  v34(); // _ZN8S6980C113v34Ev
  virtual void  v35(); // _ZN8S6980C113v35Ev
  ~S6980C11(); // tgen
  S6980C11(); // tgen
};
//SIG(-1 S6980C11) C1{ v1 v2 v3 Fl[2]}


void  S6980C11 ::v33(){vfunc_called(this, "_ZN8S6980C113v33Ev");}
void  S6980C11 ::v34(){vfunc_called(this, "_ZN8S6980C113v34Ev");}
void  S6980C11 ::v35(){vfunc_called(this, "_ZN8S6980C113v35Ev");}
S6980C11 ::~S6980C11(){ note_dtor("S6980C11", this);} // tgen
S6980C11 ::S6980C11(){ note_ctor("S6980C11", this);} // tgen

static void Test_S6980C11()
{
  extern Class_Descriptor cd_S6980C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6980C11, buf);
    S6980C11 *dp, &lv = *(dp=new (buf) S6980C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6980C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6980C11)");
    check_field_offset(lv, s6980c11f0, ABISELECT(8,4), "S6980C11.s6980c11f0");
    test_class_info(&lv, &cd_S6980C11);
    dp->~S6980C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6980C11(Test_S6980C11, "S6980C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S6980C11C1Ev();
extern void _ZN8S6980C11D1Ev();
Name_Map name_map_S6980C11[] = {
  NSPAIR(_ZN8S6980C11C1Ev),
  NSPAIR(_ZN8S6980C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S6980C11[];
extern void _ZN8S6980C113v33Ev();
extern void _ZN8S6980C113v34Ev();
extern void _ZN8S6980C113v35Ev();
static  VTBL_ENTRY vtc_S6980C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6980C11[0]),
  (VTBL_ENTRY)&_ZN8S6980C113v33Ev,
  (VTBL_ENTRY)&_ZN8S6980C113v34Ev,
  (VTBL_ENTRY)&_ZN8S6980C113v35Ev,
};
extern VTBL_ENTRY _ZTI8S6980C11[];
extern  VTBL_ENTRY _ZTV8S6980C11[];
Class_Descriptor cd_S6980C11 = {  "S6980C11", // class name
  0,0,//no base classes
  &(vtc_S6980C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S6980C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S6980C11),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  S6980C10  : virtual S6980C11 {
  virtual  ~S6980C10(); // _ZN8S6980C10D2Ev
  virtual void  v36(); // _ZN8S6980C103v36Ev
  virtual void  v37(); // _ZN8S6980C103v37Ev
  virtual void  v38(); // _ZN8S6980C103v38Ev
  virtual void  v39(); // _ZN8S6980C103v39Ev
  virtual void  v40(); // _ZN8S6980C103v40Ev
  virtual void  v41(); // _ZN8S6980C103v41Ev
  virtual void  v42(); // _ZN8S6980C103v42Ev
  S6980C10(); // tgen
};
//SIG(-1 S6980C10) C1{ VBC2{ v8 v9 v10 Fl[2]} vd v1 v2 v3 v4 v5 v6 v7}


 S6980C10 ::~S6980C10(){ note_dtor("S6980C10", this);}
void  S6980C10 ::v36(){vfunc_called(this, "_ZN8S6980C103v36Ev");}
void  S6980C10 ::v37(){vfunc_called(this, "_ZN8S6980C103v37Ev");}
void  S6980C10 ::v38(){vfunc_called(this, "_ZN8S6980C103v38Ev");}
void  S6980C10 ::v39(){vfunc_called(this, "_ZN8S6980C103v39Ev");}
void  S6980C10 ::v40(){vfunc_called(this, "_ZN8S6980C103v40Ev");}
void  S6980C10 ::v41(){vfunc_called(this, "_ZN8S6980C103v41Ev");}
void  S6980C10 ::v42(){vfunc_called(this, "_ZN8S6980C103v42Ev");}
S6980C10 ::S6980C10(){ note_ctor("S6980C10", this);} // tgen

static void Test_S6980C10()
{
  extern Class_Descriptor cd_S6980C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S6980C10, buf);
    S6980C10 *dp, &lv = *(dp=new (buf) S6980C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S6980C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6980C10)");
    check_base_class_offset(lv, (S6980C11*), ABISELECT(8,4), "S6980C10");
    test_class_info(&lv, &cd_S6980C10);
    dp->~S6980C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6980C10(Test_S6980C10, "S6980C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S6980C10C1Ev();
extern void _ZN8S6980C10D2Ev();
Name_Map name_map_S6980C10[] = {
  NSPAIR(_ZN8S6980C10C1Ev),
  NSPAIR(_ZN8S6980C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6980C11;
extern VTBL_ENTRY _ZTI8S6980C11[];
extern  VTBL_ENTRY _ZTV8S6980C11[];
static Base_Class bases_S6980C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6980C11,    ABISELECT(8,4), //bcp->offset
    12, //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 _ZTI8S6980C10[];
extern void _ZN8S6980C10D1Ev();
extern void _ZN8S6980C10D0Ev();
extern void _ZN8S6980C103v36Ev();
extern void _ZN8S6980C103v37Ev();
extern void _ZN8S6980C103v38Ev();
extern void _ZN8S6980C103v39Ev();
extern void _ZN8S6980C103v40Ev();
extern void _ZN8S6980C103v41Ev();
extern void _ZN8S6980C103v42Ev();
extern void _ZN8S6980C113v33Ev();
extern void _ZN8S6980C113v34Ev();
extern void _ZN8S6980C113v35Ev();
static  VTBL_ENTRY vtc_S6980C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6980C10[0]),
  (VTBL_ENTRY)&_ZN8S6980C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6980C10D0Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v36Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v37Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v38Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v39Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v40Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v41Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v42Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6980C10[0]),
  (VTBL_ENTRY)&_ZN8S6980C113v33Ev,
  (VTBL_ENTRY)&_ZN8S6980C113v34Ev,
  (VTBL_ENTRY)&_ZN8S6980C113v35Ev,
};
extern VTBL_ENTRY _ZTV8S6980C10[];
static  VTT_ENTRY vtt_S6980C10[] = {
  {&(_ZTV8S6980C10[3]),  3,20},
  {&(_ZTV8S6980C10[17]),  17,20},
};
extern VTBL_ENTRY _ZTI8S6980C10[];
extern  VTBL_ENTRY _ZTV8S6980C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6980C10[];
Class_Descriptor cd_S6980C10 = {  "S6980C10", // class name
  bases_S6980C10, 1,
  &(vtc_S6980C10[0]), // expected_vtbl_contents
  &(vtt_S6980C10[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S6980C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S6980C10),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6980C10),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  S6980C12  {
  virtual  ~S6980C12(); // _ZN8S6980C12D1Ev
  virtual void  v43(); // _ZN8S6980C123v43Ev
  S6980C12(); // tgen
};
//SIG(-1 S6980C12) C1{ vd v1}


 S6980C12 ::~S6980C12(){ note_dtor("S6980C12", this);}
void  S6980C12 ::v43(){vfunc_called(this, "_ZN8S6980C123v43Ev");}
S6980C12 ::S6980C12(){ note_ctor("S6980C12", this);} // tgen

static void Test_S6980C12()
{
  extern Class_Descriptor cd_S6980C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6980C12, buf);
    S6980C12 *dp, &lv = *(dp=new (buf) S6980C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6980C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6980C12)");
    test_class_info(&lv, &cd_S6980C12);
    dp->~S6980C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6980C12(Test_S6980C12, "S6980C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S6980C12C1Ev();
extern void _ZN8S6980C12D1Ev();
Name_Map name_map_S6980C12[] = {
  NSPAIR(_ZN8S6980C12C1Ev),
  NSPAIR(_ZN8S6980C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S6980C12[];
extern void _ZN8S6980C12D1Ev();
extern void _ZN8S6980C12D0Ev();
extern void _ZN8S6980C123v43Ev();
static  VTBL_ENTRY vtc_S6980C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6980C12[0]),
  (VTBL_ENTRY)&_ZN8S6980C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6980C12D0Ev,
  (VTBL_ENTRY)&_ZN8S6980C123v43Ev,
};
extern VTBL_ENTRY _ZTI8S6980C12[];
extern  VTBL_ENTRY _ZTV8S6980C12[];
Class_Descriptor cd_S6980C12 = {  "S6980C12", // class name
  0,0,//no base classes
  &(vtc_S6980C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S6980C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S6980C12),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  S6980C1  : S6980C2 , virtual S6980C3 , virtual S6980C10 , S6980C12 {
  virtual  ~S6980C1(); // _ZN7S6980C1D2Ev
  virtual void  v1(); // _ZN7S6980C12v1Ev
  virtual void  v2(); // _ZN7S6980C12v2Ev
  virtual void  v3(); // _ZN7S6980C12v3Ev
  virtual void  v4(); // _ZN7S6980C12v4Ev
  S6980C1(); // tgen
};
//SIG(1 S6980C1) C1{ BC2{ vd v5} VBC3{ BC4{ BC5{ BC2 vd v6 v7 v8 v9 v10 Fp FL:7} VBC6{ v11 v12 v13 v14 Fc FD[7]} vd v15 v16 v17 v18 v19 v20 Fi} VBC7{ VBC5 BC2 vd v21 v22 v23 v24 FC2 Fi FC2[9]} VBC2 VBC8{ VBC6 BC9{ vd v25 v26 v27 v28 FC2} VBC2 vd v29 v30 v31 v32 Fp Fi FL[3]} vd Fi[2] Fc} VBC10{ VBC11{ v33 v34 v35 Fl[2]} vd v36 v37 v38 v39 v40 v41 v42} BC12{ vd v43} vd v1 v2 v3 v4}


 S6980C1 ::~S6980C1(){ note_dtor("S6980C1", this);}
void  S6980C1 ::v1(){vfunc_called(this, "_ZN7S6980C12v1Ev");}
void  S6980C1 ::v2(){vfunc_called(this, "_ZN7S6980C12v2Ev");}
void  S6980C1 ::v3(){vfunc_called(this, "_ZN7S6980C12v3Ev");}
void  S6980C1 ::v4(){vfunc_called(this, "_ZN7S6980C12v4Ev");}
S6980C1 ::S6980C1(){ note_ctor("S6980C1", this);} // tgen

static void Test_S6980C1()
{
  extern Class_Descriptor cd_S6980C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,63)];
    init_test(&cd_S6980C1, buf);
    S6980C1 *dp, &lv = *(dp=new (buf) S6980C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,248), "sizeof(S6980C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6980C1)");
    /*is_ambiguous_... S6980C1::S6980C2 */ AMB_check_base_class_offset(lv, (S6980C2*), 0, "S6980C1");
    check_base_class_offset(lv, (S6980C2*)(S6980C5*)(S6980C4*)(S6980C3*), ABISELECT(16,8), "S6980C1");
    check_base_class_offset(lv, (S6980C5*)(S6980C4*)(S6980C3*), ABISELECT(16,8), "S6980C1");
    check_base_class_offset(lv, (S6980C6*)(S6980C4*)(S6980C3*), ABISELECT(64,36), "S6980C1");
    check_base_class_offset(lv, (S6980C6*)(S6980C8*), ABISELECT(64,36), "S6980C1");
    check_base_class_offset(lv, (S6980C4*)(S6980C3*), ABISELECT(16,8), "S6980C1");
    /*is_ambiguous_... S6980C1::S6980C5 */ AMB_check_base_class_offset(lv, (S6980C2*)(S6980C5*), ABISELECT(288,176), "S6980C1");
    check_base_class_offset(lv, (S6980C5*)(S6980C7*), ABISELECT(288,176), "S6980C1");
    /*is_ambiguous_... S6980C7::S6980C2 */ AMB_check_base_class_offset(lv, (S6980C2*)(S6980C7*), ABISELECT(192,128), "S6980C1");
    check_base_class_offset(lv, (S6980C7*)(S6980C3*), ABISELECT(192,128), "S6980C1");
    /*is_ambiguous_... S6980C3::S6980C2 */ AMB_check_base_class_offset(lv, (S6980C2*)(S6980C3*), ABISELECT(312,188), "S6980C1");
    check_base_class_offset(lv, (S6980C2*)(S6980C8*), ABISELECT(312,188), "S6980C1");
    check_base_class_offset(lv, (S6980C9*)(S6980C8*), ABISELECT(320,192), "S6980C1");
    check_base_class_offset(lv, (S6980C8*)(S6980C3*), ABISELECT(320,192), "S6980C1");
    check_base_class_offset(lv, (S6980C3*), ABISELECT(16,8), "S6980C1");
    check_base_class_offset(lv, (S6980C11*)(S6980C10*), ABISELECT(384,236), "S6980C1");
    check_base_class_offset(lv, (S6980C10*), ABISELECT(376,232), "S6980C1");
    check_base_class_offset(lv, (S6980C12*), ABISELECT(8,4), "S6980C1");
    test_class_info(&lv, &cd_S6980C1);
    dp->~S6980C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6980C1(Test_S6980C1, "S6980C1", ABISELECT(416,248));

#else // __cplusplus

extern void _ZN7S6980C1C1Ev();
extern void _ZN7S6980C1D2Ev();
Name_Map name_map_S6980C1[] = {
  NSPAIR(_ZN7S6980C1C1Ev),
  NSPAIR(_ZN7S6980C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6980C2;
extern VTBL_ENTRY _ZTI7S6980C2[];
extern  VTBL_ENTRY _ZTV7S6980C2[];
extern Class_Descriptor cd_S6980C2;
extern VTBL_ENTRY _ZTI7S6980C2[];
extern  VTBL_ENTRY _ZTV7S6980C2[];
extern Class_Descriptor cd_S6980C5;
extern VTBL_ENTRY _ZTI7S6980C5[];
extern  VTBL_ENTRY _ZTV7S6980C5[];
extern Class_Descriptor cd_S6980C6;
extern VTBL_ENTRY _ZTI7S6980C6[];
extern  VTBL_ENTRY _ZTV7S6980C6[];
extern Class_Descriptor cd_S6980C4;
extern VTBL_ENTRY _ZTI7S6980C4[];
extern  VTBL_ENTRY _ZTV7S6980C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6980C4[];
extern Class_Descriptor cd_S6980C2;
extern VTBL_ENTRY _ZTI7S6980C2[];
extern  VTBL_ENTRY _ZTV7S6980C2[];
extern Class_Descriptor cd_S6980C5;
extern VTBL_ENTRY _ZTI7S6980C5[];
extern  VTBL_ENTRY _ZTV7S6980C5[];
extern Class_Descriptor cd_S6980C2;
extern VTBL_ENTRY _ZTI7S6980C2[];
extern  VTBL_ENTRY _ZTV7S6980C2[];
extern Class_Descriptor cd_S6980C7;
extern VTBL_ENTRY _ZTI7S6980C7[];
extern  VTBL_ENTRY _ZTV7S6980C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6980C7[];
extern Class_Descriptor cd_S6980C2;
extern VTBL_ENTRY _ZTI7S6980C2[];
extern  VTBL_ENTRY _ZTV7S6980C2[];
extern Class_Descriptor cd_S6980C9;
extern VTBL_ENTRY _ZTI7S6980C9[];
extern  VTBL_ENTRY _ZTV7S6980C9[];
extern Class_Descriptor cd_S6980C8;
extern VTBL_ENTRY _ZTI7S6980C8[];
extern  VTBL_ENTRY _ZTV7S6980C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6980C8[];
extern Class_Descriptor cd_S6980C3;
extern VTBL_ENTRY _ZTI7S6980C3[];
extern  VTBL_ENTRY _ZTV7S6980C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6980C3[];
extern Class_Descriptor cd_S6980C11;
extern VTBL_ENTRY _ZTI8S6980C11[];
extern  VTBL_ENTRY _ZTV8S6980C11[];
extern Class_Descriptor cd_S6980C10;
extern VTBL_ENTRY _ZTI8S6980C10[];
extern  VTBL_ENTRY _ZTV8S6980C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6980C10[];
extern Class_Descriptor cd_S6980C12;
extern VTBL_ENTRY _ZTI8S6980C12[];
extern  VTBL_ENTRY _ZTV8S6980C12[];
static Base_Class bases_S6980C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6980C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S6980C2,    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
    2, //immediately_derived
  0, 0},
  {&cd_S6980C5,    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
    4, //immediately_derived
  0, 0},
  {&cd_S6980C6,    ABISELECT(64,36), //bcp->offset
    56, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6980C4,    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
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6980C2,    ABISELECT(288,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
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6980C5,    ABISELECT(288,176), //bcp->offset
    82, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S6980C2,    ABISELECT(192,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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6980C7,    ABISELECT(192,128), //bcp->offset
    66, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6980C2,    ABISELECT(312,188), //bcp->offset
    99, //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
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6980C9,    ABISELECT(320,192), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S6980C8,    ABISELECT(320,192), //bcp->offset
    106, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6980C3,    ABISELECT(16,8), //bcp->offset
    22, //bcp->virtual_function_table_offset
    20, //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},
  {&cd_S6980C11,    ABISELECT(384,236), //bcp->offset
    149, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S6980C10,    ABISELECT(376,232), //bcp->offset
    129, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6980C12,    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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6980C1[];
extern void _ZN7S6980C1D1Ev();
extern void _ZN7S6980C1D0Ev();
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C12v1Ev();
extern void _ZN7S6980C12v2Ev();
extern void _ZN7S6980C12v3Ev();
extern void _ZN7S6980C12v4Ev();
extern void ABISELECT(_ZThn8_N7S6980C1D1Ev,_ZThn4_N7S6980C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S6980C1D0Ev,_ZThn4_N7S6980C1D0Ev)();
extern void _ZN8S6980C123v43Ev();
extern void ABISELECT(_ZTv0_n64_N7S6980C1D1Ev,_ZTv0_n32_N7S6980C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S6980C1D1Ev,_ZThn8_N7S6980C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6980C1D0Ev,_ZTv0_n32_N7S6980C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S6980C1D0Ev,_ZThn8_N7S6980C1D0Ev)() __attribute__((weak));
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C52v6Ev();
extern void _ZN7S6980C52v7Ev();
extern void _ZN7S6980C52v8Ev();
extern void _ZN7S6980C52v9Ev();
extern void _ZN7S6980C53v10Ev();
extern void _ZN7S6980C43v15Ev();
extern void _ZN7S6980C43v16Ev();
extern void _ZN7S6980C43v17Ev();
extern void _ZN7S6980C43v18Ev();
extern void _ZN7S6980C43v19Ev();
extern void _ZN7S6980C43v20Ev();
extern void _ZN7S6980C63v11Ev();
extern void _ZN7S6980C63v12Ev();
extern void _ZN7S6980C63v13Ev();
extern void _ZN7S6980C63v14Ev();
extern void ABISELECT(_ZTv0_n32_N7S6980C1D1Ev,_ZTv0_n16_N7S6980C1D1Ev)();
extern void ABISELECT(_ZThn192_N7S6980C1D1Ev,_ZThn128_N7S6980C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6980C1D0Ev,_ZTv0_n16_N7S6980C1D0Ev)();
extern void ABISELECT(_ZThn192_N7S6980C1D0Ev,_ZThn128_N7S6980C1D0Ev)() __attribute__((weak));
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C73v21Ev();
extern void _ZN7S6980C73v22Ev();
extern void _ZN7S6980C73v23Ev();
extern void _ZN7S6980C73v24Ev();
extern void ABISELECT(_ZTv0_n24_N7S6980C1D1Ev,_ZTv0_n12_N7S6980C1D1Ev)();
extern void ABISELECT(_ZThn288_N7S6980C1D1Ev,_ZThn176_N7S6980C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6980C1D0Ev,_ZTv0_n12_N7S6980C1D0Ev)();
extern void ABISELECT(_ZThn288_N7S6980C1D0Ev,_ZThn176_N7S6980C1D0Ev)() __attribute__((weak));
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C52v6Ev();
extern void _ZN7S6980C52v7Ev();
extern void _ZN7S6980C52v8Ev();
extern void _ZN7S6980C52v9Ev();
extern void _ZN7S6980C53v10Ev();
extern void ABISELECT(_ZTv0_n24_N7S6980C1D1Ev,_ZTv0_n12_N7S6980C1D1Ev)();
extern void ABISELECT(_ZThn312_N7S6980C1D1Ev,_ZThn188_N7S6980C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6980C1D0Ev,_ZTv0_n12_N7S6980C1D0Ev)();
extern void ABISELECT(_ZThn312_N7S6980C1D0Ev,_ZThn188_N7S6980C1D0Ev)() __attribute__((weak));
extern void _ZN7S6980C22v5Ev();
extern void ABISELECT(_ZTv0_n40_N7S6980C1D1Ev,_ZTv0_n20_N7S6980C1D1Ev)();
extern void ABISELECT(_ZThn320_N7S6980C1D1Ev,_ZThn192_N7S6980C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6980C1D0Ev,_ZTv0_n20_N7S6980C1D0Ev)();
extern void ABISELECT(_ZThn320_N7S6980C1D0Ev,_ZThn192_N7S6980C1D0Ev)() __attribute__((weak));
extern void _ZN7S6980C93v25Ev();
extern void _ZN7S6980C93v26Ev();
extern void _ZN7S6980C93v27Ev();
extern void _ZN7S6980C93v28Ev();
extern void _ZN7S6980C83v29Ev();
extern void _ZN7S6980C83v30Ev();
extern void _ZN7S6980C83v31Ev();
extern void _ZN7S6980C83v32Ev();
extern void ABISELECT(_ZTv0_n32_N7S6980C1D1Ev,_ZTv0_n16_N7S6980C1D1Ev)();
extern void ABISELECT(_ZThn376_N7S6980C1D1Ev,_ZThn232_N7S6980C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6980C1D0Ev,_ZTv0_n16_N7S6980C1D0Ev)();
extern void ABISELECT(_ZThn376_N7S6980C1D0Ev,_ZThn232_N7S6980C1D0Ev)() __attribute__((weak));
extern void _ZN8S6980C103v36Ev();
extern void _ZN8S6980C103v37Ev();
extern void _ZN8S6980C103v38Ev();
extern void _ZN8S6980C103v39Ev();
extern void _ZN8S6980C103v40Ev();
extern void _ZN8S6980C103v41Ev();
extern void _ZN8S6980C103v42Ev();
extern void _ZN8S6980C113v33Ev();
extern void _ZN8S6980C113v34Ev();
extern void _ZN8S6980C113v35Ev();
static  VTBL_ENTRY vtc_S6980C1[] = {
  ABISELECT(384,236),
  ABISELECT(376,232),
  ABISELECT(320,192),
  ABISELECT(312,188),
  ABISELECT(288,176),
  ABISELECT(192,128),
  ABISELECT(64,36),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6980C1[0]),
  (VTBL_ENTRY)&_ZN7S6980C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6980C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6980C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6980C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6980C12v4Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6980C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S6980C1D1Ev,_ZThn4_N7S6980C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S6980C1D0Ev,_ZThn4_N7S6980C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6980C123v43Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(304,184),
  ABISELECT(296,180),
  ABISELECT(272,168),
  ABISELECT(176,120),
  ABISELECT(48,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6980C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6980C1D1Ev,_ZTv0_n32_N7S6980C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6980C1D0Ev,_ZTv0_n32_N7S6980C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6980C53v10Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v16Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v17Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v18Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v19Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S6980C1[0]),
  (VTBL_ENTRY)&_ZN7S6980C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v14Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-128),
  ABISELECT(96,48),
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI7S6980C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6980C1D1Ev,_ZTv0_n16_N7S6980C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6980C1D0Ev,_ZTv0_n16_N7S6980C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v21Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v22Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v23Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-288,-176),
  ABISELECT(-288,-176),
  (VTBL_ENTRY)&(_ZTI7S6980C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C1D1Ev,_ZTv0_n12_N7S6980C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C1D0Ev,_ZTv0_n12_N7S6980C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6980C53v10Ev,
  0,
  ABISELECT(-312,-188),
  ABISELECT(-312,-188),
  (VTBL_ENTRY)&(_ZTI7S6980C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C1D1Ev,_ZTv0_n12_N7S6980C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C1D0Ev,_ZTv0_n12_N7S6980C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-192),
  ABISELECT(-8,-4),
  ABISELECT(-256,-156),
  ABISELECT(-320,-192),
  (VTBL_ENTRY)&(_ZTI7S6980C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6980C1D1Ev,_ZTv0_n20_N7S6980C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6980C1D0Ev,_ZTv0_n20_N7S6980C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C93v25Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v26Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v27Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v28Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v29Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v30Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v31Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v32Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-376,-232),
  ABISELECT(8,4),
  ABISELECT(-376,-232),
  (VTBL_ENTRY)&(_ZTI7S6980C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6980C1D1Ev,_ZTv0_n16_N7S6980C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6980C1D0Ev,_ZTv0_n16_N7S6980C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6980C103v36Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v37Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v38Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v39Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v40Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v41Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v42Ev,
  0,
  0,
  0,
  ABISELECT(-384,-236),
  (VTBL_ENTRY)&(_ZTI7S6980C1[0]),
  (VTBL_ENTRY)&_ZN8S6980C113v33Ev,
  (VTBL_ENTRY)&_ZN8S6980C113v34Ev,
  (VTBL_ENTRY)&_ZN8S6980C113v35Ev,
};
extern VTBL_ENTRY _ZTV7S6980C1[];
extern void _ZN7S6980C3D1Ev();
extern void _ZN7S6980C3D0Ev();
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C52v6Ev();
extern void _ZN7S6980C52v7Ev();
extern void _ZN7S6980C52v8Ev();
extern void _ZN7S6980C52v9Ev();
extern void _ZN7S6980C53v10Ev();
extern void _ZN7S6980C43v15Ev();
extern void _ZN7S6980C43v16Ev();
extern void _ZN7S6980C43v17Ev();
extern void _ZN7S6980C43v18Ev();
extern void _ZN7S6980C43v19Ev();
extern void _ZN7S6980C43v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C3__7S6980C1[] = {
  ABISELECT(304,184),
  ABISELECT(296,180),
  ABISELECT(272,168),
  ABISELECT(176,120),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6980C3[0]),
  (VTBL_ENTRY)&_ZN7S6980C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6980C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6980C53v10Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v16Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v17Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v18Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v19Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v20Ev,
};
extern void _ZN7S6980C4D1Ev();
extern void _ZN7S6980C4D0Ev();
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C52v6Ev();
extern void _ZN7S6980C52v7Ev();
extern void _ZN7S6980C52v8Ev();
extern void _ZN7S6980C52v9Ev();
extern void _ZN7S6980C53v10Ev();
extern void _ZN7S6980C43v15Ev();
extern void _ZN7S6980C43v16Ev();
extern void _ZN7S6980C43v17Ev();
extern void _ZN7S6980C43v18Ev();
extern void _ZN7S6980C43v19Ev();
extern void _ZN7S6980C43v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C47S6980C3__7S6980C1[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6980C4[0]),
  (VTBL_ENTRY)&_ZN7S6980C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6980C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6980C53v10Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v16Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v17Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v18Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v19Ev,
  (VTBL_ENTRY)&_ZN7S6980C43v20Ev,
};
extern void _ZN7S6980C63v11Ev();
extern void _ZN7S6980C63v12Ev();
extern void _ZN7S6980C63v13Ev();
extern void _ZN7S6980C63v14Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C6__7S6980C47S6980C3__7S6980C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S6980C4[0]),
  (VTBL_ENTRY)&_ZN7S6980C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v14Ev,
};
extern void _ZN7S6980C63v11Ev();
extern void _ZN7S6980C63v12Ev();
extern void _ZN7S6980C63v13Ev();
extern void _ZN7S6980C63v14Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C6__7S6980C3__7S6980C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S6980C3[0]),
  (VTBL_ENTRY)&_ZN7S6980C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v14Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S6980C3D1Ev,_ZTv0_n16_N7S6980C3D1Ev)();
extern void ABISELECT(_ZThn176_N7S6980C3D1Ev,_ZThn120_N7S6980C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6980C3D0Ev,_ZTv0_n16_N7S6980C3D0Ev)();
extern void ABISELECT(_ZThn176_N7S6980C3D0Ev,_ZThn120_N7S6980C3D0Ev)() __attribute__((weak));
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C73v21Ev();
extern void _ZN7S6980C73v22Ev();
extern void _ZN7S6980C73v23Ev();
extern void _ZN7S6980C73v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C7__7S6980C3__7S6980C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-120),
  ABISELECT(96,48),
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI7S6980C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6980C3D1Ev,_ZTv0_n16_N7S6980C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6980C3D0Ev,_ZTv0_n16_N7S6980C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v21Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v22Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v23Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6980C3D1Ev,_ZTv0_n12_N7S6980C3D1Ev)();
extern void ABISELECT(_ZThn272_N7S6980C3D1Ev,_ZThn168_N7S6980C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6980C3D0Ev,_ZTv0_n12_N7S6980C3D0Ev)();
extern void ABISELECT(_ZThn272_N7S6980C3D0Ev,_ZThn168_N7S6980C3D0Ev)() __attribute__((weak));
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C52v6Ev();
extern void _ZN7S6980C52v7Ev();
extern void _ZN7S6980C52v8Ev();
extern void _ZN7S6980C52v9Ev();
extern void _ZN7S6980C53v10Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C5__A1__7S6980C3__7S6980C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-272,-168),
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI7S6980C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C3D1Ev,_ZTv0_n12_N7S6980C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C3D0Ev,_ZTv0_n12_N7S6980C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6980C53v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6980C3D1Ev,_ZTv0_n12_N7S6980C3D1Ev)();
extern void ABISELECT(_ZThn296_N7S6980C3D1Ev,_ZThn180_N7S6980C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6980C3D0Ev,_ZTv0_n12_N7S6980C3D0Ev)();
extern void ABISELECT(_ZThn296_N7S6980C3D0Ev,_ZThn180_N7S6980C3D0Ev)() __attribute__((weak));
extern void _ZN7S6980C22v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C2__A3__7S6980C3__7S6980C1[] = {
  0,
  ABISELECT(-296,-180),
  ABISELECT(-296,-180),
  (VTBL_ENTRY)&(_ZTI7S6980C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C3D1Ev,_ZTv0_n12_N7S6980C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C3D0Ev,_ZTv0_n12_N7S6980C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S6980C3D1Ev,_ZTv0_n20_N7S6980C3D1Ev)();
extern void ABISELECT(_ZThn304_N7S6980C3D1Ev,_ZThn184_N7S6980C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6980C3D0Ev,_ZTv0_n20_N7S6980C3D0Ev)();
extern void ABISELECT(_ZThn304_N7S6980C3D0Ev,_ZThn184_N7S6980C3D0Ev)() __attribute__((weak));
extern void _ZN7S6980C93v25Ev();
extern void _ZN7S6980C93v26Ev();
extern void _ZN7S6980C93v27Ev();
extern void _ZN7S6980C93v28Ev();
extern void _ZN7S6980C83v29Ev();
extern void _ZN7S6980C83v30Ev();
extern void _ZN7S6980C83v31Ev();
extern void _ZN7S6980C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C8__7S6980C3__7S6980C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-184),
  ABISELECT(-8,-4),
  ABISELECT(-256,-156),
  ABISELECT(-304,-184),
  (VTBL_ENTRY)&(_ZTI7S6980C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6980C3D1Ev,_ZTv0_n20_N7S6980C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6980C3D0Ev,_ZTv0_n20_N7S6980C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C93v25Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v26Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v27Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v28Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v29Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v30Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v31Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v32Ev,
};
extern void _ZN7S6980C7D1Ev();
extern void _ZN7S6980C7D0Ev();
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C73v21Ev();
extern void _ZN7S6980C73v22Ev();
extern void _ZN7S6980C73v23Ev();
extern void _ZN7S6980C73v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C7__7S6980C1[] = {
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S6980C7[0]),
  (VTBL_ENTRY)&_ZN7S6980C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6980C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v21Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v22Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v23Ev,
  (VTBL_ENTRY)&_ZN7S6980C73v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6980C7D1Ev,_ZTv0_n12_N7S6980C7D1Ev)();
extern void ABISELECT(_ZThn96_N7S6980C7D1Ev,_ZThn48_N7S6980C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6980C7D0Ev,_ZTv0_n12_N7S6980C7D0Ev)();
extern void ABISELECT(_ZThn96_N7S6980C7D0Ev,_ZThn48_N7S6980C7D0Ev)() __attribute__((weak));
extern void _ZN7S6980C22v5Ev();
extern void _ZN7S6980C52v6Ev();
extern void _ZN7S6980C52v7Ev();
extern void _ZN7S6980C52v8Ev();
extern void _ZN7S6980C52v9Ev();
extern void _ZN7S6980C53v10Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C5__7S6980C7__7S6980C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S6980C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C7D1Ev,_ZTv0_n12_N7S6980C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C7D0Ev,_ZTv0_n12_N7S6980C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6980C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6980C53v10Ev,
};
extern void _ZN7S6980C8D1Ev();
extern void _ZN7S6980C8D0Ev();
extern void _ZN7S6980C93v25Ev();
extern void _ZN7S6980C93v26Ev();
extern void _ZN7S6980C93v27Ev();
extern void _ZN7S6980C93v28Ev();
extern void _ZN7S6980C83v29Ev();
extern void _ZN7S6980C83v30Ev();
extern void _ZN7S6980C83v31Ev();
extern void _ZN7S6980C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C8__7S6980C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S6980C8[0]),
  (VTBL_ENTRY)&_ZN7S6980C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6980C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v25Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v26Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v27Ev,
  (VTBL_ENTRY)&_ZN7S6980C93v28Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v29Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v30Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v31Ev,
  (VTBL_ENTRY)&_ZN7S6980C83v32Ev,
};
extern void _ZN7S6980C63v11Ev();
extern void _ZN7S6980C63v12Ev();
extern void _ZN7S6980C63v13Ev();
extern void _ZN7S6980C63v14Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C6__7S6980C8__7S6980C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(256,156),
  (VTBL_ENTRY)&(_ZTI7S6980C8[0]),
  (VTBL_ENTRY)&_ZN7S6980C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6980C63v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6980C8D1Ev,_ZTv0_n12_N7S6980C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S6980C8D0Ev,_ZTv0_n12_N7S6980C8D0Ev)();
extern void _ZN7S6980C22v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6980C2__7S6980C8__7S6980C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S6980C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C8D1Ev,_ZTv0_n12_N7S6980C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6980C8D0Ev,_ZTv0_n12_N7S6980C8D0Ev),
  (VTBL_ENTRY)&_ZN7S6980C22v5Ev,
};
extern void _ZN8S6980C10D1Ev();
extern void _ZN8S6980C10D0Ev();
extern void _ZN8S6980C103v36Ev();
extern void _ZN8S6980C103v37Ev();
extern void _ZN8S6980C103v38Ev();
extern void _ZN8S6980C103v39Ev();
extern void _ZN8S6980C103v40Ev();
extern void _ZN8S6980C103v41Ev();
extern void _ZN8S6980C103v42Ev();
static  VTBL_ENTRY _tg__ZTV8S6980C10__7S6980C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6980C10[0]),
  (VTBL_ENTRY)&_ZN8S6980C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6980C10D0Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v36Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v37Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v38Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v39Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v40Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v41Ev,
  (VTBL_ENTRY)&_ZN8S6980C103v42Ev,
};
extern void _ZN8S6980C113v33Ev();
extern void _ZN8S6980C113v34Ev();
extern void _ZN8S6980C113v35Ev();
static  VTBL_ENTRY _tg__ZTV8S6980C11__8S6980C10__7S6980C1[] = {
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6980C10[0]),
  (VTBL_ENTRY)&_ZN8S6980C113v33Ev,
  (VTBL_ENTRY)&_ZN8S6980C113v34Ev,
  (VTBL_ENTRY)&_ZN8S6980C113v35Ev,
};
static  VTT_ENTRY vtt_S6980C1[] = {
  {&(_ZTV7S6980C1[10]),  10,157},
  {&(_ZTV7S6980C1[42]),  42,157},
  {&(_ZTV7S6980C1[62]),  62,157},
  {&(_ZTV7S6980C1[75]),  75,157},
  {&(_ZTV7S6980C1[91]),  91,157},
  {&(_ZTV7S6980C1[103]),  103,157},
  {&(_ZTV7S6980C1[119]),  119,157},
  {&(_ZTV7S6980C1[140]),  140,157},
  {&(_ZTV7S6980C1[154]),  154,157},
  {&(_tg__ZTV7S6980C3__7S6980C1[7]),  7,21},
  {&(_tg__ZTV7S6980C47S6980C3__7S6980C1[3]),  3,17},
  {&(_tg__ZTV7S6980C6__7S6980C47S6980C3__7S6980C1[6]),  6,10},
  {&(_tg__ZTV7S6980C6__7S6980C3__7S6980C1[6]),  6,10},
  {&(_tg__ZTV7S6980C7__7S6980C3__7S6980C1[9]),  9,16},
  {&(_tg__ZTV7S6980C5__A1__7S6980C3__7S6980C1[9]),  9,17},
  {&(_tg__ZTV7S6980C2__A3__7S6980C3__7S6980C1[4]),  4,7},
  {&(_tg__ZTV7S6980C8__7S6980C3__7S6980C1[13]),  13,23},
  {&(_tg__ZTV7S6980C7__7S6980C1[3]),  3,10},
  {&(_tg__ZTV7S6980C5__7S6980C7__7S6980C1[9]),  9,17},
  {&(_tg__ZTV7S6980C8__7S6980C1[4]),  4,14},
  {&(_tg__ZTV7S6980C6__7S6980C8__7S6980C1[6]),  6,10},
  {&(_tg__ZTV7S6980C2__7S6980C8__7S6980C1[4]),  4,7},
  {&(_tg__ZTV8S6980C10__7S6980C1[3]),  3,12},
  {&(_tg__ZTV8S6980C11__8S6980C10__7S6980C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI7S6980C1[];
extern  VTBL_ENTRY _ZTV7S6980C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6980C1[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6980C7D0Ev,_ZTv0_n12_N7S6980C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6980C7D0Ev,_ZThn48_N7S6980C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6980C7D1Ev,_ZTv0_n12_N7S6980C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6980C7D1Ev,_ZThn48_N7S6980C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6980C3D0Ev,_ZTv0_n20_N7S6980C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S6980C3D0Ev,_ZThn184_N7S6980C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6980C3D1Ev,_ZTv0_n20_N7S6980C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S6980C3D1Ev,_ZThn184_N7S6980C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6980C3D0Ev,_ZTv0_n12_N7S6980C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N7S6980C3D0Ev,_ZThn180_N7S6980C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S6980C3D0Ev,_ZThn168_N7S6980C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6980C3D1Ev,_ZTv0_n12_N7S6980C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N7S6980C3D1Ev,_ZThn180_N7S6980C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S6980C3D1Ev,_ZThn168_N7S6980C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6980C3D0Ev,_ZTv0_n16_N7S6980C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S6980C3D0Ev,_ZThn120_N7S6980C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6980C3D1Ev,_ZTv0_n16_N7S6980C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S6980C3D1Ev,_ZThn120_N7S6980C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6980C1D0Ev,_ZTv0_n20_N7S6980C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S6980C1D0Ev,_ZThn192_N7S6980C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6980C1D1Ev,_ZTv0_n20_N7S6980C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S6980C1D1Ev,_ZThn192_N7S6980C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6980C1D0Ev,_ZTv0_n12_N7S6980C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S6980C1D0Ev,_ZThn188_N7S6980C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S6980C1D0Ev,_ZThn176_N7S6980C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6980C1D1Ev,_ZTv0_n12_N7S6980C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S6980C1D1Ev,_ZThn188_N7S6980C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S6980C1D1Ev,_ZThn176_N7S6980C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6980C1D0Ev,_ZTv0_n16_N7S6980C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N7S6980C1D0Ev,_ZThn232_N7S6980C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S6980C1D0Ev,_ZThn128_N7S6980C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6980C1D1Ev,_ZTv0_n16_N7S6980C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N7S6980C1D1Ev,_ZThn232_N7S6980C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S6980C1D1Ev,_ZThn128_N7S6980C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6980C1D0Ev,_ZTv0_n32_N7S6980C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S6980C1D0Ev,_ZThn8_N7S6980C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6980C1D1Ev,_ZTv0_n32_N7S6980C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S6980C1D1Ev,_ZThn8_N7S6980C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6980C1 = {  "S6980C1", // class name
  bases_S6980C1, 16,
  &(vtc_S6980C1[0]), // expected_vtbl_contents
  &(vtt_S6980C1[0]), // expected_vtt_contents
  ABISELECT(416,248), // object size
  NSPAIRA(_ZTI7S6980C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6980C1),157, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6980C1),24, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20003C2  {
  virtual void  v11(); // _ZN8S20003C23v11Ev
  virtual void  v12(); // _ZN8S20003C23v12Ev
  virtual void  v13(); // _ZN8S20003C23v13Ev
  virtual void  v14(); // _ZN8S20003C23v14Ev
  virtual void  v15(); // _ZN8S20003C23v15Ev
  virtual void  v16(); // _ZN8S20003C23v16Ev
  virtual void  v17(); // _ZN8S20003C23v17Ev
  virtual void  v18(); // _ZN8S20003C23v18Ev
  ~S20003C2(); // tgen
  S20003C2(); // tgen
};
//SIG(-1 S20003C2) C1{ v1 v2 v3 v4 v5 v6 v7 v8}


void  S20003C2 ::v11(){vfunc_called(this, "_ZN8S20003C23v11Ev");}
void  S20003C2 ::v12(){vfunc_called(this, "_ZN8S20003C23v12Ev");}
void  S20003C2 ::v13(){vfunc_called(this, "_ZN8S20003C23v13Ev");}
void  S20003C2 ::v14(){vfunc_called(this, "_ZN8S20003C23v14Ev");}
void  S20003C2 ::v15(){vfunc_called(this, "_ZN8S20003C23v15Ev");}
void  S20003C2 ::v16(){vfunc_called(this, "_ZN8S20003C23v16Ev");}
void  S20003C2 ::v17(){vfunc_called(this, "_ZN8S20003C23v17Ev");}
void  S20003C2 ::v18(){vfunc_called(this, "_ZN8S20003C23v18Ev");}
S20003C2 ::~S20003C2(){ note_dtor("S20003C2", this);} // tgen
S20003C2 ::S20003C2(){ note_ctor("S20003C2", this);} // tgen

static void Test_S20003C2()
{
  extern Class_Descriptor cd_S20003C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20003C2, buf);
    S20003C2 *dp, &lv = *(dp=new (buf) S20003C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20003C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20003C2)");
    test_class_info(&lv, &cd_S20003C2);
    dp->~S20003C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20003C2(Test_S20003C2, "S20003C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20003C2C1Ev();
extern void _ZN8S20003C2D1Ev();
Name_Map name_map_S20003C2[] = {
  NSPAIR(_ZN8S20003C2C1Ev),
  NSPAIR(_ZN8S20003C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20003C2[];
extern void _ZN8S20003C23v11Ev();
extern void _ZN8S20003C23v12Ev();
extern void _ZN8S20003C23v13Ev();
extern void _ZN8S20003C23v14Ev();
extern void _ZN8S20003C23v15Ev();
extern void _ZN8S20003C23v16Ev();
extern void _ZN8S20003C23v17Ev();
extern void _ZN8S20003C23v18Ev();
static  VTBL_ENTRY vtc_S20003C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20003C2[0]),
  (VTBL_ENTRY)&_ZN8S20003C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20003C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20003C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20003C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20003C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20003C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20003C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20003C23v18Ev,
};
extern VTBL_ENTRY _ZTI8S20003C2[];
extern  VTBL_ENTRY _ZTV8S20003C2[];
Class_Descriptor cd_S20003C2 = {  "S20003C2", // class name
  0,0,//no base classes
  &(vtc_S20003C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20003C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20003C2),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20003C6  {
  virtual  ~S20003C6(); // _ZN8S20003C6D1Ev
  virtual void  v19(); // _ZN8S20003C63v19Ev
  S20003C6(); // tgen
};
//SIG(-1 S20003C6) C1{ vd v1}


 S20003C6 ::~S20003C6(){ note_dtor("S20003C6", this);}
void  S20003C6 ::v19(){vfunc_called(this, "_ZN8S20003C63v19Ev");}
S20003C6 ::S20003C6(){ note_ctor("S20003C6", this);} // tgen

static void Test_S20003C6()
{
  extern Class_Descriptor cd_S20003C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20003C6, buf);
    S20003C6 *dp, &lv = *(dp=new (buf) S20003C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20003C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20003C6)");
    test_class_info(&lv, &cd_S20003C6);
    dp->~S20003C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20003C6(Test_S20003C6, "S20003C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20003C6C1Ev();
extern void _ZN8S20003C6D1Ev();
Name_Map name_map_S20003C6[] = {
  NSPAIR(_ZN8S20003C6C1Ev),
  NSPAIR(_ZN8S20003C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20003C6[];
extern void _ZN8S20003C6D1Ev();
extern void _ZN8S20003C6D0Ev();
extern void _ZN8S20003C63v19Ev();
static  VTBL_ENTRY vtc_S20003C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20003C6[0]),
  (VTBL_ENTRY)&_ZN8S20003C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20003C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
};
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
Class_Descriptor cd_S20003C6 = {  "S20003C6", // class name
  0,0,//no base classes
  &(vtc_S20003C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20003C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20003C6),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  S20003C5  : S20003C6 {
  virtual  ~S20003C5(); // _ZN8S20003C5D1Ev
  virtual void  v20(); // _ZN8S20003C53v20Ev
  S20003C5(); // tgen
};
//SIG(-1 S20003C5) C1{ BC2{ vd v2} vd v1}


 S20003C5 ::~S20003C5(){ note_dtor("S20003C5", this);}
void  S20003C5 ::v20(){vfunc_called(this, "_ZN8S20003C53v20Ev");}
S20003C5 ::S20003C5(){ note_ctor("S20003C5", this);} // tgen

static void Test_S20003C5()
{
  extern Class_Descriptor cd_S20003C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20003C5, buf);
    S20003C5 *dp, &lv = *(dp=new (buf) S20003C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20003C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20003C5)");
    check_base_class_offset(lv, (S20003C6*), 0, "S20003C5");
    test_class_info(&lv, &cd_S20003C5);
    dp->~S20003C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20003C5(Test_S20003C5, "S20003C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20003C5C1Ev();
extern void _ZN8S20003C5D1Ev();
Name_Map name_map_S20003C5[] = {
  NSPAIR(_ZN8S20003C5C1Ev),
  NSPAIR(_ZN8S20003C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
static Base_Class bases_S20003C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20003C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S20003C5[];
extern void _ZN8S20003C5D1Ev();
extern void _ZN8S20003C5D0Ev();
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
static  VTBL_ENTRY vtc_S20003C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20003C5[0]),
  (VTBL_ENTRY)&_ZN8S20003C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20003C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
};
extern VTBL_ENTRY _ZTI8S20003C5[];
extern  VTBL_ENTRY _ZTV8S20003C5[];
Class_Descriptor cd_S20003C5 = {  "S20003C5", // class name
  bases_S20003C5, 1,
  &(vtc_S20003C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20003C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20003C5),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  S20003C4  : S20003C5 , S20003C6 {
  virtual  ~S20003C4(); // _ZN8S20003C4D1Ev
  virtual void  v21(); // _ZN8S20003C43v21Ev
  virtual void  v22(); // _ZN8S20003C43v22Ev
  S20003C4(); // tgen
};
//SIG(-1 S20003C4) C1{ BC2{ BC3{ vd v3} vd v4} BC3 vd v1 v2}


 S20003C4 ::~S20003C4(){ note_dtor("S20003C4", this);}
void  S20003C4 ::v21(){vfunc_called(this, "_ZN8S20003C43v21Ev");}
void  S20003C4 ::v22(){vfunc_called(this, "_ZN8S20003C43v22Ev");}
S20003C4 ::S20003C4(){ note_ctor("S20003C4", this);} // tgen

static void Test_S20003C4()
{
  extern Class_Descriptor cd_S20003C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20003C4, buf);
    S20003C4 *dp, &lv = *(dp=new (buf) S20003C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20003C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20003C4)");
    check_base_class_offset(lv, (S20003C6*)(S20003C5*), 0, "S20003C4");
    check_base_class_offset(lv, (S20003C5*), 0, "S20003C4");
    /*is_ambiguous_... S20003C4::S20003C6 */ AMB_check_base_class_offset(lv, (S20003C6*), ABISELECT(8,4), "S20003C4");
    test_class_info(&lv, &cd_S20003C4);
    dp->~S20003C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20003C4(Test_S20003C4, "S20003C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20003C4C1Ev();
extern void _ZN8S20003C4D1Ev();
Name_Map name_map_S20003C4[] = {
  NSPAIR(_ZN8S20003C4C1Ev),
  NSPAIR(_ZN8S20003C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C5;
extern VTBL_ENTRY _ZTI8S20003C5[];
extern  VTBL_ENTRY _ZTV8S20003C5[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
static Base_Class bases_S20003C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20003C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20003C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20003C6,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20003C4[];
extern void _ZN8S20003C4D1Ev();
extern void _ZN8S20003C4D0Ev();
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
extern void ABISELECT(_ZThn8_N8S20003C4D1Ev,_ZThn4_N8S20003C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S20003C4D0Ev,_ZThn4_N8S20003C4D0Ev)();
extern void _ZN8S20003C63v19Ev();
static  VTBL_ENTRY vtc_S20003C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20003C4[0]),
  (VTBL_ENTRY)&_ZN8S20003C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20003C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20003C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20003C4D1Ev,_ZThn4_N8S20003C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20003C4D0Ev,_ZThn4_N8S20003C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
};
extern VTBL_ENTRY _ZTI8S20003C4[];
extern  VTBL_ENTRY _ZTV8S20003C4[];
Class_Descriptor cd_S20003C4 = {  "S20003C4", // class name
  bases_S20003C4, 3,
  &(vtc_S20003C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20003C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20003C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20003C3  : virtual S20003C4 {
  int s20003c3f0[2];
  void *s20003c3f1;
  virtual void  v23(); // _ZN8S20003C33v23Ev
  virtual void  v24(); // _ZN8S20003C33v24Ev
  virtual void  v25(); // _ZN8S20003C33v25Ev
  virtual void  v26(); // _ZN8S20003C33v26Ev
  ~S20003C3(); // tgen
  S20003C3(); // tgen
};
//SIG(-1 S20003C3) C1{ VBC2{ BC3{ BC4{ vd v5} vd v6} BC4 vd v7 v8} v1 v2 v3 v4 Fi[2] Fp}


void  S20003C3 ::v23(){vfunc_called(this, "_ZN8S20003C33v23Ev");}
void  S20003C3 ::v24(){vfunc_called(this, "_ZN8S20003C33v24Ev");}
void  S20003C3 ::v25(){vfunc_called(this, "_ZN8S20003C33v25Ev");}
void  S20003C3 ::v26(){vfunc_called(this, "_ZN8S20003C33v26Ev");}
S20003C3 ::~S20003C3(){ note_dtor("S20003C3", this);} // tgen
S20003C3 ::S20003C3(){ note_ctor("S20003C3", this);} // tgen

static void Test_S20003C3()
{
  extern Class_Descriptor cd_S20003C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S20003C3, buf);
    S20003C3 *dp, &lv = *(dp=new (buf) S20003C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S20003C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20003C3)");
    check_base_class_offset(lv, (S20003C6*)(S20003C5*)(S20003C4*), ABISELECT(24,16), "S20003C3");
    check_base_class_offset(lv, (S20003C5*)(S20003C4*), ABISELECT(24,16), "S20003C3");
    /*is_ambiguous_... S20003C4::S20003C6 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C4*), ABISELECT(32,20), "S20003C3");
    check_base_class_offset(lv, (S20003C4*), ABISELECT(24,16), "S20003C3");
    check_field_offset(lv, s20003c3f0, ABISELECT(8,4), "S20003C3.s20003c3f0");
    check_field_offset(lv, s20003c3f1, ABISELECT(16,12), "S20003C3.s20003c3f1");
    test_class_info(&lv, &cd_S20003C3);
    dp->~S20003C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20003C3(Test_S20003C3, "S20003C3", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S20003C3C1Ev();
extern void _ZN8S20003C3D1Ev();
Name_Map name_map_S20003C3[] = {
  NSPAIR(_ZN8S20003C3C1Ev),
  NSPAIR(_ZN8S20003C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C5;
extern VTBL_ENTRY _ZTI8S20003C5[];
extern  VTBL_ENTRY _ZTV8S20003C5[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C4;
extern VTBL_ENTRY _ZTI8S20003C4[];
extern  VTBL_ENTRY _ZTV8S20003C4[];
static Base_Class bases_S20003C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20003C6,    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, 0},
  {&cd_S20003C5,    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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20003C6,    ABISELECT(32,20), //bcp->offset
    22, //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
    3, //immediately_derived
  0, 0},
  {&cd_S20003C4,    ABISELECT(24,16), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20003C3[];
extern void _ZN8S20003C33v23Ev();
extern void _ZN8S20003C33v24Ev();
extern void _ZN8S20003C33v25Ev();
extern void _ZN8S20003C33v26Ev();
extern void _ZN8S20003C3D1Ev();
extern void _ZN8S20003C3D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20003C3D1Ev,_ZTv0_n12_N8S20003C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S20003C3D1Ev,_ZThn16_N8S20003C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20003C3D0Ev,_ZTv0_n12_N8S20003C3D0Ev)();
extern void ABISELECT(_ZThn24_N8S20003C3D0Ev,_ZThn16_N8S20003C3D0Ev)() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
extern void ABISELECT(_ZTvn8_n24_N8S20003C3D1Ev,_ZTvn4_n12_N8S20003C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S20003C3D0Ev,_ZTvn4_n12_N8S20003C3D0Ev)();
extern void _ZN8S20003C63v19Ev();
static  VTBL_ENTRY vtc_S20003C3[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20003C3[0]),
  (VTBL_ENTRY)&_ZN8S20003C33v23Ev,
  (VTBL_ENTRY)&_ZN8S20003C33v24Ev,
  (VTBL_ENTRY)&_ZN8S20003C33v25Ev,
  (VTBL_ENTRY)&_ZN8S20003C33v26Ev,
  (VTBL_ENTRY)&_ZN8S20003C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20003C3D0Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20003C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C3D1Ev,_ZTv0_n12_N8S20003C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C3D0Ev,_ZTv0_n12_N8S20003C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20003C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C3D1Ev,_ZTvn4_n12_N8S20003C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C3D0Ev,_ZTvn4_n12_N8S20003C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
};
extern VTBL_ENTRY _ZTV8S20003C3[];
static  VTT_ENTRY vtt_S20003C3[] = {
  {&(_ZTV8S20003C3[3]),  3,27},
  {&(_ZTV8S20003C3[16]),  16,27},
  {&(_ZTV8S20003C3[24]),  24,27},
};
extern VTBL_ENTRY _ZTI8S20003C3[];
extern  VTBL_ENTRY _ZTV8S20003C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20003C3[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20003C3D0Ev,_ZTv0_n12_N8S20003C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20003C3D0Ev,_ZThn16_N8S20003C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20003C3D1Ev,_ZTv0_n12_N8S20003C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20003C3D1Ev,_ZThn16_N8S20003C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20003C3 = {  "S20003C3", // class name
  bases_S20003C3, 4,
  &(vtc_S20003C3[0]), // expected_vtbl_contents
  &(vtt_S20003C3[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S20003C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20003C3),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20003C3),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20003C8  : virtual S20003C4 , virtual S20003C5 {
  int s20003c8f0;
  char s20003c8f1;
  int s20003c8f2;
  virtual  ~S20003C8(); // _ZN8S20003C8D2Ev
  virtual void  v27(); // _ZN8S20003C83v27Ev
  virtual void  v28(); // _ZN8S20003C83v28Ev
  virtual void  v29(); // _ZN8S20003C83v29Ev
  virtual void  v30(); // _ZN8S20003C83v30Ev
  virtual void  v31(); // _ZN8S20003C83v31Ev
  virtual void  v32(); // _ZN8S20003C83v32Ev
  S20003C8(); // tgen
};
//SIG(-1 S20003C8) C1{ VBC2{ BC3{ BC4{ vd v7} vd v8} BC4 vd v9 v10} VBC3 vd v1 v2 v3 v4 v5 v6 Fi Fc Fi}


 S20003C8 ::~S20003C8(){ note_dtor("S20003C8", this);}
void  S20003C8 ::v27(){vfunc_called(this, "_ZN8S20003C83v27Ev");}
void  S20003C8 ::v28(){vfunc_called(this, "_ZN8S20003C83v28Ev");}
void  S20003C8 ::v29(){vfunc_called(this, "_ZN8S20003C83v29Ev");}
void  S20003C8 ::v30(){vfunc_called(this, "_ZN8S20003C83v30Ev");}
void  S20003C8 ::v31(){vfunc_called(this, "_ZN8S20003C83v31Ev");}
void  S20003C8 ::v32(){vfunc_called(this, "_ZN8S20003C83v32Ev");}
S20003C8 ::S20003C8(){ note_ctor("S20003C8", this);} // tgen

static void Test_S20003C8()
{
  extern Class_Descriptor cd_S20003C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S20003C8, buf);
    S20003C8 *dp, &lv = *(dp=new (buf) S20003C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S20003C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20003C8)");
    check_base_class_offset(lv, (S20003C6*)(S20003C5*)(S20003C4*), ABISELECT(24,16), "S20003C8");
    check_base_class_offset(lv, (S20003C5*)(S20003C4*), ABISELECT(24,16), "S20003C8");
    /*is_ambiguous_... S20003C4::S20003C6 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C4*), ABISELECT(32,20), "S20003C8");
    check_base_class_offset(lv, (S20003C4*), ABISELECT(24,16), "S20003C8");
    /*is_ambiguous_... S20003C8::S20003C5 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C5*), 0, "S20003C8");
    /*is_ambiguous_... S20003C8::S20003C5 */ AMB_check_base_class_offset(lv, (S20003C5*), 0, "S20003C8");
    check_field_offset(lv, s20003c8f0, ABISELECT(8,4), "S20003C8.s20003c8f0");
    check_field_offset(lv, s20003c8f1, ABISELECT(12,8), "S20003C8.s20003c8f1");
    check_field_offset(lv, s20003c8f2, ABISELECT(16,12), "S20003C8.s20003c8f2");
    test_class_info(&lv, &cd_S20003C8);
    dp->~S20003C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20003C8(Test_S20003C8, "S20003C8", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S20003C8C1Ev();
extern void _ZN8S20003C8D2Ev();
Name_Map name_map_S20003C8[] = {
  NSPAIR(_ZN8S20003C8C1Ev),
  NSPAIR(_ZN8S20003C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C5;
extern VTBL_ENTRY _ZTI8S20003C5[];
extern  VTBL_ENTRY _ZTV8S20003C5[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C4;
extern VTBL_ENTRY _ZTI8S20003C4[];
extern  VTBL_ENTRY _ZTV8S20003C4[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C5;
extern VTBL_ENTRY _ZTI8S20003C5[];
extern  VTBL_ENTRY _ZTV8S20003C5[];
static Base_Class bases_S20003C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20003C6,    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, 0},
  {&cd_S20003C5,    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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20003C6,    ABISELECT(32,20), //bcp->offset
    30, //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
    3, //immediately_derived
  0, 0},
  {&cd_S20003C4,    ABISELECT(24,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20003C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20003C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20003C8[];
extern void ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev)();
extern void _ZN8S20003C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev)();
extern void _ZN8S20003C8D0Ev() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C83v27Ev();
extern void _ZN8S20003C83v28Ev();
extern void _ZN8S20003C83v29Ev();
extern void _ZN8S20003C83v30Ev();
extern void _ZN8S20003C83v31Ev();
extern void _ZN8S20003C83v32Ev();
extern void ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S20003C8D1Ev,_ZThn16_N8S20003C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev)();
extern void ABISELECT(_ZThn24_N8S20003C8D0Ev,_ZThn16_N8S20003C8D0Ev)() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
extern void ABISELECT(_ZTvn8_n24_N8S20003C8D1Ev,_ZTvn4_n12_N8S20003C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S20003C8D0Ev,_ZTvn4_n12_N8S20003C8D0Ev)();
extern void _ZN8S20003C63v19Ev();
static  VTBL_ENTRY vtc_S20003C8[] = {
  0,
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20003C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v29Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v30Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v32Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20003C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20003C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C8D1Ev,_ZTvn4_n12_N8S20003C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C8D0Ev,_ZTvn4_n12_N8S20003C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
};
extern VTBL_ENTRY _ZTV8S20003C8[];
static  VTT_ENTRY vtt_S20003C8[] = {
  {&(_ZTV8S20003C8[7]),  7,35},
  {&(_ZTV8S20003C8[24]),  24,35},
  {&(_ZTV8S20003C8[32]),  32,35},
  {&(_ZTV8S20003C8[7]),  7,35},
};
extern VTBL_ENTRY _ZTI8S20003C8[];
extern  VTBL_ENTRY _ZTV8S20003C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20003C8[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20003C8D0Ev,_ZThn16_N8S20003C8D0Ev),
  (VTBL_ENTRY)_ZN8S20003C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20003C8D1Ev,_ZThn16_N8S20003C8D1Ev),
  (VTBL_ENTRY)_ZN8S20003C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20003C8 = {  "S20003C8", // class name
  bases_S20003C8, 6,
  &(vtc_S20003C8[0]), // expected_vtbl_contents
  &(vtt_S20003C8[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S20003C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20003C8),35, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20003C8),4, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20003C7  : S20003C4 , S20003C8 , S20003C6 {
  ::S19426C9_nt s20003c7f0;
  virtual void  v33(); // _ZN8S20003C73v33Ev
  virtual void  v34(); // _ZN8S20003C73v34Ev
  ~S20003C7(); // tgen
  S20003C7(); // tgen
};
//SIG(-1 S20003C7) C1{ BC2{ BC3{ BC4{ vd v3} vd v4} BC4 vd v5 v6} BC5{ VBC2 VBC3 vd v7 v8 v9 v10 v11 v12 Fi Fc Fi} BC4 v1 v2 FU6{ m}}


void  S20003C7 ::v33(){vfunc_called(this, "_ZN8S20003C73v33Ev");}
void  S20003C7 ::v34(){vfunc_called(this, "_ZN8S20003C73v34Ev");}
S20003C7 ::~S20003C7(){ note_dtor("S20003C7", this);} // tgen
S20003C7 ::S20003C7(){ note_ctor("S20003C7", this);} // tgen

static void Test_S20003C7()
{
  extern Class_Descriptor cd_S20003C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S20003C7, buf);
    S20003C7 *dp, &lv = *(dp=new (buf) S20003C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S20003C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20003C7)");
    /*is_ambiguous_... S20003C7::S20003C4 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C5*)(S20003C4*), 0, "S20003C7");
    /*is_ambiguous_... S20003C7::S20003C4 */ AMB_check_base_class_offset(lv, (S20003C5*)(S20003C4*), 0, "S20003C7");
    /*is_ambiguous_... S20003C7::S20003C4 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C4*), ABISELECT(8,4), "S20003C7");
    /*is_ambiguous_... S20003C7::S20003C4 */ AMB_check_base_class_offset(lv, (S20003C4*), 0, "S20003C7");
    /*is_ambiguous_... S20003C7::S20003C4 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C5*)(S20003C4*), ABISELECT(56,32), "S20003C7");
    /*is_ambiguous_... S20003C7::S20003C4 */ AMB_check_base_class_offset(lv, (S20003C5*)(S20003C4*), ABISELECT(56,32), "S20003C7");
    /*is_ambiguous_... S20003C7::S20003C4 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C4*), ABISELECT(64,36), "S20003C7");
    check_base_class_offset(lv, (S20003C4*)(S20003C8*), ABISELECT(56,32), "S20003C7");
    /*is_ambiguous_... S20003C7::S20003C5 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C5*), ABISELECT(16,8), "S20003C7");
    /*is_ambiguous_... S20003C8::S20003C5 */ AMB_check_base_class_offset(lv, (S20003C5*)(S20003C8*), ABISELECT(16,8), "S20003C7");
    check_base_class_offset(lv, (S20003C8*), ABISELECT(16,8), "S20003C7");
    /*is_ambiguous_... S20003C7::S20003C6 */ AMB_check_base_class_offset(lv, (S20003C6*), ABISELECT(40,24), "S20003C7");
    check_field_offset(lv, s20003c7f0, ABISELECT(48,28), "S20003C7.s20003c7f0");
    test_class_info(&lv, &cd_S20003C7);
    dp->~S20003C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20003C7(Test_S20003C7, "S20003C7", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN8S20003C7C1Ev();
extern void _ZN8S20003C7D1Ev();
Name_Map name_map_S20003C7[] = {
  NSPAIR(_ZN8S20003C7C1Ev),
  NSPAIR(_ZN8S20003C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C5;
extern VTBL_ENTRY _ZTI8S20003C5[];
extern  VTBL_ENTRY _ZTV8S20003C5[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C4;
extern VTBL_ENTRY _ZTI8S20003C4[];
extern  VTBL_ENTRY _ZTV8S20003C4[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C5;
extern VTBL_ENTRY _ZTI8S20003C5[];
extern  VTBL_ENTRY _ZTV8S20003C5[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C4;
extern VTBL_ENTRY _ZTI8S20003C4[];
extern  VTBL_ENTRY _ZTV8S20003C4[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C5;
extern VTBL_ENTRY _ZTI8S20003C5[];
extern  VTBL_ENTRY _ZTV8S20003C5[];
extern Class_Descriptor cd_S20003C8;
extern VTBL_ENTRY _ZTI8S20003C8[];
extern  VTBL_ENTRY _ZTV8S20003C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20003C8[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
static Base_Class bases_S20003C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20003C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S20003C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S20003C6,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20003C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20003C6,    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_S20003C5,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20003C6,    ABISELECT(64,36), //bcp->offset
    52, //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
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20003C4,    ABISELECT(56,32), //bcp->offset
    39, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20003C6,    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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20003C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20003C8,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //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},
  {&cd_S20003C6,    ABISELECT(40,24), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20003C7[];
extern void _ZN8S20003C7D1Ev();
extern void _ZN8S20003C7D0Ev();
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
extern void _ZN8S20003C73v33Ev();
extern void _ZN8S20003C73v34Ev();
extern void ABISELECT(_ZThn8_N8S20003C7D1Ev,_ZThn4_N8S20003C7D1Ev)();
extern void ABISELECT(_ZThn8_N8S20003C7D0Ev,_ZThn4_N8S20003C7D0Ev)();
extern void _ZN8S20003C63v19Ev();
extern void ABISELECT(_ZTv0_n24_N8S20003C7D1Ev,_ZTv0_n12_N8S20003C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S20003C7D1Ev,_ZThn8_N8S20003C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20003C7D0Ev,_ZTv0_n12_N8S20003C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S20003C7D0Ev,_ZThn8_N8S20003C7D0Ev)() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C83v27Ev();
extern void _ZN8S20003C83v28Ev();
extern void _ZN8S20003C83v29Ev();
extern void _ZN8S20003C83v30Ev();
extern void _ZN8S20003C83v31Ev();
extern void _ZN8S20003C83v32Ev();
extern void ABISELECT(_ZThn40_N8S20003C7D1Ev,_ZThn24_N8S20003C7D1Ev)();
extern void ABISELECT(_ZThn40_N8S20003C7D0Ev,_ZThn24_N8S20003C7D0Ev)();
extern void _ZN8S20003C63v19Ev();
extern void ABISELECT(_ZTv0_n24_N8S20003C7D1Ev,_ZTv0_n12_N8S20003C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S20003C7D1Ev,_ZThn32_N8S20003C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20003C7D0Ev,_ZTv0_n12_N8S20003C7D0Ev)();
extern void ABISELECT(_ZThn56_N8S20003C7D0Ev,_ZThn32_N8S20003C7D0Ev)() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
extern void ABISELECT(_ZTvn8_n24_N8S20003C7D1Ev,_ZTvn4_n12_N8S20003C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S20003C7D0Ev,_ZTvn4_n12_N8S20003C7D0Ev)();
extern void _ZN8S20003C63v19Ev();
static  VTBL_ENTRY vtc_S20003C7[] = {
  ABISELECT(16,8),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20003C7[0]),
  (VTBL_ENTRY)&_ZN8S20003C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20003C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20003C73v33Ev,
  (VTBL_ENTRY)&_ZN8S20003C73v34Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20003C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20003C7D1Ev,_ZThn4_N8S20003C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20003C7D0Ev,_ZThn4_N8S20003C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20003C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C7D1Ev,_ZTv0_n12_N8S20003C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C7D0Ev,_ZTv0_n12_N8S20003C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v29Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v30Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v32Ev,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20003C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S20003C7D1Ev,_ZThn24_N8S20003C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S20003C7D0Ev,_ZThn24_N8S20003C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20003C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C7D1Ev,_ZTv0_n12_N8S20003C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C7D0Ev,_ZTv0_n12_N8S20003C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20003C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C7D1Ev,_ZTvn4_n12_N8S20003C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C7D0Ev,_ZTvn4_n12_N8S20003C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
};
extern VTBL_ENTRY _ZTV8S20003C7[];
extern void ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev)();
extern void _ZN8S20003C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev)();
extern void _ZN8S20003C8D0Ev() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C83v27Ev();
extern void _ZN8S20003C83v28Ev();
extern void _ZN8S20003C83v29Ev();
extern void _ZN8S20003C83v30Ev();
extern void _ZN8S20003C83v31Ev();
extern void _ZN8S20003C83v32Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C8__8S20003C7[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20003C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v29Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v30Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v32Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev)();
extern void ABISELECT(_ZThn40_N8S20003C8D1Ev,_ZThn24_N8S20003C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev)();
extern void ABISELECT(_ZThn40_N8S20003C8D0Ev,_ZThn24_N8S20003C8D0Ev)() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C4__8S20003C8__8S20003C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20003C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S20003C8D1Ev,_ZTvn4_n12_N8S20003C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S20003C8D0Ev,_ZTvn4_n12_N8S20003C8D0Ev)();
extern void _ZN8S20003C63v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C68S20003C4__A1__8S20003C8__8S20003C7[] = {
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20003C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C8D1Ev,_ZTvn4_n12_N8S20003C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C8D0Ev,_ZTvn4_n12_N8S20003C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
};
static  VTT_ENTRY vtt_S20003C7[] = {
  {&(_ZTV8S20003C7[4]),  4,57},
  {&(_tg__ZTV8S20003C8__8S20003C7[7]),  7,17},
  {&(_tg__ZTV8S20003C4__8S20003C8__8S20003C7[7]),  7,13},
  {&(_tg__ZTV8S20003C68S20003C4__A1__8S20003C8__8S20003C7[2]),  2,5},
  {&(_tg__ZTV8S20003C8__8S20003C7[7]),  7,17},
  {&(_ZTV8S20003C7[24]),  24,57},
  {&(_ZTV8S20003C7[46]),  46,57},
  {&(_ZTV8S20003C7[54]),  54,57},
  {&(_ZTV8S20003C7[24]),  24,57},
};
extern VTBL_ENTRY _ZTI8S20003C7[];
extern  VTBL_ENTRY _ZTV8S20003C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20003C7[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20003C8D0Ev,_ZThn24_N8S20003C8D0Ev),
  (VTBL_ENTRY)_ZN8S20003C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20003C8D1Ev,_ZThn24_N8S20003C8D1Ev),
  (VTBL_ENTRY)_ZN8S20003C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20003C7D0Ev,_ZTv0_n12_N8S20003C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20003C7D0Ev,_ZThn32_N8S20003C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20003C7D0Ev,_ZThn8_N8S20003C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20003C7D1Ev,_ZTv0_n12_N8S20003C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20003C7D1Ev,_ZThn32_N8S20003C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20003C7D1Ev,_ZThn8_N8S20003C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20003C7 = {  "S20003C7", // class name
  bases_S20003C7, 12,
  &(vtc_S20003C7[0]), // expected_vtbl_contents
  &(vtt_S20003C7[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S20003C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20003C7),57, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20003C7),9, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names53,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20003C11  : S20003C4 {
  ::S20003C4 s20003c11f0;
  ::S20003C6 s20003c11f1;
  virtual  ~S20003C11(); // _ZN9S20003C11D1Ev
  virtual void  v35(); // _ZN9S20003C113v35Ev
  virtual void  v36(); // _ZN9S20003C113v36Ev
  virtual void  v37(); // _ZN9S20003C113v37Ev
  virtual void  v38(); // _ZN9S20003C113v38Ev
  virtual void  v39(); // _ZN9S20003C113v39Ev
  S20003C11(); // tgen
};
//SIG(-1 S20003C11) C1{ BC2{ BC3{ BC4{ vd v6} vd v7} BC4 vd v8 v9} vd v1 v2 v3 v4 v5 FC2 FC4}


 S20003C11 ::~S20003C11(){ note_dtor("S20003C11", this);}
void  S20003C11 ::v35(){vfunc_called(this, "_ZN9S20003C113v35Ev");}
void  S20003C11 ::v36(){vfunc_called(this, "_ZN9S20003C113v36Ev");}
void  S20003C11 ::v37(){vfunc_called(this, "_ZN9S20003C113v37Ev");}
void  S20003C11 ::v38(){vfunc_called(this, "_ZN9S20003C113v38Ev");}
void  S20003C11 ::v39(){vfunc_called(this, "_ZN9S20003C113v39Ev");}
S20003C11 ::S20003C11(){ note_ctor("S20003C11", this);} // tgen

static void Test_S20003C11()
{
  extern Class_Descriptor cd_S20003C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20003C11, buf);
    S20003C11 *dp, &lv = *(dp=new (buf) S20003C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20003C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20003C11)");
    check_base_class_offset(lv, (S20003C6*)(S20003C5*)(S20003C4*), 0, "S20003C11");
    check_base_class_offset(lv, (S20003C5*)(S20003C4*), 0, "S20003C11");
    /*is_ambiguous_... S20003C4::S20003C6 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C4*), ABISELECT(8,4), "S20003C11");
    check_base_class_offset(lv, (S20003C4*), 0, "S20003C11");
    check_field_offset(lv, s20003c11f0, ABISELECT(16,8), "S20003C11.s20003c11f0");
    check_field_offset(lv, s20003c11f1, ABISELECT(32,16), "S20003C11.s20003c11f1");
    test_class_info(&lv, &cd_S20003C11);
    dp->~S20003C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20003C11(Test_S20003C11, "S20003C11", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S20003C11C1Ev();
extern void _ZN9S20003C11D1Ev();
Name_Map name_map_S20003C11[] = {
  NSPAIR(_ZN9S20003C11C1Ev),
  NSPAIR(_ZN9S20003C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C5;
extern VTBL_ENTRY _ZTI8S20003C5[];
extern  VTBL_ENTRY _ZTV8S20003C5[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C4;
extern VTBL_ENTRY _ZTI8S20003C4[];
extern  VTBL_ENTRY _ZTV8S20003C4[];
static Base_Class bases_S20003C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20003C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20003C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20003C6,    ABISELECT(8,4), //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20003C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S20003C11[];
extern void _ZN9S20003C11D1Ev();
extern void _ZN9S20003C11D0Ev();
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
extern void _ZN9S20003C113v35Ev();
extern void _ZN9S20003C113v36Ev();
extern void _ZN9S20003C113v37Ev();
extern void _ZN9S20003C113v38Ev();
extern void _ZN9S20003C113v39Ev();
extern void ABISELECT(_ZThn8_N9S20003C11D1Ev,_ZThn4_N9S20003C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S20003C11D0Ev,_ZThn4_N9S20003C11D0Ev)();
extern void _ZN8S20003C63v19Ev();
static  VTBL_ENTRY vtc_S20003C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20003C11[0]),
  (VTBL_ENTRY)&_ZN9S20003C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20003C11D0Ev,
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v35Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v36Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v37Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v38Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v39Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20003C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S20003C11D1Ev,_ZThn4_N9S20003C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S20003C11D0Ev,_ZThn4_N9S20003C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
};
extern VTBL_ENTRY _ZTI9S20003C11[];
extern  VTBL_ENTRY _ZTV9S20003C11[];
Class_Descriptor cd_S20003C11 = {  "S20003C11", // class name
  bases_S20003C11, 4,
  &(vtc_S20003C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S20003C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20003C11),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  S20003C10  : virtual S20003C5 , virtual S20003C11 , virtual S20003C8 , S20003C6 {
  short s20003c10f0;
  virtual  ~S20003C10(); // _ZN9S20003C10D2Ev
  virtual void  v40(); // _ZN9S20003C103v40Ev
  virtual void  v41(); // _ZN9S20003C103v41Ev
  virtual void  v42(); // _ZN9S20003C103v42Ev
  virtual void  v43(); // _ZN9S20003C103v43Ev
  virtual void  v44(); // _ZN9S20003C103v44Ev
  virtual void  v45(); // _ZN9S20003C103v45Ev
  virtual void  v46(); // _ZN9S20003C103v46Ev
  virtual void  v47(); // _ZN9S20003C103v47Ev
  virtual void  v48(); // _ZN9S20003C103v48Ev
  S20003C10(); // tgen
};
//SIG(-1 S20003C10) C1{ VBC2{ BC3{ vd v10} vd v11} VBC4{ BC5{ BC2 BC3 vd v12 v13} vd v14 v15 v16 v17 v18 FC5 FC3} VBC6{ VBC5 VBC2 vd v19 v20 v21 v22 v23 v24 Fi Fc Fi} BC3 vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fs}


 S20003C10 ::~S20003C10(){ note_dtor("S20003C10", this);}
void  S20003C10 ::v40(){vfunc_called(this, "_ZN9S20003C103v40Ev");}
void  S20003C10 ::v41(){vfunc_called(this, "_ZN9S20003C103v41Ev");}
void  S20003C10 ::v42(){vfunc_called(this, "_ZN9S20003C103v42Ev");}
void  S20003C10 ::v43(){vfunc_called(this, "_ZN9S20003C103v43Ev");}
void  S20003C10 ::v44(){vfunc_called(this, "_ZN9S20003C103v44Ev");}
void  S20003C10 ::v45(){vfunc_called(this, "_ZN9S20003C103v45Ev");}
void  S20003C10 ::v46(){vfunc_called(this, "_ZN9S20003C103v46Ev");}
void  S20003C10 ::v47(){vfunc_called(this, "_ZN9S20003C103v47Ev");}
void  S20003C10 ::v48(){vfunc_called(this, "_ZN9S20003C103v48Ev");}
S20003C10 ::S20003C10(){ note_ctor("S20003C10", this);} // tgen

static void Test_S20003C10()
{
  extern Class_Descriptor cd_S20003C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S20003C10, buf);
    S20003C10 *dp, &lv = *(dp=new (buf) S20003C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S20003C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20003C10)");
    /*is_ambiguous_... S20003C10::S20003C5 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C5*), ABISELECT(56,28), "S20003C10");
    /*is_ambiguous_... S20003C10::S20003C5 */ AMB_check_base_class_offset(lv, (S20003C5*), ABISELECT(56,28), "S20003C10");
    /*is_ambiguous_... S20003C8::S20003C5 */ AMB_check_base_class_offset(lv, (S20003C5*)(S20003C8*), ABISELECT(56,28), "S20003C10");
    check_base_class_offset(lv, (S20003C6*)(S20003C5*)(S20003C4*)(S20003C11*), ABISELECT(16,8), "S20003C10");
    check_base_class_offset(lv, (S20003C5*)(S20003C4*)(S20003C11*), ABISELECT(16,8), "S20003C10");
    /*is_ambiguous_... S20003C4::S20003C6 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C4*)(S20003C11*), ABISELECT(24,12), "S20003C10");
    check_base_class_offset(lv, (S20003C4*)(S20003C11*), ABISELECT(16,8), "S20003C10");
    check_base_class_offset(lv, (S20003C11*), ABISELECT(16,8), "S20003C10");
    /*is_ambiguous_... S20003C10::S20003C4 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C5*)(S20003C4*), ABISELECT(80,44), "S20003C10");
    /*is_ambiguous_... S20003C10::S20003C4 */ AMB_check_base_class_offset(lv, (S20003C5*)(S20003C4*), ABISELECT(80,44), "S20003C10");
    /*is_ambiguous_... S20003C10::S20003C4 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C4*), ABISELECT(88,48), "S20003C10");
    check_base_class_offset(lv, (S20003C4*)(S20003C8*), ABISELECT(80,44), "S20003C10");
    check_base_class_offset(lv, (S20003C8*), ABISELECT(56,28), "S20003C10");
    /*is_ambiguous_... S20003C10::S20003C6 */ AMB_check_base_class_offset(lv, (S20003C6*), 0, "S20003C10");
    check_field_offset(lv, s20003c10f0, ABISELECT(8,4), "S20003C10.s20003c10f0");
    test_class_info(&lv, &cd_S20003C10);
    dp->~S20003C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20003C10(Test_S20003C10, "S20003C10", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN9S20003C10C1Ev();
extern void _ZN9S20003C10D2Ev();
Name_Map name_map_S20003C10[] = {
  NSPAIR(_ZN9S20003C10C1Ev),
  NSPAIR(_ZN9S20003C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C5;
extern VTBL_ENTRY _ZTI8S20003C5[];
extern  VTBL_ENTRY _ZTV8S20003C5[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C5;
extern VTBL_ENTRY _ZTI8S20003C5[];
extern  VTBL_ENTRY _ZTV8S20003C5[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C4;
extern VTBL_ENTRY _ZTI8S20003C4[];
extern  VTBL_ENTRY _ZTV8S20003C4[];
extern Class_Descriptor cd_S20003C11;
extern VTBL_ENTRY _ZTI9S20003C11[];
extern  VTBL_ENTRY _ZTV9S20003C11[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C5;
extern VTBL_ENTRY _ZTI8S20003C5[];
extern  VTBL_ENTRY _ZTV8S20003C5[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C4;
extern VTBL_ENTRY _ZTI8S20003C4[];
extern  VTBL_ENTRY _ZTV8S20003C4[];
extern Class_Descriptor cd_S20003C8;
extern VTBL_ENTRY _ZTI8S20003C8[];
extern  VTBL_ENTRY _ZTV8S20003C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20003C8[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
static Base_Class bases_S20003C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20003C6,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20003C5,    ABISELECT(56,28), //bcp->offset
    -1, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20003C6,    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
    3, //immediately_derived
  0, 0},
  {&cd_S20003C5,    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
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20003C6,    ABISELECT(24,12), //bcp->offset
    41, //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
    5, //immediately_derived
  0, 0},
  {&cd_S20003C4,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20003C11,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20003C6,    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
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20003C5,    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
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20003C6,    ABISELECT(88,48), //bcp->offset
    82, //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
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20003C4,    ABISELECT(80,44), //bcp->offset
    69, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20003C8,    ABISELECT(56,28), //bcp->offset
    46, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20003C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20003C10[];
extern void _ZN9S20003C10D1Ev();
extern void _ZN9S20003C10D0Ev();
extern void _ZN8S20003C63v19Ev();
extern void _ZN9S20003C103v40Ev();
extern void _ZN9S20003C103v41Ev();
extern void _ZN9S20003C103v42Ev();
extern void _ZN9S20003C103v43Ev();
extern void _ZN9S20003C103v44Ev();
extern void _ZN9S20003C103v45Ev();
extern void _ZN9S20003C103v46Ev();
extern void _ZN9S20003C103v47Ev();
extern void _ZN9S20003C103v48Ev();
extern void ABISELECT(_ZTv0_n24_N9S20003C10D1Ev,_ZTv0_n12_N9S20003C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S20003C10D1Ev,_ZThn8_N9S20003C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20003C10D0Ev,_ZTv0_n12_N9S20003C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S20003C10D0Ev,_ZThn8_N9S20003C10D0Ev)() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
extern void _ZN9S20003C113v35Ev();
extern void _ZN9S20003C113v36Ev();
extern void _ZN9S20003C113v37Ev();
extern void _ZN9S20003C113v38Ev();
extern void _ZN9S20003C113v39Ev();
extern void ABISELECT(_ZTvn8_n24_N9S20003C10D1Ev,_ZTvn4_n12_N9S20003C10D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S20003C10D0Ev,_ZTvn4_n12_N9S20003C10D0Ev)();
extern void _ZN8S20003C63v19Ev();
extern void ABISELECT(_ZTv0_n24_N9S20003C10D1Ev,_ZTv0_n12_N9S20003C10D1Ev)();
extern void ABISELECT(_ZThn56_N9S20003C10D1Ev,_ZThn28_N9S20003C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20003C10D0Ev,_ZTv0_n12_N9S20003C10D0Ev)();
extern void ABISELECT(_ZThn56_N9S20003C10D0Ev,_ZThn28_N9S20003C10D0Ev)() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C83v27Ev();
extern void _ZN8S20003C83v28Ev();
extern void _ZN8S20003C83v29Ev();
extern void _ZN8S20003C83v30Ev();
extern void _ZN8S20003C83v31Ev();
extern void _ZN8S20003C83v32Ev();
extern void ABISELECT(_ZTv0_n24_N9S20003C10D1Ev,_ZTv0_n12_N9S20003C10D1Ev)();
extern void ABISELECT(_ZThn80_N9S20003C10D1Ev,_ZThn44_N9S20003C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20003C10D0Ev,_ZTv0_n12_N9S20003C10D0Ev)();
extern void ABISELECT(_ZThn80_N9S20003C10D0Ev,_ZThn44_N9S20003C10D0Ev)() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
extern void ABISELECT(_ZTvn8_n24_N9S20003C10D1Ev,_ZTvn4_n12_N9S20003C10D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S20003C10D0Ev,_ZTvn4_n12_N9S20003C10D0Ev)();
extern void _ZN8S20003C63v19Ev();
static  VTBL_ENTRY vtc_S20003C10[] = {
  ABISELECT(80,44),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S20003C10[0]),
  (VTBL_ENTRY)&_ZN9S20003C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20003C10D0Ev,
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v40Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v41Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v42Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v43Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v44Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v45Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v46Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v47Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v48Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20003C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20003C10D1Ev,_ZTv0_n12_N9S20003C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20003C10D0Ev,_ZTv0_n12_N9S20003C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v35Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v36Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v37Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v38Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v39Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20003C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S20003C10D1Ev,_ZTvn4_n12_N9S20003C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S20003C10D0Ev,_ZTvn4_n12_N9S20003C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S20003C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20003C10D1Ev,_ZTv0_n12_N9S20003C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20003C10D0Ev,_ZTv0_n12_N9S20003C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v29Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v30Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v32Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI9S20003C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20003C10D1Ev,_ZTv0_n12_N9S20003C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20003C10D0Ev,_ZTv0_n12_N9S20003C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI9S20003C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S20003C10D1Ev,_ZTvn4_n12_N9S20003C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S20003C10D0Ev,_ZTvn4_n12_N9S20003C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
};
extern VTBL_ENTRY _ZTV9S20003C10[];
extern void ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev)();
extern void _ZN8S20003C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev)();
extern void _ZN8S20003C8D0Ev() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C83v27Ev();
extern void _ZN8S20003C83v28Ev();
extern void _ZN8S20003C83v29Ev();
extern void _ZN8S20003C83v30Ev();
extern void _ZN8S20003C83v31Ev();
extern void _ZN8S20003C83v32Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C8__9S20003C10[] = {
  0,
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20003C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v29Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v30Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v32Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S20003C8D1Ev,_ZThn16_N8S20003C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev)();
extern void ABISELECT(_ZThn24_N8S20003C8D0Ev,_ZThn16_N8S20003C8D0Ev)() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C4__8S20003C8__9S20003C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20003C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S20003C8D1Ev,_ZTvn4_n12_N8S20003C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S20003C8D0Ev,_ZTvn4_n12_N8S20003C8D0Ev)();
extern void _ZN8S20003C63v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C68S20003C4__A1__8S20003C8__9S20003C10[] = {
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20003C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C8D1Ev,_ZTvn4_n12_N8S20003C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C8D0Ev,_ZTvn4_n12_N8S20003C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
};
static  VTT_ENTRY vtt_S20003C10[] = {
  {&(_ZTV9S20003C10[6]),  6,87},
  {&(_ZTV9S20003C10[59]),  59,87},
  {&(_ZTV9S20003C10[30]),  30,87},
  {&(_ZTV9S20003C10[43]),  43,87},
  {&(_ZTV9S20003C10[59]),  59,87},
  {&(_ZTV9S20003C10[76]),  76,87},
  {&(_ZTV9S20003C10[84]),  84,87},
  {&(_tg__ZTV8S20003C8__9S20003C10[7]),  7,17},
  {&(_tg__ZTV8S20003C4__8S20003C8__9S20003C10[7]),  7,13},
  {&(_tg__ZTV8S20003C68S20003C4__A1__8S20003C8__9S20003C10[2]),  2,5},
  {&(_tg__ZTV8S20003C8__9S20003C10[7]),  7,17},
};
extern VTBL_ENTRY _ZTI9S20003C10[];
extern  VTBL_ENTRY _ZTV9S20003C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20003C10[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20003C8D0Ev,_ZThn16_N8S20003C8D0Ev),
  (VTBL_ENTRY)_ZN8S20003C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20003C8D1Ev,_ZThn16_N8S20003C8D1Ev),
  (VTBL_ENTRY)_ZN8S20003C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20003C10D0Ev,_ZTv0_n12_N9S20003C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20003C10D0Ev,_ZThn44_N9S20003C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20003C10D0Ev,_ZThn28_N9S20003C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20003C10D0Ev,_ZThn8_N9S20003C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20003C10D1Ev,_ZTv0_n12_N9S20003C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20003C10D1Ev,_ZThn44_N9S20003C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20003C10D1Ev,_ZThn28_N9S20003C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20003C10D1Ev,_ZThn8_N9S20003C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20003C10 = {  "S20003C10", // class name
  bases_S20003C10, 13,
  &(vtc_S20003C10[0]), // expected_vtbl_contents
  &(vtt_S20003C10[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI9S20003C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20003C10),87, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20003C10),11, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names54,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20003C1  : virtual S20003C2 , virtual S20003C3 , virtual S20003C7 , virtual S20003C8 , virtual S20003C10 {
  virtual  ~S20003C1(); // _ZN8S20003C1D2Ev
  virtual void  v1(); // _ZN8S20003C12v1Ev
  virtual void  v2(); // _ZN8S20003C12v2Ev
  virtual void  v3(); // _ZN8S20003C12v3Ev
  virtual void  v4(); // _ZN8S20003C12v4Ev
  virtual void  v5(); // _ZN8S20003C12v5Ev
  virtual void  v6(); // _ZN8S20003C12v6Ev
  virtual void  v7(); // _ZN8S20003C12v7Ev
  virtual void  v8(); // _ZN8S20003C12v8Ev
  virtual void  v9(); // _ZN8S20003C12v9Ev
  virtual void  v10(); // _ZN8S20003C13v10Ev
  S20003C1(); // tgen
};
//SIG(1 S20003C1) C1{ VBC2{ v11 v12 v13 v14 v15 v16 v17 v18} VBC3{ VBC4{ BC5{ BC6{ vd v19} vd v20} BC6 vd v21 v22} v23 v24 v25 v26 Fi[2] Fp} VBC7{ BC4 BC8{ VBC4 VBC5 vd v27 v28 v29 v30 v31 v32 Fi Fc Fi} BC6 v33 v34 FU9{ m}} VBC8 VBC10{ VBC5 VBC11{ BC4 vd v35 v36 v37 v38 v39 FC4 FC6} VBC8 BC6 vd v40 v41 v42 v43 v44 v45 v46 v47 v48 Fs} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S20003C1 ::~S20003C1(){ note_dtor("S20003C1", this);}
void  S20003C1 ::v1(){vfunc_called(this, "_ZN8S20003C12v1Ev");}
void  S20003C1 ::v2(){vfunc_called(this, "_ZN8S20003C12v2Ev");}
void  S20003C1 ::v3(){vfunc_called(this, "_ZN8S20003C12v3Ev");}
void  S20003C1 ::v4(){vfunc_called(this, "_ZN8S20003C12v4Ev");}
void  S20003C1 ::v5(){vfunc_called(this, "_ZN8S20003C12v5Ev");}
void  S20003C1 ::v6(){vfunc_called(this, "_ZN8S20003C12v6Ev");}
void  S20003C1 ::v7(){vfunc_called(this, "_ZN8S20003C12v7Ev");}
void  S20003C1 ::v8(){vfunc_called(this, "_ZN8S20003C12v8Ev");}
void  S20003C1 ::v9(){vfunc_called(this, "_ZN8S20003C12v9Ev");}
void  S20003C1 ::v10(){vfunc_called(this, "_ZN8S20003C13v10Ev");}
S20003C1 ::S20003C1(){ note_ctor("S20003C1", this);} // tgen

static void Test_S20003C1()
{
  extern Class_Descriptor cd_S20003C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,27)];
    init_test(&cd_S20003C1, buf);
    S20003C1 *dp, &lv = *(dp=new (buf) S20003C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,104), "sizeof(S20003C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20003C1)");
    check_base_class_offset(lv, (S20003C2*), 0, "S20003C1");
    /*is_ambiguous_... S20003C1::S20003C4 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C5*)(S20003C4*), ABISELECT(32,20), "S20003C1");
    /*is_ambiguous_... S20003C1::S20003C4 */ AMB_check_base_class_offset(lv, (S20003C5*)(S20003C4*), ABISELECT(32,20), "S20003C1");
    /*is_ambiguous_... S20003C1::S20003C4 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C4*), ABISELECT(40,24), "S20003C1");
    check_base_class_offset(lv, (S20003C4*)(S20003C3*), ABISELECT(32,20), "S20003C1");
    check_base_class_offset(lv, (S20003C4*)(S20003C8*)(S20003C7*), ABISELECT(32,20), "S20003C1");
    /*is_ambiguous_... S20003C1::S20003C8 */ AMB_check_base_class_offset(lv, (S20003C4*)(S20003C8*), ABISELECT(32,20), "S20003C1");
    check_base_class_offset(lv, (S20003C3*), ABISELECT(8,4), "S20003C1");
    /*is_ambiguous_... S20003C7::S20003C4 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C5*)(S20003C4*)(S20003C7*), ABISELECT(48,28), "S20003C1");
    /*is_ambiguous_... S20003C7::S20003C4 */ AMB_check_base_class_offset(lv, (S20003C5*)(S20003C4*)(S20003C7*), ABISELECT(48,28), "S20003C1");
    /*is_ambiguous_... S20003C7::S20003C4 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C4*)(S20003C7*), ABISELECT(56,32), "S20003C1");
    /*is_ambiguous_... S20003C7::S20003C4 */ AMB_check_base_class_offset(lv, (S20003C4*)(S20003C7*), ABISELECT(48,28), "S20003C1");
    /*is_ambiguous_... S20003C1::S20003C5 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C5*), ABISELECT(64,36), "S20003C1");
    /*is_ambiguous_... S20003C8::S20003C5 */ AMB_check_base_class_offset(lv, (S20003C5*)(S20003C8*)(S20003C7*), ABISELECT(64,36), "S20003C1");
    /*is_ambiguous_... S20003C1::S20003C8 */ AMB_check_base_class_offset(lv, (S20003C5*)(S20003C8*), ABISELECT(64,36), "S20003C1");
    /*is_ambiguous_... S20003C10::S20003C5 */ AMB_check_base_class_offset(lv, (S20003C5*)(S20003C10*), ABISELECT(64,36), "S20003C1");
    check_base_class_offset(lv, (S20003C8*)(S20003C7*), ABISELECT(64,36), "S20003C1");
    /*is_ambiguous_... S20003C7::S20003C6 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C7*), ABISELECT(88,52), "S20003C1");
    check_base_class_offset(lv, (S20003C7*), ABISELECT(48,28), "S20003C1");
    /*is_ambiguous_... S20003C1::S20003C8 */ AMB_check_base_class_offset(lv, (S20003C8*), ABISELECT(104,60), "S20003C1");
    check_base_class_offset(lv, (S20003C8*)(S20003C10*), ABISELECT(104,60), "S20003C1");
    check_base_class_offset(lv, (S20003C6*)(S20003C5*)(S20003C4*)(S20003C11*), ABISELECT(144,84), "S20003C1");
    check_base_class_offset(lv, (S20003C5*)(S20003C4*)(S20003C11*), ABISELECT(144,84), "S20003C1");
    /*is_ambiguous_... S20003C4::S20003C6 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C4*)(S20003C11*), ABISELECT(152,88), "S20003C1");
    check_base_class_offset(lv, (S20003C4*)(S20003C11*), ABISELECT(144,84), "S20003C1");
    check_base_class_offset(lv, (S20003C11*)(S20003C10*), ABISELECT(144,84), "S20003C1");
    /*is_ambiguous_... S20003C10::S20003C6 */ AMB_check_base_class_offset(lv, (S20003C6*)(S20003C10*), ABISELECT(128,76), "S20003C1");
    check_base_class_offset(lv, (S20003C10*), ABISELECT(128,76), "S20003C1");
    test_class_info(&lv, &cd_S20003C1);
    dp->~S20003C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20003C1(Test_S20003C1, "S20003C1", ABISELECT(184,104));

#else // __cplusplus

extern void _ZN8S20003C1C1Ev();
extern void _ZN8S20003C1D2Ev();
Name_Map name_map_S20003C1[] = {
  NSPAIR(_ZN8S20003C1C1Ev),
  NSPAIR(_ZN8S20003C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20003C2;
extern VTBL_ENTRY _ZTI8S20003C2[];
extern  VTBL_ENTRY _ZTV8S20003C2[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C5;
extern VTBL_ENTRY _ZTI8S20003C5[];
extern  VTBL_ENTRY _ZTV8S20003C5[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C4;
extern VTBL_ENTRY _ZTI8S20003C4[];
extern  VTBL_ENTRY _ZTV8S20003C4[];
extern Class_Descriptor cd_S20003C3;
extern VTBL_ENTRY _ZTI8S20003C3[];
extern  VTBL_ENTRY _ZTV8S20003C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20003C3[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C5;
extern VTBL_ENTRY _ZTI8S20003C5[];
extern  VTBL_ENTRY _ZTV8S20003C5[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C4;
extern VTBL_ENTRY _ZTI8S20003C4[];
extern  VTBL_ENTRY _ZTV8S20003C4[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C5;
extern VTBL_ENTRY _ZTI8S20003C5[];
extern  VTBL_ENTRY _ZTV8S20003C5[];
extern Class_Descriptor cd_S20003C8;
extern VTBL_ENTRY _ZTI8S20003C8[];
extern  VTBL_ENTRY _ZTV8S20003C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20003C8[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C7;
extern VTBL_ENTRY _ZTI8S20003C7[];
extern  VTBL_ENTRY _ZTV8S20003C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20003C7[];
extern Class_Descriptor cd_S20003C8;
extern VTBL_ENTRY _ZTI8S20003C8[];
extern  VTBL_ENTRY _ZTV8S20003C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20003C8[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C5;
extern VTBL_ENTRY _ZTI8S20003C5[];
extern  VTBL_ENTRY _ZTV8S20003C5[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C4;
extern VTBL_ENTRY _ZTI8S20003C4[];
extern  VTBL_ENTRY _ZTV8S20003C4[];
extern Class_Descriptor cd_S20003C11;
extern VTBL_ENTRY _ZTI9S20003C11[];
extern  VTBL_ENTRY _ZTV9S20003C11[];
extern Class_Descriptor cd_S20003C6;
extern VTBL_ENTRY _ZTI8S20003C6[];
extern  VTBL_ENTRY _ZTV8S20003C6[];
extern Class_Descriptor cd_S20003C10;
extern VTBL_ENTRY _ZTI9S20003C10[];
extern  VTBL_ENTRY _ZTV9S20003C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20003C10[];
static Base_Class bases_S20003C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20003C2,    0, //bcp->offset
    -1, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20003C6,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20003C5,    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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20003C6,    ABISELECT(40,24), //bcp->offset
    65, //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_S20003C4,    ABISELECT(32,20), //bcp->offset
    52, //bcp->virtual_function_table_offset
    7, //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
    5, //immediately_derived
  0, 1},
  {&cd_S20003C3,    ABISELECT(8,4), //bcp->offset
    38, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20003C6,    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
    9, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20003C5,    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
    10, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20003C6,    ABISELECT(56,32), //bcp->offset
    95, //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
    11, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20003C4,    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
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20003C6,    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
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20003C5,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    12, //immediately_derived
  0, 1},
  {&cd_S20003C8,    ABISELECT(64,36), //bcp->offset
    100, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20003C6,    ABISELECT(88,52), //bcp->offset
    117, //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
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20003C7,    ABISELECT(48,28), //bcp->offset
    70, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20003C8,    ABISELECT(104,60), //bcp->offset
    122, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20003C6,    ABISELECT(144,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
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20003C5,    ABISELECT(144,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
    18, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20003C6,    ABISELECT(152,88), //bcp->offset
    197, //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
    19, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20003C4,    ABISELECT(144,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
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20003C11,    ABISELECT(144,84), //bcp->offset
    174, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S20003C6,    ABISELECT(128,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
    22, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20003C10,    ABISELECT(128,76), //bcp->offset
    145, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20003C1[];
extern void _ZN8S20003C23v11Ev();
extern void _ZN8S20003C23v12Ev();
extern void _ZN8S20003C23v13Ev();
extern void _ZN8S20003C23v14Ev();
extern void _ZN8S20003C23v15Ev();
extern void _ZN8S20003C23v16Ev();
extern void _ZN8S20003C23v17Ev();
extern void _ZN8S20003C23v18Ev();
extern void _ZN8S20003C1D1Ev();
extern void _ZN8S20003C1D0Ev();
extern void _ZN8S20003C12v1Ev();
extern void _ZN8S20003C12v2Ev();
extern void _ZN8S20003C12v3Ev();
extern void _ZN8S20003C12v4Ev();
extern void _ZN8S20003C12v5Ev();
extern void _ZN8S20003C12v6Ev();
extern void _ZN8S20003C12v7Ev();
extern void _ZN8S20003C12v8Ev();
extern void _ZN8S20003C12v9Ev();
extern void _ZN8S20003C13v10Ev();
extern void _ZN8S20003C33v23Ev();
extern void _ZN8S20003C33v24Ev();
extern void _ZN8S20003C33v25Ev();
extern void _ZN8S20003C33v26Ev();
extern void ABISELECT(_ZTv0_n64_N8S20003C1D1Ev,_ZTv0_n32_N8S20003C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20003C1D1Ev,_ZThn4_N8S20003C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20003C1D0Ev,_ZTv0_n32_N8S20003C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20003C1D0Ev,_ZThn4_N8S20003C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20003C1D1Ev,_ZTv0_n12_N8S20003C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S20003C1D1Ev,_ZThn20_N8S20003C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20003C1D0Ev,_ZTv0_n12_N8S20003C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S20003C1D0Ev,_ZThn20_N8S20003C1D0Ev)() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
extern void ABISELECT(_ZTvn8_n24_N8S20003C1D1Ev,_ZTvn4_n12_N8S20003C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S20003C1D0Ev,_ZTvn4_n12_N8S20003C1D0Ev)();
extern void _ZN8S20003C63v19Ev();
extern void ABISELECT(_ZTv0_n40_N8S20003C1D1Ev,_ZTv0_n20_N8S20003C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S20003C1D1Ev,_ZThn28_N8S20003C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20003C1D0Ev,_ZTv0_n20_N8S20003C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S20003C1D0Ev,_ZThn28_N8S20003C1D0Ev)() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
extern void _ZN8S20003C73v33Ev();
extern void _ZN8S20003C73v34Ev();
extern void ABISELECT(_ZTvn8_n40_N8S20003C1D1Ev,_ZTvn4_n20_N8S20003C1D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S20003C1D0Ev,_ZTvn4_n20_N8S20003C1D0Ev)();
extern void _ZN8S20003C63v19Ev();
extern void ABISELECT(_ZTv0_n24_N8S20003C1D1Ev,_ZTv0_n12_N8S20003C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S20003C1D1Ev,_ZThn36_N8S20003C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20003C1D0Ev,_ZTv0_n12_N8S20003C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S20003C1D0Ev,_ZThn36_N8S20003C1D0Ev)() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C83v27Ev();
extern void _ZN8S20003C83v28Ev();
extern void _ZN8S20003C83v29Ev();
extern void _ZN8S20003C83v30Ev();
extern void _ZN8S20003C83v31Ev();
extern void _ZN8S20003C83v32Ev();
extern void ABISELECT(_ZTvn40_n40_N8S20003C1D1Ev,_ZTvn24_n20_N8S20003C1D1Ev)();
extern void ABISELECT(_ZTvn40_n40_N8S20003C1D0Ev,_ZTvn24_n20_N8S20003C1D0Ev)();
extern void _ZN8S20003C63v19Ev();
extern void ABISELECT(_ZTv0_n24_N8S20003C1D1Ev,_ZTv0_n12_N8S20003C1D1Ev)();
extern void ABISELECT(_ZThn104_N8S20003C1D1Ev,_ZThn60_N8S20003C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20003C1D0Ev,_ZTv0_n12_N8S20003C1D0Ev)();
extern void ABISELECT(_ZThn104_N8S20003C1D0Ev,_ZThn60_N8S20003C1D0Ev)() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C83v27Ev();
extern void _ZN8S20003C83v28Ev();
extern void _ZN8S20003C83v29Ev();
extern void _ZN8S20003C83v30Ev();
extern void _ZN8S20003C83v31Ev();
extern void _ZN8S20003C83v32Ev();
extern void ABISELECT(_ZTv0_n56_N8S20003C1D1Ev,_ZTv0_n28_N8S20003C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S20003C1D1Ev,_ZThn76_N8S20003C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20003C1D0Ev,_ZTv0_n28_N8S20003C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S20003C1D0Ev,_ZThn76_N8S20003C1D0Ev)() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN9S20003C103v40Ev();
extern void _ZN9S20003C103v41Ev();
extern void _ZN9S20003C103v42Ev();
extern void _ZN9S20003C103v43Ev();
extern void _ZN9S20003C103v44Ev();
extern void _ZN9S20003C103v45Ev();
extern void _ZN9S20003C103v46Ev();
extern void _ZN9S20003C103v47Ev();
extern void _ZN9S20003C103v48Ev();
extern void ABISELECT(_ZTv0_n24_N8S20003C1D1Ev,_ZTv0_n12_N8S20003C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S20003C1D1Ev,_ZThn84_N8S20003C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20003C1D0Ev,_ZTv0_n12_N8S20003C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S20003C1D0Ev,_ZThn84_N8S20003C1D0Ev)() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
extern void _ZN9S20003C113v35Ev();
extern void _ZN9S20003C113v36Ev();
extern void _ZN9S20003C113v37Ev();
extern void _ZN9S20003C113v38Ev();
extern void _ZN9S20003C113v39Ev();
extern void ABISELECT(_ZTvn8_n24_N8S20003C1D1Ev,_ZTvn4_n12_N8S20003C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S20003C1D0Ev,_ZTvn4_n12_N8S20003C1D0Ev)();
extern void _ZN8S20003C63v19Ev();
static  VTBL_ENTRY vtc_S20003C1[] = {
  ABISELECT(144,84),
  ABISELECT(128,76),
  ABISELECT(104,60),
  ABISELECT(64,36),
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20003C1[0]),
  (VTBL_ENTRY)&_ZN8S20003C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20003C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20003C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20003C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20003C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20003C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20003C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20003C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20003C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20003C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20003C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20003C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20003C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20003C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20003C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20003C12v6Ev,
  (VTBL_ENTRY)&_ZN8S20003C12v7Ev,
  (VTBL_ENTRY)&_ZN8S20003C12v8Ev,
  (VTBL_ENTRY)&_ZN8S20003C12v9Ev,
  (VTBL_ENTRY)&_ZN8S20003C13v10Ev,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20003C1[0]),
  (VTBL_ENTRY)&_ZN8S20003C33v23Ev,
  (VTBL_ENTRY)&_ZN8S20003C33v24Ev,
  (VTBL_ENTRY)&_ZN8S20003C33v25Ev,
  (VTBL_ENTRY)&_ZN8S20003C33v26Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20003C1D1Ev,_ZTv0_n32_N8S20003C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20003C1D0Ev,_ZTv0_n32_N8S20003C1D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20003C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C1D1Ev,_ZTv0_n12_N8S20003C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C1D0Ev,_ZTv0_n12_N8S20003C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20003C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C1D1Ev,_ZTvn4_n12_N8S20003C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C1D0Ev,_ZTvn4_n12_N8S20003C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20003C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20003C1D1Ev,_ZTv0_n20_N8S20003C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20003C1D0Ev,_ZTv0_n20_N8S20003C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20003C73v33Ev,
  (VTBL_ENTRY)&_ZN8S20003C73v34Ev,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20003C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S20003C1D1Ev,_ZTvn4_n20_N8S20003C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S20003C1D0Ev,_ZTvn4_n20_N8S20003C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20003C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C1D1Ev,_ZTv0_n12_N8S20003C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C1D0Ev,_ZTv0_n12_N8S20003C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v29Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v30Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v32Ev,
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S20003C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n40_N8S20003C1D1Ev,_ZTvn24_n20_N8S20003C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n40_N8S20003C1D0Ev,_ZTvn24_n20_N8S20003C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-72,-40),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S20003C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C1D1Ev,_ZTv0_n12_N8S20003C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C1D0Ev,_ZTv0_n12_N8S20003C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v29Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v30Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v32Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-96,-56),
  ABISELECT(-24,-16),
  ABISELECT(16,8),
  ABISELECT(-64,-40),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S20003C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20003C1D1Ev,_ZTv0_n28_N8S20003C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20003C1D0Ev,_ZTv0_n28_N8S20003C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v40Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v41Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v42Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v43Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v44Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v45Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v46Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v47Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v48Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S20003C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C1D1Ev,_ZTv0_n12_N8S20003C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C1D0Ev,_ZTv0_n12_N8S20003C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v35Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v36Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v37Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v38Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v39Ev,
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI8S20003C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C1D1Ev,_ZTvn4_n12_N8S20003C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C1D0Ev,_ZTvn4_n12_N8S20003C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
};
extern VTBL_ENTRY _ZTV8S20003C1[];
extern void _ZN8S20003C33v23Ev();
extern void _ZN8S20003C33v24Ev();
extern void _ZN8S20003C33v25Ev();
extern void _ZN8S20003C33v26Ev();
extern void _ZN8S20003C3D1Ev();
extern void _ZN8S20003C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C3__8S20003C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20003C3[0]),
  (VTBL_ENTRY)&_ZN8S20003C33v23Ev,
  (VTBL_ENTRY)&_ZN8S20003C33v24Ev,
  (VTBL_ENTRY)&_ZN8S20003C33v25Ev,
  (VTBL_ENTRY)&_ZN8S20003C33v26Ev,
  (VTBL_ENTRY)&_ZN8S20003C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20003C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20003C3D1Ev,_ZTv0_n12_N8S20003C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S20003C3D1Ev,_ZThn16_N8S20003C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20003C3D0Ev,_ZTv0_n12_N8S20003C3D0Ev)();
extern void ABISELECT(_ZThn24_N8S20003C3D0Ev,_ZThn16_N8S20003C3D0Ev)() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C4__8S20003C3__8S20003C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20003C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C3D1Ev,_ZTv0_n12_N8S20003C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C3D0Ev,_ZTv0_n12_N8S20003C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S20003C3D1Ev,_ZTvn4_n12_N8S20003C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S20003C3D0Ev,_ZTvn4_n12_N8S20003C3D0Ev)();
extern void _ZN8S20003C63v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C68S20003C4__A1__8S20003C3__8S20003C1[] = {
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20003C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C3D1Ev,_ZTvn4_n12_N8S20003C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C3D0Ev,_ZTvn4_n12_N8S20003C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
};
extern void _ZN8S20003C7D1Ev();
extern void _ZN8S20003C7D0Ev();
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
extern void _ZN8S20003C73v33Ev();
extern void _ZN8S20003C73v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C7__8S20003C1[] = {
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20003C7[0]),
  (VTBL_ENTRY)&_ZN8S20003C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20003C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20003C73v33Ev,
  (VTBL_ENTRY)&_ZN8S20003C73v34Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev)();
extern void _ZN8S20003C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev)();
extern void _ZN8S20003C8D0Ev() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C83v27Ev();
extern void _ZN8S20003C83v28Ev();
extern void _ZN8S20003C83v29Ev();
extern void _ZN8S20003C83v30Ev();
extern void _ZN8S20003C83v31Ev();
extern void _ZN8S20003C83v32Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C88S20003C7__8S20003C1[] = {
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20003C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v29Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v30Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v32Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev)();
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C4__8S20003C88S20003C7__8S20003C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S20003C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S20003C8D1Ev,_ZTvn4_n12_N8S20003C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S20003C8D0Ev,_ZTvn4_n12_N8S20003C8D0Ev)();
extern void _ZN8S20003C63v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C68S20003C4__A1__8S20003C88S20003C7__8S20003C1[] = {
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S20003C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C8D1Ev,_ZTvn4_n12_N8S20003C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C8D0Ev,_ZTvn4_n12_N8S20003C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20003C7D1Ev,_ZTv0_n12_N8S20003C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S20003C7D1Ev,_ZThn8_N8S20003C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20003C7D0Ev,_ZTv0_n12_N8S20003C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S20003C7D0Ev,_ZThn8_N8S20003C7D0Ev)() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C83v27Ev();
extern void _ZN8S20003C83v28Ev();
extern void _ZN8S20003C83v29Ev();
extern void _ZN8S20003C83v30Ev();
extern void _ZN8S20003C83v31Ev();
extern void _ZN8S20003C83v32Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C8__8S20003C7__8S20003C1[] = {
  0,
  ABISELECT(-32,-16),
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20003C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C7D1Ev,_ZTv0_n12_N8S20003C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C7D0Ev,_ZTv0_n12_N8S20003C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v29Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v30Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v32Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20003C7D1Ev,_ZTv0_n12_N8S20003C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20003C7D0Ev,_ZTv0_n12_N8S20003C7D0Ev)();
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C4__A1__8S20003C7__8S20003C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20003C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C7D1Ev,_ZTv0_n12_N8S20003C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C7D0Ev,_ZTv0_n12_N8S20003C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S20003C7D1Ev,_ZTvn4_n12_N8S20003C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S20003C7D0Ev,_ZTvn4_n12_N8S20003C7D0Ev)();
extern void _ZN8S20003C63v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C68S20003C4__A3__8S20003C7__8S20003C1[] = {
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20003C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C7D1Ev,_ZTvn4_n12_N8S20003C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C7D0Ev,_ZTvn4_n12_N8S20003C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev)();
extern void _ZN8S20003C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev)();
extern void _ZN8S20003C8D0Ev() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C83v27Ev();
extern void _ZN8S20003C83v28Ev();
extern void _ZN8S20003C83v29Ev();
extern void _ZN8S20003C83v30Ev();
extern void _ZN8S20003C83v31Ev();
extern void _ZN8S20003C83v32Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C8__A1__8S20003C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-72,-40),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20003C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v29Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v30Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v32Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev)();
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C4__8S20003C8__A1__8S20003C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(72,40),
  ABISELECT(72,40),
  (VTBL_ENTRY)&(_ZTI8S20003C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S20003C8D1Ev,_ZTvn4_n12_N8S20003C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S20003C8D0Ev,_ZTvn4_n12_N8S20003C8D0Ev)();
extern void _ZN8S20003C63v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C68S20003C4__A1__8S20003C8__A1__8S20003C1[] = {
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S20003C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C8D1Ev,_ZTvn4_n12_N8S20003C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20003C8D0Ev,_ZTvn4_n12_N8S20003C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev)();
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C5__A1__8S20003C8__A1__8S20003C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S20003C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
};
extern void _ZN9S20003C10D1Ev();
extern void _ZN9S20003C10D0Ev();
extern void _ZN8S20003C63v19Ev();
extern void _ZN9S20003C103v40Ev();
extern void _ZN9S20003C103v41Ev();
extern void _ZN9S20003C103v42Ev();
extern void _ZN9S20003C103v43Ev();
extern void _ZN9S20003C103v44Ev();
extern void _ZN9S20003C103v45Ev();
extern void _ZN9S20003C103v46Ev();
extern void _ZN9S20003C103v47Ev();
extern void _ZN9S20003C103v48Ev();
static  VTBL_ENTRY _tg__ZTV9S20003C10__8S20003C1[] = {
  ABISELECT(-96,-56),
  ABISELECT(-24,-16),
  ABISELECT(16,8),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S20003C10[0]),
  (VTBL_ENTRY)&_ZN9S20003C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20003C10D0Ev,
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v40Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v41Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v42Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v43Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v44Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v45Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v46Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v47Ev,
  (VTBL_ENTRY)&_ZN9S20003C103v48Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20003C10D1Ev,_ZTv0_n12_N9S20003C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20003C10D0Ev,_ZTv0_n12_N9S20003C10D0Ev)();
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C5__9S20003C10__8S20003C1[] = {
  0,
  0,
  ABISELECT(64,40),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI9S20003C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20003C10D1Ev,_ZTv0_n12_N9S20003C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20003C10D0Ev,_ZTv0_n12_N9S20003C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20003C10D1Ev,_ZTv0_n12_N9S20003C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S20003C10D1Ev,_ZThn8_N9S20003C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20003C10D0Ev,_ZTv0_n12_N9S20003C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S20003C10D0Ev,_ZThn8_N9S20003C10D0Ev)() __attribute__((weak));
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
extern void _ZN9S20003C113v35Ev();
extern void _ZN9S20003C113v36Ev();
extern void _ZN9S20003C113v37Ev();
extern void _ZN9S20003C113v38Ev();
extern void _ZN9S20003C113v39Ev();
static  VTBL_ENTRY _tg__ZTV9S20003C11__9S20003C10__8S20003C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20003C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20003C10D1Ev,_ZTv0_n12_N9S20003C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20003C10D0Ev,_ZTv0_n12_N9S20003C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v35Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v36Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v37Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v38Ev,
  (VTBL_ENTRY)&_ZN9S20003C113v39Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S20003C10D1Ev,_ZTvn4_n12_N9S20003C10D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S20003C10D0Ev,_ZTvn4_n12_N9S20003C10D0Ev)();
extern void _ZN8S20003C63v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C68S20003C49S20003C11__A2__9S20003C10__8S20003C1[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20003C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S20003C10D1Ev,_ZTvn4_n12_N9S20003C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S20003C10D0Ev,_ZTvn4_n12_N9S20003C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20003C10D1Ev,_ZTv0_n12_N9S20003C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20003C10D0Ev,_ZTv0_n12_N9S20003C10D0Ev)();
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C83v27Ev();
extern void _ZN8S20003C83v28Ev();
extern void _ZN8S20003C83v29Ev();
extern void _ZN8S20003C83v30Ev();
extern void _ZN8S20003C83v31Ev();
extern void _ZN8S20003C83v32Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C8__9S20003C10__8S20003C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-72,-40),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(24,16),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S20003C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20003C10D1Ev,_ZTv0_n12_N9S20003C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20003C10D0Ev,_ZTv0_n12_N9S20003C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v29Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v30Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20003C83v32Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20003C10D1Ev,_ZTv0_n12_N9S20003C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20003C10D0Ev,_ZTv0_n12_N9S20003C10D0Ev)();
extern void _ZN8S20003C63v19Ev();
extern void _ZN8S20003C53v20Ev();
extern void _ZN8S20003C43v21Ev();
extern void _ZN8S20003C43v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C4__A1__9S20003C10__8S20003C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(96,56),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI9S20003C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20003C10D1Ev,_ZTv0_n12_N9S20003C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20003C10D0Ev,_ZTv0_n12_N9S20003C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20003C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20003C43v22Ev,
};
extern void ABISELECT(_ZTvn8_n24_N9S20003C10D1Ev,_ZTvn4_n12_N9S20003C10D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N9S20003C10D0Ev,_ZTvn4_n12_N9S20003C10D0Ev)();
extern void _ZN8S20003C63v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20003C68S20003C4__A4__9S20003C10__8S20003C1[] = {
  ABISELECT(88,52),
  (VTBL_ENTRY)&(_ZTI9S20003C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S20003C10D1Ev,_ZTvn4_n12_N9S20003C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N9S20003C10D0Ev,_ZTvn4_n12_N9S20003C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20003C63v19Ev,
};
static  VTT_ENTRY vtt_S20003C1[] = {
  {&(_ZTV8S20003C1[18]),  18,202},
  {&(_ZTV8S20003C1[18]),  18,202},
  {&(_ZTV8S20003C1[46]),  46,202},
  {&(_ZTV8S20003C1[59]),  59,202},
  {&(_ZTV8S20003C1[67]),  67,202},
  {&(_ZTV8S20003C1[87]),  87,202},
  {&(_ZTV8S20003C1[97]),  97,202},
  {&(_ZTV8S20003C1[107]),  107,202},
  {&(_ZTV8S20003C1[107]),  107,202},
  {&(_ZTV8S20003C1[119]),  119,202},
  {&(_ZTV8S20003C1[135]),  135,202},
  {&(_ZTV8S20003C1[162]),  162,202},
  {&(_ZTV8S20003C1[186]),  186,202},
  {&(_ZTV8S20003C1[199]),  199,202},
  {&(_tg__ZTV8S20003C3__8S20003C1[3]),  3,9},
  {&(_tg__ZTV8S20003C4__8S20003C3__8S20003C1[7]),  7,13},
  {&(_tg__ZTV8S20003C68S20003C4__A1__8S20003C3__8S20003C1[2]),  2,5},
  {&(_tg__ZTV8S20003C7__8S20003C1[4]),  4,12},
  {&(_tg__ZTV8S20003C88S20003C7__8S20003C1[7]),  7,17},
  {&(_tg__ZTV8S20003C4__8S20003C88S20003C7__8S20003C1[7]),  7,13},
  {&(_tg__ZTV8S20003C68S20003C4__A1__8S20003C88S20003C7__8S20003C1[2]),  2,5},
  {&(_tg__ZTV8S20003C88S20003C7__8S20003C1[7]),  7,17},
  {&(_tg__ZTV8S20003C8__8S20003C7__8S20003C1[7]),  7,17},
  {&(_tg__ZTV8S20003C4__A1__8S20003C7__8S20003C1[7]),  7,13},
  {&(_tg__ZTV8S20003C68S20003C4__A3__8S20003C7__8S20003C1[2]),  2,5},
  {&(_tg__ZTV8S20003C8__8S20003C7__8S20003C1[7]),  7,17},
  {&(_tg__ZTV8S20003C8__A1__8S20003C1[7]),  7,17},
  {&(_tg__ZTV8S20003C4__8S20003C8__A1__8S20003C1[7]),  7,13},
  {&(_tg__ZTV8S20003C68S20003C4__A1__8S20003C8__A1__8S20003C1[2]),  2,5},
  {&(_tg__ZTV8S20003C5__A1__8S20003C8__A1__8S20003C1[5]),  5,9},
  {&(_tg__ZTV9S20003C10__8S20003C1[6]),  6,18},
  {&(_tg__ZTV8S20003C5__9S20003C10__8S20003C1[5]),  5,9},
  {&(_tg__ZTV9S20003C11__9S20003C10__8S20003C1[12]),  12,23},
  {&(_tg__ZTV8S20003C68S20003C49S20003C11__A2__9S20003C10__8S20003C1[2]),  2,5},
  {&(_tg__ZTV8S20003C8__9S20003C10__8S20003C1[13]),  13,23},
  {&(_tg__ZTV8S20003C4__A1__9S20003C10__8S20003C1[7]),  7,13},
  {&(_tg__ZTV8S20003C68S20003C4__A4__9S20003C10__8S20003C1[2]),  2,5},
};
extern VTBL_ENTRY _ZTI8S20003C1[];
extern  VTBL_ENTRY _ZTV8S20003C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20003C1[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20003C10D0Ev,_ZTv0_n12_N9S20003C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20003C10D0Ev,_ZThn8_N9S20003C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20003C10D1Ev,_ZTv0_n12_N9S20003C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20003C10D1Ev,_ZThn8_N9S20003C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20003C7D0Ev,_ZTv0_n12_N8S20003C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20003C7D0Ev,_ZThn8_N8S20003C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20003C7D1Ev,_ZTv0_n12_N8S20003C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20003C7D1Ev,_ZThn8_N8S20003C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20003C8D0Ev,_ZTv0_n12_N8S20003C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20003C8D0Ev,
  (VTBL_ENTRY)_ZN8S20003C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20003C8D1Ev,_ZTv0_n12_N8S20003C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20003C8D1Ev,
  (VTBL_ENTRY)_ZN8S20003C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20003C3D0Ev,_ZTv0_n12_N8S20003C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20003C3D0Ev,_ZThn16_N8S20003C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20003C3D1Ev,_ZTv0_n12_N8S20003C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20003C3D1Ev,_ZThn16_N8S20003C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20003C1D0Ev,_ZTv0_n28_N8S20003C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20003C1D0Ev,_ZThn76_N8S20003C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20003C1D1Ev,_ZTv0_n28_N8S20003C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20003C1D1Ev,_ZThn76_N8S20003C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20003C1D0Ev,_ZTv0_n20_N8S20003C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20003C1D0Ev,_ZThn28_N8S20003C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20003C1D1Ev,_ZTv0_n20_N8S20003C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20003C1D1Ev,_ZThn28_N8S20003C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20003C1D0Ev,_ZTv0_n12_N8S20003C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20003C1D0Ev,_ZThn84_N8S20003C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20003C1D0Ev,_ZThn60_N8S20003C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20003C1D0Ev,_ZThn36_N8S20003C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20003C1D0Ev,_ZThn20_N8S20003C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20003C1D1Ev,_ZTv0_n12_N8S20003C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20003C1D1Ev,_ZThn84_N8S20003C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20003C1D1Ev,_ZThn60_N8S20003C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20003C1D1Ev,_ZThn36_N8S20003C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20003C1D1Ev,_ZThn20_N8S20003C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20003C1D0Ev,_ZTv0_n32_N8S20003C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20003C1D0Ev,_ZThn4_N8S20003C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20003C1D1Ev,_ZTv0_n32_N8S20003C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20003C1D1Ev,_ZThn4_N8S20003C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20003C1 = {  "S20003C1", // class name
  bases_S20003C1, 23,
  &(vtc_S20003C1[0]), // expected_vtbl_contents
  &(vtt_S20003C1[0]), // expected_vtt_contents
  ABISELECT(184,104), // object size
  NSPAIRA(_ZTI8S20003C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20003C1),202, //virtual function table var
  18, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20003C1),37, //virtual table table var
  23, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1493C4  {
  virtual  ~S1493C4(); // _ZN7S1493C4D1Ev
  virtual void  v5(); // _ZN7S1493C42v5Ev
  S1493C4(); // tgen
};
//SIG(-1 S1493C4) C1{ vd v1}


 S1493C4 ::~S1493C4(){ note_dtor("S1493C4", this);}
void  S1493C4 ::v5(){vfunc_called(this, "_ZN7S1493C42v5Ev");}
S1493C4 ::S1493C4(){ note_ctor("S1493C4", this);} // tgen

static void Test_S1493C4()
{
  extern Class_Descriptor cd_S1493C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1493C4, buf);
    S1493C4 *dp, &lv = *(dp=new (buf) S1493C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1493C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1493C4)");
    test_class_info(&lv, &cd_S1493C4);
    dp->~S1493C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1493C4(Test_S1493C4, "S1493C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1493C4C1Ev();
extern void _ZN7S1493C4D1Ev();
Name_Map name_map_S1493C4[] = {
  NSPAIR(_ZN7S1493C4C1Ev),
  NSPAIR(_ZN7S1493C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1493C4[];
extern void _ZN7S1493C4D1Ev();
extern void _ZN7S1493C4D0Ev();
extern void _ZN7S1493C42v5Ev();
static  VTBL_ENTRY vtc_S1493C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1493C4[0]),
  (VTBL_ENTRY)&_ZN7S1493C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1493C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S1493C4[];
extern  VTBL_ENTRY _ZTV7S1493C4[];
Class_Descriptor cd_S1493C4 = {  "S1493C4", // class name
  0,0,//no base classes
  &(vtc_S1493C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1493C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1493C4),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  S1493C3  : S1493C4 {
  ::S1493C4 s1493c3f0;
  virtual  ~S1493C3(); // _ZN7S1493C3D1Ev
  virtual void  v6(); // _ZN7S1493C32v6Ev
  virtual void  v7(); // _ZN7S1493C32v7Ev
  S1493C3(); // tgen
};
//SIG(-1 S1493C3) C1{ BC2{ vd v3} vd v1 v2 FC2}


 S1493C3 ::~S1493C3(){ note_dtor("S1493C3", this);}
void  S1493C3 ::v6(){vfunc_called(this, "_ZN7S1493C32v6Ev");}
void  S1493C3 ::v7(){vfunc_called(this, "_ZN7S1493C32v7Ev");}
S1493C3 ::S1493C3(){ note_ctor("S1493C3", this);} // tgen

static void Test_S1493C3()
{
  extern Class_Descriptor cd_S1493C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1493C3, buf);
    S1493C3 *dp, &lv = *(dp=new (buf) S1493C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1493C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1493C3)");
    check_base_class_offset(lv, (S1493C4*), 0, "S1493C3");
    check_field_offset(lv, s1493c3f0, ABISELECT(8,4), "S1493C3.s1493c3f0");
    test_class_info(&lv, &cd_S1493C3);
    dp->~S1493C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1493C3(Test_S1493C3, "S1493C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1493C3C1Ev();
extern void _ZN7S1493C3D1Ev();
Name_Map name_map_S1493C3[] = {
  NSPAIR(_ZN7S1493C3C1Ev),
  NSPAIR(_ZN7S1493C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1493C4;
extern VTBL_ENTRY _ZTI7S1493C4[];
extern  VTBL_ENTRY _ZTV7S1493C4[];
static Base_Class bases_S1493C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1493C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1493C3[];
extern void _ZN7S1493C3D1Ev();
extern void _ZN7S1493C3D0Ev();
extern void _ZN7S1493C42v5Ev();
extern void _ZN7S1493C32v6Ev();
extern void _ZN7S1493C32v7Ev();
static  VTBL_ENTRY vtc_S1493C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1493C3[0]),
  (VTBL_ENTRY)&_ZN7S1493C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1493C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1493C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1493C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S1493C3[];
extern  VTBL_ENTRY _ZTV7S1493C3[];
Class_Descriptor cd_S1493C3 = {  "S1493C3", // class name
  bases_S1493C3, 1,
  &(vtc_S1493C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1493C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1493C3),7, //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  S1493C5  {
  void *s1493c5f0[4];
  virtual void  v8(); // _ZN7S1493C52v8Ev
  virtual void  v9(); // _ZN7S1493C52v9Ev
  virtual void  v10(); // _ZN7S1493C53v10Ev
  virtual void  v11(); // _ZN7S1493C53v11Ev
  virtual void  v12(); // _ZN7S1493C53v12Ev
  ~S1493C5(); // tgen
  S1493C5(); // tgen
};
//SIG(-1 S1493C5) C1{ v1 v2 v3 v4 v5 Fp[4]}


void  S1493C5 ::v8(){vfunc_called(this, "_ZN7S1493C52v8Ev");}
void  S1493C5 ::v9(){vfunc_called(this, "_ZN7S1493C52v9Ev");}
void  S1493C5 ::v10(){vfunc_called(this, "_ZN7S1493C53v10Ev");}
void  S1493C5 ::v11(){vfunc_called(this, "_ZN7S1493C53v11Ev");}
void  S1493C5 ::v12(){vfunc_called(this, "_ZN7S1493C53v12Ev");}
S1493C5 ::~S1493C5(){ note_dtor("S1493C5", this);} // tgen
S1493C5 ::S1493C5(){ note_ctor("S1493C5", this);} // tgen

static void Test_S1493C5()
{
  extern Class_Descriptor cd_S1493C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S1493C5, buf);
    S1493C5 *dp, &lv = *(dp=new (buf) S1493C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S1493C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1493C5)");
    check_field_offset(lv, s1493c5f0, ABISELECT(8,4), "S1493C5.s1493c5f0");
    test_class_info(&lv, &cd_S1493C5);
    dp->~S1493C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1493C5(Test_S1493C5, "S1493C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S1493C5C1Ev();
extern void _ZN7S1493C5D1Ev();
Name_Map name_map_S1493C5[] = {
  NSPAIR(_ZN7S1493C5C1Ev),
  NSPAIR(_ZN7S1493C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1493C5[];
extern void _ZN7S1493C52v8Ev();
extern void _ZN7S1493C52v9Ev();
extern void _ZN7S1493C53v10Ev();
extern void _ZN7S1493C53v11Ev();
extern void _ZN7S1493C53v12Ev();
static  VTBL_ENTRY vtc_S1493C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1493C5[0]),
  (VTBL_ENTRY)&_ZN7S1493C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1493C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1493C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1493C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1493C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S1493C5[];
extern  VTBL_ENTRY _ZTV7S1493C5[];
Class_Descriptor cd_S1493C5 = {  "S1493C5", // class name
  0,0,//no base classes
  &(vtc_S1493C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S1493C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1493C5),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  S1493C7  {
  char s1493c7f0;
  long double s1493c7f1[7];
  virtual void  v13(); // _ZN7S1493C73v13Ev
  virtual void  v14(); // _ZN7S1493C73v14Ev
  virtual void  v15(); // _ZN7S1493C73v15Ev
  virtual void  v16(); // _ZN7S1493C73v16Ev
  ~S1493C7(); // tgen
  S1493C7(); // tgen
};
//SIG(-1 S1493C7) C1{ v1 v2 v3 v4 Fc FD[7]}


void  S1493C7 ::v13(){vfunc_called(this, "_ZN7S1493C73v13Ev");}
void  S1493C7 ::v14(){vfunc_called(this, "_ZN7S1493C73v14Ev");}
void  S1493C7 ::v15(){vfunc_called(this, "_ZN7S1493C73v15Ev");}
void  S1493C7 ::v16(){vfunc_called(this, "_ZN7S1493C73v16Ev");}
S1493C7 ::~S1493C7(){ note_dtor("S1493C7", this);} // tgen
S1493C7 ::S1493C7(){ note_ctor("S1493C7", this);} // tgen

static void Test_S1493C7()
{
  extern Class_Descriptor cd_S1493C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,24)];
    init_test(&cd_S1493C7, buf);
    S1493C7 *dp, &lv = *(dp=new (buf) S1493C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,92), "sizeof(S1493C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1493C7)");
    check_field_offset(lv, s1493c7f0, ABISELECT(8,4), "S1493C7.s1493c7f0");
    check_field_offset(lv, s1493c7f1, ABISELECT(16,8), "S1493C7.s1493c7f1");
    test_class_info(&lv, &cd_S1493C7);
    dp->~S1493C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1493C7(Test_S1493C7, "S1493C7", ABISELECT(128,92));

#else // __cplusplus

extern void _ZN7S1493C7C1Ev();
extern void _ZN7S1493C7D1Ev();
Name_Map name_map_S1493C7[] = {
  NSPAIR(_ZN7S1493C7C1Ev),
  NSPAIR(_ZN7S1493C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1493C7[];
extern void _ZN7S1493C73v13Ev();
extern void _ZN7S1493C73v14Ev();
extern void _ZN7S1493C73v15Ev();
extern void _ZN7S1493C73v16Ev();
static  VTBL_ENTRY vtc_S1493C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1493C7[0]),
  (VTBL_ENTRY)&_ZN7S1493C73v13Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v14Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v15Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v16Ev,
};
extern VTBL_ENTRY _ZTI7S1493C7[];
extern  VTBL_ENTRY _ZTV7S1493C7[];
Class_Descriptor cd_S1493C7 = {  "S1493C7", // class name
  0,0,//no base classes
  &(vtc_S1493C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,92), // object size
  NSPAIRA(_ZTI7S1493C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1493C7),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  S1493C8  {
  ::S1493C4 s1493c8f0;
  virtual  ~S1493C8(); // _ZN7S1493C8D1Ev
  virtual void  v17(); // _ZN7S1493C83v17Ev
  virtual void  v18(); // _ZN7S1493C83v18Ev
  virtual void  v19(); // _ZN7S1493C83v19Ev
  virtual void  v20(); // _ZN7S1493C83v20Ev
  S1493C8(); // tgen
};
//SIG(-1 S1493C8) C1{ vd v1 v2 v3 v4 FC2{ vd v5}}


 S1493C8 ::~S1493C8(){ note_dtor("S1493C8", this);}
void  S1493C8 ::v17(){vfunc_called(this, "_ZN7S1493C83v17Ev");}
void  S1493C8 ::v18(){vfunc_called(this, "_ZN7S1493C83v18Ev");}
void  S1493C8 ::v19(){vfunc_called(this, "_ZN7S1493C83v19Ev");}
void  S1493C8 ::v20(){vfunc_called(this, "_ZN7S1493C83v20Ev");}
S1493C8 ::S1493C8(){ note_ctor("S1493C8", this);} // tgen

static void Test_S1493C8()
{
  extern Class_Descriptor cd_S1493C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1493C8, buf);
    S1493C8 *dp, &lv = *(dp=new (buf) S1493C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1493C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1493C8)");
    check_field_offset(lv, s1493c8f0, ABISELECT(8,4), "S1493C8.s1493c8f0");
    test_class_info(&lv, &cd_S1493C8);
    dp->~S1493C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1493C8(Test_S1493C8, "S1493C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1493C8C1Ev();
extern void _ZN7S1493C8D1Ev();
Name_Map name_map_S1493C8[] = {
  NSPAIR(_ZN7S1493C8C1Ev),
  NSPAIR(_ZN7S1493C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1493C8[];
extern void _ZN7S1493C8D1Ev();
extern void _ZN7S1493C8D0Ev();
extern void _ZN7S1493C83v17Ev();
extern void _ZN7S1493C83v18Ev();
extern void _ZN7S1493C83v19Ev();
extern void _ZN7S1493C83v20Ev();
static  VTBL_ENTRY vtc_S1493C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1493C8[0]),
  (VTBL_ENTRY)&_ZN7S1493C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1493C8D0Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v17Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v20Ev,
};
extern VTBL_ENTRY _ZTI7S1493C8[];
extern  VTBL_ENTRY _ZTV7S1493C8[];
Class_Descriptor cd_S1493C8 = {  "S1493C8", // class name
  0,0,//no base classes
  &(vtc_S1493C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1493C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1493C8),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1493C6  : virtual S1493C7 , S1493C8 , virtual S1493C4 {
  void *s1493c6f0;
  int s1493c6f1;
  __tsi64 s1493c6f2[3];
  virtual  ~S1493C6(); // _ZN7S1493C6D2Ev
  virtual void  v21(); // _ZN7S1493C63v21Ev
  virtual void  v22(); // _ZN7S1493C63v22Ev
  virtual void  v23(); // _ZN7S1493C63v23Ev
  virtual void  v24(); // _ZN7S1493C63v24Ev
  S1493C6(); // tgen
};
//SIG(-1 S1493C6) C1{ VBC2{ v5 v6 v7 v8 Fc FD[7]} BC3{ vd v9 v10 v11 v12 FC4{ vd v13}} VBC4 vd v1 v2 v3 v4 Fp Fi FL[3]}


 S1493C6 ::~S1493C6(){ note_dtor("S1493C6", this);}
void  S1493C6 ::v21(){vfunc_called(this, "_ZN7S1493C63v21Ev");}
void  S1493C6 ::v22(){vfunc_called(this, "_ZN7S1493C63v22Ev");}
void  S1493C6 ::v23(){vfunc_called(this, "_ZN7S1493C63v23Ev");}
void  S1493C6 ::v24(){vfunc_called(this, "_ZN7S1493C63v24Ev");}
S1493C6 ::S1493C6(){ note_ctor("S1493C6", this);} // tgen

static void Test_S1493C6()
{
  extern Class_Descriptor cd_S1493C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,35)];
    init_test(&cd_S1493C6, buf);
    S1493C6 *dp, &lv = *(dp=new (buf) S1493C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,136), "sizeof(S1493C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1493C6)");
    check_base_class_offset(lv, (S1493C7*), ABISELECT(64,40), "S1493C6");
    check_base_class_offset(lv, (S1493C8*), 0, "S1493C6");
    check_base_class_offset(lv, (S1493C4*), ABISELECT(192,132), "S1493C6");
    check_field_offset(lv, s1493c6f0, ABISELECT(16,8), "S1493C6.s1493c6f0");
    check_field_offset(lv, s1493c6f1, ABISELECT(24,12), "S1493C6.s1493c6f1");
    check_field_offset(lv, s1493c6f2, ABISELECT(32,16), "S1493C6.s1493c6f2");
    test_class_info(&lv, &cd_S1493C6);
    dp->~S1493C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1493C6(Test_S1493C6, "S1493C6", ABISELECT(208,136));

#else // __cplusplus

extern void _ZN7S1493C6C1Ev();
extern void _ZN7S1493C6D2Ev();
Name_Map name_map_S1493C6[] = {
  NSPAIR(_ZN7S1493C6C1Ev),
  NSPAIR(_ZN7S1493C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1493C7;
extern VTBL_ENTRY _ZTI7S1493C7[];
extern  VTBL_ENTRY _ZTV7S1493C7[];
extern Class_Descriptor cd_S1493C8;
extern VTBL_ENTRY _ZTI7S1493C8[];
extern  VTBL_ENTRY _ZTV7S1493C8[];
extern Class_Descriptor cd_S1493C4;
extern VTBL_ENTRY _ZTI7S1493C4[];
extern  VTBL_ENTRY _ZTV7S1493C4[];
static Base_Class bases_S1493C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1493C7,    ABISELECT(64,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1493C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1493C4,    ABISELECT(192,132), //bcp->offset
    24, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1493C6[];
extern void _ZN7S1493C6D1Ev();
extern void _ZN7S1493C6D0Ev();
extern void _ZN7S1493C83v17Ev();
extern void _ZN7S1493C83v18Ev();
extern void _ZN7S1493C83v19Ev();
extern void _ZN7S1493C83v20Ev();
extern void _ZN7S1493C63v21Ev();
extern void _ZN7S1493C63v22Ev();
extern void _ZN7S1493C63v23Ev();
extern void _ZN7S1493C63v24Ev();
extern void _ZN7S1493C73v13Ev();
extern void _ZN7S1493C73v14Ev();
extern void _ZN7S1493C73v15Ev();
extern void _ZN7S1493C73v16Ev();
extern void ABISELECT(_ZTv0_n24_N7S1493C6D1Ev,_ZTv0_n12_N7S1493C6D1Ev)();
extern void ABISELECT(_ZThn192_N7S1493C6D1Ev,_ZThn132_N7S1493C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1493C6D0Ev,_ZTv0_n12_N7S1493C6D0Ev)();
extern void ABISELECT(_ZThn192_N7S1493C6D0Ev,_ZThn132_N7S1493C6D0Ev)() __attribute__((weak));
extern void _ZN7S1493C42v5Ev();
static  VTBL_ENTRY vtc_S1493C6[] = {
  ABISELECT(192,132),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S1493C6[0]),
  (VTBL_ENTRY)&_ZN7S1493C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1493C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v17Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v21Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v22Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v23Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v24Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S1493C6[0]),
  (VTBL_ENTRY)&_ZN7S1493C73v13Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v14Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v15Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v16Ev,
  0,
  ABISELECT(-192,-132),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI7S1493C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1493C6D1Ev,_ZTv0_n12_N7S1493C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1493C6D0Ev,_ZTv0_n12_N7S1493C6D0Ev),
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
};
extern VTBL_ENTRY _ZTV7S1493C6[];
static  VTT_ENTRY vtt_S1493C6[] = {
  {&(_ZTV7S1493C6[4]),  4,31},
  {&(_ZTV7S1493C6[20]),  20,31},
  {&(_ZTV7S1493C6[28]),  28,31},
};
extern VTBL_ENTRY _ZTI7S1493C6[];
extern  VTBL_ENTRY _ZTV7S1493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1493C6[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1493C6D0Ev,_ZTv0_n12_N7S1493C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S1493C6D0Ev,_ZThn132_N7S1493C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1493C6D1Ev,_ZTv0_n12_N7S1493C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S1493C6D1Ev,_ZThn132_N7S1493C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1493C6 = {  "S1493C6", // class name
  bases_S1493C6, 3,
  &(vtc_S1493C6[0]), // expected_vtbl_contents
  &(vtt_S1493C6[0]), // expected_vtt_contents
  ABISELECT(208,136), // object size
  NSPAIRA(_ZTI7S1493C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1493C6),31, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1493C6),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1493C9  {
  virtual  ~S1493C9(); // _ZN7S1493C9D1Ev
  virtual void  v25(); // _ZN7S1493C93v25Ev
  S1493C9(); // tgen
};
//SIG(-1 S1493C9) C1{ vd v1}


 S1493C9 ::~S1493C9(){ note_dtor("S1493C9", this);}
void  S1493C9 ::v25(){vfunc_called(this, "_ZN7S1493C93v25Ev");}
S1493C9 ::S1493C9(){ note_ctor("S1493C9", this);} // tgen

static void Test_S1493C9()
{
  extern Class_Descriptor cd_S1493C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1493C9, buf);
    S1493C9 *dp, &lv = *(dp=new (buf) S1493C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1493C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1493C9)");
    test_class_info(&lv, &cd_S1493C9);
    dp->~S1493C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1493C9(Test_S1493C9, "S1493C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1493C9C1Ev();
extern void _ZN7S1493C9D1Ev();
Name_Map name_map_S1493C9[] = {
  NSPAIR(_ZN7S1493C9C1Ev),
  NSPAIR(_ZN7S1493C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1493C9[];
extern void _ZN7S1493C9D1Ev();
extern void _ZN7S1493C9D0Ev();
extern void _ZN7S1493C93v25Ev();
static  VTBL_ENTRY vtc_S1493C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1493C9[0]),
  (VTBL_ENTRY)&_ZN7S1493C9D1Ev,
  (VTBL_ENTRY)&_ZN7S1493C9D0Ev,
  (VTBL_ENTRY)&_ZN7S1493C93v25Ev,
};
extern VTBL_ENTRY _ZTI7S1493C9[];
extern  VTBL_ENTRY _ZTV7S1493C9[];
Class_Descriptor cd_S1493C9 = {  "S1493C9", // class name
  0,0,//no base classes
  &(vtc_S1493C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1493C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1493C9),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  S1493C2  : S1493C3 , virtual S1493C5 , S1493C6 , S1493C9 {
  virtual void  v26(); // _ZN7S1493C23v26Ev
  ~S1493C2(); // tgen
  S1493C2(); // tgen
};
//SIG(-1 S1493C2) C1{ BC2{ BC3{ vd v2} vd v3 v4 FC3} VBC4{ v5 v6 v7 v8 v9 Fp[4]} BC5{ VBC6{ v10 v11 v12 v13 Fc FD[7]} BC7{ vd v14 v15 v16 v17 FC3} VBC3 vd v18 v19 v20 v21 Fp Fi FL[3]} BC8{ vd v22} v1}


void  S1493C2 ::v26(){vfunc_called(this, "_ZN7S1493C23v26Ev");}
S1493C2 ::~S1493C2(){ note_dtor("S1493C2", this);} // tgen
S1493C2 ::S1493C2(){ note_ctor("S1493C2", this);} // tgen

static void Test_S1493C2()
{
  extern Class_Descriptor cd_S1493C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,43)];
    init_test(&cd_S1493C2, buf);
    S1493C2 *dp, &lv = *(dp=new (buf) S1493C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,168), "sizeof(S1493C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1493C2)");
    check_base_class_offset(lv, (S1493C4*)(S1493C3*), 0, "S1493C2");
    check_base_class_offset(lv, (S1493C3*), 0, "S1493C2");
    check_base_class_offset(lv, (S1493C5*), ABISELECT(80,52), "S1493C2");
    check_base_class_offset(lv, (S1493C7*)(S1493C6*), ABISELECT(128,72), "S1493C2");
    check_base_class_offset(lv, (S1493C8*)(S1493C6*), ABISELECT(16,8), "S1493C2");
    check_base_class_offset(lv, (S1493C4*)(S1493C6*), ABISELECT(256,164), "S1493C2");
    check_base_class_offset(lv, (S1493C6*), ABISELECT(16,8), "S1493C2");
    check_base_class_offset(lv, (S1493C9*), ABISELECT(72,48), "S1493C2");
    test_class_info(&lv, &cd_S1493C2);
    dp->~S1493C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1493C2(Test_S1493C2, "S1493C2", ABISELECT(272,168));

#else // __cplusplus

extern void _ZN7S1493C2C1Ev();
extern void _ZN7S1493C2D1Ev();
Name_Map name_map_S1493C2[] = {
  NSPAIR(_ZN7S1493C2C1Ev),
  NSPAIR(_ZN7S1493C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1493C4;
extern VTBL_ENTRY _ZTI7S1493C4[];
extern  VTBL_ENTRY _ZTV7S1493C4[];
extern Class_Descriptor cd_S1493C3;
extern VTBL_ENTRY _ZTI7S1493C3[];
extern  VTBL_ENTRY _ZTV7S1493C3[];
extern Class_Descriptor cd_S1493C5;
extern VTBL_ENTRY _ZTI7S1493C5[];
extern  VTBL_ENTRY _ZTV7S1493C5[];
extern Class_Descriptor cd_S1493C7;
extern VTBL_ENTRY _ZTI7S1493C7[];
extern  VTBL_ENTRY _ZTV7S1493C7[];
extern Class_Descriptor cd_S1493C8;
extern VTBL_ENTRY _ZTI7S1493C8[];
extern  VTBL_ENTRY _ZTV7S1493C8[];
extern Class_Descriptor cd_S1493C4;
extern VTBL_ENTRY _ZTI7S1493C4[];
extern  VTBL_ENTRY _ZTV7S1493C4[];
extern Class_Descriptor cd_S1493C6;
extern VTBL_ENTRY _ZTI7S1493C6[];
extern  VTBL_ENTRY _ZTV7S1493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1493C6[];
extern Class_Descriptor cd_S1493C9;
extern VTBL_ENTRY _ZTI7S1493C9[];
extern  VTBL_ENTRY _ZTV7S1493C9[];
static Base_Class bases_S1493C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1493C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1493C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1493C5,    ABISELECT(80,52), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1493C7,    ABISELECT(128,72), //bcp->offset
    42, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1493C8,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1493C4,    ABISELECT(256,164), //bcp->offset
    52, //bcp->virtual_function_table_offset
    4, //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
    6, //immediately_derived
  0, 1},
  {&cd_S1493C6,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1493C9,    ABISELECT(72,48), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1493C2[];
extern void _ZN7S1493C2D1Ev();
extern void _ZN7S1493C2D0Ev();
extern void _ZN7S1493C42v5Ev();
extern void _ZN7S1493C32v6Ev();
extern void _ZN7S1493C32v7Ev();
extern void _ZN7S1493C23v26Ev();
extern void ABISELECT(_ZThn16_N7S1493C2D1Ev,_ZThn8_N7S1493C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S1493C2D0Ev,_ZThn8_N7S1493C2D0Ev)();
extern void _ZN7S1493C83v17Ev();
extern void _ZN7S1493C83v18Ev();
extern void _ZN7S1493C83v19Ev();
extern void _ZN7S1493C83v20Ev();
extern void _ZN7S1493C63v21Ev();
extern void _ZN7S1493C63v22Ev();
extern void _ZN7S1493C63v23Ev();
extern void _ZN7S1493C63v24Ev();
extern void ABISELECT(_ZThn72_N7S1493C2D1Ev,_ZThn48_N7S1493C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S1493C2D0Ev,_ZThn48_N7S1493C2D0Ev)();
extern void _ZN7S1493C93v25Ev();
extern void _ZN7S1493C52v8Ev();
extern void _ZN7S1493C52v9Ev();
extern void _ZN7S1493C53v10Ev();
extern void _ZN7S1493C53v11Ev();
extern void _ZN7S1493C53v12Ev();
extern void _ZN7S1493C73v13Ev();
extern void _ZN7S1493C73v14Ev();
extern void _ZN7S1493C73v15Ev();
extern void _ZN7S1493C73v16Ev();
extern void ABISELECT(_ZTv0_n24_N7S1493C2D1Ev,_ZTv0_n12_N7S1493C2D1Ev)();
extern void ABISELECT(_ZThn256_N7S1493C2D1Ev,_ZThn164_N7S1493C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1493C2D0Ev,_ZTv0_n12_N7S1493C2D0Ev)();
extern void ABISELECT(_ZThn256_N7S1493C2D0Ev,_ZThn164_N7S1493C2D0Ev)() __attribute__((weak));
extern void _ZN7S1493C42v5Ev();
static  VTBL_ENTRY vtc_S1493C2[] = {
  ABISELECT(256,164),
  ABISELECT(128,72),
  ABISELECT(80,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S1493C2[0]),
  (VTBL_ENTRY)&_ZN7S1493C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1493C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1493C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1493C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1493C23v26Ev,
  ABISELECT(240,156),
  ABISELECT(112,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1493C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1493C2D1Ev,_ZThn8_N7S1493C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1493C2D0Ev,_ZThn8_N7S1493C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1493C83v17Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v21Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v22Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v23Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v24Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S1493C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S1493C2D1Ev,_ZThn48_N7S1493C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S1493C2D0Ev,_ZThn48_N7S1493C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1493C93v25Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S1493C2[0]),
  (VTBL_ENTRY)&_ZN7S1493C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1493C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1493C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1493C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1493C53v12Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI7S1493C2[0]),
  (VTBL_ENTRY)&_ZN7S1493C73v13Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v14Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v15Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v16Ev,
  0,
  ABISELECT(-256,-164),
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI7S1493C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1493C2D1Ev,_ZTv0_n12_N7S1493C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1493C2D0Ev,_ZTv0_n12_N7S1493C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
};
extern VTBL_ENTRY _ZTV7S1493C2[];
extern void _ZN7S1493C6D1Ev();
extern void _ZN7S1493C6D0Ev();
extern void _ZN7S1493C83v17Ev();
extern void _ZN7S1493C83v18Ev();
extern void _ZN7S1493C83v19Ev();
extern void _ZN7S1493C83v20Ev();
extern void _ZN7S1493C63v21Ev();
extern void _ZN7S1493C63v22Ev();
extern void _ZN7S1493C63v23Ev();
extern void _ZN7S1493C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S1493C6__7S1493C2[] = {
  ABISELECT(240,156),
  ABISELECT(112,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S1493C6[0]),
  (VTBL_ENTRY)&_ZN7S1493C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1493C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v17Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v21Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v22Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v23Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v24Ev,
};
extern void _ZN7S1493C73v13Ev();
extern void _ZN7S1493C73v14Ev();
extern void _ZN7S1493C73v15Ev();
extern void _ZN7S1493C73v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1493C7__7S1493C6__7S1493C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S1493C6[0]),
  (VTBL_ENTRY)&_ZN7S1493C73v13Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v14Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v15Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1493C6D1Ev,_ZTv0_n12_N7S1493C6D1Ev)();
extern void ABISELECT(_ZThn240_N7S1493C6D1Ev,_ZThn156_N7S1493C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1493C6D0Ev,_ZTv0_n12_N7S1493C6D0Ev)();
extern void ABISELECT(_ZThn240_N7S1493C6D0Ev,_ZThn156_N7S1493C6D0Ev)() __attribute__((weak));
extern void _ZN7S1493C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S1493C4__7S1493C6__7S1493C2[] = {
  0,
  ABISELECT(-240,-156),
  ABISELECT(-240,-156),
  (VTBL_ENTRY)&(_ZTI7S1493C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1493C6D1Ev,_ZTv0_n12_N7S1493C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1493C6D0Ev,_ZTv0_n12_N7S1493C6D0Ev),
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
};
static  VTT_ENTRY vtt_S1493C2[] = {
  {&(_ZTV7S1493C2[5]),  5,59},
  {&(_tg__ZTV7S1493C6__7S1493C2[4]),  4,14},
  {&(_tg__ZTV7S1493C7__7S1493C6__7S1493C2[6]),  6,10},
  {&(_tg__ZTV7S1493C4__7S1493C6__7S1493C2[4]),  4,7},
  {&(_ZTV7S1493C2[37]),  37,59},
  {&(_ZTV7S1493C2[15]),  15,59},
  {&(_ZTV7S1493C2[48]),  48,59},
  {&(_ZTV7S1493C2[56]),  56,59},
};
extern VTBL_ENTRY _ZTI7S1493C2[];
extern  VTBL_ENTRY _ZTV7S1493C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1493C2[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1493C6D0Ev,_ZTv0_n12_N7S1493C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S1493C6D0Ev,_ZThn156_N7S1493C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1493C6D1Ev,_ZTv0_n12_N7S1493C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S1493C6D1Ev,_ZThn156_N7S1493C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1493C2D0Ev,_ZTv0_n12_N7S1493C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S1493C2D0Ev,_ZThn164_N7S1493C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1493C2D1Ev,_ZTv0_n12_N7S1493C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S1493C2D1Ev,_ZThn164_N7S1493C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1493C2 = {  "S1493C2", // class name
  bases_S1493C2, 8,
  &(vtc_S1493C2[0]), // expected_vtbl_contents
  &(vtt_S1493C2[0]), // expected_vtt_contents
  ABISELECT(272,168), // object size
  NSPAIRA(_ZTI7S1493C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S1493C2),59, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1493C2),8, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1493C10  : S1493C4 {
  void *s1493c10f0;
  __tsi64 s1493c10f1:7;
  virtual  ~S1493C10(); // _ZN8S1493C10D1Ev
  virtual void  v27(); // _ZN8S1493C103v27Ev
  virtual void  v28(); // _ZN8S1493C103v28Ev
  virtual void  v29(); // _ZN8S1493C103v29Ev
  virtual void  v30(); // _ZN8S1493C103v30Ev
  virtual void  v31(); // _ZN8S1493C103v31Ev
  S1493C10(); // tgen
};
//SIG(-1 S1493C10) C1{ BC2{ vd v6} vd v1 v2 v3 v4 v5 Fp FL:7}


 S1493C10 ::~S1493C10(){ note_dtor("S1493C10", this);}
void  S1493C10 ::v27(){vfunc_called(this, "_ZN8S1493C103v27Ev");}
void  S1493C10 ::v28(){vfunc_called(this, "_ZN8S1493C103v28Ev");}
void  S1493C10 ::v29(){vfunc_called(this, "_ZN8S1493C103v29Ev");}
void  S1493C10 ::v30(){vfunc_called(this, "_ZN8S1493C103v30Ev");}
void  S1493C10 ::v31(){vfunc_called(this, "_ZN8S1493C103v31Ev");}
S1493C10 ::S1493C10(){ note_ctor("S1493C10", this);} // tgen

static void Test_S1493C10()
{
  extern Class_Descriptor cd_S1493C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S1493C10, buf);
    S1493C10 *dp, &lv = *(dp=new (buf) S1493C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1493C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1493C10)");
    check_base_class_offset(lv, (S1493C4*), 0, "S1493C10");
    check_field_offset(lv, s1493c10f0, ABISELECT(8,4), "S1493C10.s1493c10f0");
    set_bf_and_test(lv, s1493c10f1, ABISELECT(16,8), 0, 7, 1, "S1493C10");
    set_bf_and_test(lv, s1493c10f1, ABISELECT(16,8), 0, 7, hide_sll(1LL<<6), "S1493C10");
    test_class_info(&lv, &cd_S1493C10);
    dp->~S1493C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1493C10(Test_S1493C10, "S1493C10", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S1493C10C1Ev();
extern void _ZN8S1493C10D1Ev();
Name_Map name_map_S1493C10[] = {
  NSPAIR(_ZN8S1493C10C1Ev),
  NSPAIR(_ZN8S1493C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1493C4;
extern VTBL_ENTRY _ZTI7S1493C4[];
extern  VTBL_ENTRY _ZTV7S1493C4[];
static Base_Class bases_S1493C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1493C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S1493C10[];
extern void _ZN8S1493C10D1Ev();
extern void _ZN8S1493C10D0Ev();
extern void _ZN7S1493C42v5Ev();
extern void _ZN8S1493C103v27Ev();
extern void _ZN8S1493C103v28Ev();
extern void _ZN8S1493C103v29Ev();
extern void _ZN8S1493C103v30Ev();
extern void _ZN8S1493C103v31Ev();
static  VTBL_ENTRY vtc_S1493C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1493C10[0]),
  (VTBL_ENTRY)&_ZN8S1493C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1493C10D0Ev,
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v31Ev,
};
extern VTBL_ENTRY _ZTI8S1493C10[];
extern  VTBL_ENTRY _ZTV8S1493C10[];
Class_Descriptor cd_S1493C10 = {  "S1493C10", // class name
  bases_S1493C10, 1,
  &(vtc_S1493C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S1493C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S1493C10),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1493C11  : virtual S1493C10 , S1493C4 {
  ::S1493C4 s1493c11f0;
  int s1493c11f1;
  ::S1493C4 s1493c11f2[9];
  virtual  ~S1493C11(); // _ZN8S1493C11D2Ev
  virtual void  v32(); // _ZN8S1493C113v32Ev
  virtual void  v33(); // _ZN8S1493C113v33Ev
  virtual void  v34(); // _ZN8S1493C113v34Ev
  virtual void  v35(); // _ZN8S1493C113v35Ev
  S1493C11(); // tgen
};
//SIG(-1 S1493C11) C1{ VBC2{ BC3{ vd v5} vd v6 v7 v8 v9 v10 Fp FL:7} BC3 vd v1 v2 v3 v4 FC3 Fi FC3[9]}


 S1493C11 ::~S1493C11(){ note_dtor("S1493C11", this);}
void  S1493C11 ::v32(){vfunc_called(this, "_ZN8S1493C113v32Ev");}
void  S1493C11 ::v33(){vfunc_called(this, "_ZN8S1493C113v33Ev");}
void  S1493C11 ::v34(){vfunc_called(this, "_ZN8S1493C113v34Ev");}
void  S1493C11 ::v35(){vfunc_called(this, "_ZN8S1493C113v35Ev");}
S1493C11 ::S1493C11(){ note_ctor("S1493C11", this);} // tgen

static void Test_S1493C11()
{
  extern Class_Descriptor cd_S1493C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,16)];
    init_test(&cd_S1493C11, buf);
    S1493C11 *dp, &lv = *(dp=new (buf) S1493C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S1493C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1493C11)");
    check_base_class_offset(lv, (S1493C4*)(S1493C10*), ABISELECT(96,48), "S1493C11");
    check_base_class_offset(lv, (S1493C10*), ABISELECT(96,48), "S1493C11");
    /*is_ambiguous_... S1493C11::S1493C4 */ AMB_check_base_class_offset(lv, (S1493C4*), 0, "S1493C11");
    check_field_offset(lv, s1493c11f0, ABISELECT(8,4), "S1493C11.s1493c11f0");
    check_field_offset(lv, s1493c11f1, ABISELECT(16,8), "S1493C11.s1493c11f1");
    check_field_offset(lv, s1493c11f2, ABISELECT(24,12), "S1493C11.s1493c11f2");
    test_class_info(&lv, &cd_S1493C11);
    dp->~S1493C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1493C11(Test_S1493C11, "S1493C11", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN8S1493C11C1Ev();
extern void _ZN8S1493C11D2Ev();
Name_Map name_map_S1493C11[] = {
  NSPAIR(_ZN8S1493C11C1Ev),
  NSPAIR(_ZN8S1493C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1493C4;
extern VTBL_ENTRY _ZTI7S1493C4[];
extern  VTBL_ENTRY _ZTV7S1493C4[];
extern Class_Descriptor cd_S1493C10;
extern VTBL_ENTRY _ZTI8S1493C10[];
extern  VTBL_ENTRY _ZTV8S1493C10[];
extern Class_Descriptor cd_S1493C4;
extern VTBL_ENTRY _ZTI7S1493C4[];
extern  VTBL_ENTRY _ZTV7S1493C4[];
static Base_Class bases_S1493C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1493C4,    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
    1, //immediately_derived
  0, 0},
  {&cd_S1493C10,    ABISELECT(96,48), //bcp->offset
    10, //bcp->virtual_function_table_offset
    9, //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_S1493C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S1493C11[];
extern void _ZN8S1493C11D1Ev();
extern void _ZN8S1493C11D0Ev();
extern void _ZN7S1493C42v5Ev();
extern void _ZN8S1493C113v32Ev();
extern void _ZN8S1493C113v33Ev();
extern void _ZN8S1493C113v34Ev();
extern void _ZN8S1493C113v35Ev();
extern void ABISELECT(_ZTv0_n24_N8S1493C11D1Ev,_ZTv0_n12_N8S1493C11D1Ev)();
extern void ABISELECT(_ZThn96_N8S1493C11D1Ev,_ZThn48_N8S1493C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1493C11D0Ev,_ZTv0_n12_N8S1493C11D0Ev)();
extern void ABISELECT(_ZThn96_N8S1493C11D0Ev,_ZThn48_N8S1493C11D0Ev)() __attribute__((weak));
extern void _ZN7S1493C42v5Ev();
extern void _ZN8S1493C103v27Ev();
extern void _ZN8S1493C103v28Ev();
extern void _ZN8S1493C103v29Ev();
extern void _ZN8S1493C103v30Ev();
extern void _ZN8S1493C103v31Ev();
static  VTBL_ENTRY vtc_S1493C11[] = {
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S1493C11[0]),
  (VTBL_ENTRY)&_ZN8S1493C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1493C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
  (VTBL_ENTRY)&_ZN8S1493C113v32Ev,
  (VTBL_ENTRY)&_ZN8S1493C113v33Ev,
  (VTBL_ENTRY)&_ZN8S1493C113v34Ev,
  (VTBL_ENTRY)&_ZN8S1493C113v35Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S1493C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1493C11D1Ev,_ZTv0_n12_N8S1493C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1493C11D0Ev,_ZTv0_n12_N8S1493C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v31Ev,
};
extern VTBL_ENTRY _ZTV8S1493C11[];
static  VTT_ENTRY vtt_S1493C11[] = {
  {&(_ZTV8S1493C11[3]),  3,27},
  {&(_ZTV8S1493C11[19]),  19,27},
};
extern VTBL_ENTRY _ZTI8S1493C11[];
extern  VTBL_ENTRY _ZTV8S1493C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1493C11[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1493C11D0Ev,_ZTv0_n12_N8S1493C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S1493C11D0Ev,_ZThn48_N8S1493C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1493C11D1Ev,_ZTv0_n12_N8S1493C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S1493C11D1Ev,_ZThn48_N8S1493C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1493C11 = {  "S1493C11", // class name
  bases_S1493C11, 3,
  &(vtc_S1493C11[0]), // expected_vtbl_contents
  &(vtt_S1493C11[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI8S1493C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S1493C11),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1493C11),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1493C1  : S1493C2 , virtual S1493C3 , virtual S1493C10 , S1493C11 , S1493C8 {
  ::S19062C11 s1493c1f0;
  virtual  ~S1493C1(); // _ZN7S1493C1D2Ev
  virtual void  v1(); // _ZN7S1493C12v1Ev
  virtual void  v2(); // _ZN7S1493C12v2Ev
  virtual void  v3(); // _ZN7S1493C12v3Ev
  virtual void  v4(); // _ZN7S1493C12v4Ev
  S1493C1(); // tgen
};
//SIG(1 S1493C1) C1{ BC2{ BC3{ BC4{ vd v5} vd v6 v7 FC4} VBC5{ v8 v9 v10 v11 v12 Fp[4]} BC6{ VBC7{ v13 v14 v15 v16 Fc FD[7]} BC8{ vd v17 v18 v19 v20 FC4} VBC4 vd v21 v22 v23 v24 Fp Fi FL[3]} BC9{ vd v25} v26} VBC3 VBC10{ BC4 vd v27 v28 v29 v30 v31 Fp FL:7} BC11{ VBC10 BC4 vd v32 v33 v34 v35 FC4 Fi FC4[9]} BC8 vd v1 v2 v3 v4 FC12{ v36 v37 v38 FL[2]}}


 S1493C1 ::~S1493C1(){ note_dtor("S1493C1", this);}
void  S1493C1 ::v1(){vfunc_called(this, "_ZN7S1493C12v1Ev");}
void  S1493C1 ::v2(){vfunc_called(this, "_ZN7S1493C12v2Ev");}
void  S1493C1 ::v3(){vfunc_called(this, "_ZN7S1493C12v3Ev");}
void  S1493C1 ::v4(){vfunc_called(this, "_ZN7S1493C12v4Ev");}
S1493C1 ::S1493C1(){ note_ctor("S1493C1", this);} // tgen

static void Test_S1493C1()
{
  extern Class_Descriptor cd_S1493C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,67)];
    init_test(&cd_S1493C1, buf);
    S1493C1 *dp, &lv = *(dp=new (buf) S1493C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,264), "sizeof(S1493C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1493C1)");
    check_base_class_offset(lv, (S1493C4*)(S1493C3*)(S1493C2*), 0, "S1493C1");
    check_base_class_offset(lv, (S1493C3*)(S1493C2*), 0, "S1493C1");
    check_base_class_offset(lv, (S1493C5*)(S1493C2*), ABISELECT(216,128), "S1493C1");
    check_base_class_offset(lv, (S1493C7*)(S1493C6*)(S1493C2*), ABISELECT(256,148), "S1493C1");
    check_base_class_offset(lv, (S1493C8*)(S1493C6*)(S1493C2*), ABISELECT(16,8), "S1493C1");
    check_base_class_offset(lv, (S1493C4*)(S1493C6*)(S1493C2*), ABISELECT(384,240), "S1493C1");
    check_base_class_offset(lv, (S1493C6*)(S1493C2*), ABISELECT(16,8), "S1493C1");
    check_base_class_offset(lv, (S1493C9*)(S1493C2*), ABISELECT(72,48), "S1493C1");
    check_base_class_offset(lv, (S1493C2*), 0, "S1493C1");
    /*is_ambiguous_... S1493C1::S1493C3 */ AMB_check_base_class_offset(lv, (S1493C4*)(S1493C3*), ABISELECT(392,244), "S1493C1");
    /*is_ambiguous_... S1493C1::S1493C3 */ AMB_check_base_class_offset(lv, (S1493C3*), ABISELECT(392,244), "S1493C1");
    check_base_class_offset(lv, (S1493C4*)(S1493C10*), ABISELECT(408,252), "S1493C1");
    check_base_class_offset(lv, (S1493C10*), ABISELECT(408,252), "S1493C1");
    check_base_class_offset(lv, (S1493C10*)(S1493C11*), ABISELECT(408,252), "S1493C1");
    /*is_ambiguous_... S1493C11::S1493C4 */ AMB_check_base_class_offset(lv, (S1493C4*)(S1493C11*), ABISELECT(80,52), "S1493C1");
    check_base_class_offset(lv, (S1493C11*), ABISELECT(80,52), "S1493C1");
    /*is_ambiguous_... S1493C1::S1493C8 */ AMB_check_base_class_offset(lv, (S1493C8*), ABISELECT(176,100), "S1493C1");
    check_field_offset(lv, s1493c1f0, ABISELECT(192,108), "S1493C1.s1493c1f0");
    test_class_info(&lv, &cd_S1493C1);
    dp->~S1493C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1493C1(Test_S1493C1, "S1493C1", ABISELECT(432,264));

#else // __cplusplus

extern void _ZN7S1493C1C1Ev();
extern void _ZN7S1493C1D2Ev();
Name_Map name_map_S1493C1[] = {
  NSPAIR(_ZN7S1493C1C1Ev),
  NSPAIR(_ZN7S1493C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1493C4;
extern VTBL_ENTRY _ZTI7S1493C4[];
extern  VTBL_ENTRY _ZTV7S1493C4[];
extern Class_Descriptor cd_S1493C3;
extern VTBL_ENTRY _ZTI7S1493C3[];
extern  VTBL_ENTRY _ZTV7S1493C3[];
extern Class_Descriptor cd_S1493C5;
extern VTBL_ENTRY _ZTI7S1493C5[];
extern  VTBL_ENTRY _ZTV7S1493C5[];
extern Class_Descriptor cd_S1493C7;
extern VTBL_ENTRY _ZTI7S1493C7[];
extern  VTBL_ENTRY _ZTV7S1493C7[];
extern Class_Descriptor cd_S1493C8;
extern VTBL_ENTRY _ZTI7S1493C8[];
extern  VTBL_ENTRY _ZTV7S1493C8[];
extern Class_Descriptor cd_S1493C4;
extern VTBL_ENTRY _ZTI7S1493C4[];
extern  VTBL_ENTRY _ZTV7S1493C4[];
extern Class_Descriptor cd_S1493C6;
extern VTBL_ENTRY _ZTI7S1493C6[];
extern  VTBL_ENTRY _ZTV7S1493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1493C6[];
extern Class_Descriptor cd_S1493C9;
extern VTBL_ENTRY _ZTI7S1493C9[];
extern  VTBL_ENTRY _ZTV7S1493C9[];
extern Class_Descriptor cd_S1493C2;
extern VTBL_ENTRY _ZTI7S1493C2[];
extern  VTBL_ENTRY _ZTV7S1493C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1493C2[];
extern Class_Descriptor cd_S1493C4;
extern VTBL_ENTRY _ZTI7S1493C4[];
extern  VTBL_ENTRY _ZTV7S1493C4[];
extern Class_Descriptor cd_S1493C3;
extern VTBL_ENTRY _ZTI7S1493C3[];
extern  VTBL_ENTRY _ZTV7S1493C3[];
extern Class_Descriptor cd_S1493C4;
extern VTBL_ENTRY _ZTI7S1493C4[];
extern  VTBL_ENTRY _ZTV7S1493C4[];
extern Class_Descriptor cd_S1493C10;
extern VTBL_ENTRY _ZTI8S1493C10[];
extern  VTBL_ENTRY _ZTV8S1493C10[];
extern Class_Descriptor cd_S1493C4;
extern VTBL_ENTRY _ZTI7S1493C4[];
extern  VTBL_ENTRY _ZTV7S1493C4[];
extern Class_Descriptor cd_S1493C11;
extern VTBL_ENTRY _ZTI8S1493C11[];
extern  VTBL_ENTRY _ZTV8S1493C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1493C11[];
extern Class_Descriptor cd_S1493C8;
extern VTBL_ENTRY _ZTI7S1493C8[];
extern  VTBL_ENTRY _ZTV7S1493C8[];
static Base_Class bases_S1493C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1493C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    1, //immediately_derived
  0, 0},
  {&cd_S1493C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S1493C5,    ABISELECT(216,128), //bcp->offset
    54, //bcp->virtual_function_table_offset
    7, //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
    8, //immediately_derived
  0, 1},
  {&cd_S1493C7,    ABISELECT(256,148), //bcp->offset
    66, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1493C8,    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
    6, //immediately_derived
  0, 0},
  {&cd_S1493C4,    ABISELECT(384,240), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1493C6,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1493C9,    ABISELECT(72,48), //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
    12, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1493C2,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1493C4,    ABISELECT(392,244), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S1493C3,    ABISELECT(392,244), //bcp->offset
    83, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1493C4,    ABISELECT(408,252), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S1493C10,    ABISELECT(408,252), //bcp->offset
    94, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1493C4,    ABISELECT(80,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
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1493C11,    ABISELECT(80,52), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1493C8,    ABISELECT(176,100), //bcp->offset
    46, //bcp->virtual_function_table_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},
  {0}};
extern VTBL_ENTRY _ZTI7S1493C1[];
extern void _ZN7S1493C1D1Ev();
extern void _ZN7S1493C1D0Ev();
extern void _ZN7S1493C42v5Ev();
extern void _ZN7S1493C32v6Ev();
extern void _ZN7S1493C32v7Ev();
extern void _ZN7S1493C23v26Ev();
extern void _ZN7S1493C12v1Ev();
extern void _ZN7S1493C12v2Ev();
extern void _ZN7S1493C12v3Ev();
extern void _ZN7S1493C12v4Ev();
extern void ABISELECT(_ZThn16_N7S1493C1D1Ev,_ZThn8_N7S1493C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S1493C1D0Ev,_ZThn8_N7S1493C1D0Ev)();
extern void _ZN7S1493C83v17Ev();
extern void _ZN7S1493C83v18Ev();
extern void _ZN7S1493C83v19Ev();
extern void _ZN7S1493C83v20Ev();
extern void _ZN7S1493C63v21Ev();
extern void _ZN7S1493C63v22Ev();
extern void _ZN7S1493C63v23Ev();
extern void _ZN7S1493C63v24Ev();
extern void ABISELECT(_ZThn72_N7S1493C1D1Ev,_ZThn48_N7S1493C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S1493C1D0Ev,_ZThn48_N7S1493C1D0Ev)();
extern void _ZN7S1493C93v25Ev();
extern void ABISELECT(_ZThn80_N7S1493C1D1Ev,_ZThn52_N7S1493C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S1493C1D0Ev,_ZThn52_N7S1493C1D0Ev)();
extern void _ZN7S1493C42v5Ev();
extern void _ZN8S1493C113v32Ev();
extern void _ZN8S1493C113v33Ev();
extern void _ZN8S1493C113v34Ev();
extern void _ZN8S1493C113v35Ev();
extern void ABISELECT(_ZThn176_N7S1493C1D1Ev,_ZThn100_N7S1493C1D1Ev)();
extern void ABISELECT(_ZThn176_N7S1493C1D0Ev,_ZThn100_N7S1493C1D0Ev)();
extern void _ZN7S1493C83v17Ev();
extern void _ZN7S1493C83v18Ev();
extern void _ZN7S1493C83v19Ev();
extern void _ZN7S1493C83v20Ev();
extern void _ZN7S1493C52v8Ev();
extern void _ZN7S1493C52v9Ev();
extern void _ZN7S1493C53v10Ev();
extern void _ZN7S1493C53v11Ev();
extern void _ZN7S1493C53v12Ev();
extern void _ZN7S1493C73v13Ev();
extern void _ZN7S1493C73v14Ev();
extern void _ZN7S1493C73v15Ev();
extern void _ZN7S1493C73v16Ev();
extern void ABISELECT(_ZTv0_n24_N7S1493C1D1Ev,_ZTv0_n12_N7S1493C1D1Ev)();
extern void ABISELECT(_ZThn384_N7S1493C1D1Ev,_ZThn240_N7S1493C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1493C1D0Ev,_ZTv0_n12_N7S1493C1D0Ev)();
extern void ABISELECT(_ZThn384_N7S1493C1D0Ev,_ZThn240_N7S1493C1D0Ev)() __attribute__((weak));
extern void _ZN7S1493C42v5Ev();
extern void ABISELECT(_ZTv0_n24_N7S1493C1D1Ev,_ZTv0_n12_N7S1493C1D1Ev)();
extern void ABISELECT(_ZThn392_N7S1493C1D1Ev,_ZThn244_N7S1493C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1493C1D0Ev,_ZTv0_n12_N7S1493C1D0Ev)();
extern void ABISELECT(_ZThn392_N7S1493C1D0Ev,_ZThn244_N7S1493C1D0Ev)() __attribute__((weak));
extern void _ZN7S1493C42v5Ev();
extern void _ZN7S1493C32v6Ev();
extern void _ZN7S1493C32v7Ev();
extern void ABISELECT(_ZTv0_n24_N7S1493C1D1Ev,_ZTv0_n12_N7S1493C1D1Ev)();
extern void ABISELECT(_ZThn408_N7S1493C1D1Ev,_ZThn252_N7S1493C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1493C1D0Ev,_ZTv0_n12_N7S1493C1D0Ev)();
extern void ABISELECT(_ZThn408_N7S1493C1D0Ev,_ZThn252_N7S1493C1D0Ev)() __attribute__((weak));
extern void _ZN7S1493C42v5Ev();
extern void _ZN8S1493C103v27Ev();
extern void _ZN8S1493C103v28Ev();
extern void _ZN8S1493C103v29Ev();
extern void _ZN8S1493C103v30Ev();
extern void _ZN8S1493C103v31Ev();
static  VTBL_ENTRY vtc_S1493C1[] = {
  ABISELECT(408,252),
  ABISELECT(392,244),
  ABISELECT(384,240),
  ABISELECT(256,148),
  ABISELECT(216,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S1493C1[0]),
  (VTBL_ENTRY)&_ZN7S1493C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1493C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1493C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1493C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1493C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1493C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1493C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1493C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1493C12v4Ev,
  ABISELECT(368,232),
  ABISELECT(240,140),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1493C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1493C1D1Ev,_ZThn8_N7S1493C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1493C1D0Ev,_ZThn8_N7S1493C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1493C83v17Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v21Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v22Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v23Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v24Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S1493C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S1493C1D1Ev,_ZThn48_N7S1493C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S1493C1D0Ev,_ZThn48_N7S1493C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1493C93v25Ev,
  ABISELECT(328,200),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S1493C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S1493C1D1Ev,_ZThn52_N7S1493C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S1493C1D0Ev,_ZThn52_N7S1493C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
  (VTBL_ENTRY)&_ZN8S1493C113v32Ev,
  (VTBL_ENTRY)&_ZN8S1493C113v33Ev,
  (VTBL_ENTRY)&_ZN8S1493C113v34Ev,
  (VTBL_ENTRY)&_ZN8S1493C113v35Ev,
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI7S1493C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N7S1493C1D1Ev,_ZThn100_N7S1493C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N7S1493C1D0Ev,_ZThn100_N7S1493C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1493C83v17Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v20Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-128),
  (VTBL_ENTRY)&(_ZTI7S1493C1[0]),
  (VTBL_ENTRY)&_ZN7S1493C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1493C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1493C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1493C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1493C53v12Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI7S1493C1[0]),
  (VTBL_ENTRY)&_ZN7S1493C73v13Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v14Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v15Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v16Ev,
  0,
  ABISELECT(-384,-240),
  ABISELECT(-384,-240),
  (VTBL_ENTRY)&(_ZTI7S1493C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1493C1D1Ev,_ZTv0_n12_N7S1493C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1493C1D0Ev,_ZTv0_n12_N7S1493C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
  0,
  0,
  0,
  ABISELECT(-392,-244),
  ABISELECT(-392,-244),
  (VTBL_ENTRY)&(_ZTI7S1493C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1493C1D1Ev,_ZTv0_n12_N7S1493C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1493C1D0Ev,_ZTv0_n12_N7S1493C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1493C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1493C32v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-408,-252),
  ABISELECT(-408,-252),
  (VTBL_ENTRY)&(_ZTI7S1493C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1493C1D1Ev,_ZTv0_n12_N7S1493C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1493C1D0Ev,_ZTv0_n12_N7S1493C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v31Ev,
};
extern VTBL_ENTRY _ZTV7S1493C1[];
extern void _ZN7S1493C2D1Ev();
extern void _ZN7S1493C2D0Ev();
extern void _ZN7S1493C42v5Ev();
extern void _ZN7S1493C32v6Ev();
extern void _ZN7S1493C32v7Ev();
extern void _ZN7S1493C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S1493C2__7S1493C1[] = {
  ABISELECT(384,240),
  ABISELECT(256,148),
  ABISELECT(216,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S1493C2[0]),
  (VTBL_ENTRY)&_ZN7S1493C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1493C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1493C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1493C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1493C23v26Ev,
};
extern void _ZN7S1493C6D1Ev();
extern void _ZN7S1493C6D0Ev();
extern void _ZN7S1493C83v17Ev();
extern void _ZN7S1493C83v18Ev();
extern void _ZN7S1493C83v19Ev();
extern void _ZN7S1493C83v20Ev();
extern void _ZN7S1493C63v21Ev();
extern void _ZN7S1493C63v22Ev();
extern void _ZN7S1493C63v23Ev();
extern void _ZN7S1493C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S1493C67S1493C2__7S1493C1[] = {
  ABISELECT(368,232),
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S1493C6[0]),
  (VTBL_ENTRY)&_ZN7S1493C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1493C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v17Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v21Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v22Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v23Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v24Ev,
};
extern void _ZN7S1493C73v13Ev();
extern void _ZN7S1493C73v14Ev();
extern void _ZN7S1493C73v15Ev();
extern void _ZN7S1493C73v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1493C7__7S1493C67S1493C2__7S1493C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI7S1493C6[0]),
  (VTBL_ENTRY)&_ZN7S1493C73v13Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v14Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v15Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1493C6D1Ev,_ZTv0_n12_N7S1493C6D1Ev)();
extern void ABISELECT(_ZThn368_N7S1493C6D1Ev,_ZThn232_N7S1493C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1493C6D0Ev,_ZTv0_n12_N7S1493C6D0Ev)();
extern void ABISELECT(_ZThn368_N7S1493C6D0Ev,_ZThn232_N7S1493C6D0Ev)() __attribute__((weak));
extern void _ZN7S1493C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S1493C4__7S1493C67S1493C2__7S1493C1[] = {
  0,
  ABISELECT(-368,-232),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI7S1493C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1493C6D1Ev,_ZTv0_n12_N7S1493C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1493C6D0Ev,_ZTv0_n12_N7S1493C6D0Ev),
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
};
extern void _ZN7S1493C52v8Ev();
extern void _ZN7S1493C52v9Ev();
extern void _ZN7S1493C53v10Ev();
extern void _ZN7S1493C53v11Ev();
extern void _ZN7S1493C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1493C5__7S1493C2__7S1493C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-128),
  (VTBL_ENTRY)&(_ZTI7S1493C2[0]),
  (VTBL_ENTRY)&_ZN7S1493C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1493C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1493C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1493C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1493C53v12Ev,
};
extern void ABISELECT(_ZThn16_N7S1493C2D1Ev,_ZThn8_N7S1493C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S1493C2D0Ev,_ZThn8_N7S1493C2D0Ev)();
extern void _ZN7S1493C83v17Ev();
extern void _ZN7S1493C83v18Ev();
extern void _ZN7S1493C83v19Ev();
extern void _ZN7S1493C83v20Ev();
extern void _ZN7S1493C63v21Ev();
extern void _ZN7S1493C63v22Ev();
extern void _ZN7S1493C63v23Ev();
extern void _ZN7S1493C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S1493C6__7S1493C2__7S1493C1[] = {
  ABISELECT(368,232),
  ABISELECT(240,140),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1493C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1493C2D1Ev,_ZThn8_N7S1493C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1493C2D0Ev,_ZThn8_N7S1493C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1493C83v17Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1493C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v21Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v22Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v23Ev,
  (VTBL_ENTRY)&_ZN7S1493C63v24Ev,
};
extern void _ZN7S1493C73v13Ev();
extern void _ZN7S1493C73v14Ev();
extern void _ZN7S1493C73v15Ev();
extern void _ZN7S1493C73v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1493C7__7S1493C2__7S1493C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI7S1493C2[0]),
  (VTBL_ENTRY)&_ZN7S1493C73v13Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v14Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v15Ev,
  (VTBL_ENTRY)&_ZN7S1493C73v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1493C2D1Ev,_ZTv0_n12_N7S1493C2D1Ev)();
extern void ABISELECT(_ZThn384_N7S1493C2D1Ev,_ZThn240_N7S1493C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1493C2D0Ev,_ZTv0_n12_N7S1493C2D0Ev)();
extern void ABISELECT(_ZThn384_N7S1493C2D0Ev,_ZThn240_N7S1493C2D0Ev)() __attribute__((weak));
extern void _ZN7S1493C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S1493C4__A1__7S1493C2__7S1493C1[] = {
  0,
  ABISELECT(-384,-240),
  ABISELECT(-384,-240),
  (VTBL_ENTRY)&(_ZTI7S1493C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1493C2D1Ev,_ZTv0_n12_N7S1493C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1493C2D0Ev,_ZTv0_n12_N7S1493C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
};
extern void _ZN8S1493C11D1Ev();
extern void _ZN8S1493C11D0Ev();
extern void _ZN7S1493C42v5Ev();
extern void _ZN8S1493C113v32Ev();
extern void _ZN8S1493C113v33Ev();
extern void _ZN8S1493C113v34Ev();
extern void _ZN8S1493C113v35Ev();
static  VTBL_ENTRY _tg__ZTV8S1493C11__7S1493C1[] = {
  ABISELECT(328,200),
  0,
  (VTBL_ENTRY)&(_ZTI8S1493C11[0]),
  (VTBL_ENTRY)&_ZN8S1493C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1493C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
  (VTBL_ENTRY)&_ZN8S1493C113v32Ev,
  (VTBL_ENTRY)&_ZN8S1493C113v33Ev,
  (VTBL_ENTRY)&_ZN8S1493C113v34Ev,
  (VTBL_ENTRY)&_ZN8S1493C113v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1493C11D1Ev,_ZTv0_n12_N8S1493C11D1Ev)();
extern void ABISELECT(_ZThn328_N8S1493C11D1Ev,_ZThn200_N8S1493C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1493C11D0Ev,_ZTv0_n12_N8S1493C11D0Ev)();
extern void ABISELECT(_ZThn328_N8S1493C11D0Ev,_ZThn200_N8S1493C11D0Ev)() __attribute__((weak));
extern void _ZN7S1493C42v5Ev();
extern void _ZN8S1493C103v27Ev();
extern void _ZN8S1493C103v28Ev();
extern void _ZN8S1493C103v29Ev();
extern void _ZN8S1493C103v30Ev();
extern void _ZN8S1493C103v31Ev();
static  VTBL_ENTRY _tg__ZTV8S1493C10__8S1493C11__7S1493C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-200),
  ABISELECT(-328,-200),
  (VTBL_ENTRY)&(_ZTI8S1493C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1493C11D1Ev,_ZTv0_n12_N8S1493C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1493C11D0Ev,_ZTv0_n12_N8S1493C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1493C42v5Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1493C103v31Ev,
};
static  VTT_ENTRY vtt_S1493C1[] = {
  {&(_ZTV7S1493C1[7]),  7,111},
  {&(_tg__ZTV7S1493C2__7S1493C1[5]),  5,11},
  {&(_tg__ZTV7S1493C67S1493C2__7S1493C1[4]),  4,14},
  {&(_tg__ZTV7S1493C7__7S1493C67S1493C2__7S1493C1[6]),  6,10},
  {&(_tg__ZTV7S1493C4__7S1493C67S1493C2__7S1493C1[4]),  4,7},
  {&(_tg__ZTV7S1493C5__7S1493C2__7S1493C1[7]),  7,12},
  {&(_tg__ZTV7S1493C6__7S1493C2__7S1493C1[4]),  4,14},
  {&(_tg__ZTV7S1493C7__7S1493C2__7S1493C1[6]),  6,10},
  {&(_tg__ZTV7S1493C4__A1__7S1493C2__7S1493C1[4]),  4,7},
  {&(_tg__ZTV8S1493C11__7S1493C1[3]),  3,10},
  {&(_tg__ZTV8S1493C10__8S1493C11__7S1493C1[9]),  9,17},
  {&(_ZTV7S1493C1[61]),  61,111},
  {&(_ZTV7S1493C1[21]),  21,111},
  {&(_ZTV7S1493C1[72]),  72,111},
  {&(_ZTV7S1493C1[80]),  80,111},
  {&(_ZTV7S1493C1[89]),  89,111},
  {&(_ZTV7S1493C1[103]),  103,111},
  {&(_ZTV7S1493C1[39]),  39,111},
};
extern VTBL_ENTRY _ZTI7S1493C1[];
extern  VTBL_ENTRY _ZTV7S1493C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1493C1[];
static VTBL_ENTRY alt_thunk_names59[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1493C11D0Ev,_ZTv0_n12_N8S1493C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S1493C11D0Ev,_ZThn200_N8S1493C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1493C11D1Ev,_ZTv0_n12_N8S1493C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S1493C11D1Ev,_ZThn200_N8S1493C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1493C2D0Ev,_ZTv0_n12_N7S1493C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S1493C2D0Ev,_ZThn240_N7S1493C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1493C2D1Ev,_ZTv0_n12_N7S1493C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S1493C2D1Ev,_ZThn240_N7S1493C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1493C6D0Ev,_ZTv0_n12_N7S1493C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S1493C6D0Ev,_ZThn232_N7S1493C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1493C6D1Ev,_ZTv0_n12_N7S1493C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S1493C6D1Ev,_ZThn232_N7S1493C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1493C1D0Ev,_ZTv0_n12_N7S1493C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S1493C1D0Ev,_ZThn252_N7S1493C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn392_N7S1493C1D0Ev,_ZThn244_N7S1493C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S1493C1D0Ev,_ZThn240_N7S1493C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1493C1D1Ev,_ZTv0_n12_N7S1493C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S1493C1D1Ev,_ZThn252_N7S1493C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn392_N7S1493C1D1Ev,_ZThn244_N7S1493C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S1493C1D1Ev,_ZThn240_N7S1493C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1493C1 = {  "S1493C1", // class name
  bases_S1493C1, 16,
  &(vtc_S1493C1[0]), // expected_vtbl_contents
  &(vtt_S1493C1[0]), // expected_vtt_contents
  ABISELECT(432,264), // object size
  NSPAIRA(_ZTI7S1493C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1493C1),111, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1493C1),18, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names59,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1492C4  {
  virtual  ~S1492C4(); // _ZN7S1492C4D1Ev
  virtual void  v5(); // _ZN7S1492C42v5Ev
  S1492C4(); // tgen
};
//SIG(-1 S1492C4) C1{ vd v1}


 S1492C4 ::~S1492C4(){ note_dtor("S1492C4", this);}
void  S1492C4 ::v5(){vfunc_called(this, "_ZN7S1492C42v5Ev");}
S1492C4 ::S1492C4(){ note_ctor("S1492C4", this);} // tgen

static void Test_S1492C4()
{
  extern Class_Descriptor cd_S1492C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1492C4, buf);
    S1492C4 *dp, &lv = *(dp=new (buf) S1492C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1492C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1492C4)");
    test_class_info(&lv, &cd_S1492C4);
    dp->~S1492C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1492C4(Test_S1492C4, "S1492C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1492C4C1Ev();
extern void _ZN7S1492C4D1Ev();
Name_Map name_map_S1492C4[] = {
  NSPAIR(_ZN7S1492C4C1Ev),
  NSPAIR(_ZN7S1492C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1492C4[];
extern void _ZN7S1492C4D1Ev();
extern void _ZN7S1492C4D0Ev();
extern void _ZN7S1492C42v5Ev();
static  VTBL_ENTRY vtc_S1492C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1492C4[0]),
  (VTBL_ENTRY)&_ZN7S1492C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1492C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S1492C4[];
extern  VTBL_ENTRY _ZTV7S1492C4[];
Class_Descriptor cd_S1492C4 = {  "S1492C4", // class name
  0,0,//no base classes
  &(vtc_S1492C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1492C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1492C4),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  S1492C3  : S1492C4 {
  ::S1492C4 s1492c3f0;
  virtual  ~S1492C3(); // _ZN7S1492C3D1Ev
  virtual void  v6(); // _ZN7S1492C32v6Ev
  virtual void  v7(); // _ZN7S1492C32v7Ev
  S1492C3(); // tgen
};
//SIG(-1 S1492C3) C1{ BC2{ vd v3} vd v1 v2 FC2}


 S1492C3 ::~S1492C3(){ note_dtor("S1492C3", this);}
void  S1492C3 ::v6(){vfunc_called(this, "_ZN7S1492C32v6Ev");}
void  S1492C3 ::v7(){vfunc_called(this, "_ZN7S1492C32v7Ev");}
S1492C3 ::S1492C3(){ note_ctor("S1492C3", this);} // tgen

static void Test_S1492C3()
{
  extern Class_Descriptor cd_S1492C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1492C3, buf);
    S1492C3 *dp, &lv = *(dp=new (buf) S1492C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1492C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1492C3)");
    check_base_class_offset(lv, (S1492C4*), 0, "S1492C3");
    check_field_offset(lv, s1492c3f0, ABISELECT(8,4), "S1492C3.s1492c3f0");
    test_class_info(&lv, &cd_S1492C3);
    dp->~S1492C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1492C3(Test_S1492C3, "S1492C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1492C3C1Ev();
extern void _ZN7S1492C3D1Ev();
Name_Map name_map_S1492C3[] = {
  NSPAIR(_ZN7S1492C3C1Ev),
  NSPAIR(_ZN7S1492C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1492C4;
extern VTBL_ENTRY _ZTI7S1492C4[];
extern  VTBL_ENTRY _ZTV7S1492C4[];
static Base_Class bases_S1492C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1492C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1492C3[];
extern void _ZN7S1492C3D1Ev();
extern void _ZN7S1492C3D0Ev();
extern void _ZN7S1492C42v5Ev();
extern void _ZN7S1492C32v6Ev();
extern void _ZN7S1492C32v7Ev();
static  VTBL_ENTRY vtc_S1492C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1492C3[0]),
  (VTBL_ENTRY)&_ZN7S1492C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1492C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1492C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1492C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S1492C3[];
extern  VTBL_ENTRY _ZTV7S1492C3[];
Class_Descriptor cd_S1492C3 = {  "S1492C3", // class name
  bases_S1492C3, 1,
  &(vtc_S1492C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1492C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1492C3),7, //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  S1492C5  {
  void *s1492c5f0[4];
  virtual void  v8(); // _ZN7S1492C52v8Ev
  virtual void  v9(); // _ZN7S1492C52v9Ev
  virtual void  v10(); // _ZN7S1492C53v10Ev
  virtual void  v11(); // _ZN7S1492C53v11Ev
  virtual void  v12(); // _ZN7S1492C53v12Ev
  ~S1492C5(); // tgen
  S1492C5(); // tgen
};
//SIG(-1 S1492C5) C1{ v1 v2 v3 v4 v5 Fp[4]}


void  S1492C5 ::v8(){vfunc_called(this, "_ZN7S1492C52v8Ev");}
void  S1492C5 ::v9(){vfunc_called(this, "_ZN7S1492C52v9Ev");}
void  S1492C5 ::v10(){vfunc_called(this, "_ZN7S1492C53v10Ev");}
void  S1492C5 ::v11(){vfunc_called(this, "_ZN7S1492C53v11Ev");}
void  S1492C5 ::v12(){vfunc_called(this, "_ZN7S1492C53v12Ev");}
S1492C5 ::~S1492C5(){ note_dtor("S1492C5", this);} // tgen
S1492C5 ::S1492C5(){ note_ctor("S1492C5", this);} // tgen

static void Test_S1492C5()
{
  extern Class_Descriptor cd_S1492C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S1492C5, buf);
    S1492C5 *dp, &lv = *(dp=new (buf) S1492C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S1492C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1492C5)");
    check_field_offset(lv, s1492c5f0, ABISELECT(8,4), "S1492C5.s1492c5f0");
    test_class_info(&lv, &cd_S1492C5);
    dp->~S1492C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1492C5(Test_S1492C5, "S1492C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S1492C5C1Ev();
extern void _ZN7S1492C5D1Ev();
Name_Map name_map_S1492C5[] = {
  NSPAIR(_ZN7S1492C5C1Ev),
  NSPAIR(_ZN7S1492C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1492C5[];
extern void _ZN7S1492C52v8Ev();
extern void _ZN7S1492C52v9Ev();
extern void _ZN7S1492C53v10Ev();
extern void _ZN7S1492C53v11Ev();
extern void _ZN7S1492C53v12Ev();
static  VTBL_ENTRY vtc_S1492C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1492C5[0]),
  (VTBL_ENTRY)&_ZN7S1492C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1492C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1492C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1492C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1492C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S1492C5[];
extern  VTBL_ENTRY _ZTV7S1492C5[];
Class_Descriptor cd_S1492C5 = {  "S1492C5", // class name
  0,0,//no base classes
  &(vtc_S1492C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S1492C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1492C5),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  S1492C7  {
  char s1492c7f0;
  long double s1492c7f1[7];
  virtual void  v13(); // _ZN7S1492C73v13Ev
  virtual void  v14(); // _ZN7S1492C73v14Ev
  virtual void  v15(); // _ZN7S1492C73v15Ev
  virtual void  v16(); // _ZN7S1492C73v16Ev
  ~S1492C7(); // tgen
  S1492C7(); // tgen
};
//SIG(-1 S1492C7) C1{ v1 v2 v3 v4 Fc FD[7]}


void  S1492C7 ::v13(){vfunc_called(this, "_ZN7S1492C73v13Ev");}
void  S1492C7 ::v14(){vfunc_called(this, "_ZN7S1492C73v14Ev");}
void  S1492C7 ::v15(){vfunc_called(this, "_ZN7S1492C73v15Ev");}
void  S1492C7 ::v16(){vfunc_called(this, "_ZN7S1492C73v16Ev");}
S1492C7 ::~S1492C7(){ note_dtor("S1492C7", this);} // tgen
S1492C7 ::S1492C7(){ note_ctor("S1492C7", this);} // tgen

static void Test_S1492C7()
{
  extern Class_Descriptor cd_S1492C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,24)];
    init_test(&cd_S1492C7, buf);
    S1492C7 *dp, &lv = *(dp=new (buf) S1492C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,92), "sizeof(S1492C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1492C7)");
    check_field_offset(lv, s1492c7f0, ABISELECT(8,4), "S1492C7.s1492c7f0");
    check_field_offset(lv, s1492c7f1, ABISELECT(16,8), "S1492C7.s1492c7f1");
    test_class_info(&lv, &cd_S1492C7);
    dp->~S1492C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1492C7(Test_S1492C7, "S1492C7", ABISELECT(128,92));

#else // __cplusplus

extern void _ZN7S1492C7C1Ev();
extern void _ZN7S1492C7D1Ev();
Name_Map name_map_S1492C7[] = {
  NSPAIR(_ZN7S1492C7C1Ev),
  NSPAIR(_ZN7S1492C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1492C7[];
extern void _ZN7S1492C73v13Ev();
extern void _ZN7S1492C73v14Ev();
extern void _ZN7S1492C73v15Ev();
extern void _ZN7S1492C73v16Ev();
static  VTBL_ENTRY vtc_S1492C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1492C7[0]),
  (VTBL_ENTRY)&_ZN7S1492C73v13Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v14Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v15Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v16Ev,
};
extern VTBL_ENTRY _ZTI7S1492C7[];
extern  VTBL_ENTRY _ZTV7S1492C7[];
Class_Descriptor cd_S1492C7 = {  "S1492C7", // class name
  0,0,//no base classes
  &(vtc_S1492C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,92), // object size
  NSPAIRA(_ZTI7S1492C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1492C7),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  S1492C8  {
  ::S1492C4 s1492c8f0;
  virtual  ~S1492C8(); // _ZN7S1492C8D1Ev
  virtual void  v17(); // _ZN7S1492C83v17Ev
  virtual void  v18(); // _ZN7S1492C83v18Ev
  virtual void  v19(); // _ZN7S1492C83v19Ev
  virtual void  v20(); // _ZN7S1492C83v20Ev
  S1492C8(); // tgen
};
//SIG(-1 S1492C8) C1{ vd v1 v2 v3 v4 FC2{ vd v5}}


 S1492C8 ::~S1492C8(){ note_dtor("S1492C8", this);}
void  S1492C8 ::v17(){vfunc_called(this, "_ZN7S1492C83v17Ev");}
void  S1492C8 ::v18(){vfunc_called(this, "_ZN7S1492C83v18Ev");}
void  S1492C8 ::v19(){vfunc_called(this, "_ZN7S1492C83v19Ev");}
void  S1492C8 ::v20(){vfunc_called(this, "_ZN7S1492C83v20Ev");}
S1492C8 ::S1492C8(){ note_ctor("S1492C8", this);} // tgen

static void Test_S1492C8()
{
  extern Class_Descriptor cd_S1492C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1492C8, buf);
    S1492C8 *dp, &lv = *(dp=new (buf) S1492C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1492C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1492C8)");
    check_field_offset(lv, s1492c8f0, ABISELECT(8,4), "S1492C8.s1492c8f0");
    test_class_info(&lv, &cd_S1492C8);
    dp->~S1492C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1492C8(Test_S1492C8, "S1492C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1492C8C1Ev();
extern void _ZN7S1492C8D1Ev();
Name_Map name_map_S1492C8[] = {
  NSPAIR(_ZN7S1492C8C1Ev),
  NSPAIR(_ZN7S1492C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1492C8[];
extern void _ZN7S1492C8D1Ev();
extern void _ZN7S1492C8D0Ev();
extern void _ZN7S1492C83v17Ev();
extern void _ZN7S1492C83v18Ev();
extern void _ZN7S1492C83v19Ev();
extern void _ZN7S1492C83v20Ev();
static  VTBL_ENTRY vtc_S1492C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1492C8[0]),
  (VTBL_ENTRY)&_ZN7S1492C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1492C8D0Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v17Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v20Ev,
};
extern VTBL_ENTRY _ZTI7S1492C8[];
extern  VTBL_ENTRY _ZTV7S1492C8[];
Class_Descriptor cd_S1492C8 = {  "S1492C8", // class name
  0,0,//no base classes
  &(vtc_S1492C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1492C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1492C8),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1492C6  : virtual S1492C7 , S1492C8 , virtual S1492C4 {
  void *s1492c6f0;
  int s1492c6f1;
  __tsi64 s1492c6f2[3];
  virtual  ~S1492C6(); // _ZN7S1492C6D2Ev
  virtual void  v21(); // _ZN7S1492C63v21Ev
  virtual void  v22(); // _ZN7S1492C63v22Ev
  virtual void  v23(); // _ZN7S1492C63v23Ev
  virtual void  v24(); // _ZN7S1492C63v24Ev
  S1492C6(); // tgen
};
//SIG(-1 S1492C6) C1{ VBC2{ v5 v6 v7 v8 Fc FD[7]} BC3{ vd v9 v10 v11 v12 FC4{ vd v13}} VBC4 vd v1 v2 v3 v4 Fp Fi FL[3]}


 S1492C6 ::~S1492C6(){ note_dtor("S1492C6", this);}
void  S1492C6 ::v21(){vfunc_called(this, "_ZN7S1492C63v21Ev");}
void  S1492C6 ::v22(){vfunc_called(this, "_ZN7S1492C63v22Ev");}
void  S1492C6 ::v23(){vfunc_called(this, "_ZN7S1492C63v23Ev");}
void  S1492C6 ::v24(){vfunc_called(this, "_ZN7S1492C63v24Ev");}
S1492C6 ::S1492C6(){ note_ctor("S1492C6", this);} // tgen

static void Test_S1492C6()
{
  extern Class_Descriptor cd_S1492C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,35)];
    init_test(&cd_S1492C6, buf);
    S1492C6 *dp, &lv = *(dp=new (buf) S1492C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,136), "sizeof(S1492C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1492C6)");
    check_base_class_offset(lv, (S1492C7*), ABISELECT(64,40), "S1492C6");
    check_base_class_offset(lv, (S1492C8*), 0, "S1492C6");
    check_base_class_offset(lv, (S1492C4*), ABISELECT(192,132), "S1492C6");
    check_field_offset(lv, s1492c6f0, ABISELECT(16,8), "S1492C6.s1492c6f0");
    check_field_offset(lv, s1492c6f1, ABISELECT(24,12), "S1492C6.s1492c6f1");
    check_field_offset(lv, s1492c6f2, ABISELECT(32,16), "S1492C6.s1492c6f2");
    test_class_info(&lv, &cd_S1492C6);
    dp->~S1492C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1492C6(Test_S1492C6, "S1492C6", ABISELECT(208,136));

#else // __cplusplus

extern void _ZN7S1492C6C1Ev();
extern void _ZN7S1492C6D2Ev();
Name_Map name_map_S1492C6[] = {
  NSPAIR(_ZN7S1492C6C1Ev),
  NSPAIR(_ZN7S1492C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1492C7;
extern VTBL_ENTRY _ZTI7S1492C7[];
extern  VTBL_ENTRY _ZTV7S1492C7[];
extern Class_Descriptor cd_S1492C8;
extern VTBL_ENTRY _ZTI7S1492C8[];
extern  VTBL_ENTRY _ZTV7S1492C8[];
extern Class_Descriptor cd_S1492C4;
extern VTBL_ENTRY _ZTI7S1492C4[];
extern  VTBL_ENTRY _ZTV7S1492C4[];
static Base_Class bases_S1492C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1492C7,    ABISELECT(64,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1492C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1492C4,    ABISELECT(192,132), //bcp->offset
    24, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1492C6[];
extern void _ZN7S1492C6D1Ev();
extern void _ZN7S1492C6D0Ev();
extern void _ZN7S1492C83v17Ev();
extern void _ZN7S1492C83v18Ev();
extern void _ZN7S1492C83v19Ev();
extern void _ZN7S1492C83v20Ev();
extern void _ZN7S1492C63v21Ev();
extern void _ZN7S1492C63v22Ev();
extern void _ZN7S1492C63v23Ev();
extern void _ZN7S1492C63v24Ev();
extern void _ZN7S1492C73v13Ev();
extern void _ZN7S1492C73v14Ev();
extern void _ZN7S1492C73v15Ev();
extern void _ZN7S1492C73v16Ev();
extern void ABISELECT(_ZTv0_n24_N7S1492C6D1Ev,_ZTv0_n12_N7S1492C6D1Ev)();
extern void ABISELECT(_ZThn192_N7S1492C6D1Ev,_ZThn132_N7S1492C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1492C6D0Ev,_ZTv0_n12_N7S1492C6D0Ev)();
extern void ABISELECT(_ZThn192_N7S1492C6D0Ev,_ZThn132_N7S1492C6D0Ev)() __attribute__((weak));
extern void _ZN7S1492C42v5Ev();
static  VTBL_ENTRY vtc_S1492C6[] = {
  ABISELECT(192,132),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S1492C6[0]),
  (VTBL_ENTRY)&_ZN7S1492C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1492C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v17Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v21Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v22Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v23Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v24Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S1492C6[0]),
  (VTBL_ENTRY)&_ZN7S1492C73v13Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v14Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v15Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v16Ev,
  0,
  ABISELECT(-192,-132),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI7S1492C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1492C6D1Ev,_ZTv0_n12_N7S1492C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1492C6D0Ev,_ZTv0_n12_N7S1492C6D0Ev),
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
};
extern VTBL_ENTRY _ZTV7S1492C6[];
static  VTT_ENTRY vtt_S1492C6[] = {
  {&(_ZTV7S1492C6[4]),  4,31},
  {&(_ZTV7S1492C6[20]),  20,31},
  {&(_ZTV7S1492C6[28]),  28,31},
};
extern VTBL_ENTRY _ZTI7S1492C6[];
extern  VTBL_ENTRY _ZTV7S1492C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1492C6[];
static VTBL_ENTRY alt_thunk_names60[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1492C6D0Ev,_ZTv0_n12_N7S1492C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S1492C6D0Ev,_ZThn132_N7S1492C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1492C6D1Ev,_ZTv0_n12_N7S1492C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S1492C6D1Ev,_ZThn132_N7S1492C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1492C6 = {  "S1492C6", // class name
  bases_S1492C6, 3,
  &(vtc_S1492C6[0]), // expected_vtbl_contents
  &(vtt_S1492C6[0]), // expected_vtt_contents
  ABISELECT(208,136), // object size
  NSPAIRA(_ZTI7S1492C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1492C6),31, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1492C6),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names60,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1492C9  {
  virtual  ~S1492C9(); // _ZN7S1492C9D1Ev
  virtual void  v25(); // _ZN7S1492C93v25Ev
  S1492C9(); // tgen
};
//SIG(-1 S1492C9) C1{ vd v1}


 S1492C9 ::~S1492C9(){ note_dtor("S1492C9", this);}
void  S1492C9 ::v25(){vfunc_called(this, "_ZN7S1492C93v25Ev");}
S1492C9 ::S1492C9(){ note_ctor("S1492C9", this);} // tgen

static void Test_S1492C9()
{
  extern Class_Descriptor cd_S1492C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1492C9, buf);
    S1492C9 *dp, &lv = *(dp=new (buf) S1492C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1492C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1492C9)");
    test_class_info(&lv, &cd_S1492C9);
    dp->~S1492C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1492C9(Test_S1492C9, "S1492C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1492C9C1Ev();
extern void _ZN7S1492C9D1Ev();
Name_Map name_map_S1492C9[] = {
  NSPAIR(_ZN7S1492C9C1Ev),
  NSPAIR(_ZN7S1492C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1492C9[];
extern void _ZN7S1492C9D1Ev();
extern void _ZN7S1492C9D0Ev();
extern void _ZN7S1492C93v25Ev();
static  VTBL_ENTRY vtc_S1492C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1492C9[0]),
  (VTBL_ENTRY)&_ZN7S1492C9D1Ev,
  (VTBL_ENTRY)&_ZN7S1492C9D0Ev,
  (VTBL_ENTRY)&_ZN7S1492C93v25Ev,
};
extern VTBL_ENTRY _ZTI7S1492C9[];
extern  VTBL_ENTRY _ZTV7S1492C9[];
Class_Descriptor cd_S1492C9 = {  "S1492C9", // class name
  0,0,//no base classes
  &(vtc_S1492C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1492C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1492C9),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  S1492C2  : S1492C3 , virtual S1492C5 , S1492C6 , S1492C9 {
  virtual void  v26(); // _ZN7S1492C23v26Ev
  ~S1492C2(); // tgen
  S1492C2(); // tgen
};
//SIG(-1 S1492C2) C1{ BC2{ BC3{ vd v2} vd v3 v4 FC3} VBC4{ v5 v6 v7 v8 v9 Fp[4]} BC5{ VBC6{ v10 v11 v12 v13 Fc FD[7]} BC7{ vd v14 v15 v16 v17 FC3} VBC3 vd v18 v19 v20 v21 Fp Fi FL[3]} BC8{ vd v22} v1}


void  S1492C2 ::v26(){vfunc_called(this, "_ZN7S1492C23v26Ev");}
S1492C2 ::~S1492C2(){ note_dtor("S1492C2", this);} // tgen
S1492C2 ::S1492C2(){ note_ctor("S1492C2", this);} // tgen

static void Test_S1492C2()
{
  extern Class_Descriptor cd_S1492C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,43)];
    init_test(&cd_S1492C2, buf);
    S1492C2 *dp, &lv = *(dp=new (buf) S1492C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,168), "sizeof(S1492C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1492C2)");
    check_base_class_offset(lv, (S1492C4*)(S1492C3*), 0, "S1492C2");
    check_base_class_offset(lv, (S1492C3*), 0, "S1492C2");
    check_base_class_offset(lv, (S1492C5*), ABISELECT(80,52), "S1492C2");
    check_base_class_offset(lv, (S1492C7*)(S1492C6*), ABISELECT(128,72), "S1492C2");
    check_base_class_offset(lv, (S1492C8*)(S1492C6*), ABISELECT(16,8), "S1492C2");
    check_base_class_offset(lv, (S1492C4*)(S1492C6*), ABISELECT(256,164), "S1492C2");
    check_base_class_offset(lv, (S1492C6*), ABISELECT(16,8), "S1492C2");
    check_base_class_offset(lv, (S1492C9*), ABISELECT(72,48), "S1492C2");
    test_class_info(&lv, &cd_S1492C2);
    dp->~S1492C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1492C2(Test_S1492C2, "S1492C2", ABISELECT(272,168));

#else // __cplusplus

extern void _ZN7S1492C2C1Ev();
extern void _ZN7S1492C2D1Ev();
Name_Map name_map_S1492C2[] = {
  NSPAIR(_ZN7S1492C2C1Ev),
  NSPAIR(_ZN7S1492C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1492C4;
extern VTBL_ENTRY _ZTI7S1492C4[];
extern  VTBL_ENTRY _ZTV7S1492C4[];
extern Class_Descriptor cd_S1492C3;
extern VTBL_ENTRY _ZTI7S1492C3[];
extern  VTBL_ENTRY _ZTV7S1492C3[];
extern Class_Descriptor cd_S1492C5;
extern VTBL_ENTRY _ZTI7S1492C5[];
extern  VTBL_ENTRY _ZTV7S1492C5[];
extern Class_Descriptor cd_S1492C7;
extern VTBL_ENTRY _ZTI7S1492C7[];
extern  VTBL_ENTRY _ZTV7S1492C7[];
extern Class_Descriptor cd_S1492C8;
extern VTBL_ENTRY _ZTI7S1492C8[];
extern  VTBL_ENTRY _ZTV7S1492C8[];
extern Class_Descriptor cd_S1492C4;
extern VTBL_ENTRY _ZTI7S1492C4[];
extern  VTBL_ENTRY _ZTV7S1492C4[];
extern Class_Descriptor cd_S1492C6;
extern VTBL_ENTRY _ZTI7S1492C6[];
extern  VTBL_ENTRY _ZTV7S1492C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1492C6[];
extern Class_Descriptor cd_S1492C9;
extern VTBL_ENTRY _ZTI7S1492C9[];
extern  VTBL_ENTRY _ZTV7S1492C9[];
static Base_Class bases_S1492C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1492C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1492C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1492C5,    ABISELECT(80,52), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1492C7,    ABISELECT(128,72), //bcp->offset
    42, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1492C8,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1492C4,    ABISELECT(256,164), //bcp->offset
    52, //bcp->virtual_function_table_offset
    4, //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
    6, //immediately_derived
  0, 1},
  {&cd_S1492C6,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1492C9,    ABISELECT(72,48), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1492C2[];
extern void _ZN7S1492C2D1Ev();
extern void _ZN7S1492C2D0Ev();
extern void _ZN7S1492C42v5Ev();
extern void _ZN7S1492C32v6Ev();
extern void _ZN7S1492C32v7Ev();
extern void _ZN7S1492C23v26Ev();
extern void ABISELECT(_ZThn16_N7S1492C2D1Ev,_ZThn8_N7S1492C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S1492C2D0Ev,_ZThn8_N7S1492C2D0Ev)();
extern void _ZN7S1492C83v17Ev();
extern void _ZN7S1492C83v18Ev();
extern void _ZN7S1492C83v19Ev();
extern void _ZN7S1492C83v20Ev();
extern void _ZN7S1492C63v21Ev();
extern void _ZN7S1492C63v22Ev();
extern void _ZN7S1492C63v23Ev();
extern void _ZN7S1492C63v24Ev();
extern void ABISELECT(_ZThn72_N7S1492C2D1Ev,_ZThn48_N7S1492C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S1492C2D0Ev,_ZThn48_N7S1492C2D0Ev)();
extern void _ZN7S1492C93v25Ev();
extern void _ZN7S1492C52v8Ev();
extern void _ZN7S1492C52v9Ev();
extern void _ZN7S1492C53v10Ev();
extern void _ZN7S1492C53v11Ev();
extern void _ZN7S1492C53v12Ev();
extern void _ZN7S1492C73v13Ev();
extern void _ZN7S1492C73v14Ev();
extern void _ZN7S1492C73v15Ev();
extern void _ZN7S1492C73v16Ev();
extern void ABISELECT(_ZTv0_n24_N7S1492C2D1Ev,_ZTv0_n12_N7S1492C2D1Ev)();
extern void ABISELECT(_ZThn256_N7S1492C2D1Ev,_ZThn164_N7S1492C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1492C2D0Ev,_ZTv0_n12_N7S1492C2D0Ev)();
extern void ABISELECT(_ZThn256_N7S1492C2D0Ev,_ZThn164_N7S1492C2D0Ev)() __attribute__((weak));
extern void _ZN7S1492C42v5Ev();
static  VTBL_ENTRY vtc_S1492C2[] = {
  ABISELECT(256,164),
  ABISELECT(128,72),
  ABISELECT(80,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S1492C2[0]),
  (VTBL_ENTRY)&_ZN7S1492C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1492C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1492C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1492C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1492C23v26Ev,
  ABISELECT(240,156),
  ABISELECT(112,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1492C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1492C2D1Ev,_ZThn8_N7S1492C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1492C2D0Ev,_ZThn8_N7S1492C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1492C83v17Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v21Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v22Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v23Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v24Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S1492C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S1492C2D1Ev,_ZThn48_N7S1492C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S1492C2D0Ev,_ZThn48_N7S1492C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1492C93v25Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S1492C2[0]),
  (VTBL_ENTRY)&_ZN7S1492C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1492C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1492C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1492C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1492C53v12Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI7S1492C2[0]),
  (VTBL_ENTRY)&_ZN7S1492C73v13Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v14Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v15Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v16Ev,
  0,
  ABISELECT(-256,-164),
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI7S1492C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1492C2D1Ev,_ZTv0_n12_N7S1492C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1492C2D0Ev,_ZTv0_n12_N7S1492C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
};
extern VTBL_ENTRY _ZTV7S1492C2[];
extern void _ZN7S1492C6D1Ev();
extern void _ZN7S1492C6D0Ev();
extern void _ZN7S1492C83v17Ev();
extern void _ZN7S1492C83v18Ev();
extern void _ZN7S1492C83v19Ev();
extern void _ZN7S1492C83v20Ev();
extern void _ZN7S1492C63v21Ev();
extern void _ZN7S1492C63v22Ev();
extern void _ZN7S1492C63v23Ev();
extern void _ZN7S1492C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S1492C6__7S1492C2[] = {
  ABISELECT(240,156),
  ABISELECT(112,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S1492C6[0]),
  (VTBL_ENTRY)&_ZN7S1492C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1492C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v17Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v21Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v22Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v23Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v24Ev,
};
extern void _ZN7S1492C73v13Ev();
extern void _ZN7S1492C73v14Ev();
extern void _ZN7S1492C73v15Ev();
extern void _ZN7S1492C73v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1492C7__7S1492C6__7S1492C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S1492C6[0]),
  (VTBL_ENTRY)&_ZN7S1492C73v13Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v14Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v15Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1492C6D1Ev,_ZTv0_n12_N7S1492C6D1Ev)();
extern void ABISELECT(_ZThn240_N7S1492C6D1Ev,_ZThn156_N7S1492C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1492C6D0Ev,_ZTv0_n12_N7S1492C6D0Ev)();
extern void ABISELECT(_ZThn240_N7S1492C6D0Ev,_ZThn156_N7S1492C6D0Ev)() __attribute__((weak));
extern void _ZN7S1492C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S1492C4__7S1492C6__7S1492C2[] = {
  0,
  ABISELECT(-240,-156),
  ABISELECT(-240,-156),
  (VTBL_ENTRY)&(_ZTI7S1492C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1492C6D1Ev,_ZTv0_n12_N7S1492C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1492C6D0Ev,_ZTv0_n12_N7S1492C6D0Ev),
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
};
static  VTT_ENTRY vtt_S1492C2[] = {
  {&(_ZTV7S1492C2[5]),  5,59},
  {&(_tg__ZTV7S1492C6__7S1492C2[4]),  4,14},
  {&(_tg__ZTV7S1492C7__7S1492C6__7S1492C2[6]),  6,10},
  {&(_tg__ZTV7S1492C4__7S1492C6__7S1492C2[4]),  4,7},
  {&(_ZTV7S1492C2[37]),  37,59},
  {&(_ZTV7S1492C2[15]),  15,59},
  {&(_ZTV7S1492C2[48]),  48,59},
  {&(_ZTV7S1492C2[56]),  56,59},
};
extern VTBL_ENTRY _ZTI7S1492C2[];
extern  VTBL_ENTRY _ZTV7S1492C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1492C2[];
static VTBL_ENTRY alt_thunk_names61[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1492C6D0Ev,_ZTv0_n12_N7S1492C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S1492C6D0Ev,_ZThn156_N7S1492C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1492C6D1Ev,_ZTv0_n12_N7S1492C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S1492C6D1Ev,_ZThn156_N7S1492C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1492C2D0Ev,_ZTv0_n12_N7S1492C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S1492C2D0Ev,_ZThn164_N7S1492C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1492C2D1Ev,_ZTv0_n12_N7S1492C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S1492C2D1Ev,_ZThn164_N7S1492C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1492C2 = {  "S1492C2", // class name
  bases_S1492C2, 8,
  &(vtc_S1492C2[0]), // expected_vtbl_contents
  &(vtt_S1492C2[0]), // expected_vtt_contents
  ABISELECT(272,168), // object size
  NSPAIRA(_ZTI7S1492C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S1492C2),59, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1492C2),8, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names61,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1492C10  : S1492C4 {
  void *s1492c10f0;
  __tsi64 s1492c10f1:7;
  virtual  ~S1492C10(); // _ZN8S1492C10D1Ev
  virtual void  v27(); // _ZN8S1492C103v27Ev
  virtual void  v28(); // _ZN8S1492C103v28Ev
  virtual void  v29(); // _ZN8S1492C103v29Ev
  virtual void  v30(); // _ZN8S1492C103v30Ev
  virtual void  v31(); // _ZN8S1492C103v31Ev
  S1492C10(); // tgen
};
//SIG(-1 S1492C10) C1{ BC2{ vd v6} vd v1 v2 v3 v4 v5 Fp FL:7}


 S1492C10 ::~S1492C10(){ note_dtor("S1492C10", this);}
void  S1492C10 ::v27(){vfunc_called(this, "_ZN8S1492C103v27Ev");}
void  S1492C10 ::v28(){vfunc_called(this, "_ZN8S1492C103v28Ev");}
void  S1492C10 ::v29(){vfunc_called(this, "_ZN8S1492C103v29Ev");}
void  S1492C10 ::v30(){vfunc_called(this, "_ZN8S1492C103v30Ev");}
void  S1492C10 ::v31(){vfunc_called(this, "_ZN8S1492C103v31Ev");}
S1492C10 ::S1492C10(){ note_ctor("S1492C10", this);} // tgen

static void Test_S1492C10()
{
  extern Class_Descriptor cd_S1492C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S1492C10, buf);
    S1492C10 *dp, &lv = *(dp=new (buf) S1492C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1492C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1492C10)");
    check_base_class_offset(lv, (S1492C4*), 0, "S1492C10");
    check_field_offset(lv, s1492c10f0, ABISELECT(8,4), "S1492C10.s1492c10f0");
    set_bf_and_test(lv, s1492c10f1, ABISELECT(16,8), 0, 7, 1, "S1492C10");
    set_bf_and_test(lv, s1492c10f1, ABISELECT(16,8), 0, 7, hide_sll(1LL<<6), "S1492C10");
    test_class_info(&lv, &cd_S1492C10);
    dp->~S1492C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1492C10(Test_S1492C10, "S1492C10", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S1492C10C1Ev();
extern void _ZN8S1492C10D1Ev();
Name_Map name_map_S1492C10[] = {
  NSPAIR(_ZN8S1492C10C1Ev),
  NSPAIR(_ZN8S1492C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1492C4;
extern VTBL_ENTRY _ZTI7S1492C4[];
extern  VTBL_ENTRY _ZTV7S1492C4[];
static Base_Class bases_S1492C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1492C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S1492C10[];
extern void _ZN8S1492C10D1Ev();
extern void _ZN8S1492C10D0Ev();
extern void _ZN7S1492C42v5Ev();
extern void _ZN8S1492C103v27Ev();
extern void _ZN8S1492C103v28Ev();
extern void _ZN8S1492C103v29Ev();
extern void _ZN8S1492C103v30Ev();
extern void _ZN8S1492C103v31Ev();
static  VTBL_ENTRY vtc_S1492C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1492C10[0]),
  (VTBL_ENTRY)&_ZN8S1492C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1492C10D0Ev,
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v31Ev,
};
extern VTBL_ENTRY _ZTI8S1492C10[];
extern  VTBL_ENTRY _ZTV8S1492C10[];
Class_Descriptor cd_S1492C10 = {  "S1492C10", // class name
  bases_S1492C10, 1,
  &(vtc_S1492C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S1492C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S1492C10),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1492C11  : virtual S1492C10 , S1492C4 {
  ::S1492C4 s1492c11f0;
  int s1492c11f1;
  ::S1492C4 s1492c11f2[9];
  virtual  ~S1492C11(); // _ZN8S1492C11D2Ev
  virtual void  v32(); // _ZN8S1492C113v32Ev
  virtual void  v33(); // _ZN8S1492C113v33Ev
  virtual void  v34(); // _ZN8S1492C113v34Ev
  virtual void  v35(); // _ZN8S1492C113v35Ev
  S1492C11(); // tgen
};
//SIG(-1 S1492C11) C1{ VBC2{ BC3{ vd v5} vd v6 v7 v8 v9 v10 Fp FL:7} BC3 vd v1 v2 v3 v4 FC3 Fi FC3[9]}


 S1492C11 ::~S1492C11(){ note_dtor("S1492C11", this);}
void  S1492C11 ::v32(){vfunc_called(this, "_ZN8S1492C113v32Ev");}
void  S1492C11 ::v33(){vfunc_called(this, "_ZN8S1492C113v33Ev");}
void  S1492C11 ::v34(){vfunc_called(this, "_ZN8S1492C113v34Ev");}
void  S1492C11 ::v35(){vfunc_called(this, "_ZN8S1492C113v35Ev");}
S1492C11 ::S1492C11(){ note_ctor("S1492C11", this);} // tgen

static void Test_S1492C11()
{
  extern Class_Descriptor cd_S1492C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,16)];
    init_test(&cd_S1492C11, buf);
    S1492C11 *dp, &lv = *(dp=new (buf) S1492C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S1492C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1492C11)");
    check_base_class_offset(lv, (S1492C4*)(S1492C10*), ABISELECT(96,48), "S1492C11");
    check_base_class_offset(lv, (S1492C10*), ABISELECT(96,48), "S1492C11");
    /*is_ambiguous_... S1492C11::S1492C4 */ AMB_check_base_class_offset(lv, (S1492C4*), 0, "S1492C11");
    check_field_offset(lv, s1492c11f0, ABISELECT(8,4), "S1492C11.s1492c11f0");
    check_field_offset(lv, s1492c11f1, ABISELECT(16,8), "S1492C11.s1492c11f1");
    check_field_offset(lv, s1492c11f2, ABISELECT(24,12), "S1492C11.s1492c11f2");
    test_class_info(&lv, &cd_S1492C11);
    dp->~S1492C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1492C11(Test_S1492C11, "S1492C11", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN8S1492C11C1Ev();
extern void _ZN8S1492C11D2Ev();
Name_Map name_map_S1492C11[] = {
  NSPAIR(_ZN8S1492C11C1Ev),
  NSPAIR(_ZN8S1492C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1492C4;
extern VTBL_ENTRY _ZTI7S1492C4[];
extern  VTBL_ENTRY _ZTV7S1492C4[];
extern Class_Descriptor cd_S1492C10;
extern VTBL_ENTRY _ZTI8S1492C10[];
extern  VTBL_ENTRY _ZTV8S1492C10[];
extern Class_Descriptor cd_S1492C4;
extern VTBL_ENTRY _ZTI7S1492C4[];
extern  VTBL_ENTRY _ZTV7S1492C4[];
static Base_Class bases_S1492C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1492C4,    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
    1, //immediately_derived
  0, 0},
  {&cd_S1492C10,    ABISELECT(96,48), //bcp->offset
    10, //bcp->virtual_function_table_offset
    9, //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_S1492C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S1492C11[];
extern void _ZN8S1492C11D1Ev();
extern void _ZN8S1492C11D0Ev();
extern void _ZN7S1492C42v5Ev();
extern void _ZN8S1492C113v32Ev();
extern void _ZN8S1492C113v33Ev();
extern void _ZN8S1492C113v34Ev();
extern void _ZN8S1492C113v35Ev();
extern void ABISELECT(_ZTv0_n24_N8S1492C11D1Ev,_ZTv0_n12_N8S1492C11D1Ev)();
extern void ABISELECT(_ZThn96_N8S1492C11D1Ev,_ZThn48_N8S1492C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1492C11D0Ev,_ZTv0_n12_N8S1492C11D0Ev)();
extern void ABISELECT(_ZThn96_N8S1492C11D0Ev,_ZThn48_N8S1492C11D0Ev)() __attribute__((weak));
extern void _ZN7S1492C42v5Ev();
extern void _ZN8S1492C103v27Ev();
extern void _ZN8S1492C103v28Ev();
extern void _ZN8S1492C103v29Ev();
extern void _ZN8S1492C103v30Ev();
extern void _ZN8S1492C103v31Ev();
static  VTBL_ENTRY vtc_S1492C11[] = {
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S1492C11[0]),
  (VTBL_ENTRY)&_ZN8S1492C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1492C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
  (VTBL_ENTRY)&_ZN8S1492C113v32Ev,
  (VTBL_ENTRY)&_ZN8S1492C113v33Ev,
  (VTBL_ENTRY)&_ZN8S1492C113v34Ev,
  (VTBL_ENTRY)&_ZN8S1492C113v35Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S1492C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1492C11D1Ev,_ZTv0_n12_N8S1492C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1492C11D0Ev,_ZTv0_n12_N8S1492C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v31Ev,
};
extern VTBL_ENTRY _ZTV8S1492C11[];
static  VTT_ENTRY vtt_S1492C11[] = {
  {&(_ZTV8S1492C11[3]),  3,27},
  {&(_ZTV8S1492C11[19]),  19,27},
};
extern VTBL_ENTRY _ZTI8S1492C11[];
extern  VTBL_ENTRY _ZTV8S1492C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1492C11[];
static VTBL_ENTRY alt_thunk_names62[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1492C11D0Ev,_ZTv0_n12_N8S1492C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S1492C11D0Ev,_ZThn48_N8S1492C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1492C11D1Ev,_ZTv0_n12_N8S1492C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S1492C11D1Ev,_ZThn48_N8S1492C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1492C11 = {  "S1492C11", // class name
  bases_S1492C11, 3,
  &(vtc_S1492C11[0]), // expected_vtbl_contents
  &(vtt_S1492C11[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI8S1492C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S1492C11),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1492C11),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names62,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1492C1  : S1492C2 , virtual S1492C3 , virtual S1492C10 , S1492C11 , S1492C8 {
  ::S19061C11 s1492c1f0;
  virtual  ~S1492C1(); // _ZN7S1492C1D2Ev
  virtual void  v1(); // _ZN7S1492C12v1Ev
  virtual void  v2(); // _ZN7S1492C12v2Ev
  virtual void  v3(); // _ZN7S1492C12v3Ev
  virtual void  v4(); // _ZN7S1492C12v4Ev
  S1492C1(); // tgen
};
//SIG(1 S1492C1) C1{ BC2{ BC3{ BC4{ vd v5} vd v6 v7 FC4} VBC5{ v8 v9 v10 v11 v12 Fp[4]} BC6{ VBC7{ v13 v14 v15 v16 Fc FD[7]} BC8{ vd v17 v18 v19 v20 FC4} VBC4 vd v21 v22 v23 v24 Fp Fi FL[3]} BC9{ vd v25} v26} VBC3 VBC10{ BC4 vd v27 v28 v29 v30 v31 Fp FL:7} BC11{ VBC10 BC4 vd v32 v33 v34 v35 FC4 Fi FC4[9]} BC8 vd v1 v2 v3 v4 FC12{ v36 v37 v38 Fl[2]}}


 S1492C1 ::~S1492C1(){ note_dtor("S1492C1", this);}
void  S1492C1 ::v1(){vfunc_called(this, "_ZN7S1492C12v1Ev");}
void  S1492C1 ::v2(){vfunc_called(this, "_ZN7S1492C12v2Ev");}
void  S1492C1 ::v3(){vfunc_called(this, "_ZN7S1492C12v3Ev");}
void  S1492C1 ::v4(){vfunc_called(this, "_ZN7S1492C12v4Ev");}
S1492C1 ::S1492C1(){ note_ctor("S1492C1", this);} // tgen

static void Test_S1492C1()
{
  extern Class_Descriptor cd_S1492C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,65)];
    init_test(&cd_S1492C1, buf);
    S1492C1 *dp, &lv = *(dp=new (buf) S1492C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,256), "sizeof(S1492C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1492C1)");
    check_base_class_offset(lv, (S1492C4*)(S1492C3*)(S1492C2*), 0, "S1492C1");
    check_base_class_offset(lv, (S1492C3*)(S1492C2*), 0, "S1492C1");
    check_base_class_offset(lv, (S1492C5*)(S1492C2*), ABISELECT(216,120), "S1492C1");
    check_base_class_offset(lv, (S1492C7*)(S1492C6*)(S1492C2*), ABISELECT(256,140), "S1492C1");
    check_base_class_offset(lv, (S1492C8*)(S1492C6*)(S1492C2*), ABISELECT(16,8), "S1492C1");
    check_base_class_offset(lv, (S1492C4*)(S1492C6*)(S1492C2*), ABISELECT(384,232), "S1492C1");
    check_base_class_offset(lv, (S1492C6*)(S1492C2*), ABISELECT(16,8), "S1492C1");
    check_base_class_offset(lv, (S1492C9*)(S1492C2*), ABISELECT(72,48), "S1492C1");
    check_base_class_offset(lv, (S1492C2*), 0, "S1492C1");
    /*is_ambiguous_... S1492C1::S1492C3 */ AMB_check_base_class_offset(lv, (S1492C4*)(S1492C3*), ABISELECT(392,236), "S1492C1");
    /*is_ambiguous_... S1492C1::S1492C3 */ AMB_check_base_class_offset(lv, (S1492C3*), ABISELECT(392,236), "S1492C1");
    check_base_class_offset(lv, (S1492C4*)(S1492C10*), ABISELECT(408,244), "S1492C1");
    check_base_class_offset(lv, (S1492C10*), ABISELECT(408,244), "S1492C1");
    check_base_class_offset(lv, (S1492C10*)(S1492C11*), ABISELECT(408,244), "S1492C1");
    /*is_ambiguous_... S1492C11::S1492C4 */ AMB_check_base_class_offset(lv, (S1492C4*)(S1492C11*), ABISELECT(80,52), "S1492C1");
    check_base_class_offset(lv, (S1492C11*), ABISELECT(80,52), "S1492C1");
    /*is_ambiguous_... S1492C1::S1492C8 */ AMB_check_base_class_offset(lv, (S1492C8*), ABISELECT(176,100), "S1492C1");
    check_field_offset(lv, s1492c1f0, ABISELECT(192,108), "S1492C1.s1492c1f0");
    test_class_info(&lv, &cd_S1492C1);
    dp->~S1492C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1492C1(Test_S1492C1, "S1492C1", ABISELECT(432,256));

#else // __cplusplus

extern void _ZN7S1492C1C1Ev();
extern void _ZN7S1492C1D2Ev();
Name_Map name_map_S1492C1[] = {
  NSPAIR(_ZN7S1492C1C1Ev),
  NSPAIR(_ZN7S1492C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1492C4;
extern VTBL_ENTRY _ZTI7S1492C4[];
extern  VTBL_ENTRY _ZTV7S1492C4[];
extern Class_Descriptor cd_S1492C3;
extern VTBL_ENTRY _ZTI7S1492C3[];
extern  VTBL_ENTRY _ZTV7S1492C3[];
extern Class_Descriptor cd_S1492C5;
extern VTBL_ENTRY _ZTI7S1492C5[];
extern  VTBL_ENTRY _ZTV7S1492C5[];
extern Class_Descriptor cd_S1492C7;
extern VTBL_ENTRY _ZTI7S1492C7[];
extern  VTBL_ENTRY _ZTV7S1492C7[];
extern Class_Descriptor cd_S1492C8;
extern VTBL_ENTRY _ZTI7S1492C8[];
extern  VTBL_ENTRY _ZTV7S1492C8[];
extern Class_Descriptor cd_S1492C4;
extern VTBL_ENTRY _ZTI7S1492C4[];
extern  VTBL_ENTRY _ZTV7S1492C4[];
extern Class_Descriptor cd_S1492C6;
extern VTBL_ENTRY _ZTI7S1492C6[];
extern  VTBL_ENTRY _ZTV7S1492C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1492C6[];
extern Class_Descriptor cd_S1492C9;
extern VTBL_ENTRY _ZTI7S1492C9[];
extern  VTBL_ENTRY _ZTV7S1492C9[];
extern Class_Descriptor cd_S1492C2;
extern VTBL_ENTRY _ZTI7S1492C2[];
extern  VTBL_ENTRY _ZTV7S1492C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1492C2[];
extern Class_Descriptor cd_S1492C4;
extern VTBL_ENTRY _ZTI7S1492C4[];
extern  VTBL_ENTRY _ZTV7S1492C4[];
extern Class_Descriptor cd_S1492C3;
extern VTBL_ENTRY _ZTI7S1492C3[];
extern  VTBL_ENTRY _ZTV7S1492C3[];
extern Class_Descriptor cd_S1492C4;
extern VTBL_ENTRY _ZTI7S1492C4[];
extern  VTBL_ENTRY _ZTV7S1492C4[];
extern Class_Descriptor cd_S1492C10;
extern VTBL_ENTRY _ZTI8S1492C10[];
extern  VTBL_ENTRY _ZTV8S1492C10[];
extern Class_Descriptor cd_S1492C4;
extern VTBL_ENTRY _ZTI7S1492C4[];
extern  VTBL_ENTRY _ZTV7S1492C4[];
extern Class_Descriptor cd_S1492C11;
extern VTBL_ENTRY _ZTI8S1492C11[];
extern  VTBL_ENTRY _ZTV8S1492C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1492C11[];
extern Class_Descriptor cd_S1492C8;
extern VTBL_ENTRY _ZTI7S1492C8[];
extern  VTBL_ENTRY _ZTV7S1492C8[];
static Base_Class bases_S1492C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1492C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    1, //immediately_derived
  0, 0},
  {&cd_S1492C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S1492C5,    ABISELECT(216,120), //bcp->offset
    54, //bcp->virtual_function_table_offset
    7, //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
    8, //immediately_derived
  0, 1},
  {&cd_S1492C7,    ABISELECT(256,140), //bcp->offset
    66, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1492C8,    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
    6, //immediately_derived
  0, 0},
  {&cd_S1492C4,    ABISELECT(384,232), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1492C6,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1492C9,    ABISELECT(72,48), //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
    12, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1492C2,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1492C4,    ABISELECT(392,236), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S1492C3,    ABISELECT(392,236), //bcp->offset
    83, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1492C4,    ABISELECT(408,244), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S1492C10,    ABISELECT(408,244), //bcp->offset
    94, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1492C4,    ABISELECT(80,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
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1492C11,    ABISELECT(80,52), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1492C8,    ABISELECT(176,100), //bcp->offset
    46, //bcp->virtual_function_table_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},
  {0}};
extern VTBL_ENTRY _ZTI7S1492C1[];
extern void _ZN7S1492C1D1Ev();
extern void _ZN7S1492C1D0Ev();
extern void _ZN7S1492C42v5Ev();
extern void _ZN7S1492C32v6Ev();
extern void _ZN7S1492C32v7Ev();
extern void _ZN7S1492C23v26Ev();
extern void _ZN7S1492C12v1Ev();
extern void _ZN7S1492C12v2Ev();
extern void _ZN7S1492C12v3Ev();
extern void _ZN7S1492C12v4Ev();
extern void ABISELECT(_ZThn16_N7S1492C1D1Ev,_ZThn8_N7S1492C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S1492C1D0Ev,_ZThn8_N7S1492C1D0Ev)();
extern void _ZN7S1492C83v17Ev();
extern void _ZN7S1492C83v18Ev();
extern void _ZN7S1492C83v19Ev();
extern void _ZN7S1492C83v20Ev();
extern void _ZN7S1492C63v21Ev();
extern void _ZN7S1492C63v22Ev();
extern void _ZN7S1492C63v23Ev();
extern void _ZN7S1492C63v24Ev();
extern void ABISELECT(_ZThn72_N7S1492C1D1Ev,_ZThn48_N7S1492C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S1492C1D0Ev,_ZThn48_N7S1492C1D0Ev)();
extern void _ZN7S1492C93v25Ev();
extern void ABISELECT(_ZThn80_N7S1492C1D1Ev,_ZThn52_N7S1492C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S1492C1D0Ev,_ZThn52_N7S1492C1D0Ev)();
extern void _ZN7S1492C42v5Ev();
extern void _ZN8S1492C113v32Ev();
extern void _ZN8S1492C113v33Ev();
extern void _ZN8S1492C113v34Ev();
extern void _ZN8S1492C113v35Ev();
extern void ABISELECT(_ZThn176_N7S1492C1D1Ev,_ZThn100_N7S1492C1D1Ev)();
extern void ABISELECT(_ZThn176_N7S1492C1D0Ev,_ZThn100_N7S1492C1D0Ev)();
extern void _ZN7S1492C83v17Ev();
extern void _ZN7S1492C83v18Ev();
extern void _ZN7S1492C83v19Ev();
extern void _ZN7S1492C83v20Ev();
extern void _ZN7S1492C52v8Ev();
extern void _ZN7S1492C52v9Ev();
extern void _ZN7S1492C53v10Ev();
extern void _ZN7S1492C53v11Ev();
extern void _ZN7S1492C53v12Ev();
extern void _ZN7S1492C73v13Ev();
extern void _ZN7S1492C73v14Ev();
extern void _ZN7S1492C73v15Ev();
extern void _ZN7S1492C73v16Ev();
extern void ABISELECT(_ZTv0_n24_N7S1492C1D1Ev,_ZTv0_n12_N7S1492C1D1Ev)();
extern void ABISELECT(_ZThn384_N7S1492C1D1Ev,_ZThn232_N7S1492C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1492C1D0Ev,_ZTv0_n12_N7S1492C1D0Ev)();
extern void ABISELECT(_ZThn384_N7S1492C1D0Ev,_ZThn232_N7S1492C1D0Ev)() __attribute__((weak));
extern void _ZN7S1492C42v5Ev();
extern void ABISELECT(_ZTv0_n24_N7S1492C1D1Ev,_ZTv0_n12_N7S1492C1D1Ev)();
extern void ABISELECT(_ZThn392_N7S1492C1D1Ev,_ZThn236_N7S1492C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1492C1D0Ev,_ZTv0_n12_N7S1492C1D0Ev)();
extern void ABISELECT(_ZThn392_N7S1492C1D0Ev,_ZThn236_N7S1492C1D0Ev)() __attribute__((weak));
extern void _ZN7S1492C42v5Ev();
extern void _ZN7S1492C32v6Ev();
extern void _ZN7S1492C32v7Ev();
extern void ABISELECT(_ZTv0_n24_N7S1492C1D1Ev,_ZTv0_n12_N7S1492C1D1Ev)();
extern void ABISELECT(_ZThn408_N7S1492C1D1Ev,_ZThn244_N7S1492C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1492C1D0Ev,_ZTv0_n12_N7S1492C1D0Ev)();
extern void ABISELECT(_ZThn408_N7S1492C1D0Ev,_ZThn244_N7S1492C1D0Ev)() __attribute__((weak));
extern void _ZN7S1492C42v5Ev();
extern void _ZN8S1492C103v27Ev();
extern void _ZN8S1492C103v28Ev();
extern void _ZN8S1492C103v29Ev();
extern void _ZN8S1492C103v30Ev();
extern void _ZN8S1492C103v31Ev();
static  VTBL_ENTRY vtc_S1492C1[] = {
  ABISELECT(408,244),
  ABISELECT(392,236),
  ABISELECT(384,232),
  ABISELECT(256,140),
  ABISELECT(216,120),
  0,
  (VTBL_ENTRY)&(_ZTI7S1492C1[0]),
  (VTBL_ENTRY)&_ZN7S1492C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1492C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1492C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1492C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1492C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1492C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1492C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1492C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1492C12v4Ev,
  ABISELECT(368,224),
  ABISELECT(240,132),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1492C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1492C1D1Ev,_ZThn8_N7S1492C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1492C1D0Ev,_ZThn8_N7S1492C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1492C83v17Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v21Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v22Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v23Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v24Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S1492C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S1492C1D1Ev,_ZThn48_N7S1492C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S1492C1D0Ev,_ZThn48_N7S1492C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1492C93v25Ev,
  ABISELECT(328,192),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S1492C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S1492C1D1Ev,_ZThn52_N7S1492C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S1492C1D0Ev,_ZThn52_N7S1492C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
  (VTBL_ENTRY)&_ZN8S1492C113v32Ev,
  (VTBL_ENTRY)&_ZN8S1492C113v33Ev,
  (VTBL_ENTRY)&_ZN8S1492C113v34Ev,
  (VTBL_ENTRY)&_ZN8S1492C113v35Ev,
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI7S1492C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N7S1492C1D1Ev,_ZThn100_N7S1492C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N7S1492C1D0Ev,_ZThn100_N7S1492C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1492C83v17Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v20Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-120),
  (VTBL_ENTRY)&(_ZTI7S1492C1[0]),
  (VTBL_ENTRY)&_ZN7S1492C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1492C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1492C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1492C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1492C53v12Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI7S1492C1[0]),
  (VTBL_ENTRY)&_ZN7S1492C73v13Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v14Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v15Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v16Ev,
  0,
  ABISELECT(-384,-232),
  ABISELECT(-384,-232),
  (VTBL_ENTRY)&(_ZTI7S1492C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1492C1D1Ev,_ZTv0_n12_N7S1492C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1492C1D0Ev,_ZTv0_n12_N7S1492C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
  0,
  0,
  0,
  ABISELECT(-392,-236),
  ABISELECT(-392,-236),
  (VTBL_ENTRY)&(_ZTI7S1492C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1492C1D1Ev,_ZTv0_n12_N7S1492C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1492C1D0Ev,_ZTv0_n12_N7S1492C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1492C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1492C32v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-408,-244),
  ABISELECT(-408,-244),
  (VTBL_ENTRY)&(_ZTI7S1492C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1492C1D1Ev,_ZTv0_n12_N7S1492C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1492C1D0Ev,_ZTv0_n12_N7S1492C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v31Ev,
};
extern VTBL_ENTRY _ZTV7S1492C1[];
extern void _ZN7S1492C2D1Ev();
extern void _ZN7S1492C2D0Ev();
extern void _ZN7S1492C42v5Ev();
extern void _ZN7S1492C32v6Ev();
extern void _ZN7S1492C32v7Ev();
extern void _ZN7S1492C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S1492C2__7S1492C1[] = {
  ABISELECT(384,232),
  ABISELECT(256,140),
  ABISELECT(216,120),
  0,
  (VTBL_ENTRY)&(_ZTI7S1492C2[0]),
  (VTBL_ENTRY)&_ZN7S1492C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1492C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1492C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1492C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1492C23v26Ev,
};
extern void _ZN7S1492C6D1Ev();
extern void _ZN7S1492C6D0Ev();
extern void _ZN7S1492C83v17Ev();
extern void _ZN7S1492C83v18Ev();
extern void _ZN7S1492C83v19Ev();
extern void _ZN7S1492C83v20Ev();
extern void _ZN7S1492C63v21Ev();
extern void _ZN7S1492C63v22Ev();
extern void _ZN7S1492C63v23Ev();
extern void _ZN7S1492C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S1492C67S1492C2__7S1492C1[] = {
  ABISELECT(368,224),
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S1492C6[0]),
  (VTBL_ENTRY)&_ZN7S1492C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1492C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v17Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v21Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v22Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v23Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v24Ev,
};
extern void _ZN7S1492C73v13Ev();
extern void _ZN7S1492C73v14Ev();
extern void _ZN7S1492C73v15Ev();
extern void _ZN7S1492C73v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1492C7__7S1492C67S1492C2__7S1492C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-240,-132),
  (VTBL_ENTRY)&(_ZTI7S1492C6[0]),
  (VTBL_ENTRY)&_ZN7S1492C73v13Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v14Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v15Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1492C6D1Ev,_ZTv0_n12_N7S1492C6D1Ev)();
extern void ABISELECT(_ZThn368_N7S1492C6D1Ev,_ZThn224_N7S1492C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1492C6D0Ev,_ZTv0_n12_N7S1492C6D0Ev)();
extern void ABISELECT(_ZThn368_N7S1492C6D0Ev,_ZThn224_N7S1492C6D0Ev)() __attribute__((weak));
extern void _ZN7S1492C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S1492C4__7S1492C67S1492C2__7S1492C1[] = {
  0,
  ABISELECT(-368,-224),
  ABISELECT(-368,-224),
  (VTBL_ENTRY)&(_ZTI7S1492C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1492C6D1Ev,_ZTv0_n12_N7S1492C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1492C6D0Ev,_ZTv0_n12_N7S1492C6D0Ev),
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
};
extern void _ZN7S1492C52v8Ev();
extern void _ZN7S1492C52v9Ev();
extern void _ZN7S1492C53v10Ev();
extern void _ZN7S1492C53v11Ev();
extern void _ZN7S1492C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1492C5__7S1492C2__7S1492C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-120),
  (VTBL_ENTRY)&(_ZTI7S1492C2[0]),
  (VTBL_ENTRY)&_ZN7S1492C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1492C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1492C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1492C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1492C53v12Ev,
};
extern void ABISELECT(_ZThn16_N7S1492C2D1Ev,_ZThn8_N7S1492C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S1492C2D0Ev,_ZThn8_N7S1492C2D0Ev)();
extern void _ZN7S1492C83v17Ev();
extern void _ZN7S1492C83v18Ev();
extern void _ZN7S1492C83v19Ev();
extern void _ZN7S1492C83v20Ev();
extern void _ZN7S1492C63v21Ev();
extern void _ZN7S1492C63v22Ev();
extern void _ZN7S1492C63v23Ev();
extern void _ZN7S1492C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S1492C6__7S1492C2__7S1492C1[] = {
  ABISELECT(368,224),
  ABISELECT(240,132),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1492C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1492C2D1Ev,_ZThn8_N7S1492C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1492C2D0Ev,_ZThn8_N7S1492C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1492C83v17Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1492C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v21Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v22Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v23Ev,
  (VTBL_ENTRY)&_ZN7S1492C63v24Ev,
};
extern void _ZN7S1492C73v13Ev();
extern void _ZN7S1492C73v14Ev();
extern void _ZN7S1492C73v15Ev();
extern void _ZN7S1492C73v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1492C7__7S1492C2__7S1492C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI7S1492C2[0]),
  (VTBL_ENTRY)&_ZN7S1492C73v13Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v14Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v15Ev,
  (VTBL_ENTRY)&_ZN7S1492C73v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1492C2D1Ev,_ZTv0_n12_N7S1492C2D1Ev)();
extern void ABISELECT(_ZThn384_N7S1492C2D1Ev,_ZThn232_N7S1492C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1492C2D0Ev,_ZTv0_n12_N7S1492C2D0Ev)();
extern void ABISELECT(_ZThn384_N7S1492C2D0Ev,_ZThn232_N7S1492C2D0Ev)() __attribute__((weak));
extern void _ZN7S1492C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S1492C4__A1__7S1492C2__7S1492C1[] = {
  0,
  ABISELECT(-384,-232),
  ABISELECT(-384,-232),
  (VTBL_ENTRY)&(_ZTI7S1492C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1492C2D1Ev,_ZTv0_n12_N7S1492C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1492C2D0Ev,_ZTv0_n12_N7S1492C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
};
extern void _ZN8S1492C11D1Ev();
extern void _ZN8S1492C11D0Ev();
extern void _ZN7S1492C42v5Ev();
extern void _ZN8S1492C113v32Ev();
extern void _ZN8S1492C113v33Ev();
extern void _ZN8S1492C113v34Ev();
extern void _ZN8S1492C113v35Ev();
static  VTBL_ENTRY _tg__ZTV8S1492C11__7S1492C1[] = {
  ABISELECT(328,192),
  0,
  (VTBL_ENTRY)&(_ZTI8S1492C11[0]),
  (VTBL_ENTRY)&_ZN8S1492C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1492C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
  (VTBL_ENTRY)&_ZN8S1492C113v32Ev,
  (VTBL_ENTRY)&_ZN8S1492C113v33Ev,
  (VTBL_ENTRY)&_ZN8S1492C113v34Ev,
  (VTBL_ENTRY)&_ZN8S1492C113v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1492C11D1Ev,_ZTv0_n12_N8S1492C11D1Ev)();
extern void ABISELECT(_ZThn328_N8S1492C11D1Ev,_ZThn192_N8S1492C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1492C11D0Ev,_ZTv0_n12_N8S1492C11D0Ev)();
extern void ABISELECT(_ZThn328_N8S1492C11D0Ev,_ZThn192_N8S1492C11D0Ev)() __attribute__((weak));
extern void _ZN7S1492C42v5Ev();
extern void _ZN8S1492C103v27Ev();
extern void _ZN8S1492C103v28Ev();
extern void _ZN8S1492C103v29Ev();
extern void _ZN8S1492C103v30Ev();
extern void _ZN8S1492C103v31Ev();
static  VTBL_ENTRY _tg__ZTV8S1492C10__8S1492C11__7S1492C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-192),
  ABISELECT(-328,-192),
  (VTBL_ENTRY)&(_ZTI8S1492C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1492C11D1Ev,_ZTv0_n12_N8S1492C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1492C11D0Ev,_ZTv0_n12_N8S1492C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1492C42v5Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1492C103v31Ev,
};
static  VTT_ENTRY vtt_S1492C1[] = {
  {&(_ZTV7S1492C1[7]),  7,111},
  {&(_tg__ZTV7S1492C2__7S1492C1[5]),  5,11},
  {&(_tg__ZTV7S1492C67S1492C2__7S1492C1[4]),  4,14},
  {&(_tg__ZTV7S1492C7__7S1492C67S1492C2__7S1492C1[6]),  6,10},
  {&(_tg__ZTV7S1492C4__7S1492C67S1492C2__7S1492C1[4]),  4,7},
  {&(_tg__ZTV7S1492C5__7S1492C2__7S1492C1[7]),  7,12},
  {&(_tg__ZTV7S1492C6__7S1492C2__7S1492C1[4]),  4,14},
  {&(_tg__ZTV7S1492C7__7S1492C2__7S1492C1[6]),  6,10},
  {&(_tg__ZTV7S1492C4__A1__7S1492C2__7S1492C1[4]),  4,7},
  {&(_tg__ZTV8S1492C11__7S1492C1[3]),  3,10},
  {&(_tg__ZTV8S1492C10__8S1492C11__7S1492C1[9]),  9,17},
  {&(_ZTV7S1492C1[61]),  61,111},
  {&(_ZTV7S1492C1[21]),  21,111},
  {&(_ZTV7S1492C1[72]),  72,111},
  {&(_ZTV7S1492C1[80]),  80,111},
  {&(_ZTV7S1492C1[89]),  89,111},
  {&(_ZTV7S1492C1[103]),  103,111},
  {&(_ZTV7S1492C1[39]),  39,111},
};
extern VTBL_ENTRY _ZTI7S1492C1[];
extern  VTBL_ENTRY _ZTV7S1492C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1492C1[];
static VTBL_ENTRY alt_thunk_names63[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1492C11D0Ev,_ZTv0_n12_N8S1492C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S1492C11D0Ev,_ZThn192_N8S1492C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1492C11D1Ev,_ZTv0_n12_N8S1492C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S1492C11D1Ev,_ZThn192_N8S1492C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1492C2D0Ev,_ZTv0_n12_N7S1492C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S1492C2D0Ev,_ZThn232_N7S1492C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1492C2D1Ev,_ZTv0_n12_N7S1492C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S1492C2D1Ev,_ZThn232_N7S1492C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1492C6D0Ev,_ZTv0_n12_N7S1492C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S1492C6D0Ev,_ZThn224_N7S1492C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1492C6D1Ev,_ZTv0_n12_N7S1492C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S1492C6D1Ev,_ZThn224_N7S1492C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1492C1D0Ev,_ZTv0_n12_N7S1492C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S1492C1D0Ev,_ZThn244_N7S1492C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn392_N7S1492C1D0Ev,_ZThn236_N7S1492C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S1492C1D0Ev,_ZThn232_N7S1492C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1492C1D1Ev,_ZTv0_n12_N7S1492C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S1492C1D1Ev,_ZThn244_N7S1492C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn392_N7S1492C1D1Ev,_ZThn236_N7S1492C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S1492C1D1Ev,_ZThn232_N7S1492C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1492C1 = {  "S1492C1", // class name
  bases_S1492C1, 16,
  &(vtc_S1492C1[0]), // expected_vtbl_contents
  &(vtt_S1492C1[0]), // expected_vtt_contents
  ABISELECT(432,256), // object size
  NSPAIRA(_ZTI7S1492C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1492C1),111, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1492C1),18, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names63,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19420C3  {
  virtual  ~S19420C3(); // _ZN8S19420C3D1Ev
  virtual void  v9(); // _ZN8S19420C32v9Ev
  S19420C3(); // tgen
};
//SIG(-1 S19420C3) C1{ vd v1}


 S19420C3 ::~S19420C3(){ note_dtor("S19420C3", this);}
void  S19420C3 ::v9(){vfunc_called(this, "_ZN8S19420C32v9Ev");}
S19420C3 ::S19420C3(){ note_ctor("S19420C3", this);} // tgen

static void Test_S19420C3()
{
  extern Class_Descriptor cd_S19420C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19420C3, buf);
    S19420C3 *dp, &lv = *(dp=new (buf) S19420C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19420C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19420C3)");
    test_class_info(&lv, &cd_S19420C3);
    dp->~S19420C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19420C3(Test_S19420C3, "S19420C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19420C3C1Ev();
extern void _ZN8S19420C3D1Ev();
Name_Map name_map_S19420C3[] = {
  NSPAIR(_ZN8S19420C3C1Ev),
  NSPAIR(_ZN8S19420C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19420C3[];
extern void _ZN8S19420C3D1Ev();
extern void _ZN8S19420C3D0Ev();
extern void _ZN8S19420C32v9Ev();
static  VTBL_ENTRY vtc_S19420C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19420C3[0]),
  (VTBL_ENTRY)&_ZN8S19420C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19420C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
};
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
Class_Descriptor cd_S19420C3 = {  "S19420C3", // class name
  0,0,//no base classes
  &(vtc_S19420C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19420C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19420C3),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  S19420C2  : S19420C3 {
  virtual  ~S19420C2(); // _ZN8S19420C2D1Ev
  virtual void  v10(); // _ZN8S19420C23v10Ev
  S19420C2(); // tgen
};
//SIG(-1 S19420C2) C1{ BC2{ vd v2} vd v1}


 S19420C2 ::~S19420C2(){ note_dtor("S19420C2", this);}
void  S19420C2 ::v10(){vfunc_called(this, "_ZN8S19420C23v10Ev");}
S19420C2 ::S19420C2(){ note_ctor("S19420C2", this);} // tgen

static void Test_S19420C2()
{
  extern Class_Descriptor cd_S19420C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19420C2, buf);
    S19420C2 *dp, &lv = *(dp=new (buf) S19420C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19420C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19420C2)");
    check_base_class_offset(lv, (S19420C3*), 0, "S19420C2");
    test_class_info(&lv, &cd_S19420C2);
    dp->~S19420C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19420C2(Test_S19420C2, "S19420C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19420C2C1Ev();
extern void _ZN8S19420C2D1Ev();
Name_Map name_map_S19420C2[] = {
  NSPAIR(_ZN8S19420C2C1Ev),
  NSPAIR(_ZN8S19420C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
static Base_Class bases_S19420C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19420C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S19420C2[];
extern void _ZN8S19420C2D1Ev();
extern void _ZN8S19420C2D0Ev();
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
static  VTBL_ENTRY vtc_S19420C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19420C2[0]),
  (VTBL_ENTRY)&_ZN8S19420C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19420C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S19420C2[];
extern  VTBL_ENTRY _ZTV8S19420C2[];
Class_Descriptor cd_S19420C2 = {  "S19420C2", // class name
  bases_S19420C2, 1,
  &(vtc_S19420C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19420C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19420C2),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  S19420C5  : S19420C2 , S19420C3 {
  virtual  ~S19420C5(); // _ZN8S19420C5D1Ev
  virtual void  v11(); // _ZN8S19420C53v11Ev
  virtual void  v12(); // _ZN8S19420C53v12Ev
  S19420C5(); // tgen
};
//SIG(-1 S19420C5) C1{ BC2{ BC3{ vd v3} vd v4} BC3 vd v1 v2}


 S19420C5 ::~S19420C5(){ note_dtor("S19420C5", this);}
void  S19420C5 ::v11(){vfunc_called(this, "_ZN8S19420C53v11Ev");}
void  S19420C5 ::v12(){vfunc_called(this, "_ZN8S19420C53v12Ev");}
S19420C5 ::S19420C5(){ note_ctor("S19420C5", this);} // tgen

static void Test_S19420C5()
{
  extern Class_Descriptor cd_S19420C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19420C5, buf);
    S19420C5 *dp, &lv = *(dp=new (buf) S19420C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19420C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19420C5)");
    check_base_class_offset(lv, (S19420C3*)(S19420C2*), 0, "S19420C5");
    check_base_class_offset(lv, (S19420C2*), 0, "S19420C5");
    /*is_ambiguous_... S19420C5::S19420C3 */ AMB_check_base_class_offset(lv, (S19420C3*), ABISELECT(8,4), "S19420C5");
    test_class_info(&lv, &cd_S19420C5);
    dp->~S19420C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19420C5(Test_S19420C5, "S19420C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19420C5C1Ev();
extern void _ZN8S19420C5D1Ev();
Name_Map name_map_S19420C5[] = {
  NSPAIR(_ZN8S19420C5C1Ev),
  NSPAIR(_ZN8S19420C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C2;
extern VTBL_ENTRY _ZTI8S19420C2[];
extern  VTBL_ENTRY _ZTV8S19420C2[];
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
static Base_Class bases_S19420C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19420C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19420C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19420C3,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19420C5[];
extern void _ZN8S19420C5D1Ev();
extern void _ZN8S19420C5D0Ev();
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
extern void _ZN8S19420C53v11Ev();
extern void _ZN8S19420C53v12Ev();
extern void ABISELECT(_ZThn8_N8S19420C5D1Ev,_ZThn4_N8S19420C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S19420C5D0Ev,_ZThn4_N8S19420C5D0Ev)();
extern void _ZN8S19420C32v9Ev();
static  VTBL_ENTRY vtc_S19420C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19420C5[0]),
  (VTBL_ENTRY)&_ZN8S19420C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19420C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v12Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19420C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19420C5D1Ev,_ZThn4_N8S19420C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19420C5D0Ev,_ZThn4_N8S19420C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
};
extern VTBL_ENTRY _ZTI8S19420C5[];
extern  VTBL_ENTRY _ZTV8S19420C5[];
Class_Descriptor cd_S19420C5 = {  "S19420C5", // class name
  bases_S19420C5, 3,
  &(vtc_S19420C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19420C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19420C5),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19420C6  : S19420C5 {
  ::S19420C5 s19420c6f0;
  ::S19420C3 s19420c6f1;
  virtual  ~S19420C6(); // _ZN8S19420C6D1Ev
  virtual void  v13(); // _ZN8S19420C63v13Ev
  virtual void  v14(); // _ZN8S19420C63v14Ev
  virtual void  v15(); // _ZN8S19420C63v15Ev
  virtual void  v16(); // _ZN8S19420C63v16Ev
  virtual void  v17(); // _ZN8S19420C63v17Ev
  S19420C6(); // tgen
};
//SIG(-1 S19420C6) C1{ BC2{ BC3{ BC4{ vd v6} vd v7} BC4 vd v8 v9} vd v1 v2 v3 v4 v5 FC2 FC4}


 S19420C6 ::~S19420C6(){ note_dtor("S19420C6", this);}
void  S19420C6 ::v13(){vfunc_called(this, "_ZN8S19420C63v13Ev");}
void  S19420C6 ::v14(){vfunc_called(this, "_ZN8S19420C63v14Ev");}
void  S19420C6 ::v15(){vfunc_called(this, "_ZN8S19420C63v15Ev");}
void  S19420C6 ::v16(){vfunc_called(this, "_ZN8S19420C63v16Ev");}
void  S19420C6 ::v17(){vfunc_called(this, "_ZN8S19420C63v17Ev");}
S19420C6 ::S19420C6(){ note_ctor("S19420C6", this);} // tgen

static void Test_S19420C6()
{
  extern Class_Descriptor cd_S19420C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19420C6, buf);
    S19420C6 *dp, &lv = *(dp=new (buf) S19420C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19420C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19420C6)");
    check_base_class_offset(lv, (S19420C3*)(S19420C2*)(S19420C5*), 0, "S19420C6");
    check_base_class_offset(lv, (S19420C2*)(S19420C5*), 0, "S19420C6");
    /*is_ambiguous_... S19420C5::S19420C3 */ AMB_check_base_class_offset(lv, (S19420C3*)(S19420C5*), ABISELECT(8,4), "S19420C6");
    check_base_class_offset(lv, (S19420C5*), 0, "S19420C6");
    check_field_offset(lv, s19420c6f0, ABISELECT(16,8), "S19420C6.s19420c6f0");
    check_field_offset(lv, s19420c6f1, ABISELECT(32,16), "S19420C6.s19420c6f1");
    test_class_info(&lv, &cd_S19420C6);
    dp->~S19420C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19420C6(Test_S19420C6, "S19420C6", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19420C6C1Ev();
extern void _ZN8S19420C6D1Ev();
Name_Map name_map_S19420C6[] = {
  NSPAIR(_ZN8S19420C6C1Ev),
  NSPAIR(_ZN8S19420C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C2;
extern VTBL_ENTRY _ZTI8S19420C2[];
extern  VTBL_ENTRY _ZTV8S19420C2[];
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C5;
extern VTBL_ENTRY _ZTI8S19420C5[];
extern  VTBL_ENTRY _ZTV8S19420C5[];
static Base_Class bases_S19420C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19420C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19420C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19420C3,    ABISELECT(8,4), //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19420C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19420C6[];
extern void _ZN8S19420C6D1Ev();
extern void _ZN8S19420C6D0Ev();
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
extern void _ZN8S19420C53v11Ev();
extern void _ZN8S19420C53v12Ev();
extern void _ZN8S19420C63v13Ev();
extern void _ZN8S19420C63v14Ev();
extern void _ZN8S19420C63v15Ev();
extern void _ZN8S19420C63v16Ev();
extern void _ZN8S19420C63v17Ev();
extern void ABISELECT(_ZThn8_N8S19420C6D1Ev,_ZThn4_N8S19420C6D1Ev)();
extern void ABISELECT(_ZThn8_N8S19420C6D0Ev,_ZThn4_N8S19420C6D0Ev)();
extern void _ZN8S19420C32v9Ev();
static  VTBL_ENTRY vtc_S19420C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19420C6[0]),
  (VTBL_ENTRY)&_ZN8S19420C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19420C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v13Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v17Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19420C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19420C6D1Ev,_ZThn4_N8S19420C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19420C6D0Ev,_ZThn4_N8S19420C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
};
extern VTBL_ENTRY _ZTI8S19420C6[];
extern  VTBL_ENTRY _ZTV8S19420C6[];
Class_Descriptor cd_S19420C6 = {  "S19420C6", // class name
  bases_S19420C6, 4,
  &(vtc_S19420C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19420C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19420C6),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  S19420C7  : virtual S19420C5 , virtual S19420C2 {
  int s19420c7f0;
  char s19420c7f1;
  int s19420c7f2;
  virtual  ~S19420C7(); // _ZN8S19420C7D2Ev
  virtual void  v18(); // _ZN8S19420C73v18Ev
  virtual void  v19(); // _ZN8S19420C73v19Ev
  virtual void  v20(); // _ZN8S19420C73v20Ev
  virtual void  v21(); // _ZN8S19420C73v21Ev
  virtual void  v22(); // _ZN8S19420C73v22Ev
  virtual void  v23(); // _ZN8S19420C73v23Ev
  S19420C7(); // tgen
};
//SIG(-1 S19420C7) C1{ VBC2{ BC3{ BC4{ vd v7} vd v8} BC4 vd v9 v10} VBC3 vd v1 v2 v3 v4 v5 v6 Fi Fc Fi}


 S19420C7 ::~S19420C7(){ note_dtor("S19420C7", this);}
void  S19420C7 ::v18(){vfunc_called(this, "_ZN8S19420C73v18Ev");}
void  S19420C7 ::v19(){vfunc_called(this, "_ZN8S19420C73v19Ev");}
void  S19420C7 ::v20(){vfunc_called(this, "_ZN8S19420C73v20Ev");}
void  S19420C7 ::v21(){vfunc_called(this, "_ZN8S19420C73v21Ev");}
void  S19420C7 ::v22(){vfunc_called(this, "_ZN8S19420C73v22Ev");}
void  S19420C7 ::v23(){vfunc_called(this, "_ZN8S19420C73v23Ev");}
S19420C7 ::S19420C7(){ note_ctor("S19420C7", this);} // tgen

static void Test_S19420C7()
{
  extern Class_Descriptor cd_S19420C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19420C7, buf);
    S19420C7 *dp, &lv = *(dp=new (buf) S19420C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19420C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19420C7)");
    check_base_class_offset(lv, (S19420C3*)(S19420C2*)(S19420C5*), ABISELECT(24,16), "S19420C7");
    check_base_class_offset(lv, (S19420C2*)(S19420C5*), ABISELECT(24,16), "S19420C7");
    /*is_ambiguous_... S19420C5::S19420C3 */ AMB_check_base_class_offset(lv, (S19420C3*)(S19420C5*), ABISELECT(32,20), "S19420C7");
    check_base_class_offset(lv, (S19420C5*), ABISELECT(24,16), "S19420C7");
    /*is_ambiguous_... S19420C7::S19420C2 */ AMB_check_base_class_offset(lv, (S19420C3*)(S19420C2*), 0, "S19420C7");
    /*is_ambiguous_... S19420C7::S19420C2 */ AMB_check_base_class_offset(lv, (S19420C2*), 0, "S19420C7");
    check_field_offset(lv, s19420c7f0, ABISELECT(8,4), "S19420C7.s19420c7f0");
    check_field_offset(lv, s19420c7f1, ABISELECT(12,8), "S19420C7.s19420c7f1");
    check_field_offset(lv, s19420c7f2, ABISELECT(16,12), "S19420C7.s19420c7f2");
    test_class_info(&lv, &cd_S19420C7);
    dp->~S19420C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19420C7(Test_S19420C7, "S19420C7", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S19420C7C1Ev();
extern void _ZN8S19420C7D2Ev();
Name_Map name_map_S19420C7[] = {
  NSPAIR(_ZN8S19420C7C1Ev),
  NSPAIR(_ZN8S19420C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C2;
extern VTBL_ENTRY _ZTI8S19420C2[];
extern  VTBL_ENTRY _ZTV8S19420C2[];
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C5;
extern VTBL_ENTRY _ZTI8S19420C5[];
extern  VTBL_ENTRY _ZTV8S19420C5[];
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C2;
extern VTBL_ENTRY _ZTI8S19420C2[];
extern  VTBL_ENTRY _ZTV8S19420C2[];
static Base_Class bases_S19420C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19420C3,    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, 0},
  {&cd_S19420C2,    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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19420C3,    ABISELECT(32,20), //bcp->offset
    30, //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
    3, //immediately_derived
  0, 0},
  {&cd_S19420C5,    ABISELECT(24,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19420C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19420C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19420C7[];
extern void ABISELECT(_ZTv0_n24_N8S19420C7D1Ev,_ZTv0_n12_N8S19420C7D1Ev)();
extern void _ZN8S19420C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19420C7D0Ev,_ZTv0_n12_N8S19420C7D0Ev)();
extern void _ZN8S19420C7D0Ev() __attribute__((weak));
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
extern void _ZN8S19420C73v18Ev();
extern void _ZN8S19420C73v19Ev();
extern void _ZN8S19420C73v20Ev();
extern void _ZN8S19420C73v21Ev();
extern void _ZN8S19420C73v22Ev();
extern void _ZN8S19420C73v23Ev();
extern void ABISELECT(_ZTv0_n24_N8S19420C7D1Ev,_ZTv0_n12_N8S19420C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S19420C7D1Ev,_ZThn16_N8S19420C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19420C7D0Ev,_ZTv0_n12_N8S19420C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S19420C7D0Ev,_ZThn16_N8S19420C7D0Ev)() __attribute__((weak));
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
extern void _ZN8S19420C53v11Ev();
extern void _ZN8S19420C53v12Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19420C7D1Ev,_ZTvn4_n12_N8S19420C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19420C7D0Ev,_ZTvn4_n12_N8S19420C7D0Ev)();
extern void _ZN8S19420C32v9Ev();
static  VTBL_ENTRY vtc_S19420C7[] = {
  0,
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19420C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C7D1Ev,_ZTv0_n12_N8S19420C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C7D0Ev,_ZTv0_n12_N8S19420C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v18Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v21Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v22Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19420C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C7D1Ev,_ZTv0_n12_N8S19420C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C7D0Ev,_ZTv0_n12_N8S19420C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v12Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19420C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19420C7D1Ev,_ZTvn4_n12_N8S19420C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19420C7D0Ev,_ZTvn4_n12_N8S19420C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
};
extern VTBL_ENTRY _ZTV8S19420C7[];
static  VTT_ENTRY vtt_S19420C7[] = {
  {&(_ZTV8S19420C7[7]),  7,35},
  {&(_ZTV8S19420C7[24]),  24,35},
  {&(_ZTV8S19420C7[32]),  32,35},
  {&(_ZTV8S19420C7[7]),  7,35},
};
extern VTBL_ENTRY _ZTI8S19420C7[];
extern  VTBL_ENTRY _ZTV8S19420C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19420C7[];
static VTBL_ENTRY alt_thunk_names64[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19420C7D0Ev,_ZTv0_n12_N8S19420C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19420C7D0Ev,_ZThn16_N8S19420C7D0Ev),
  (VTBL_ENTRY)_ZN8S19420C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19420C7D1Ev,_ZTv0_n12_N8S19420C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19420C7D1Ev,_ZThn16_N8S19420C7D1Ev),
  (VTBL_ENTRY)_ZN8S19420C7D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19420C7 = {  "S19420C7", // class name
  bases_S19420C7, 6,
  &(vtc_S19420C7[0]), // expected_vtbl_contents
  &(vtt_S19420C7[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S19420C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19420C7),35, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19420C7),4, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names64,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19420C4  : virtual S19420C5 , virtual S19420C2 , virtual S19420C6 , virtual S19420C7 , virtual S19420C3 {
  virtual void  v24(); // _ZN8S19420C43v24Ev
  virtual void  v25(); // _ZN8S19420C43v25Ev
  virtual void  v26(); // _ZN8S19420C43v26Ev
  ~S19420C4(); // tgen
  S19420C4(); // tgen
};
//SIG(-1 S19420C4) C1{ VBC2{ BC3{ BC4{ vd v4} vd v5} BC4 vd v6 v7} VBC3 VBC5{ BC2 vd v8 v9 v10 v11 v12 FC2 FC4} VBC6{ VBC2 VBC3 vd v13 v14 v15 v16 v17 v18 Fi Fc Fi} VBC4 v1 v2 v3}


void  S19420C4 ::v24(){vfunc_called(this, "_ZN8S19420C43v24Ev");}
void  S19420C4 ::v25(){vfunc_called(this, "_ZN8S19420C43v25Ev");}
void  S19420C4 ::v26(){vfunc_called(this, "_ZN8S19420C43v26Ev");}
S19420C4 ::~S19420C4(){ note_dtor("S19420C4", this);} // tgen
S19420C4 ::S19420C4(){ note_ctor("S19420C4", this);} // tgen

static void Test_S19420C4()
{
  extern Class_Descriptor cd_S19420C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S19420C4, buf);
    S19420C4 *dp, &lv = *(dp=new (buf) S19420C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S19420C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19420C4)");
    /*is_ambiguous_... S19420C4::S19420C5 */ AMB_check_base_class_offset(lv, (S19420C3*)(S19420C2*)(S19420C5*), ABISELECT(8,4), "S19420C4");
    /*is_ambiguous_... S19420C4::S19420C5 */ AMB_check_base_class_offset(lv, (S19420C2*)(S19420C5*), ABISELECT(8,4), "S19420C4");
    /*is_ambiguous_... S19420C4::S19420C5 */ AMB_check_base_class_offset(lv, (S19420C3*)(S19420C5*), ABISELECT(16,8), "S19420C4");
    /*is_ambiguous_... S19420C4::S19420C5 */ AMB_check_base_class_offset(lv, (S19420C5*), ABISELECT(8,4), "S19420C4");
    check_base_class_offset(lv, (S19420C5*)(S19420C7*), ABISELECT(8,4), "S19420C4");
    /*is_ambiguous_... S19420C4::S19420C2 */ AMB_check_base_class_offset(lv, (S19420C3*)(S19420C2*), ABISELECT(64,32), "S19420C4");
    /*is_ambiguous_... S19420C4::S19420C2 */ AMB_check_base_class_offset(lv, (S19420C2*), ABISELECT(64,32), "S19420C4");
    /*is_ambiguous_... S19420C7::S19420C2 */ AMB_check_base_class_offset(lv, (S19420C2*)(S19420C7*), ABISELECT(64,32), "S19420C4");
    check_base_class_offset(lv, (S19420C3*)(S19420C2*)(S19420C5*)(S19420C6*), ABISELECT(24,12), "S19420C4");
    check_base_class_offset(lv, (S19420C2*)(S19420C5*)(S19420C6*), ABISELECT(24,12), "S19420C4");
    /*is_ambiguous_... S19420C5::S19420C3 */ AMB_check_base_class_offset(lv, (S19420C3*)(S19420C5*)(S19420C6*), ABISELECT(32,16), "S19420C4");
    check_base_class_offset(lv, (S19420C5*)(S19420C6*), ABISELECT(24,12), "S19420C4");
    check_base_class_offset(lv, (S19420C6*), ABISELECT(24,12), "S19420C4");
    check_base_class_offset(lv, (S19420C7*), ABISELECT(64,32), "S19420C4");
    /*is_ambiguous_... S19420C4::S19420C3 */ AMB_check_base_class_offset(lv, (S19420C3*), 0, "S19420C4");
    test_class_info(&lv, &cd_S19420C4);
    dp->~S19420C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19420C4(Test_S19420C4, "S19420C4", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S19420C4C1Ev();
extern void _ZN8S19420C4D1Ev();
Name_Map name_map_S19420C4[] = {
  NSPAIR(_ZN8S19420C4C1Ev),
  NSPAIR(_ZN8S19420C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C2;
extern VTBL_ENTRY _ZTI8S19420C2[];
extern  VTBL_ENTRY _ZTV8S19420C2[];
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C5;
extern VTBL_ENTRY _ZTI8S19420C5[];
extern  VTBL_ENTRY _ZTV8S19420C5[];
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C2;
extern VTBL_ENTRY _ZTI8S19420C2[];
extern  VTBL_ENTRY _ZTV8S19420C2[];
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C2;
extern VTBL_ENTRY _ZTI8S19420C2[];
extern  VTBL_ENTRY _ZTV8S19420C2[];
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C5;
extern VTBL_ENTRY _ZTI8S19420C5[];
extern  VTBL_ENTRY _ZTV8S19420C5[];
extern Class_Descriptor cd_S19420C6;
extern VTBL_ENTRY _ZTI8S19420C6[];
extern  VTBL_ENTRY _ZTV8S19420C6[];
extern Class_Descriptor cd_S19420C7;
extern VTBL_ENTRY _ZTI8S19420C7[];
extern  VTBL_ENTRY _ZTV8S19420C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19420C7[];
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
static Base_Class bases_S19420C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19420C3,    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_S19420C2,    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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19420C3,    ABISELECT(16,8), //bcp->offset
    28, //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
    3, //immediately_derived
  0, 0},
  {&cd_S19420C5,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19420C3,    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
    5, //immediately_derived
  0, 0},
  {&cd_S19420C2,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19420C3,    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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19420C2,    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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19420C3,    ABISELECT(32,16), //bcp->offset
    56, //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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19420C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19420C6,    ABISELECT(24,12), //bcp->offset
    33, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19420C7,    ABISELECT(64,32), //bcp->offset
    61, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19420C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19420C4[];
extern void ABISELECT(_ZTv0_n24_N8S19420C4D1Ev,_ZTv0_n12_N8S19420C4D1Ev)();
extern void _ZN8S19420C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19420C4D0Ev,_ZTv0_n12_N8S19420C4D0Ev)();
extern void _ZN8S19420C4D0Ev() __attribute__((weak));
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C43v24Ev();
extern void _ZN8S19420C43v25Ev();
extern void _ZN8S19420C43v26Ev();
extern void ABISELECT(_ZTv0_n24_N8S19420C4D1Ev,_ZTv0_n12_N8S19420C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S19420C4D1Ev,_ZThn4_N8S19420C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19420C4D0Ev,_ZTv0_n12_N8S19420C4D0Ev)();
extern void ABISELECT(_ZThn8_N8S19420C4D0Ev,_ZThn4_N8S19420C4D0Ev)() __attribute__((weak));
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
extern void _ZN8S19420C53v11Ev();
extern void _ZN8S19420C53v12Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19420C4D1Ev,_ZTvn4_n12_N8S19420C4D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19420C4D0Ev,_ZTvn4_n12_N8S19420C4D0Ev)();
extern void _ZN8S19420C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N8S19420C4D1Ev,_ZTv0_n12_N8S19420C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S19420C4D1Ev,_ZThn12_N8S19420C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19420C4D0Ev,_ZTv0_n12_N8S19420C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S19420C4D0Ev,_ZThn12_N8S19420C4D0Ev)() __attribute__((weak));
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
extern void _ZN8S19420C53v11Ev();
extern void _ZN8S19420C53v12Ev();
extern void _ZN8S19420C63v13Ev();
extern void _ZN8S19420C63v14Ev();
extern void _ZN8S19420C63v15Ev();
extern void _ZN8S19420C63v16Ev();
extern void _ZN8S19420C63v17Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19420C4D1Ev,_ZTvn4_n12_N8S19420C4D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19420C4D0Ev,_ZTvn4_n12_N8S19420C4D0Ev)();
extern void _ZN8S19420C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N8S19420C4D1Ev,_ZTv0_n12_N8S19420C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S19420C4D1Ev,_ZThn32_N8S19420C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19420C4D0Ev,_ZTv0_n12_N8S19420C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S19420C4D0Ev,_ZThn32_N8S19420C4D0Ev)() __attribute__((weak));
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
extern void _ZN8S19420C73v18Ev();
extern void _ZN8S19420C73v19Ev();
extern void _ZN8S19420C73v20Ev();
extern void _ZN8S19420C73v21Ev();
extern void _ZN8S19420C73v22Ev();
extern void _ZN8S19420C73v23Ev();
static  VTBL_ENTRY vtc_S19420C4[] = {
  0,
  ABISELECT(64,32),
  ABISELECT(24,12),
  ABISELECT(64,32),
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19420C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C4D1Ev,_ZTv0_n12_N8S19420C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C4D0Ev,_ZTv0_n12_N8S19420C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C43v24Ev,
  (VTBL_ENTRY)&_ZN8S19420C43v25Ev,
  (VTBL_ENTRY)&_ZN8S19420C43v26Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19420C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C4D1Ev,_ZTv0_n12_N8S19420C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C4D0Ev,_ZTv0_n12_N8S19420C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v12Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19420C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19420C4D1Ev,_ZTvn4_n12_N8S19420C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19420C4D0Ev,_ZTvn4_n12_N8S19420C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19420C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C4D1Ev,_ZTv0_n12_N8S19420C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C4D0Ev,_ZTv0_n12_N8S19420C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v13Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v17Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19420C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19420C4D1Ev,_ZTvn4_n12_N8S19420C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19420C4D0Ev,_ZTvn4_n12_N8S19420C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19420C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C4D1Ev,_ZTv0_n12_N8S19420C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C4D0Ev,_ZTv0_n12_N8S19420C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v18Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v21Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v22Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v23Ev,
};
extern VTBL_ENTRY _ZTV8S19420C4[];
extern void ABISELECT(_ZTv0_n24_N8S19420C7D1Ev,_ZTv0_n12_N8S19420C7D1Ev)();
extern void _ZN8S19420C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19420C7D0Ev,_ZTv0_n12_N8S19420C7D0Ev)();
extern void _ZN8S19420C7D0Ev() __attribute__((weak));
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
extern void _ZN8S19420C73v18Ev();
extern void _ZN8S19420C73v19Ev();
extern void _ZN8S19420C73v20Ev();
extern void _ZN8S19420C73v21Ev();
extern void _ZN8S19420C73v22Ev();
extern void _ZN8S19420C73v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19420C7__8S19420C4[] = {
  0,
  ABISELECT(-56,-28),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19420C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C7D1Ev,_ZTv0_n12_N8S19420C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C7D0Ev,_ZTv0_n12_N8S19420C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v18Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v21Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v22Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19420C7D1Ev,_ZTv0_n12_N8S19420C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19420C7D0Ev,_ZTv0_n12_N8S19420C7D0Ev)();
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
extern void _ZN8S19420C53v11Ev();
extern void _ZN8S19420C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19420C5__8S19420C7__8S19420C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S19420C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C7D1Ev,_ZTv0_n12_N8S19420C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C7D0Ev,_ZTv0_n12_N8S19420C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v12Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19420C7D1Ev,_ZTvn4_n12_N8S19420C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19420C7D0Ev,_ZTvn4_n12_N8S19420C7D0Ev)();
extern void _ZN8S19420C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19420C38S19420C5__A1__8S19420C7__8S19420C4[] = {
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19420C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19420C7D1Ev,_ZTvn4_n12_N8S19420C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19420C7D0Ev,_ZTvn4_n12_N8S19420C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
};
static  VTT_ENTRY vtt_S19420C4[] = {
  {&(_ZTV8S19420C4[9]),  9,84},
  {&(_ZTV8S19420C4[22]),  22,84},
  {&(_ZTV8S19420C4[30]),  30,84},
  {&(_ZTV8S19420C4[74]),  74,84},
  {&(_ZTV8S19420C4[45]),  45,84},
  {&(_ZTV8S19420C4[58]),  58,84},
  {&(_ZTV8S19420C4[74]),  74,84},
  {&(_ZTV8S19420C4[9]),  9,84},
  {&(_tg__ZTV8S19420C7__8S19420C4[7]),  7,17},
  {&(_tg__ZTV8S19420C5__8S19420C7__8S19420C4[7]),  7,13},
  {&(_tg__ZTV8S19420C38S19420C5__A1__8S19420C7__8S19420C4[2]),  2,5},
  {&(_tg__ZTV8S19420C7__8S19420C4[7]),  7,17},
};
extern VTBL_ENTRY _ZTI8S19420C4[];
extern  VTBL_ENTRY _ZTV8S19420C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19420C4[];
static VTBL_ENTRY alt_thunk_names65[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19420C7D0Ev,_ZTv0_n12_N8S19420C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19420C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19420C7D1Ev,_ZTv0_n12_N8S19420C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19420C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19420C4D0Ev,_ZTv0_n12_N8S19420C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19420C4D0Ev,_ZThn32_N8S19420C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19420C4D0Ev,_ZThn12_N8S19420C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19420C4D0Ev,_ZThn4_N8S19420C4D0Ev),
  (VTBL_ENTRY)_ZN8S19420C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19420C4D1Ev,_ZTv0_n12_N8S19420C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19420C4D1Ev,_ZThn32_N8S19420C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19420C4D1Ev,_ZThn12_N8S19420C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19420C4D1Ev,_ZThn4_N8S19420C4D1Ev),
  (VTBL_ENTRY)_ZN8S19420C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19420C4 = {  "S19420C4", // class name
  bases_S19420C4, 13,
  &(vtc_S19420C4[0]), // expected_vtbl_contents
  &(vtt_S19420C4[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S19420C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19420C4),84, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19420C4),12, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names65,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19420C9  {
  virtual void  v27(); // _ZN8S19420C93v27Ev
  virtual void  v28(); // _ZN8S19420C93v28Ev
  virtual void  v29(); // _ZN8S19420C93v29Ev
  virtual void  v30(); // _ZN8S19420C93v30Ev
  virtual void  v31(); // _ZN8S19420C93v31Ev
  virtual void  v32(); // _ZN8S19420C93v32Ev
  virtual void  v33(); // _ZN8S19420C93v33Ev
  virtual void  v34(); // _ZN8S19420C93v34Ev
  ~S19420C9(); // tgen
  S19420C9(); // tgen
};
//SIG(-1 S19420C9) C1{ v1 v2 v3 v4 v5 v6 v7 v8}


void  S19420C9 ::v27(){vfunc_called(this, "_ZN8S19420C93v27Ev");}
void  S19420C9 ::v28(){vfunc_called(this, "_ZN8S19420C93v28Ev");}
void  S19420C9 ::v29(){vfunc_called(this, "_ZN8S19420C93v29Ev");}
void  S19420C9 ::v30(){vfunc_called(this, "_ZN8S19420C93v30Ev");}
void  S19420C9 ::v31(){vfunc_called(this, "_ZN8S19420C93v31Ev");}
void  S19420C9 ::v32(){vfunc_called(this, "_ZN8S19420C93v32Ev");}
void  S19420C9 ::v33(){vfunc_called(this, "_ZN8S19420C93v33Ev");}
void  S19420C9 ::v34(){vfunc_called(this, "_ZN8S19420C93v34Ev");}
S19420C9 ::~S19420C9(){ note_dtor("S19420C9", this);} // tgen
S19420C9 ::S19420C9(){ note_ctor("S19420C9", this);} // tgen

static void Test_S19420C9()
{
  extern Class_Descriptor cd_S19420C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19420C9, buf);
    S19420C9 *dp, &lv = *(dp=new (buf) S19420C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19420C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19420C9)");
    test_class_info(&lv, &cd_S19420C9);
    dp->~S19420C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19420C9(Test_S19420C9, "S19420C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19420C9C1Ev();
extern void _ZN8S19420C9D1Ev();
Name_Map name_map_S19420C9[] = {
  NSPAIR(_ZN8S19420C9C1Ev),
  NSPAIR(_ZN8S19420C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19420C9[];
extern void _ZN8S19420C93v27Ev();
extern void _ZN8S19420C93v28Ev();
extern void _ZN8S19420C93v29Ev();
extern void _ZN8S19420C93v30Ev();
extern void _ZN8S19420C93v31Ev();
extern void _ZN8S19420C93v32Ev();
extern void _ZN8S19420C93v33Ev();
extern void _ZN8S19420C93v34Ev();
static  VTBL_ENTRY vtc_S19420C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19420C9[0]),
  (VTBL_ENTRY)&_ZN8S19420C93v27Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v28Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v29Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v30Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v31Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v32Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v33Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v34Ev,
};
extern VTBL_ENTRY _ZTI8S19420C9[];
extern  VTBL_ENTRY _ZTV8S19420C9[];
Class_Descriptor cd_S19420C9 = {  "S19420C9", // class name
  0,0,//no base classes
  &(vtc_S19420C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19420C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19420C9),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19420C8  : virtual S19420C9 {
  virtual  ~S19420C8(); // _ZN8S19420C8D2Ev
  virtual void  v35(); // _ZN8S19420C83v35Ev
  virtual void  v36(); // _ZN8S19420C83v36Ev
  virtual void  v37(); // _ZN8S19420C83v37Ev
  virtual void  v38(); // _ZN8S19420C83v38Ev
  virtual void  v39(); // _ZN8S19420C83v39Ev
  virtual void  v40(); // _ZN8S19420C83v40Ev
  virtual void  v41(); // _ZN8S19420C83v41Ev
  virtual void  v42(); // _ZN8S19420C83v42Ev
  virtual void  v43(); // _ZN8S19420C83v43Ev
  virtual void  v44(); // _ZN8S19420C83v44Ev
  S19420C8(); // tgen
};
//SIG(-1 S19420C8) C1{ VBC2{ v11 v12 v13 v14 v15 v16 v17 v18} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S19420C8 ::~S19420C8(){ note_dtor("S19420C8", this);}
void  S19420C8 ::v35(){vfunc_called(this, "_ZN8S19420C83v35Ev");}
void  S19420C8 ::v36(){vfunc_called(this, "_ZN8S19420C83v36Ev");}
void  S19420C8 ::v37(){vfunc_called(this, "_ZN8S19420C83v37Ev");}
void  S19420C8 ::v38(){vfunc_called(this, "_ZN8S19420C83v38Ev");}
void  S19420C8 ::v39(){vfunc_called(this, "_ZN8S19420C83v39Ev");}
void  S19420C8 ::v40(){vfunc_called(this, "_ZN8S19420C83v40Ev");}
void  S19420C8 ::v41(){vfunc_called(this, "_ZN8S19420C83v41Ev");}
void  S19420C8 ::v42(){vfunc_called(this, "_ZN8S19420C83v42Ev");}
void  S19420C8 ::v43(){vfunc_called(this, "_ZN8S19420C83v43Ev");}
void  S19420C8 ::v44(){vfunc_called(this, "_ZN8S19420C83v44Ev");}
S19420C8 ::S19420C8(){ note_ctor("S19420C8", this);} // tgen

static void Test_S19420C8()
{
  extern Class_Descriptor cd_S19420C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19420C8, buf);
    S19420C8 *dp, &lv = *(dp=new (buf) S19420C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19420C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19420C8)");
    check_base_class_offset(lv, (S19420C9*), 0, "S19420C8");
    test_class_info(&lv, &cd_S19420C8);
    dp->~S19420C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19420C8(Test_S19420C8, "S19420C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19420C8C1Ev();
extern void _ZN8S19420C8D2Ev();
Name_Map name_map_S19420C8[] = {
  NSPAIR(_ZN8S19420C8C1Ev),
  NSPAIR(_ZN8S19420C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19420C9;
extern VTBL_ENTRY _ZTI8S19420C9[];
extern  VTBL_ENTRY _ZTV8S19420C9[];
static Base_Class bases_S19420C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19420C9,    0, //bcp->offset
    -1, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19420C8[];
extern void _ZN8S19420C93v27Ev();
extern void _ZN8S19420C93v28Ev();
extern void _ZN8S19420C93v29Ev();
extern void _ZN8S19420C93v30Ev();
extern void _ZN8S19420C93v31Ev();
extern void _ZN8S19420C93v32Ev();
extern void _ZN8S19420C93v33Ev();
extern void _ZN8S19420C93v34Ev();
extern void _ZN8S19420C8D1Ev();
extern void _ZN8S19420C8D0Ev();
extern void _ZN8S19420C83v35Ev();
extern void _ZN8S19420C83v36Ev();
extern void _ZN8S19420C83v37Ev();
extern void _ZN8S19420C83v38Ev();
extern void _ZN8S19420C83v39Ev();
extern void _ZN8S19420C83v40Ev();
extern void _ZN8S19420C83v41Ev();
extern void _ZN8S19420C83v42Ev();
extern void _ZN8S19420C83v43Ev();
extern void _ZN8S19420C83v44Ev();
static  VTBL_ENTRY vtc_S19420C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19420C8[0]),
  (VTBL_ENTRY)&_ZN8S19420C93v27Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v28Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v29Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v30Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v31Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v32Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v33Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v34Ev,
  (VTBL_ENTRY)&_ZN8S19420C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19420C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v35Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v36Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v37Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v38Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v39Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v40Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v41Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v42Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v43Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v44Ev,
};
extern VTBL_ENTRY _ZTV8S19420C8[];
static  VTT_ENTRY vtt_S19420C8[] = {
  {&(_ZTV8S19420C8[11]),  11,31},
  {&(_ZTV8S19420C8[11]),  11,31},
};
extern VTBL_ENTRY _ZTI8S19420C8[];
extern  VTBL_ENTRY _ZTV8S19420C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19420C8[];
Class_Descriptor cd_S19420C8 = {  "S19420C8", // class name
  bases_S19420C8, 1,
  &(vtc_S19420C8[0]), // expected_vtbl_contents
  &(vtt_S19420C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19420C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19420C8),31, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19420C8),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  S19420C1  : virtual S19420C2 , virtual S19420C3 , S19420C4 , virtual S19420C8 , S19420C5 {
  int s19420c1f0;
  virtual  ~S19420C1(); // _ZN8S19420C1D2Ev
  virtual void  v1(); // _ZN8S19420C12v1Ev
  virtual void  v2(); // _ZN8S19420C12v2Ev
  virtual void  v3(); // _ZN8S19420C12v3Ev
  virtual void  v4(); // _ZN8S19420C12v4Ev
  virtual void  v5(); // _ZN8S19420C12v5Ev
  virtual void  v6(); // _ZN8S19420C12v6Ev
  virtual void  v7(); // _ZN8S19420C12v7Ev
  virtual void  v8(); // _ZN8S19420C12v8Ev
  S19420C1(); // tgen
};
//SIG(1 S19420C1) C1{ VBC2{ BC3{ vd v9} vd v10} VBC3 BC4{ VBC5{ BC2 BC3 vd v11 v12} VBC2 VBC6{ BC5 vd v13 v14 v15 v16 v17 FC5 FC3} VBC7{ VBC5 VBC2 vd v18 v19 v20 v21 v22 v23 Fi Fc Fi} VBC3 v24 v25 v26} VBC8{ VBC9{ v27 v28 v29 v30 v31 v32 v33 v34} vd v35 v36 v37 v38 v39 v40 v41 v42 v43 v44} BC5 vd v1 v2 v3 v4 v5 v6 v7 v8 Fi}


 S19420C1 ::~S19420C1(){ note_dtor("S19420C1", this);}
void  S19420C1 ::v1(){vfunc_called(this, "_ZN8S19420C12v1Ev");}
void  S19420C1 ::v2(){vfunc_called(this, "_ZN8S19420C12v2Ev");}
void  S19420C1 ::v3(){vfunc_called(this, "_ZN8S19420C12v3Ev");}
void  S19420C1 ::v4(){vfunc_called(this, "_ZN8S19420C12v4Ev");}
void  S19420C1 ::v5(){vfunc_called(this, "_ZN8S19420C12v5Ev");}
void  S19420C1 ::v6(){vfunc_called(this, "_ZN8S19420C12v6Ev");}
void  S19420C1 ::v7(){vfunc_called(this, "_ZN8S19420C12v7Ev");}
void  S19420C1 ::v8(){vfunc_called(this, "_ZN8S19420C12v8Ev");}
S19420C1 ::S19420C1(){ note_ctor("S19420C1", this);} // tgen

static void Test_S19420C1()
{
  extern Class_Descriptor cd_S19420C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,17)];
    init_test(&cd_S19420C1, buf);
    S19420C1 *dp, &lv = *(dp=new (buf) S19420C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,64), "sizeof(S19420C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19420C1)");
    /*is_ambiguous_... S19420C1::S19420C2 */ AMB_check_base_class_offset(lv, (S19420C3*)(S19420C2*), ABISELECT(88,44), "S19420C1");
    /*is_ambiguous_... S19420C1::S19420C2 */ AMB_check_base_class_offset(lv, (S19420C2*), ABISELECT(88,44), "S19420C1");
    /*is_ambiguous_... S19420C4::S19420C2 */ AMB_check_base_class_offset(lv, (S19420C2*)(S19420C4*), ABISELECT(88,44), "S19420C1");
    /*is_ambiguous_... S19420C7::S19420C2 */ AMB_check_base_class_offset(lv, (S19420C2*)(S19420C7*), ABISELECT(88,44), "S19420C1");
    /*is_ambiguous_... S19420C1::S19420C3 */ AMB_check_base_class_offset(lv, (S19420C3*), 0, "S19420C1");
    /*is_ambiguous_... S19420C4::S19420C3 */ AMB_check_base_class_offset(lv, (S19420C3*)(S19420C4*), 0, "S19420C1");
    /*is_ambiguous_... S19420C1::S19420C5 */ AMB_check_base_class_offset(lv, (S19420C3*)(S19420C2*)(S19420C5*), ABISELECT(32,16), "S19420C1");
    /*is_ambiguous_... S19420C1::S19420C5 */ AMB_check_base_class_offset(lv, (S19420C2*)(S19420C5*), ABISELECT(32,16), "S19420C1");
    /*is_ambiguous_... S19420C1::S19420C5 */ AMB_check_base_class_offset(lv, (S19420C3*)(S19420C5*), ABISELECT(40,20), "S19420C1");
    /*is_ambiguous_... S19420C4::S19420C5 */ AMB_check_base_class_offset(lv, (S19420C5*)(S19420C4*), ABISELECT(32,16), "S19420C1");
    check_base_class_offset(lv, (S19420C5*)(S19420C7*), ABISELECT(32,16), "S19420C1");
    check_base_class_offset(lv, (S19420C3*)(S19420C2*)(S19420C5*)(S19420C6*), ABISELECT(48,24), "S19420C1");
    check_base_class_offset(lv, (S19420C2*)(S19420C5*)(S19420C6*), ABISELECT(48,24), "S19420C1");
    /*is_ambiguous_... S19420C5::S19420C3 */ AMB_check_base_class_offset(lv, (S19420C3*)(S19420C5*)(S19420C6*), ABISELECT(56,28), "S19420C1");
    check_base_class_offset(lv, (S19420C5*)(S19420C6*), ABISELECT(48,24), "S19420C1");
    check_base_class_offset(lv, (S19420C6*)(S19420C4*), ABISELECT(48,24), "S19420C1");
    check_base_class_offset(lv, (S19420C7*)(S19420C4*), ABISELECT(88,44), "S19420C1");
    check_base_class_offset(lv, (S19420C4*), 0, "S19420C1");
    check_base_class_offset(lv, (S19420C9*)(S19420C8*), ABISELECT(112,60), "S19420C1");
    check_base_class_offset(lv, (S19420C8*), ABISELECT(112,60), "S19420C1");
    /*is_ambiguous_... S19420C1::S19420C5 */ AMB_check_base_class_offset(lv, (S19420C3*)(S19420C2*)(S19420C5*), ABISELECT(8,4), "S19420C1");
    /*is_ambiguous_... S19420C1::S19420C5 */ AMB_check_base_class_offset(lv, (S19420C2*)(S19420C5*), ABISELECT(8,4), "S19420C1");
    /*is_ambiguous_... S19420C1::S19420C5 */ AMB_check_base_class_offset(lv, (S19420C3*)(S19420C5*), ABISELECT(16,8), "S19420C1");
    /*is_ambiguous_... S19420C1::S19420C5 */ AMB_check_base_class_offset(lv, (S19420C5*), ABISELECT(8,4), "S19420C1");
    check_field_offset(lv, s19420c1f0, ABISELECT(24,12), "S19420C1.s19420c1f0");
    test_class_info(&lv, &cd_S19420C1);
    dp->~S19420C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19420C1(Test_S19420C1, "S19420C1", ABISELECT(120,64));

#else // __cplusplus

extern void _ZN8S19420C1C1Ev();
extern void _ZN8S19420C1D2Ev();
Name_Map name_map_S19420C1[] = {
  NSPAIR(_ZN8S19420C1C1Ev),
  NSPAIR(_ZN8S19420C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C2;
extern VTBL_ENTRY _ZTI8S19420C2[];
extern  VTBL_ENTRY _ZTV8S19420C2[];
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C2;
extern VTBL_ENTRY _ZTI8S19420C2[];
extern  VTBL_ENTRY _ZTV8S19420C2[];
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C5;
extern VTBL_ENTRY _ZTI8S19420C5[];
extern  VTBL_ENTRY _ZTV8S19420C5[];
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C2;
extern VTBL_ENTRY _ZTI8S19420C2[];
extern  VTBL_ENTRY _ZTV8S19420C2[];
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C5;
extern VTBL_ENTRY _ZTI8S19420C5[];
extern  VTBL_ENTRY _ZTV8S19420C5[];
extern Class_Descriptor cd_S19420C6;
extern VTBL_ENTRY _ZTI8S19420C6[];
extern  VTBL_ENTRY _ZTV8S19420C6[];
extern Class_Descriptor cd_S19420C7;
extern VTBL_ENTRY _ZTI8S19420C7[];
extern  VTBL_ENTRY _ZTV8S19420C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19420C7[];
extern Class_Descriptor cd_S19420C4;
extern VTBL_ENTRY _ZTI8S19420C4[];
extern  VTBL_ENTRY _ZTV8S19420C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19420C4[];
extern Class_Descriptor cd_S19420C9;
extern VTBL_ENTRY _ZTI8S19420C9[];
extern  VTBL_ENTRY _ZTV8S19420C9[];
extern Class_Descriptor cd_S19420C8;
extern VTBL_ENTRY _ZTI8S19420C8[];
extern  VTBL_ENTRY _ZTV8S19420C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19420C8[];
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C2;
extern VTBL_ENTRY _ZTI8S19420C2[];
extern  VTBL_ENTRY _ZTV8S19420C2[];
extern Class_Descriptor cd_S19420C3;
extern VTBL_ENTRY _ZTI8S19420C3[];
extern  VTBL_ENTRY _ZTV8S19420C3[];
extern Class_Descriptor cd_S19420C5;
extern VTBL_ENTRY _ZTI8S19420C5[];
extern  VTBL_ENTRY _ZTV8S19420C5[];
static Base_Class bases_S19420C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19420C3,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19420C2,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19420C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19420C3,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19420C2,    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
    6, //immediately_derived
  0, 0},
  {&cd_S19420C3,    ABISELECT(40,20), //bcp->offset
    51, //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_S19420C5,    ABISELECT(32,16), //bcp->offset
    38, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19420C3,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19420C2,    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
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19420C3,    ABISELECT(56,28), //bcp->offset
    79, //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
    10, //immediately_derived
  0, 0},
  {&cd_S19420C5,    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
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19420C6,    ABISELECT(48,24), //bcp->offset
    56, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19420C7,    ABISELECT(88,44), //bcp->offset
    84, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19420C4,    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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19420C9,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //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
    15, //immediately_derived
  0, 1},
  {&cd_S19420C8,    ABISELECT(112,60), //bcp->offset
    107, //bcp->virtual_function_table_offset
    22, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19420C3,    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
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19420C2,    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
    18, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19420C3,    ABISELECT(16,8), //bcp->offset
    33, //bcp->virtual_function_table_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_S19420C5,    ABISELECT(8,4), //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
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19420C1[];
extern void ABISELECT(_ZTv0_n24_N8S19420C1D1Ev,_ZTv0_n12_N8S19420C1D1Ev)();
extern void _ZN8S19420C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19420C1D0Ev,_ZTv0_n12_N8S19420C1D0Ev)();
extern void _ZN8S19420C1D0Ev() __attribute__((weak));
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C43v24Ev();
extern void _ZN8S19420C43v25Ev();
extern void _ZN8S19420C43v26Ev();
extern void _ZN8S19420C12v1Ev();
extern void _ZN8S19420C12v2Ev();
extern void _ZN8S19420C12v3Ev();
extern void _ZN8S19420C12v4Ev();
extern void _ZN8S19420C12v5Ev();
extern void _ZN8S19420C12v6Ev();
extern void _ZN8S19420C12v7Ev();
extern void _ZN8S19420C12v8Ev();
extern void ABISELECT(_ZThn8_N8S19420C1D1Ev,_ZThn4_N8S19420C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19420C1D0Ev,_ZThn4_N8S19420C1D0Ev)();
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
extern void _ZN8S19420C53v11Ev();
extern void _ZN8S19420C53v12Ev();
extern void ABISELECT(_ZThn16_N8S19420C1D1Ev,_ZThn8_N8S19420C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19420C1D0Ev,_ZThn8_N8S19420C1D0Ev)();
extern void _ZN8S19420C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N8S19420C1D1Ev,_ZTv0_n12_N8S19420C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19420C1D1Ev,_ZThn16_N8S19420C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19420C1D0Ev,_ZTv0_n12_N8S19420C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S19420C1D0Ev,_ZThn16_N8S19420C1D0Ev)() __attribute__((weak));
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
extern void _ZN8S19420C53v11Ev();
extern void _ZN8S19420C53v12Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19420C1D1Ev,_ZTvn4_n12_N8S19420C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19420C1D0Ev,_ZTvn4_n12_N8S19420C1D0Ev)();
extern void _ZN8S19420C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N8S19420C1D1Ev,_ZTv0_n12_N8S19420C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S19420C1D1Ev,_ZThn24_N8S19420C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19420C1D0Ev,_ZTv0_n12_N8S19420C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S19420C1D0Ev,_ZThn24_N8S19420C1D0Ev)() __attribute__((weak));
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
extern void _ZN8S19420C53v11Ev();
extern void _ZN8S19420C53v12Ev();
extern void _ZN8S19420C63v13Ev();
extern void _ZN8S19420C63v14Ev();
extern void _ZN8S19420C63v15Ev();
extern void _ZN8S19420C63v16Ev();
extern void _ZN8S19420C63v17Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19420C1D1Ev,_ZTvn4_n12_N8S19420C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19420C1D0Ev,_ZTvn4_n12_N8S19420C1D0Ev)();
extern void _ZN8S19420C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N8S19420C1D1Ev,_ZTv0_n12_N8S19420C1D1Ev)();
extern void ABISELECT(_ZThn88_N8S19420C1D1Ev,_ZThn44_N8S19420C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19420C1D0Ev,_ZTv0_n12_N8S19420C1D0Ev)();
extern void ABISELECT(_ZThn88_N8S19420C1D0Ev,_ZThn44_N8S19420C1D0Ev)() __attribute__((weak));
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
extern void _ZN8S19420C73v18Ev();
extern void _ZN8S19420C73v19Ev();
extern void _ZN8S19420C73v20Ev();
extern void _ZN8S19420C73v21Ev();
extern void _ZN8S19420C73v22Ev();
extern void _ZN8S19420C73v23Ev();
extern void _ZN8S19420C93v27Ev();
extern void _ZN8S19420C93v28Ev();
extern void _ZN8S19420C93v29Ev();
extern void _ZN8S19420C93v30Ev();
extern void _ZN8S19420C93v31Ev();
extern void _ZN8S19420C93v32Ev();
extern void _ZN8S19420C93v33Ev();
extern void _ZN8S19420C93v34Ev();
extern void ABISELECT(_ZTv0_n96_N8S19420C1D1Ev,_ZTv0_n48_N8S19420C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S19420C1D1Ev,_ZThn60_N8S19420C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19420C1D0Ev,_ZTv0_n48_N8S19420C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S19420C1D0Ev,_ZThn60_N8S19420C1D0Ev)() __attribute__((weak));
extern void _ZN8S19420C83v35Ev();
extern void _ZN8S19420C83v36Ev();
extern void _ZN8S19420C83v37Ev();
extern void _ZN8S19420C83v38Ev();
extern void _ZN8S19420C83v39Ev();
extern void _ZN8S19420C83v40Ev();
extern void _ZN8S19420C83v41Ev();
extern void _ZN8S19420C83v42Ev();
extern void _ZN8S19420C83v43Ev();
extern void _ZN8S19420C83v44Ev();
static  VTBL_ENTRY vtc_S19420C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  ABISELECT(88,44),
  ABISELECT(32,16),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19420C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C1D1Ev,_ZTv0_n12_N8S19420C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C1D0Ev,_ZTv0_n12_N8S19420C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C43v24Ev,
  (VTBL_ENTRY)&_ZN8S19420C43v25Ev,
  (VTBL_ENTRY)&_ZN8S19420C43v26Ev,
  (VTBL_ENTRY)&_ZN8S19420C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19420C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19420C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19420C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19420C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19420C12v6Ev,
  (VTBL_ENTRY)&_ZN8S19420C12v7Ev,
  (VTBL_ENTRY)&_ZN8S19420C12v8Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19420C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19420C1D1Ev,_ZThn4_N8S19420C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19420C1D0Ev,_ZThn4_N8S19420C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v12Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19420C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19420C1D1Ev,_ZThn8_N8S19420C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19420C1D0Ev,_ZThn8_N8S19420C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19420C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C1D1Ev,_ZTv0_n12_N8S19420C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C1D0Ev,_ZTv0_n12_N8S19420C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v12Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19420C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19420C1D1Ev,_ZTvn4_n12_N8S19420C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19420C1D0Ev,_ZTvn4_n12_N8S19420C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19420C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C1D1Ev,_ZTv0_n12_N8S19420C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C1D0Ev,_ZTv0_n12_N8S19420C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v13Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v17Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19420C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19420C1D1Ev,_ZTvn4_n12_N8S19420C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19420C1D0Ev,_ZTvn4_n12_N8S19420C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S19420C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C1D1Ev,_ZTv0_n12_N8S19420C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C1D0Ev,_ZTv0_n12_N8S19420C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v18Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v21Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v22Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-60),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19420C1[0]),
  (VTBL_ENTRY)&_ZN8S19420C93v27Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v28Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v29Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v30Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v31Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v32Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v33Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v34Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19420C1D1Ev,_ZTv0_n48_N8S19420C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19420C1D0Ev,_ZTv0_n48_N8S19420C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C83v35Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v36Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v37Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v38Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v39Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v40Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v41Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v42Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v43Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v44Ev,
};
extern VTBL_ENTRY _ZTV8S19420C1[];
extern void ABISELECT(_ZTv0_n24_N8S19420C4D1Ev,_ZTv0_n12_N8S19420C4D1Ev)();
extern void _ZN8S19420C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19420C4D0Ev,_ZTv0_n12_N8S19420C4D0Ev)();
extern void _ZN8S19420C4D0Ev() __attribute__((weak));
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C43v24Ev();
extern void _ZN8S19420C43v25Ev();
extern void _ZN8S19420C43v26Ev();
static  VTBL_ENTRY _tg__ZTV8S19420C4__8S19420C1[] = {
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  ABISELECT(88,44),
  ABISELECT(32,16),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19420C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C4D1Ev,_ZTv0_n12_N8S19420C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C4D0Ev,_ZTv0_n12_N8S19420C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C43v24Ev,
  (VTBL_ENTRY)&_ZN8S19420C43v25Ev,
  (VTBL_ENTRY)&_ZN8S19420C43v26Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19420C4D1Ev,_ZTv0_n12_N8S19420C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S19420C4D1Ev,_ZThn16_N8S19420C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19420C4D0Ev,_ZTv0_n12_N8S19420C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S19420C4D0Ev,_ZThn16_N8S19420C4D0Ev)() __attribute__((weak));
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
extern void _ZN8S19420C53v11Ev();
extern void _ZN8S19420C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19420C5__8S19420C4__8S19420C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19420C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C4D1Ev,_ZTv0_n12_N8S19420C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C4D0Ev,_ZTv0_n12_N8S19420C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v12Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19420C4D1Ev,_ZTvn4_n12_N8S19420C4D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19420C4D0Ev,_ZTvn4_n12_N8S19420C4D0Ev)();
extern void _ZN8S19420C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19420C38S19420C5__A1__8S19420C4__8S19420C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19420C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19420C4D1Ev,_ZTvn4_n12_N8S19420C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19420C4D0Ev,_ZTvn4_n12_N8S19420C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19420C4D1Ev,_ZTv0_n12_N8S19420C4D1Ev)();
extern void ABISELECT(_ZThn88_N8S19420C4D1Ev,_ZThn44_N8S19420C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19420C4D0Ev,_ZTv0_n12_N8S19420C4D0Ev)();
extern void ABISELECT(_ZThn88_N8S19420C4D0Ev,_ZThn44_N8S19420C4D0Ev)() __attribute__((weak));
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
extern void _ZN8S19420C73v18Ev();
extern void _ZN8S19420C73v19Ev();
extern void _ZN8S19420C73v20Ev();
extern void _ZN8S19420C73v21Ev();
extern void _ZN8S19420C73v22Ev();
extern void _ZN8S19420C73v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19420C7__8S19420C4__8S19420C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S19420C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C4D1Ev,_ZTv0_n12_N8S19420C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C4D0Ev,_ZTv0_n12_N8S19420C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v18Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v21Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v22Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19420C4D1Ev,_ZTv0_n12_N8S19420C4D1Ev)();
extern void ABISELECT(_ZThn48_N8S19420C4D1Ev,_ZThn24_N8S19420C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19420C4D0Ev,_ZTv0_n12_N8S19420C4D0Ev)();
extern void ABISELECT(_ZThn48_N8S19420C4D0Ev,_ZThn24_N8S19420C4D0Ev)() __attribute__((weak));
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
extern void _ZN8S19420C53v11Ev();
extern void _ZN8S19420C53v12Ev();
extern void _ZN8S19420C63v13Ev();
extern void _ZN8S19420C63v14Ev();
extern void _ZN8S19420C63v15Ev();
extern void _ZN8S19420C63v16Ev();
extern void _ZN8S19420C63v17Ev();
static  VTBL_ENTRY _tg__ZTV8S19420C6__8S19420C4__8S19420C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19420C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C4D1Ev,_ZTv0_n12_N8S19420C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C4D0Ev,_ZTv0_n12_N8S19420C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v13Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19420C63v17Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19420C4D1Ev,_ZTvn4_n12_N8S19420C4D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19420C4D0Ev,_ZTvn4_n12_N8S19420C4D0Ev)();
extern void _ZN8S19420C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19420C38S19420C58S19420C6__A4__8S19420C4__8S19420C1[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19420C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19420C4D1Ev,_ZTvn4_n12_N8S19420C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19420C4D0Ev,_ZTvn4_n12_N8S19420C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19420C7D1Ev,_ZTv0_n12_N8S19420C7D1Ev)();
extern void _ZN8S19420C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19420C7D0Ev,_ZTv0_n12_N8S19420C7D0Ev)();
extern void _ZN8S19420C7D0Ev() __attribute__((weak));
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
extern void _ZN8S19420C73v18Ev();
extern void _ZN8S19420C73v19Ev();
extern void _ZN8S19420C73v20Ev();
extern void _ZN8S19420C73v21Ev();
extern void _ZN8S19420C73v22Ev();
extern void _ZN8S19420C73v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19420C7__8S19420C1[] = {
  0,
  ABISELECT(-56,-28),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19420C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C7D1Ev,_ZTv0_n12_N8S19420C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C7D0Ev,_ZTv0_n12_N8S19420C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v18Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v21Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v22Ev,
  (VTBL_ENTRY)&_ZN8S19420C73v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19420C7D1Ev,_ZTv0_n12_N8S19420C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19420C7D0Ev,_ZTv0_n12_N8S19420C7D0Ev)();
extern void _ZN8S19420C32v9Ev();
extern void _ZN8S19420C23v10Ev();
extern void _ZN8S19420C53v11Ev();
extern void _ZN8S19420C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19420C5__8S19420C7__8S19420C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S19420C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C7D1Ev,_ZTv0_n12_N8S19420C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19420C7D0Ev,_ZTv0_n12_N8S19420C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19420C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19420C53v12Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19420C7D1Ev,_ZTvn4_n12_N8S19420C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19420C7D0Ev,_ZTvn4_n12_N8S19420C7D0Ev)();
extern void _ZN8S19420C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19420C38S19420C5__A1__8S19420C7__8S19420C1[] = {
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19420C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19420C7D1Ev,_ZTvn4_n12_N8S19420C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19420C7D0Ev,_ZTvn4_n12_N8S19420C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19420C32v9Ev,
};
extern void _ZN8S19420C93v27Ev();
extern void _ZN8S19420C93v28Ev();
extern void _ZN8S19420C93v29Ev();
extern void _ZN8S19420C93v30Ev();
extern void _ZN8S19420C93v31Ev();
extern void _ZN8S19420C93v32Ev();
extern void _ZN8S19420C93v33Ev();
extern void _ZN8S19420C93v34Ev();
extern void _ZN8S19420C8D1Ev();
extern void _ZN8S19420C8D0Ev();
extern void _ZN8S19420C83v35Ev();
extern void _ZN8S19420C83v36Ev();
extern void _ZN8S19420C83v37Ev();
extern void _ZN8S19420C83v38Ev();
extern void _ZN8S19420C83v39Ev();
extern void _ZN8S19420C83v40Ev();
extern void _ZN8S19420C83v41Ev();
extern void _ZN8S19420C83v42Ev();
extern void _ZN8S19420C83v43Ev();
extern void _ZN8S19420C83v44Ev();
static  VTBL_ENTRY _tg__ZTV8S19420C8__8S19420C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19420C8[0]),
  (VTBL_ENTRY)&_ZN8S19420C93v27Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v28Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v29Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v30Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v31Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v32Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v33Ev,
  (VTBL_ENTRY)&_ZN8S19420C93v34Ev,
  (VTBL_ENTRY)&_ZN8S19420C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19420C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v35Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v36Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v37Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v38Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v39Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v40Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v41Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v42Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v43Ev,
  (VTBL_ENTRY)&_ZN8S19420C83v44Ev,
};
static  VTT_ENTRY vtt_S19420C1[] = {
  {&(_ZTV8S19420C1[11]),  11,149},
  {&(_tg__ZTV8S19420C4__8S19420C1[9]),  9,15},
  {&(_tg__ZTV8S19420C5__8S19420C4__8S19420C1[7]),  7,13},
  {&(_tg__ZTV8S19420C38S19420C5__A1__8S19420C4__8S19420C1[2]),  2,5},
  {&(_tg__ZTV8S19420C7__8S19420C4__8S19420C1[13]),  13,23},
  {&(_tg__ZTV8S19420C6__8S19420C4__8S19420C1[12]),  12,23},
  {&(_tg__ZTV8S19420C38S19420C58S19420C6__A4__8S19420C4__8S19420C1[2]),  2,5},
  {&(_tg__ZTV8S19420C7__8S19420C4__8S19420C1[13]),  13,23},
  {&(_tg__ZTV8S19420C4__8S19420C1[9]),  9,15},
  {&(_ZTV8S19420C1[97]),  97,149},
  {&(_ZTV8S19420C1[11]),  11,149},
  {&(_ZTV8S19420C1[45]),  45,149},
  {&(_ZTV8S19420C1[53]),  53,149},
  {&(_ZTV8S19420C1[68]),  68,149},
  {&(_ZTV8S19420C1[81]),  81,149},
  {&(_ZTV8S19420C1[97]),  97,149},
  {&(_ZTV8S19420C1[129]),  129,149},
  {&(_ZTV8S19420C1[129]),  129,149},
  {&(_tg__ZTV8S19420C7__8S19420C1[7]),  7,17},
  {&(_tg__ZTV8S19420C5__8S19420C7__8S19420C1[7]),  7,13},
  {&(_tg__ZTV8S19420C38S19420C5__A1__8S19420C7__8S19420C1[2]),  2,5},
  {&(_tg__ZTV8S19420C7__8S19420C1[7]),  7,17},
  {&(_tg__ZTV8S19420C8__8S19420C1[11]),  11,31},
  {&(_tg__ZTV8S19420C8__8S19420C1[11]),  11,31},
};
extern VTBL_ENTRY _ZTI8S19420C1[];
extern  VTBL_ENTRY _ZTV8S19420C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19420C1[];
static VTBL_ENTRY alt_thunk_names66[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19420C7D0Ev,_ZTv0_n12_N8S19420C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19420C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19420C7D1Ev,_ZTv0_n12_N8S19420C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19420C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19420C4D0Ev,_ZTv0_n12_N8S19420C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19420C4D0Ev,_ZThn24_N8S19420C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19420C4D0Ev,_ZThn44_N8S19420C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19420C4D0Ev,_ZThn16_N8S19420C4D0Ev),
  (VTBL_ENTRY)_ZN8S19420C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19420C4D1Ev,_ZTv0_n12_N8S19420C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19420C4D1Ev,_ZThn24_N8S19420C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19420C4D1Ev,_ZThn44_N8S19420C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19420C4D1Ev,_ZThn16_N8S19420C4D1Ev),
  (VTBL_ENTRY)_ZN8S19420C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19420C1D0Ev,_ZTv0_n48_N8S19420C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19420C1D0Ev,_ZThn60_N8S19420C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19420C1D1Ev,_ZTv0_n48_N8S19420C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19420C1D1Ev,_ZThn60_N8S19420C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19420C1D0Ev,_ZTv0_n12_N8S19420C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19420C1D0Ev,_ZThn44_N8S19420C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19420C1D0Ev,_ZThn24_N8S19420C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19420C1D0Ev,_ZThn16_N8S19420C1D0Ev),
  (VTBL_ENTRY)_ZN8S19420C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19420C1D1Ev,_ZTv0_n12_N8S19420C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19420C1D1Ev,_ZThn44_N8S19420C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19420C1D1Ev,_ZThn24_N8S19420C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19420C1D1Ev,_ZThn16_N8S19420C1D1Ev),
  (VTBL_ENTRY)_ZN8S19420C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19420C1 = {  "S19420C1", // class name
  bases_S19420C1, 20,
  &(vtc_S19420C1[0]), // expected_vtbl_contents
  &(vtt_S19420C1[0]), // expected_vtt_contents
  ABISELECT(120,64), // object size
  NSPAIRA(_ZTI8S19420C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19420C1),149, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19420C1),24, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names66,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21761C2_nt  {
  void *s21761c2f0;
  int s21761c2f1[2];
  ::S3600C19 s21761c2f2;
  void  mf21761c2(); // _ZN11S21761C2_nt9mf21761c2Ev
};
//SIG(-1 S21761C2_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S21761C2_nt ::mf21761c2(){}

//skip512 S21761C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21761C5_nt  {
  void *s21761c5f0[2];
  void  mf21761c5(); // _ZN11S21761C5_nt9mf21761c5Ev
};
//SIG(-1 S21761C5_nt) C1{ m Fp[2]}


void  S21761C5_nt ::mf21761c5(){}

//skip512 S21761C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21761C7  {
  void *s21761c7f0[2];
  void  mf21761c7(); // _ZN8S21761C79mf21761c7Ev
};
//SIG(-1 S21761C7) C1{ m Fp[2]}


void  S21761C7 ::mf21761c7(){}

static void Test_S21761C7()
{
  {
    init_simple_test("S21761C7");
    S21761C7 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21761C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21761C7)");
    check_field_offset(lv, s21761c7f0, 0, "S21761C7.s21761c7f0");
  }
}
static Arrange_To_Call_Me vS21761C7(Test_S21761C7, "S21761C7", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21761C9  {
  void *s21761c9f0[2];
  void  mf21761c9(); // _ZN8S21761C99mf21761c9Ev
};
//SIG(-1 S21761C9) C1{ m Fp[2]}


void  S21761C9 ::mf21761c9(){}

static void Test_S21761C9()
{
  {
    init_simple_test("S21761C9");
    S21761C9 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21761C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21761C9)");
    check_field_offset(lv, s21761c9f0, 0, "S21761C9.s21761c9f0");
  }
}
static Arrange_To_Call_Me vS21761C9(Test_S21761C9, "S21761C9", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21761C11  {
  void *s21761c11f0[2];
  void  mf21761c11(); // _ZN9S21761C1110mf21761c11Ev
};
//SIG(-1 S21761C11) C1{ m Fp[2]}


void  S21761C11 ::mf21761c11(){}

static void Test_S21761C11()
{
  {
    init_simple_test("S21761C11");
    S21761C11 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21761C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21761C11)");
    check_field_offset(lv, s21761c11f0, 0, "S21761C11.s21761c11f0");
  }
}
static Arrange_To_Call_Me vS21761C11(Test_S21761C11, "S21761C11", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21761C13  {
  void *s21761c13f0[2];
  void  mf21761c13(); // _ZN9S21761C1310mf21761c13Ev
};
//SIG(-1 S21761C13) C1{ m Fp[2]}


void  S21761C13 ::mf21761c13(){}

static void Test_S21761C13()
{
  {
    init_simple_test("S21761C13");
    S21761C13 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21761C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21761C13)");
    check_field_offset(lv, s21761c13f0, 0, "S21761C13.s21761c13f0");
  }
}
static Arrange_To_Call_Me vS21761C13(Test_S21761C13, "S21761C13", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21761C1  {
  void *s21761c1f0;
  int s21761c1f1[3];
  char s21761c1f2;
  int s21761c1f3;
  char s21761c1f4[3];
  int s21761c1f5[4];
  void *s21761c1f6[2];
  int s21761c1f7[5];
  ::S21761C2_nt s21761c1f8;
  ::S21761C2_nt s21761c1f9;
  int s21761c1f10[4];
  __tsi64 s21761c1f11;
  ::S3010C10_nt s21761c1f12;
  ::S21761C5_nt s21761c1f13;
  ::S21761C5_nt s21761c1f14;
  ::S21761C7 s21761c1f15;
  ::S21761C7 s21761c1f16;
  ::S21761C9 s21761c1f17;
  ::S21761C9 s21761c1f18;
  ::S21761C11 s21761c1f19;
  ::S21761C11 s21761c1f20;
  ::S21761C13 s21761c1f21;
  void *s21761c1f22;
  ::S21761C2_nt s21761c1f23;
  ::S3600C17_nt s21761c1f24;
  void *s21761c1f25;
  int s21761c1f26[3];
  ::S21761C2_nt s21761c1f27;
  int s21761c1f28;
  void  mf21761c1(); // _ZN8S21761C19mf21761c1Ev
  virtual  ~S21761C1(); // _ZN8S21761C1D1Ev
  S21761C1(); // tgen
};
//SIG(1 S21761C1) C1{ vd m Fp Fi[3] Fc Fi Fc[3] Fi[4] Fp[2] Fi[5] FC2{ m Fp Fi[2] FC3{ m}} FC2 Fi[4] FL FC4{ m Fp[2]} FC5{ m Fp[2]} FC5 FC6{ m Fp[2]} FC6 FC7{ m Fp[2]} FC7 FC8{ m Fp[2]} FC8 FC9{ m Fp[2]} Fp FC2 FC10{ BC11{ m Fp Fi FC3 FC3}} Fp Fi[3] FC2 Fi}


void  S21761C1 ::mf21761c1(){}
 S21761C1 ::~S21761C1(){ note_dtor("S21761C1", this);}
S21761C1 ::S21761C1(){ note_ctor("S21761C1", this);} // tgen

static void Test_S21761C1()
{
  extern Class_Descriptor cd_S21761C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(55,71)];
    init_test(&cd_S21761C1, buf);
    S21761C1 *dp, &lv = *(dp=new (buf) S21761C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,280), "sizeof(S21761C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21761C1)");
    check_field_offset(lv, s21761c1f0, ABISELECT(8,4), "S21761C1.s21761c1f0");
    check_field_offset(lv, s21761c1f1, ABISELECT(16,8), "S21761C1.s21761c1f1");
    check_field_offset(lv, s21761c1f2, ABISELECT(28,20), "S21761C1.s21761c1f2");
    check_field_offset(lv, s21761c1f3, ABISELECT(32,24), "S21761C1.s21761c1f3");
    check_field_offset(lv, s21761c1f4, ABISELECT(36,28), "S21761C1.s21761c1f4");
    check_field_offset(lv, s21761c1f5, ABISELECT(40,32), "S21761C1.s21761c1f5");
    check_field_offset(lv, s21761c1f6, ABISELECT(56,48), "S21761C1.s21761c1f6");
    check_field_offset(lv, s21761c1f7, ABISELECT(72,56), "S21761C1.s21761c1f7");
    check_field_offset(lv, s21761c1f8, ABISELECT(96,76), "S21761C1.s21761c1f8");
    check_field_offset(lv, s21761c1f9, ABISELECT(120,92), "S21761C1.s21761c1f9");
    check_field_offset(lv, s21761c1f10, ABISELECT(144,108), "S21761C1.s21761c1f10");
    check_field_offset(lv, s21761c1f11, ABISELECT(160,124), "S21761C1.s21761c1f11");
    check_field_offset(lv, s21761c1f12, ABISELECT(168,132), "S21761C1.s21761c1f12");
    check_field_offset(lv, s21761c1f13, ABISELECT(184,140), "S21761C1.s21761c1f13");
    check_field_offset(lv, s21761c1f14, ABISELECT(200,148), "S21761C1.s21761c1f14");
    check_field_offset(lv, s21761c1f15, ABISELECT(216,156), "S21761C1.s21761c1f15");
    check_field_offset(lv, s21761c1f16, ABISELECT(232,164), "S21761C1.s21761c1f16");
    check_field_offset(lv, s21761c1f17, ABISELECT(248,172), "S21761C1.s21761c1f17");
    check_field_offset(lv, s21761c1f18, ABISELECT(264,180), "S21761C1.s21761c1f18");
    check_field_offset(lv, s21761c1f19, ABISELECT(280,188), "S21761C1.s21761c1f19");
    check_field_offset(lv, s21761c1f20, ABISELECT(296,196), "S21761C1.s21761c1f20");
    check_field_offset(lv, s21761c1f21, ABISELECT(312,204), "S21761C1.s21761c1f21");
    check_field_offset(lv, s21761c1f22, ABISELECT(328,212), "S21761C1.s21761c1f22");
    check_field_offset(lv, s21761c1f23, ABISELECT(336,216), "S21761C1.s21761c1f23");
    check_field_offset(lv, s21761c1f24, ABISELECT(360,232), "S21761C1.s21761c1f24");
    check_field_offset(lv, s21761c1f25, ABISELECT(376,244), "S21761C1.s21761c1f25");
    check_field_offset(lv, s21761c1f26, ABISELECT(384,248), "S21761C1.s21761c1f26");
    check_field_offset(lv, s21761c1f27, ABISELECT(400,260), "S21761C1.s21761c1f27");
    check_field_offset(lv, s21761c1f28, ABISELECT(424,276), "S21761C1.s21761c1f28");
    test_class_info(&lv, &cd_S21761C1);
    dp->~S21761C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21761C1(Test_S21761C1, "S21761C1", ABISELECT(432,280));

#else // __cplusplus

extern void _ZN8S21761C1C1Ev();
extern void _ZN8S21761C1D1Ev();
Name_Map name_map_S21761C1[] = {
  NSPAIR(_ZN8S21761C1C1Ev),
  NSPAIR(_ZN8S21761C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21761C1[];
extern void _ZN8S21761C1D1Ev();
extern void _ZN8S21761C1D0Ev();
static  VTBL_ENTRY vtc_S21761C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21761C1[0]),
  (VTBL_ENTRY)&_ZN8S21761C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21761C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21761C1[];
extern  VTBL_ENTRY _ZTV8S21761C1[];
Class_Descriptor cd_S21761C1 = {  "S21761C1", // class name
  0,0,//no base classes
  &(vtc_S21761C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(432,280), // object size
  NSPAIRA(_ZTI8S21761C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21761C1),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  S469C5  {
  void *s469c5f0;
  long s469c5f1[6];
  char s469c5f2:5;
  virtual void  v1(); // _ZN6S469C52v1Ev
  virtual void  v2(); // _ZN6S469C52v2Ev
  virtual void  v3(); // _ZN6S469C52v3Ev
  virtual void  v4(); // _ZN6S469C52v4Ev
  ~S469C5(); // tgen
  S469C5(); // tgen
};
//SIG(-1 S469C5) C1{ v1 v2 v3 v4 Fp Fl[6] Fc:5}


void  S469C5 ::v1(){vfunc_called(this, "_ZN6S469C52v1Ev");}
void  S469C5 ::v2(){vfunc_called(this, "_ZN6S469C52v2Ev");}
void  S469C5 ::v3(){vfunc_called(this, "_ZN6S469C52v3Ev");}
void  S469C5 ::v4(){vfunc_called(this, "_ZN6S469C52v4Ev");}
S469C5 ::~S469C5(){ note_dtor("S469C5", this);} // tgen
S469C5 ::S469C5(){ note_ctor("S469C5", this);} // tgen

static void Test_S469C5()
{
  extern Class_Descriptor cd_S469C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S469C5, buf);
    S469C5 *dp, &lv = *(dp=new (buf) S469C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S469C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S469C5)");
    check_field_offset(lv, s469c5f0, ABISELECT(8,4), "S469C5.s469c5f0");
    check_field_offset(lv, s469c5f1, ABISELECT(16,8), "S469C5.s469c5f1");
    set_bf_and_test(lv, s469c5f2, ABISELECT(64,32), 0, 5, 1, "S469C5");
    set_bf_and_test(lv, s469c5f2, ABISELECT(64,32), 0, 5, hide_sll(1LL<<4), "S469C5");
    test_class_info(&lv, &cd_S469C5);
    dp->~S469C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS469C5(Test_S469C5, "S469C5", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN6S469C5C1Ev();
extern void _ZN6S469C5D1Ev();
Name_Map name_map_S469C5[] = {
  NSPAIR(_ZN6S469C5C1Ev),
  NSPAIR(_ZN6S469C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S469C5[];
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
static  VTBL_ENTRY vtc_S469C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S469C5[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
};
extern VTBL_ENTRY _ZTI6S469C5[];
extern  VTBL_ENTRY _ZTV6S469C5[];
Class_Descriptor cd_S469C5 = {  "S469C5", // class name
  0,0,//no base classes
  &(vtc_S469C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI6S469C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S469C5),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  S469C4  : S469C5 {
  void *s469c4f0[11];
  char s469c4f1[4];
  __tsi64 s469c4f2;
  virtual void  v5(); // _ZN6S469C42v5Ev
  virtual void  v6(); // _ZN6S469C42v6Ev
  virtual void  v7(); // _ZN6S469C42v7Ev
  virtual void  v8(); // _ZN6S469C42v8Ev
  ~S469C4(); // tgen
  S469C4(); // tgen
};
//SIG(-1 S469C4) C1{ BC2{ v5 v6 v7 v8 Fp Fl[6] Fc:5} v1 v2 v3 v4 Fp[11] Fc[4] FL}


void  S469C4 ::v5(){vfunc_called(this, "_ZN6S469C42v5Ev");}
void  S469C4 ::v6(){vfunc_called(this, "_ZN6S469C42v6Ev");}
void  S469C4 ::v7(){vfunc_called(this, "_ZN6S469C42v7Ev");}
void  S469C4 ::v8(){vfunc_called(this, "_ZN6S469C42v8Ev");}
S469C4 ::~S469C4(){ note_dtor("S469C4", this);} // tgen
S469C4 ::S469C4(){ note_ctor("S469C4", this);} // tgen

static void Test_S469C4()
{
  extern Class_Descriptor cd_S469C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,24)];
    init_test(&cd_S469C4, buf);
    S469C4 *dp, &lv = *(dp=new (buf) S469C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,92), "sizeof(S469C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S469C4)");
    check_base_class_offset(lv, (S469C5*), 0, "S469C4");
    check_field_offset(lv, s469c4f0, ABISELECT(72,36), "S469C4.s469c4f0");
    check_field_offset(lv, s469c4f1, ABISELECT(160,80), "S469C4.s469c4f1");
    check_field_offset(lv, s469c4f2, ABISELECT(168,84), "S469C4.s469c4f2");
    test_class_info(&lv, &cd_S469C4);
    dp->~S469C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS469C4(Test_S469C4, "S469C4", ABISELECT(176,92));

#else // __cplusplus

extern void _ZN6S469C4C1Ev();
extern void _ZN6S469C4D1Ev();
Name_Map name_map_S469C4[] = {
  NSPAIR(_ZN6S469C4C1Ev),
  NSPAIR(_ZN6S469C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S469C5;
extern VTBL_ENTRY _ZTI6S469C5[];
extern  VTBL_ENTRY _ZTV6S469C5[];
static Base_Class bases_S469C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S469C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI6S469C4[];
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
extern void _ZN6S469C42v5Ev();
extern void _ZN6S469C42v6Ev();
extern void _ZN6S469C42v7Ev();
extern void _ZN6S469C42v8Ev();
static  VTBL_ENTRY vtc_S469C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S469C4[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
  (VTBL_ENTRY)&_ZN6S469C42v5Ev,
  (VTBL_ENTRY)&_ZN6S469C42v6Ev,
  (VTBL_ENTRY)&_ZN6S469C42v7Ev,
  (VTBL_ENTRY)&_ZN6S469C42v8Ev,
};
extern VTBL_ENTRY _ZTI6S469C4[];
extern  VTBL_ENTRY _ZTV6S469C4[];
Class_Descriptor cd_S469C4 = {  "S469C4", // class name
  bases_S469C4, 1,
  &(vtc_S469C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,92), // object size
  NSPAIRA(_ZTI6S469C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S469C4),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S469C8  {
  int s469c8f0;
  void *s469c8f1[2];
  char s469c8f2[4];
  virtual void  v9(); // _ZN6S469C82v9Ev
  virtual void  v10(); // _ZN6S469C83v10Ev
  virtual void  v11(); // _ZN6S469C83v11Ev
  virtual void  v12(); // _ZN6S469C83v12Ev
  virtual void  v13(); // _ZN6S469C83v13Ev
  ~S469C8(); // tgen
  S469C8(); // tgen
};
//SIG(-1 S469C8) C1{ v1 v2 v3 v4 v5 Fi Fp[2] Fc[4]}


void  S469C8 ::v9(){vfunc_called(this, "_ZN6S469C82v9Ev");}
void  S469C8 ::v10(){vfunc_called(this, "_ZN6S469C83v10Ev");}
void  S469C8 ::v11(){vfunc_called(this, "_ZN6S469C83v11Ev");}
void  S469C8 ::v12(){vfunc_called(this, "_ZN6S469C83v12Ev");}
void  S469C8 ::v13(){vfunc_called(this, "_ZN6S469C83v13Ev");}
S469C8 ::~S469C8(){ note_dtor("S469C8", this);} // tgen
S469C8 ::S469C8(){ note_ctor("S469C8", this);} // tgen

static void Test_S469C8()
{
  extern Class_Descriptor cd_S469C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S469C8, buf);
    S469C8 *dp, &lv = *(dp=new (buf) S469C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S469C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S469C8)");
    check_field_offset(lv, s469c8f0, ABISELECT(8,4), "S469C8.s469c8f0");
    check_field_offset(lv, s469c8f1, ABISELECT(16,8), "S469C8.s469c8f1");
    check_field_offset(lv, s469c8f2, ABISELECT(32,16), "S469C8.s469c8f2");
    test_class_info(&lv, &cd_S469C8);
    dp->~S469C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS469C8(Test_S469C8, "S469C8", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN6S469C8C1Ev();
extern void _ZN6S469C8D1Ev();
Name_Map name_map_S469C8[] = {
  NSPAIR(_ZN6S469C8C1Ev),
  NSPAIR(_ZN6S469C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S469C8[];
extern void _ZN6S469C82v9Ev();
extern void _ZN6S469C83v10Ev();
extern void _ZN6S469C83v11Ev();
extern void _ZN6S469C83v12Ev();
extern void _ZN6S469C83v13Ev();
static  VTBL_ENTRY vtc_S469C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S469C8[0]),
  (VTBL_ENTRY)&_ZN6S469C82v9Ev,
  (VTBL_ENTRY)&_ZN6S469C83v10Ev,
  (VTBL_ENTRY)&_ZN6S469C83v11Ev,
  (VTBL_ENTRY)&_ZN6S469C83v12Ev,
  (VTBL_ENTRY)&_ZN6S469C83v13Ev,
};
extern VTBL_ENTRY _ZTI6S469C8[];
extern  VTBL_ENTRY _ZTV6S469C8[];
Class_Descriptor cd_S469C8 = {  "S469C8", // class name
  0,0,//no base classes
  &(vtc_S469C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI6S469C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S469C8),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  S469C7  : S469C8 , S469C5 {
  short s469c7f0;
  void *s469c7f1;
  virtual void  v14(); // _ZN6S469C73v14Ev
  virtual void  v15(); // _ZN6S469C73v15Ev
  virtual void  v16(); // _ZN6S469C73v16Ev
  virtual void  v17(); // _ZN6S469C73v17Ev
  virtual void  v18(); // _ZN6S469C73v18Ev
  ~S469C7(); // tgen
  S469C7(); // tgen
};
//SIG(-1 S469C7) C1{ BC2{ v6 v7 v8 v9 v10 Fi Fp[2] Fc[4]} BC3{ v11 v12 v13 v14 Fp Fl[6] Fc:5} v1 v2 v3 v4 v5 Fs Fp}


void  S469C7 ::v14(){vfunc_called(this, "_ZN6S469C73v14Ev");}
void  S469C7 ::v15(){vfunc_called(this, "_ZN6S469C73v15Ev");}
void  S469C7 ::v16(){vfunc_called(this, "_ZN6S469C73v16Ev");}
void  S469C7 ::v17(){vfunc_called(this, "_ZN6S469C73v17Ev");}
void  S469C7 ::v18(){vfunc_called(this, "_ZN6S469C73v18Ev");}
S469C7 ::~S469C7(){ note_dtor("S469C7", this);} // tgen
S469C7 ::S469C7(){ note_ctor("S469C7", this);} // tgen

static void Test_S469C7()
{
  extern Class_Descriptor cd_S469C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S469C7, buf);
    S469C7 *dp, &lv = *(dp=new (buf) S469C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S469C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S469C7)");
    check_base_class_offset(lv, (S469C8*), 0, "S469C7");
    check_base_class_offset(lv, (S469C5*), ABISELECT(40,20), "S469C7");
    check_field_offset(lv, s469c7f0, ABISELECT(106,54), "S469C7.s469c7f0");
    check_field_offset(lv, s469c7f1, ABISELECT(112,56), "S469C7.s469c7f1");
    test_class_info(&lv, &cd_S469C7);
    dp->~S469C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS469C7(Test_S469C7, "S469C7", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN6S469C7C1Ev();
extern void _ZN6S469C7D1Ev();
Name_Map name_map_S469C7[] = {
  NSPAIR(_ZN6S469C7C1Ev),
  NSPAIR(_ZN6S469C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S469C8;
extern VTBL_ENTRY _ZTI6S469C8[];
extern  VTBL_ENTRY _ZTV6S469C8[];
extern Class_Descriptor cd_S469C5;
extern VTBL_ENTRY _ZTI6S469C5[];
extern  VTBL_ENTRY _ZTV6S469C5[];
static Base_Class bases_S469C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S469C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S469C5,    ABISELECT(40,20), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S469C7[];
extern void _ZN6S469C82v9Ev();
extern void _ZN6S469C83v10Ev();
extern void _ZN6S469C83v11Ev();
extern void _ZN6S469C83v12Ev();
extern void _ZN6S469C83v13Ev();
extern void _ZN6S469C73v14Ev();
extern void _ZN6S469C73v15Ev();
extern void _ZN6S469C73v16Ev();
extern void _ZN6S469C73v17Ev();
extern void _ZN6S469C73v18Ev();
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
static  VTBL_ENTRY vtc_S469C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S469C7[0]),
  (VTBL_ENTRY)&_ZN6S469C82v9Ev,
  (VTBL_ENTRY)&_ZN6S469C83v10Ev,
  (VTBL_ENTRY)&_ZN6S469C83v11Ev,
  (VTBL_ENTRY)&_ZN6S469C83v12Ev,
  (VTBL_ENTRY)&_ZN6S469C83v13Ev,
  (VTBL_ENTRY)&_ZN6S469C73v14Ev,
  (VTBL_ENTRY)&_ZN6S469C73v15Ev,
  (VTBL_ENTRY)&_ZN6S469C73v16Ev,
  (VTBL_ENTRY)&_ZN6S469C73v17Ev,
  (VTBL_ENTRY)&_ZN6S469C73v18Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI6S469C7[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
};
extern VTBL_ENTRY _ZTI6S469C7[];
extern  VTBL_ENTRY _ZTV6S469C7[];
Class_Descriptor cd_S469C7 = {  "S469C7", // class name
  bases_S469C7, 2,
  &(vtc_S469C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI6S469C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S469C7),18, //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  S469C6  : virtual S469C5 , S469C7 {
  virtual void  v19(); // _ZN6S469C63v19Ev
  virtual void  v20(); // _ZN6S469C63v20Ev
  virtual void  v21(); // _ZN6S469C63v21Ev
  virtual void  v22(); // _ZN6S469C63v22Ev
  virtual void  v23(); // _ZN6S469C63v23Ev
  virtual void  v24(); // _ZN6S469C63v24Ev
  virtual void  v25(); // _ZN6S469C63v25Ev
  virtual void  v26(); // _ZN6S469C63v26Ev
  ~S469C6(); // tgen
  S469C6(); // tgen
};
//SIG(-1 S469C6) C1{ VBC2{ v9 v10 v11 v12 Fp Fl[6] Fc:5} BC3{ BC4{ v13 v14 v15 v16 v17 Fi Fp[2] Fc[4]} BC2 v18 v19 v20 v21 v22 Fs Fp} v1 v2 v3 v4 v5 v6 v7 v8}


void  S469C6 ::v19(){vfunc_called(this, "_ZN6S469C63v19Ev");}
void  S469C6 ::v20(){vfunc_called(this, "_ZN6S469C63v20Ev");}
void  S469C6 ::v21(){vfunc_called(this, "_ZN6S469C63v21Ev");}
void  S469C6 ::v22(){vfunc_called(this, "_ZN6S469C63v22Ev");}
void  S469C6 ::v23(){vfunc_called(this, "_ZN6S469C63v23Ev");}
void  S469C6 ::v24(){vfunc_called(this, "_ZN6S469C63v24Ev");}
void  S469C6 ::v25(){vfunc_called(this, "_ZN6S469C63v25Ev");}
void  S469C6 ::v26(){vfunc_called(this, "_ZN6S469C63v26Ev");}
S469C6 ::~S469C6(){ note_dtor("S469C6", this);} // tgen
S469C6 ::S469C6(){ note_ctor("S469C6", this);} // tgen

static void Test_S469C6()
{
  extern Class_Descriptor cd_S469C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[25];
    init_test(&cd_S469C6, buf);
    S469C6 *dp, &lv = *(dp=new (buf) S469C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,96), "sizeof(S469C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S469C6)");
    /*is_ambiguous_... S469C6::S469C5 */ AMB_check_base_class_offset(lv, (S469C5*), ABISELECT(120,60), "S469C6");
    check_base_class_offset(lv, (S469C8*)(S469C7*), 0, "S469C6");
    check_base_class_offset(lv, (S469C5*)(S469C7*), ABISELECT(40,20), "S469C6");
    check_base_class_offset(lv, (S469C7*), 0, "S469C6");
    test_class_info(&lv, &cd_S469C6);
    dp->~S469C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS469C6(Test_S469C6, "S469C6", ABISELECT(192,96));

#else // __cplusplus

extern void _ZN6S469C6C1Ev();
extern void _ZN6S469C6D1Ev();
Name_Map name_map_S469C6[] = {
  NSPAIR(_ZN6S469C6C1Ev),
  NSPAIR(_ZN6S469C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S469C5;
extern VTBL_ENTRY _ZTI6S469C5[];
extern  VTBL_ENTRY _ZTV6S469C5[];
extern Class_Descriptor cd_S469C8;
extern VTBL_ENTRY _ZTI6S469C8[];
extern  VTBL_ENTRY _ZTV6S469C8[];
extern Class_Descriptor cd_S469C5;
extern VTBL_ENTRY _ZTI6S469C5[];
extern  VTBL_ENTRY _ZTV6S469C5[];
extern Class_Descriptor cd_S469C7;
extern VTBL_ENTRY _ZTI6S469C7[];
extern  VTBL_ENTRY _ZTV6S469C7[];
static Base_Class bases_S469C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S469C5,    ABISELECT(120,60), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S469C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S469C5,    ABISELECT(40,20), //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S469C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S469C6[];
extern void _ZN6S469C82v9Ev();
extern void _ZN6S469C83v10Ev();
extern void _ZN6S469C83v11Ev();
extern void _ZN6S469C83v12Ev();
extern void _ZN6S469C83v13Ev();
extern void _ZN6S469C73v14Ev();
extern void _ZN6S469C73v15Ev();
extern void _ZN6S469C73v16Ev();
extern void _ZN6S469C73v17Ev();
extern void _ZN6S469C73v18Ev();
extern void _ZN6S469C63v19Ev();
extern void _ZN6S469C63v20Ev();
extern void _ZN6S469C63v21Ev();
extern void _ZN6S469C63v22Ev();
extern void _ZN6S469C63v23Ev();
extern void _ZN6S469C63v24Ev();
extern void _ZN6S469C63v25Ev();
extern void _ZN6S469C63v26Ev();
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
static  VTBL_ENTRY vtc_S469C6[] = {
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI6S469C6[0]),
  (VTBL_ENTRY)&_ZN6S469C82v9Ev,
  (VTBL_ENTRY)&_ZN6S469C83v10Ev,
  (VTBL_ENTRY)&_ZN6S469C83v11Ev,
  (VTBL_ENTRY)&_ZN6S469C83v12Ev,
  (VTBL_ENTRY)&_ZN6S469C83v13Ev,
  (VTBL_ENTRY)&_ZN6S469C73v14Ev,
  (VTBL_ENTRY)&_ZN6S469C73v15Ev,
  (VTBL_ENTRY)&_ZN6S469C73v16Ev,
  (VTBL_ENTRY)&_ZN6S469C73v17Ev,
  (VTBL_ENTRY)&_ZN6S469C73v18Ev,
  (VTBL_ENTRY)&_ZN6S469C63v19Ev,
  (VTBL_ENTRY)&_ZN6S469C63v20Ev,
  (VTBL_ENTRY)&_ZN6S469C63v21Ev,
  (VTBL_ENTRY)&_ZN6S469C63v22Ev,
  (VTBL_ENTRY)&_ZN6S469C63v23Ev,
  (VTBL_ENTRY)&_ZN6S469C63v24Ev,
  (VTBL_ENTRY)&_ZN6S469C63v25Ev,
  (VTBL_ENTRY)&_ZN6S469C63v26Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI6S469C6[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI6S469C6[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
};
extern VTBL_ENTRY _ZTV6S469C6[];
static  VTT_ENTRY vtt_S469C6[] = {
  {&(_ZTV6S469C6[3]),  3,37},
  {&(_ZTV6S469C6[33]),  33,37},
};
extern VTBL_ENTRY _ZTI6S469C6[];
extern  VTBL_ENTRY _ZTV6S469C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S469C6[];
Class_Descriptor cd_S469C6 = {  "S469C6", // class name
  bases_S469C6, 4,
  &(vtc_S469C6[0]), // expected_vtbl_contents
  &(vtt_S469C6[0]), // expected_vtt_contents
  ABISELECT(192,96), // object size
  NSPAIRA(_ZTI6S469C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S469C6),37, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S469C6),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S469C3  : S469C4 , virtual S469C6 {
  virtual  ~S469C3(); // _ZN6S469C3D2Ev
  virtual void  v27(); // _ZN6S469C33v27Ev
  virtual void  v28(); // _ZN6S469C33v28Ev
  virtual void  v29(); // _ZN6S469C33v29Ev
  S469C3(); // tgen
};
//SIG(-1 S469C3) C1{ BC2{ BC3{ v4 v5 v6 v7 Fp Fl[6] Fc:5} v8 v9 v10 v11 Fp[11] Fc[4] FL} VBC4{ VBC3 BC5{ BC6{ v12 v13 v14 v15 v16 Fi Fp[2] Fc[4]} BC3 v17 v18 v19 v20 v21 Fs Fp} v22 v23 v24 v25 v26 v27 v28 v29} vd v1 v2 v3}


 S469C3 ::~S469C3(){ note_dtor("S469C3", this);}
void  S469C3 ::v27(){vfunc_called(this, "_ZN6S469C33v27Ev");}
void  S469C3 ::v28(){vfunc_called(this, "_ZN6S469C33v28Ev");}
void  S469C3 ::v29(){vfunc_called(this, "_ZN6S469C33v29Ev");}
S469C3 ::S469C3(){ note_ctor("S469C3", this);} // tgen

static void Test_S469C3()
{
  extern Class_Descriptor cd_S469C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,48)];
    init_test(&cd_S469C3, buf);
    S469C3 *dp, &lv = *(dp=new (buf) S469C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,188), "sizeof(S469C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S469C3)");
    check_base_class_offset(lv, (S469C5*)(S469C4*), 0, "S469C3");
    check_base_class_offset(lv, (S469C4*), 0, "S469C3");
    /*is_ambiguous_... S469C6::S469C5 */ AMB_check_base_class_offset(lv, (S469C5*)(S469C6*), ABISELECT(296,152), "S469C3");
    check_base_class_offset(lv, (S469C8*)(S469C7*)(S469C6*), ABISELECT(176,92), "S469C3");
    check_base_class_offset(lv, (S469C5*)(S469C7*)(S469C6*), ABISELECT(216,112), "S469C3");
    check_base_class_offset(lv, (S469C7*)(S469C6*), ABISELECT(176,92), "S469C3");
    check_base_class_offset(lv, (S469C6*), ABISELECT(176,92), "S469C3");
    test_class_info(&lv, &cd_S469C3);
    dp->~S469C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS469C3(Test_S469C3, "S469C3", ABISELECT(368,188));

#else // __cplusplus

extern void _ZN6S469C3C1Ev();
extern void _ZN6S469C3D2Ev();
Name_Map name_map_S469C3[] = {
  NSPAIR(_ZN6S469C3C1Ev),
  NSPAIR(_ZN6S469C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S469C5;
extern VTBL_ENTRY _ZTI6S469C5[];
extern  VTBL_ENTRY _ZTV6S469C5[];
extern Class_Descriptor cd_S469C4;
extern VTBL_ENTRY _ZTI6S469C4[];
extern  VTBL_ENTRY _ZTV6S469C4[];
extern Class_Descriptor cd_S469C5;
extern VTBL_ENTRY _ZTI6S469C5[];
extern  VTBL_ENTRY _ZTV6S469C5[];
extern Class_Descriptor cd_S469C8;
extern VTBL_ENTRY _ZTI6S469C8[];
extern  VTBL_ENTRY _ZTV6S469C8[];
extern Class_Descriptor cd_S469C5;
extern VTBL_ENTRY _ZTI6S469C5[];
extern  VTBL_ENTRY _ZTV6S469C5[];
extern Class_Descriptor cd_S469C7;
extern VTBL_ENTRY _ZTI6S469C7[];
extern  VTBL_ENTRY _ZTV6S469C7[];
extern Class_Descriptor cd_S469C6;
extern VTBL_ENTRY _ZTI6S469C6[];
extern  VTBL_ENTRY _ZTV6S469C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S469C6[];
static Base_Class bases_S469C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S469C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S469C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S469C5,    ABISELECT(296,152), //bcp->offset
    66, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S469C8,    ABISELECT(176,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S469C5,    ABISELECT(216,112), //bcp->offset
    60, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S469C7,    ABISELECT(176,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S469C6,    ABISELECT(176,92), //bcp->offset
    17, //bcp->virtual_function_table_offset
    25, //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 _ZTI6S469C3[];
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
extern void _ZN6S469C42v5Ev();
extern void _ZN6S469C42v6Ev();
extern void _ZN6S469C42v7Ev();
extern void _ZN6S469C42v8Ev();
extern void _ZN6S469C3D1Ev();
extern void _ZN6S469C3D0Ev();
extern void _ZN6S469C33v27Ev();
extern void _ZN6S469C33v28Ev();
extern void _ZN6S469C33v29Ev();
extern void _ZN6S469C82v9Ev();
extern void _ZN6S469C83v10Ev();
extern void _ZN6S469C83v11Ev();
extern void _ZN6S469C83v12Ev();
extern void _ZN6S469C83v13Ev();
extern void _ZN6S469C73v14Ev();
extern void _ZN6S469C73v15Ev();
extern void _ZN6S469C73v16Ev();
extern void _ZN6S469C73v17Ev();
extern void _ZN6S469C73v18Ev();
extern void _ZN6S469C63v19Ev();
extern void _ZN6S469C63v20Ev();
extern void _ZN6S469C63v21Ev();
extern void _ZN6S469C63v22Ev();
extern void _ZN6S469C63v23Ev();
extern void _ZN6S469C63v24Ev();
extern void _ZN6S469C63v25Ev();
extern void _ZN6S469C63v26Ev();
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
static  VTBL_ENTRY vtc_S469C3[] = {
  ABISELECT(296,152),
  ABISELECT(176,92),
  0,
  (VTBL_ENTRY)&(_ZTI6S469C3[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
  (VTBL_ENTRY)&_ZN6S469C42v5Ev,
  (VTBL_ENTRY)&_ZN6S469C42v6Ev,
  (VTBL_ENTRY)&_ZN6S469C42v7Ev,
  (VTBL_ENTRY)&_ZN6S469C42v8Ev,
  (VTBL_ENTRY)&_ZN6S469C3D1Ev,
  (VTBL_ENTRY)&_ZN6S469C3D0Ev,
  (VTBL_ENTRY)&_ZN6S469C33v27Ev,
  (VTBL_ENTRY)&_ZN6S469C33v28Ev,
  (VTBL_ENTRY)&_ZN6S469C33v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI6S469C3[0]),
  (VTBL_ENTRY)&_ZN6S469C82v9Ev,
  (VTBL_ENTRY)&_ZN6S469C83v10Ev,
  (VTBL_ENTRY)&_ZN6S469C83v11Ev,
  (VTBL_ENTRY)&_ZN6S469C83v12Ev,
  (VTBL_ENTRY)&_ZN6S469C83v13Ev,
  (VTBL_ENTRY)&_ZN6S469C73v14Ev,
  (VTBL_ENTRY)&_ZN6S469C73v15Ev,
  (VTBL_ENTRY)&_ZN6S469C73v16Ev,
  (VTBL_ENTRY)&_ZN6S469C73v17Ev,
  (VTBL_ENTRY)&_ZN6S469C73v18Ev,
  (VTBL_ENTRY)&_ZN6S469C63v19Ev,
  (VTBL_ENTRY)&_ZN6S469C63v20Ev,
  (VTBL_ENTRY)&_ZN6S469C63v21Ev,
  (VTBL_ENTRY)&_ZN6S469C63v22Ev,
  (VTBL_ENTRY)&_ZN6S469C63v23Ev,
  (VTBL_ENTRY)&_ZN6S469C63v24Ev,
  (VTBL_ENTRY)&_ZN6S469C63v25Ev,
  (VTBL_ENTRY)&_ZN6S469C63v26Ev,
  ABISELECT(-216,-112),
  (VTBL_ENTRY)&(_ZTI6S469C3[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-296,-152),
  (VTBL_ENTRY)&(_ZTI6S469C3[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
};
extern VTBL_ENTRY _ZTV6S469C3[];
extern void _ZN6S469C82v9Ev();
extern void _ZN6S469C83v10Ev();
extern void _ZN6S469C83v11Ev();
extern void _ZN6S469C83v12Ev();
extern void _ZN6S469C83v13Ev();
extern void _ZN6S469C73v14Ev();
extern void _ZN6S469C73v15Ev();
extern void _ZN6S469C73v16Ev();
extern void _ZN6S469C73v17Ev();
extern void _ZN6S469C73v18Ev();
extern void _ZN6S469C63v19Ev();
extern void _ZN6S469C63v20Ev();
extern void _ZN6S469C63v21Ev();
extern void _ZN6S469C63v22Ev();
extern void _ZN6S469C63v23Ev();
extern void _ZN6S469C63v24Ev();
extern void _ZN6S469C63v25Ev();
extern void _ZN6S469C63v26Ev();
static  VTBL_ENTRY _tg__ZTV6S469C6__6S469C3[] = {
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI6S469C6[0]),
  (VTBL_ENTRY)&_ZN6S469C82v9Ev,
  (VTBL_ENTRY)&_ZN6S469C83v10Ev,
  (VTBL_ENTRY)&_ZN6S469C83v11Ev,
  (VTBL_ENTRY)&_ZN6S469C83v12Ev,
  (VTBL_ENTRY)&_ZN6S469C83v13Ev,
  (VTBL_ENTRY)&_ZN6S469C73v14Ev,
  (VTBL_ENTRY)&_ZN6S469C73v15Ev,
  (VTBL_ENTRY)&_ZN6S469C73v16Ev,
  (VTBL_ENTRY)&_ZN6S469C73v17Ev,
  (VTBL_ENTRY)&_ZN6S469C73v18Ev,
  (VTBL_ENTRY)&_ZN6S469C63v19Ev,
  (VTBL_ENTRY)&_ZN6S469C63v20Ev,
  (VTBL_ENTRY)&_ZN6S469C63v21Ev,
  (VTBL_ENTRY)&_ZN6S469C63v22Ev,
  (VTBL_ENTRY)&_ZN6S469C63v23Ev,
  (VTBL_ENTRY)&_ZN6S469C63v24Ev,
  (VTBL_ENTRY)&_ZN6S469C63v25Ev,
  (VTBL_ENTRY)&_ZN6S469C63v26Ev,
};
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
static  VTBL_ENTRY _tg__ZTV6S469C5__6S469C6__6S469C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI6S469C6[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
};
static  VTT_ENTRY vtt_S469C3[] = {
  {&(_ZTV6S469C3[4]),  4,76},
  {&(_ZTV6S469C3[42]),  42,76},
  {&(_ZTV6S469C3[72]),  72,76},
  {&(_ZTV6S469C3[62]),  62,76},
  {&(_tg__ZTV6S469C6__6S469C3[3]),  3,21},
  {&(_tg__ZTV6S469C5__6S469C6__6S469C3[6]),  6,10},
};
extern VTBL_ENTRY _ZTI6S469C3[];
extern  VTBL_ENTRY _ZTV6S469C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S469C3[];
Class_Descriptor cd_S469C3 = {  "S469C3", // class name
  bases_S469C3, 7,
  &(vtc_S469C3[0]), // expected_vtbl_contents
  &(vtt_S469C3[0]), // expected_vtt_contents
  ABISELECT(368,188), // object size
  NSPAIRA(_ZTI6S469C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S469C3),76, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S469C3),6, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S469C2  : S469C3 {
  int s469c2f0;
  ::S19426C16 s469c2f1;
  virtual void  v30(); // _ZN6S469C23v30Ev
  virtual void  v31(); // _ZN6S469C23v31Ev
  virtual void  v32(); // _ZN6S469C23v32Ev
  virtual void  v33(); // _ZN6S469C23v33Ev
  virtual void  v34(); // _ZN6S469C23v34Ev
  virtual void  v35(); // _ZN6S469C23v35Ev
  virtual void  v36(); // _ZN6S469C23v36Ev
  ~S469C2(); // tgen
  S469C2(); // tgen
};
//SIG(-1 S469C2) C1{ BC2{ BC3{ BC4{ v8 v9 v10 v11 Fp Fl[6] Fc:5} v12 v13 v14 v15 Fp[11] Fc[4] FL} VBC5{ VBC4 BC6{ BC7{ v16 v17 v18 v19 v20 Fi Fp[2] Fc[4]} BC4 v21 v22 v23 v24 v25 Fs Fp} v26 v27 v28 v29 v30 v31 v32 v33} vd v34 v35 v36} v1 v2 v3 v4 v5 v6 v7 Fi FC8{ vd v37 v38 v39 v40 v41 v42 Fi}}


void  S469C2 ::v30(){vfunc_called(this, "_ZN6S469C23v30Ev");}
void  S469C2 ::v31(){vfunc_called(this, "_ZN6S469C23v31Ev");}
void  S469C2 ::v32(){vfunc_called(this, "_ZN6S469C23v32Ev");}
void  S469C2 ::v33(){vfunc_called(this, "_ZN6S469C23v33Ev");}
void  S469C2 ::v34(){vfunc_called(this, "_ZN6S469C23v34Ev");}
void  S469C2 ::v35(){vfunc_called(this, "_ZN6S469C23v35Ev");}
void  S469C2 ::v36(){vfunc_called(this, "_ZN6S469C23v36Ev");}
S469C2 ::~S469C2(){ note_dtor("S469C2", this);} // tgen
S469C2 ::S469C2(){ note_ctor("S469C2", this);} // tgen

static void Test_S469C2()
{
  extern Class_Descriptor cd_S469C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,51)];
    init_test(&cd_S469C2, buf);
    S469C2 *dp, &lv = *(dp=new (buf) S469C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,200), "sizeof(S469C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S469C2)");
    check_base_class_offset(lv, (S469C5*)(S469C4*)(S469C3*), 0, "S469C2");
    check_base_class_offset(lv, (S469C4*)(S469C3*), 0, "S469C2");
    /*is_ambiguous_... S469C6::S469C5 */ AMB_check_base_class_offset(lv, (S469C5*)(S469C6*), ABISELECT(320,164), "S469C2");
    check_base_class_offset(lv, (S469C8*)(S469C7*)(S469C6*), ABISELECT(200,104), "S469C2");
    check_base_class_offset(lv, (S469C5*)(S469C7*)(S469C6*), ABISELECT(240,124), "S469C2");
    check_base_class_offset(lv, (S469C7*)(S469C6*), ABISELECT(200,104), "S469C2");
    check_base_class_offset(lv, (S469C6*)(S469C3*), ABISELECT(200,104), "S469C2");
    check_base_class_offset(lv, (S469C3*), 0, "S469C2");
    check_field_offset(lv, s469c2f0, ABISELECT(176,92), "S469C2.s469c2f0");
    check_field_offset(lv, s469c2f1, ABISELECT(184,96), "S469C2.s469c2f1");
    test_class_info(&lv, &cd_S469C2);
    dp->~S469C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS469C2(Test_S469C2, "S469C2", ABISELECT(392,200));

#else // __cplusplus

extern void _ZN6S469C2C1Ev();
extern void _ZN6S469C2D1Ev();
Name_Map name_map_S469C2[] = {
  NSPAIR(_ZN6S469C2C1Ev),
  NSPAIR(_ZN6S469C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S469C5;
extern VTBL_ENTRY _ZTI6S469C5[];
extern  VTBL_ENTRY _ZTV6S469C5[];
extern Class_Descriptor cd_S469C4;
extern VTBL_ENTRY _ZTI6S469C4[];
extern  VTBL_ENTRY _ZTV6S469C4[];
extern Class_Descriptor cd_S469C5;
extern VTBL_ENTRY _ZTI6S469C5[];
extern  VTBL_ENTRY _ZTV6S469C5[];
extern Class_Descriptor cd_S469C8;
extern VTBL_ENTRY _ZTI6S469C8[];
extern  VTBL_ENTRY _ZTV6S469C8[];
extern Class_Descriptor cd_S469C5;
extern VTBL_ENTRY _ZTI6S469C5[];
extern  VTBL_ENTRY _ZTV6S469C5[];
extern Class_Descriptor cd_S469C7;
extern VTBL_ENTRY _ZTI6S469C7[];
extern  VTBL_ENTRY _ZTV6S469C7[];
extern Class_Descriptor cd_S469C6;
extern VTBL_ENTRY _ZTI6S469C6[];
extern  VTBL_ENTRY _ZTV6S469C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S469C6[];
extern Class_Descriptor cd_S469C3;
extern VTBL_ENTRY _ZTI6S469C3[];
extern  VTBL_ENTRY _ZTV6S469C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S469C3[];
static Base_Class bases_S469C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S469C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S469C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S469C5,    ABISELECT(320,164), //bcp->offset
    73, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S469C8,    ABISELECT(200,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S469C5,    ABISELECT(240,124), //bcp->offset
    67, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S469C7,    ABISELECT(200,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S469C6,    ABISELECT(200,104), //bcp->offset
    24, //bcp->virtual_function_table_offset
    25, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S469C3,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S469C2[];
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
extern void _ZN6S469C42v5Ev();
extern void _ZN6S469C42v6Ev();
extern void _ZN6S469C42v7Ev();
extern void _ZN6S469C42v8Ev();
extern void _ZN6S469C2D1Ev();
extern void _ZN6S469C2D0Ev();
extern void _ZN6S469C33v27Ev();
extern void _ZN6S469C33v28Ev();
extern void _ZN6S469C33v29Ev();
extern void _ZN6S469C23v30Ev();
extern void _ZN6S469C23v31Ev();
extern void _ZN6S469C23v32Ev();
extern void _ZN6S469C23v33Ev();
extern void _ZN6S469C23v34Ev();
extern void _ZN6S469C23v35Ev();
extern void _ZN6S469C23v36Ev();
extern void _ZN6S469C82v9Ev();
extern void _ZN6S469C83v10Ev();
extern void _ZN6S469C83v11Ev();
extern void _ZN6S469C83v12Ev();
extern void _ZN6S469C83v13Ev();
extern void _ZN6S469C73v14Ev();
extern void _ZN6S469C73v15Ev();
extern void _ZN6S469C73v16Ev();
extern void _ZN6S469C73v17Ev();
extern void _ZN6S469C73v18Ev();
extern void _ZN6S469C63v19Ev();
extern void _ZN6S469C63v20Ev();
extern void _ZN6S469C63v21Ev();
extern void _ZN6S469C63v22Ev();
extern void _ZN6S469C63v23Ev();
extern void _ZN6S469C63v24Ev();
extern void _ZN6S469C63v25Ev();
extern void _ZN6S469C63v26Ev();
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
static  VTBL_ENTRY vtc_S469C2[] = {
  ABISELECT(320,164),
  ABISELECT(200,104),
  0,
  (VTBL_ENTRY)&(_ZTI6S469C2[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
  (VTBL_ENTRY)&_ZN6S469C42v5Ev,
  (VTBL_ENTRY)&_ZN6S469C42v6Ev,
  (VTBL_ENTRY)&_ZN6S469C42v7Ev,
  (VTBL_ENTRY)&_ZN6S469C42v8Ev,
  (VTBL_ENTRY)&_ZN6S469C2D1Ev,
  (VTBL_ENTRY)&_ZN6S469C2D0Ev,
  (VTBL_ENTRY)&_ZN6S469C33v27Ev,
  (VTBL_ENTRY)&_ZN6S469C33v28Ev,
  (VTBL_ENTRY)&_ZN6S469C33v29Ev,
  (VTBL_ENTRY)&_ZN6S469C23v30Ev,
  (VTBL_ENTRY)&_ZN6S469C23v31Ev,
  (VTBL_ENTRY)&_ZN6S469C23v32Ev,
  (VTBL_ENTRY)&_ZN6S469C23v33Ev,
  (VTBL_ENTRY)&_ZN6S469C23v34Ev,
  (VTBL_ENTRY)&_ZN6S469C23v35Ev,
  (VTBL_ENTRY)&_ZN6S469C23v36Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI6S469C2[0]),
  (VTBL_ENTRY)&_ZN6S469C82v9Ev,
  (VTBL_ENTRY)&_ZN6S469C83v10Ev,
  (VTBL_ENTRY)&_ZN6S469C83v11Ev,
  (VTBL_ENTRY)&_ZN6S469C83v12Ev,
  (VTBL_ENTRY)&_ZN6S469C83v13Ev,
  (VTBL_ENTRY)&_ZN6S469C73v14Ev,
  (VTBL_ENTRY)&_ZN6S469C73v15Ev,
  (VTBL_ENTRY)&_ZN6S469C73v16Ev,
  (VTBL_ENTRY)&_ZN6S469C73v17Ev,
  (VTBL_ENTRY)&_ZN6S469C73v18Ev,
  (VTBL_ENTRY)&_ZN6S469C63v19Ev,
  (VTBL_ENTRY)&_ZN6S469C63v20Ev,
  (VTBL_ENTRY)&_ZN6S469C63v21Ev,
  (VTBL_ENTRY)&_ZN6S469C63v22Ev,
  (VTBL_ENTRY)&_ZN6S469C63v23Ev,
  (VTBL_ENTRY)&_ZN6S469C63v24Ev,
  (VTBL_ENTRY)&_ZN6S469C63v25Ev,
  (VTBL_ENTRY)&_ZN6S469C63v26Ev,
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI6S469C2[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-164),
  (VTBL_ENTRY)&(_ZTI6S469C2[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
};
extern VTBL_ENTRY _ZTV6S469C2[];
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
extern void _ZN6S469C42v5Ev();
extern void _ZN6S469C42v6Ev();
extern void _ZN6S469C42v7Ev();
extern void _ZN6S469C42v8Ev();
extern void _ZN6S469C3D1Ev();
extern void _ZN6S469C3D0Ev();
extern void _ZN6S469C33v27Ev();
extern void _ZN6S469C33v28Ev();
extern void _ZN6S469C33v29Ev();
static  VTBL_ENTRY _tg__ZTV6S469C3__6S469C2[] = {
  ABISELECT(320,164),
  ABISELECT(200,104),
  0,
  (VTBL_ENTRY)&(_ZTI6S469C3[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
  (VTBL_ENTRY)&_ZN6S469C42v5Ev,
  (VTBL_ENTRY)&_ZN6S469C42v6Ev,
  (VTBL_ENTRY)&_ZN6S469C42v7Ev,
  (VTBL_ENTRY)&_ZN6S469C42v8Ev,
  (VTBL_ENTRY)&_ZN6S469C3D1Ev,
  (VTBL_ENTRY)&_ZN6S469C3D0Ev,
  (VTBL_ENTRY)&_ZN6S469C33v27Ev,
  (VTBL_ENTRY)&_ZN6S469C33v28Ev,
  (VTBL_ENTRY)&_ZN6S469C33v29Ev,
};
extern void _ZN6S469C82v9Ev();
extern void _ZN6S469C83v10Ev();
extern void _ZN6S469C83v11Ev();
extern void _ZN6S469C83v12Ev();
extern void _ZN6S469C83v13Ev();
extern void _ZN6S469C73v14Ev();
extern void _ZN6S469C73v15Ev();
extern void _ZN6S469C73v16Ev();
extern void _ZN6S469C73v17Ev();
extern void _ZN6S469C73v18Ev();
extern void _ZN6S469C63v19Ev();
extern void _ZN6S469C63v20Ev();
extern void _ZN6S469C63v21Ev();
extern void _ZN6S469C63v22Ev();
extern void _ZN6S469C63v23Ev();
extern void _ZN6S469C63v24Ev();
extern void _ZN6S469C63v25Ev();
extern void _ZN6S469C63v26Ev();
static  VTBL_ENTRY _tg__ZTV6S469C6__6S469C3__6S469C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI6S469C3[0]),
  (VTBL_ENTRY)&_ZN6S469C82v9Ev,
  (VTBL_ENTRY)&_ZN6S469C83v10Ev,
  (VTBL_ENTRY)&_ZN6S469C83v11Ev,
  (VTBL_ENTRY)&_ZN6S469C83v12Ev,
  (VTBL_ENTRY)&_ZN6S469C83v13Ev,
  (VTBL_ENTRY)&_ZN6S469C73v14Ev,
  (VTBL_ENTRY)&_ZN6S469C73v15Ev,
  (VTBL_ENTRY)&_ZN6S469C73v16Ev,
  (VTBL_ENTRY)&_ZN6S469C73v17Ev,
  (VTBL_ENTRY)&_ZN6S469C73v18Ev,
  (VTBL_ENTRY)&_ZN6S469C63v19Ev,
  (VTBL_ENTRY)&_ZN6S469C63v20Ev,
  (VTBL_ENTRY)&_ZN6S469C63v21Ev,
  (VTBL_ENTRY)&_ZN6S469C63v22Ev,
  (VTBL_ENTRY)&_ZN6S469C63v23Ev,
  (VTBL_ENTRY)&_ZN6S469C63v24Ev,
  (VTBL_ENTRY)&_ZN6S469C63v25Ev,
  (VTBL_ENTRY)&_ZN6S469C63v26Ev,
};
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
static  VTBL_ENTRY _tg__ZTV6S469C5__A1__6S469C3__6S469C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-164),
  (VTBL_ENTRY)&(_ZTI6S469C3[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
};
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
static  VTBL_ENTRY _tg__ZTV6S469C56S469C76S469C6__A2__6S469C3__6S469C2[] = {
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI6S469C3[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
};
extern void _ZN6S469C82v9Ev();
extern void _ZN6S469C83v10Ev();
extern void _ZN6S469C83v11Ev();
extern void _ZN6S469C83v12Ev();
extern void _ZN6S469C83v13Ev();
extern void _ZN6S469C73v14Ev();
extern void _ZN6S469C73v15Ev();
extern void _ZN6S469C73v16Ev();
extern void _ZN6S469C73v17Ev();
extern void _ZN6S469C73v18Ev();
extern void _ZN6S469C63v19Ev();
extern void _ZN6S469C63v20Ev();
extern void _ZN6S469C63v21Ev();
extern void _ZN6S469C63v22Ev();
extern void _ZN6S469C63v23Ev();
extern void _ZN6S469C63v24Ev();
extern void _ZN6S469C63v25Ev();
extern void _ZN6S469C63v26Ev();
static  VTBL_ENTRY _tg__ZTV6S469C6__6S469C2[] = {
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI6S469C6[0]),
  (VTBL_ENTRY)&_ZN6S469C82v9Ev,
  (VTBL_ENTRY)&_ZN6S469C83v10Ev,
  (VTBL_ENTRY)&_ZN6S469C83v11Ev,
  (VTBL_ENTRY)&_ZN6S469C83v12Ev,
  (VTBL_ENTRY)&_ZN6S469C83v13Ev,
  (VTBL_ENTRY)&_ZN6S469C73v14Ev,
  (VTBL_ENTRY)&_ZN6S469C73v15Ev,
  (VTBL_ENTRY)&_ZN6S469C73v16Ev,
  (VTBL_ENTRY)&_ZN6S469C73v17Ev,
  (VTBL_ENTRY)&_ZN6S469C73v18Ev,
  (VTBL_ENTRY)&_ZN6S469C63v19Ev,
  (VTBL_ENTRY)&_ZN6S469C63v20Ev,
  (VTBL_ENTRY)&_ZN6S469C63v21Ev,
  (VTBL_ENTRY)&_ZN6S469C63v22Ev,
  (VTBL_ENTRY)&_ZN6S469C63v23Ev,
  (VTBL_ENTRY)&_ZN6S469C63v24Ev,
  (VTBL_ENTRY)&_ZN6S469C63v25Ev,
  (VTBL_ENTRY)&_ZN6S469C63v26Ev,
};
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
static  VTBL_ENTRY _tg__ZTV6S469C5__6S469C6__6S469C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI6S469C6[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
};
static  VTT_ENTRY vtt_S469C2[] = {
  {&(_ZTV6S469C2[4]),  4,83},
  {&(_tg__ZTV6S469C3__6S469C2[4]),  4,17},
  {&(_tg__ZTV6S469C6__6S469C3__6S469C2[25]),  25,43},
  {&(_tg__ZTV6S469C5__A1__6S469C3__6S469C2[6]),  6,10},
  {&(_tg__ZTV6S469C56S469C76S469C6__A2__6S469C3__6S469C2[2]),  2,6},
  {&(_ZTV6S469C2[49]),  49,83},
  {&(_ZTV6S469C2[79]),  79,83},
  {&(_ZTV6S469C2[69]),  69,83},
  {&(_tg__ZTV6S469C6__6S469C2[3]),  3,21},
  {&(_tg__ZTV6S469C5__6S469C6__6S469C2[6]),  6,10},
};
extern VTBL_ENTRY _ZTI6S469C2[];
extern  VTBL_ENTRY _ZTV6S469C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S469C2[];
Class_Descriptor cd_S469C2 = {  "S469C2", // class name
  bases_S469C2, 8,
  &(vtc_S469C2[0]), // expected_vtbl_contents
  &(vtt_S469C2[0]), // expected_vtt_contents
  ABISELECT(392,200), // object size
  NSPAIRA(_ZTI6S469C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S469C2),83, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S469C2),10, //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  S469C1  : S469C2 , virtual S469C3 {
  virtual  ~S469C1(); // _ZN6S469C1D2Ev
  S469C1(); // tgen
};
//SIG(1 S469C1) C1{ BC2{ BC3{ BC4{ BC5{ v1 v2 v3 v4 Fp Fl[6] Fc:5} v5 v6 v7 v8 Fp[11] Fc[4] FL} VBC6{ VBC5 BC7{ BC8{ v9 v10 v11 v12 v13 Fi Fp[2] Fc[4]} BC5 v14 v15 v16 v17 v18 Fs Fp} v19 v20 v21 v22 v23 v24 v25 v26} vd v27 v28 v29} v30 v31 v32 v33 v34 v35 v36 Fi FC9{ vd v37 v38 v39 v40 v41 v42 Fi}} VBC3 vd}


 S469C1 ::~S469C1(){ note_dtor("S469C1", this);}
S469C1 ::S469C1(){ note_ctor("S469C1", this);} // tgen

static void Test_S469C1()
{
  extern Class_Descriptor cd_S469C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(72,74)];
    init_test(&cd_S469C1, buf);
    S469C1 *dp, &lv = *(dp=new (buf) S469C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(568,292), "sizeof(S469C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S469C1)");
    check_base_class_offset(lv, (S469C5*)(S469C4*)(S469C3*)(S469C2*), 0, "S469C1");
    check_base_class_offset(lv, (S469C4*)(S469C3*)(S469C2*), 0, "S469C1");
    /*is_ambiguous_... S469C6::S469C5 */ AMB_check_base_class_offset(lv, (S469C5*)(S469C6*), ABISELECT(320,164), "S469C1");
    check_base_class_offset(lv, (S469C8*)(S469C7*)(S469C6*), ABISELECT(200,104), "S469C1");
    check_base_class_offset(lv, (S469C5*)(S469C7*)(S469C6*), ABISELECT(240,124), "S469C1");
    check_base_class_offset(lv, (S469C7*)(S469C6*), ABISELECT(200,104), "S469C1");
    check_base_class_offset(lv, (S469C6*)(S469C3*)(S469C2*), ABISELECT(200,104), "S469C1");
    /*is_ambiguous_... S469C1::S469C3 */ AMB_check_base_class_offset(lv, (S469C6*)(S469C3*), ABISELECT(200,104), "S469C1");
    check_base_class_offset(lv, (S469C3*)(S469C2*), 0, "S469C1");
    check_base_class_offset(lv, (S469C2*), 0, "S469C1");
    /*is_ambiguous_... S469C1::S469C3 */ AMB_check_base_class_offset(lv, (S469C5*)(S469C4*)(S469C3*), ABISELECT(392,200), "S469C1");
    /*is_ambiguous_... S469C1::S469C3 */ AMB_check_base_class_offset(lv, (S469C4*)(S469C3*), ABISELECT(392,200), "S469C1");
    /*is_ambiguous_... S469C1::S469C3 */ AMB_check_base_class_offset(lv, (S469C3*), ABISELECT(392,200), "S469C1");
    test_class_info(&lv, &cd_S469C1);
    dp->~S469C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS469C1(Test_S469C1, "S469C1", ABISELECT(568,292));

#else // __cplusplus

extern void _ZN6S469C1C1Ev();
extern void _ZN6S469C1D2Ev();
Name_Map name_map_S469C1[] = {
  NSPAIR(_ZN6S469C1C1Ev),
  NSPAIR(_ZN6S469C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S469C5;
extern VTBL_ENTRY _ZTI6S469C5[];
extern  VTBL_ENTRY _ZTV6S469C5[];
extern Class_Descriptor cd_S469C4;
extern VTBL_ENTRY _ZTI6S469C4[];
extern  VTBL_ENTRY _ZTV6S469C4[];
extern Class_Descriptor cd_S469C5;
extern VTBL_ENTRY _ZTI6S469C5[];
extern  VTBL_ENTRY _ZTV6S469C5[];
extern Class_Descriptor cd_S469C8;
extern VTBL_ENTRY _ZTI6S469C8[];
extern  VTBL_ENTRY _ZTV6S469C8[];
extern Class_Descriptor cd_S469C5;
extern VTBL_ENTRY _ZTI6S469C5[];
extern  VTBL_ENTRY _ZTV6S469C5[];
extern Class_Descriptor cd_S469C7;
extern VTBL_ENTRY _ZTI6S469C7[];
extern  VTBL_ENTRY _ZTV6S469C7[];
extern Class_Descriptor cd_S469C6;
extern VTBL_ENTRY _ZTI6S469C6[];
extern  VTBL_ENTRY _ZTV6S469C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S469C6[];
extern Class_Descriptor cd_S469C3;
extern VTBL_ENTRY _ZTI6S469C3[];
extern  VTBL_ENTRY _ZTV6S469C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S469C3[];
extern Class_Descriptor cd_S469C2;
extern VTBL_ENTRY _ZTI6S469C2[];
extern  VTBL_ENTRY _ZTV6S469C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S469C2[];
extern Class_Descriptor cd_S469C5;
extern VTBL_ENTRY _ZTI6S469C5[];
extern  VTBL_ENTRY _ZTV6S469C5[];
extern Class_Descriptor cd_S469C4;
extern VTBL_ENTRY _ZTI6S469C4[];
extern  VTBL_ENTRY _ZTV6S469C4[];
extern Class_Descriptor cd_S469C3;
extern VTBL_ENTRY _ZTI6S469C3[];
extern  VTBL_ENTRY _ZTV6S469C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S469C3[];
static Base_Class bases_S469C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S469C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S469C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S469C5,    ABISELECT(320,164), //bcp->offset
    74, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S469C8,    ABISELECT(200,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S469C5,    ABISELECT(240,124), //bcp->offset
    68, //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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S469C7,    ABISELECT(200,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S469C6,    ABISELECT(200,104), //bcp->offset
    25, //bcp->virtual_function_table_offset
    25, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S469C3,    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
    11, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S469C2,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S469C5,    ABISELECT(392,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S469C4,    ABISELECT(392,200), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S469C3,    ABISELECT(392,200), //bcp->offset
    84, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI6S469C1[];
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
extern void _ZN6S469C42v5Ev();
extern void _ZN6S469C42v6Ev();
extern void _ZN6S469C42v7Ev();
extern void _ZN6S469C42v8Ev();
extern void _ZN6S469C1D1Ev();
extern void _ZN6S469C1D0Ev();
extern void _ZN6S469C33v27Ev();
extern void _ZN6S469C33v28Ev();
extern void _ZN6S469C33v29Ev();
extern void _ZN6S469C23v30Ev();
extern void _ZN6S469C23v31Ev();
extern void _ZN6S469C23v32Ev();
extern void _ZN6S469C23v33Ev();
extern void _ZN6S469C23v34Ev();
extern void _ZN6S469C23v35Ev();
extern void _ZN6S469C23v36Ev();
extern void _ZN6S469C82v9Ev();
extern void _ZN6S469C83v10Ev();
extern void _ZN6S469C83v11Ev();
extern void _ZN6S469C83v12Ev();
extern void _ZN6S469C83v13Ev();
extern void _ZN6S469C73v14Ev();
extern void _ZN6S469C73v15Ev();
extern void _ZN6S469C73v16Ev();
extern void _ZN6S469C73v17Ev();
extern void _ZN6S469C73v18Ev();
extern void _ZN6S469C63v19Ev();
extern void _ZN6S469C63v20Ev();
extern void _ZN6S469C63v21Ev();
extern void _ZN6S469C63v22Ev();
extern void _ZN6S469C63v23Ev();
extern void _ZN6S469C63v24Ev();
extern void _ZN6S469C63v25Ev();
extern void _ZN6S469C63v26Ev();
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
extern void _ZN6S469C42v5Ev();
extern void _ZN6S469C42v6Ev();
extern void _ZN6S469C42v7Ev();
extern void _ZN6S469C42v8Ev();
extern void ABISELECT(_ZTv0_n104_N6S469C1D1Ev,_ZTv0_n52_N6S469C1D1Ev)();
extern void ABISELECT(_ZThn392_N6S469C1D1Ev,_ZThn200_N6S469C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N6S469C1D0Ev,_ZTv0_n52_N6S469C1D0Ev)();
extern void ABISELECT(_ZThn392_N6S469C1D0Ev,_ZThn200_N6S469C1D0Ev)() __attribute__((weak));
extern void _ZN6S469C33v27Ev();
extern void _ZN6S469C33v28Ev();
extern void _ZN6S469C33v29Ev();
static  VTBL_ENTRY vtc_S469C1[] = {
  ABISELECT(392,200),
  ABISELECT(320,164),
  ABISELECT(200,104),
  0,
  (VTBL_ENTRY)&(_ZTI6S469C1[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
  (VTBL_ENTRY)&_ZN6S469C42v5Ev,
  (VTBL_ENTRY)&_ZN6S469C42v6Ev,
  (VTBL_ENTRY)&_ZN6S469C42v7Ev,
  (VTBL_ENTRY)&_ZN6S469C42v8Ev,
  (VTBL_ENTRY)&_ZN6S469C1D1Ev,
  (VTBL_ENTRY)&_ZN6S469C1D0Ev,
  (VTBL_ENTRY)&_ZN6S469C33v27Ev,
  (VTBL_ENTRY)&_ZN6S469C33v28Ev,
  (VTBL_ENTRY)&_ZN6S469C33v29Ev,
  (VTBL_ENTRY)&_ZN6S469C23v30Ev,
  (VTBL_ENTRY)&_ZN6S469C23v31Ev,
  (VTBL_ENTRY)&_ZN6S469C23v32Ev,
  (VTBL_ENTRY)&_ZN6S469C23v33Ev,
  (VTBL_ENTRY)&_ZN6S469C23v34Ev,
  (VTBL_ENTRY)&_ZN6S469C23v35Ev,
  (VTBL_ENTRY)&_ZN6S469C23v36Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI6S469C1[0]),
  (VTBL_ENTRY)&_ZN6S469C82v9Ev,
  (VTBL_ENTRY)&_ZN6S469C83v10Ev,
  (VTBL_ENTRY)&_ZN6S469C83v11Ev,
  (VTBL_ENTRY)&_ZN6S469C83v12Ev,
  (VTBL_ENTRY)&_ZN6S469C83v13Ev,
  (VTBL_ENTRY)&_ZN6S469C73v14Ev,
  (VTBL_ENTRY)&_ZN6S469C73v15Ev,
  (VTBL_ENTRY)&_ZN6S469C73v16Ev,
  (VTBL_ENTRY)&_ZN6S469C73v17Ev,
  (VTBL_ENTRY)&_ZN6S469C73v18Ev,
  (VTBL_ENTRY)&_ZN6S469C63v19Ev,
  (VTBL_ENTRY)&_ZN6S469C63v20Ev,
  (VTBL_ENTRY)&_ZN6S469C63v21Ev,
  (VTBL_ENTRY)&_ZN6S469C63v22Ev,
  (VTBL_ENTRY)&_ZN6S469C63v23Ev,
  (VTBL_ENTRY)&_ZN6S469C63v24Ev,
  (VTBL_ENTRY)&_ZN6S469C63v25Ev,
  (VTBL_ENTRY)&_ZN6S469C63v26Ev,
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI6S469C1[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-164),
  (VTBL_ENTRY)&(_ZTI6S469C1[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
  0,
  0,
  0,
  ABISELECT(-392,-200),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  ABISELECT(-192,-96),
  ABISELECT(-392,-200),
  (VTBL_ENTRY)&(_ZTI6S469C1[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
  (VTBL_ENTRY)&_ZN6S469C42v5Ev,
  (VTBL_ENTRY)&_ZN6S469C42v6Ev,
  (VTBL_ENTRY)&_ZN6S469C42v7Ev,
  (VTBL_ENTRY)&_ZN6S469C42v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N6S469C1D1Ev,_ZTv0_n52_N6S469C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N6S469C1D0Ev,_ZTv0_n52_N6S469C1D0Ev),
  (VTBL_ENTRY)&_ZN6S469C33v27Ev,
  (VTBL_ENTRY)&_ZN6S469C33v28Ev,
  (VTBL_ENTRY)&_ZN6S469C33v29Ev,
};
extern VTBL_ENTRY _ZTV6S469C1[];
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
extern void _ZN6S469C42v5Ev();
extern void _ZN6S469C42v6Ev();
extern void _ZN6S469C42v7Ev();
extern void _ZN6S469C42v8Ev();
extern void _ZN6S469C2D1Ev();
extern void _ZN6S469C2D0Ev();
extern void _ZN6S469C33v27Ev();
extern void _ZN6S469C33v28Ev();
extern void _ZN6S469C33v29Ev();
extern void _ZN6S469C23v30Ev();
extern void _ZN6S469C23v31Ev();
extern void _ZN6S469C23v32Ev();
extern void _ZN6S469C23v33Ev();
extern void _ZN6S469C23v34Ev();
extern void _ZN6S469C23v35Ev();
extern void _ZN6S469C23v36Ev();
static  VTBL_ENTRY _tg__ZTV6S469C2__6S469C1[] = {
  ABISELECT(320,164),
  ABISELECT(200,104),
  0,
  (VTBL_ENTRY)&(_ZTI6S469C2[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
  (VTBL_ENTRY)&_ZN6S469C42v5Ev,
  (VTBL_ENTRY)&_ZN6S469C42v6Ev,
  (VTBL_ENTRY)&_ZN6S469C42v7Ev,
  (VTBL_ENTRY)&_ZN6S469C42v8Ev,
  (VTBL_ENTRY)&_ZN6S469C2D1Ev,
  (VTBL_ENTRY)&_ZN6S469C2D0Ev,
  (VTBL_ENTRY)&_ZN6S469C33v27Ev,
  (VTBL_ENTRY)&_ZN6S469C33v28Ev,
  (VTBL_ENTRY)&_ZN6S469C33v29Ev,
  (VTBL_ENTRY)&_ZN6S469C23v30Ev,
  (VTBL_ENTRY)&_ZN6S469C23v31Ev,
  (VTBL_ENTRY)&_ZN6S469C23v32Ev,
  (VTBL_ENTRY)&_ZN6S469C23v33Ev,
  (VTBL_ENTRY)&_ZN6S469C23v34Ev,
  (VTBL_ENTRY)&_ZN6S469C23v35Ev,
  (VTBL_ENTRY)&_ZN6S469C23v36Ev,
};
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
extern void _ZN6S469C42v5Ev();
extern void _ZN6S469C42v6Ev();
extern void _ZN6S469C42v7Ev();
extern void _ZN6S469C42v8Ev();
extern void _ZN6S469C3D1Ev();
extern void _ZN6S469C3D0Ev();
extern void _ZN6S469C33v27Ev();
extern void _ZN6S469C33v28Ev();
extern void _ZN6S469C33v29Ev();
static  VTBL_ENTRY _tg__ZTV6S469C36S469C2__6S469C1[] = {
  ABISELECT(320,164),
  ABISELECT(200,104),
  0,
  (VTBL_ENTRY)&(_ZTI6S469C3[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
  (VTBL_ENTRY)&_ZN6S469C42v5Ev,
  (VTBL_ENTRY)&_ZN6S469C42v6Ev,
  (VTBL_ENTRY)&_ZN6S469C42v7Ev,
  (VTBL_ENTRY)&_ZN6S469C42v8Ev,
  (VTBL_ENTRY)&_ZN6S469C3D1Ev,
  (VTBL_ENTRY)&_ZN6S469C3D0Ev,
  (VTBL_ENTRY)&_ZN6S469C33v27Ev,
  (VTBL_ENTRY)&_ZN6S469C33v28Ev,
  (VTBL_ENTRY)&_ZN6S469C33v29Ev,
};
extern void _ZN6S469C82v9Ev();
extern void _ZN6S469C83v10Ev();
extern void _ZN6S469C83v11Ev();
extern void _ZN6S469C83v12Ev();
extern void _ZN6S469C83v13Ev();
extern void _ZN6S469C73v14Ev();
extern void _ZN6S469C73v15Ev();
extern void _ZN6S469C73v16Ev();
extern void _ZN6S469C73v17Ev();
extern void _ZN6S469C73v18Ev();
extern void _ZN6S469C63v19Ev();
extern void _ZN6S469C63v20Ev();
extern void _ZN6S469C63v21Ev();
extern void _ZN6S469C63v22Ev();
extern void _ZN6S469C63v23Ev();
extern void _ZN6S469C63v24Ev();
extern void _ZN6S469C63v25Ev();
extern void _ZN6S469C63v26Ev();
static  VTBL_ENTRY _tg__ZTV6S469C6__6S469C36S469C2__6S469C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI6S469C3[0]),
  (VTBL_ENTRY)&_ZN6S469C82v9Ev,
  (VTBL_ENTRY)&_ZN6S469C83v10Ev,
  (VTBL_ENTRY)&_ZN6S469C83v11Ev,
  (VTBL_ENTRY)&_ZN6S469C83v12Ev,
  (VTBL_ENTRY)&_ZN6S469C83v13Ev,
  (VTBL_ENTRY)&_ZN6S469C73v14Ev,
  (VTBL_ENTRY)&_ZN6S469C73v15Ev,
  (VTBL_ENTRY)&_ZN6S469C73v16Ev,
  (VTBL_ENTRY)&_ZN6S469C73v17Ev,
  (VTBL_ENTRY)&_ZN6S469C73v18Ev,
  (VTBL_ENTRY)&_ZN6S469C63v19Ev,
  (VTBL_ENTRY)&_ZN6S469C63v20Ev,
  (VTBL_ENTRY)&_ZN6S469C63v21Ev,
  (VTBL_ENTRY)&_ZN6S469C63v22Ev,
  (VTBL_ENTRY)&_ZN6S469C63v23Ev,
  (VTBL_ENTRY)&_ZN6S469C63v24Ev,
  (VTBL_ENTRY)&_ZN6S469C63v25Ev,
  (VTBL_ENTRY)&_ZN6S469C63v26Ev,
};
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
static  VTBL_ENTRY _tg__ZTV6S469C5__A1__6S469C36S469C2__6S469C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-164),
  (VTBL_ENTRY)&(_ZTI6S469C3[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
};
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
static  VTBL_ENTRY _tg__ZTV6S469C56S469C76S469C6__A2__6S469C36S469C2__6S469C1[] = {
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI6S469C3[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
};
extern void _ZN6S469C82v9Ev();
extern void _ZN6S469C83v10Ev();
extern void _ZN6S469C83v11Ev();
extern void _ZN6S469C83v12Ev();
extern void _ZN6S469C83v13Ev();
extern void _ZN6S469C73v14Ev();
extern void _ZN6S469C73v15Ev();
extern void _ZN6S469C73v16Ev();
extern void _ZN6S469C73v17Ev();
extern void _ZN6S469C73v18Ev();
extern void _ZN6S469C63v19Ev();
extern void _ZN6S469C63v20Ev();
extern void _ZN6S469C63v21Ev();
extern void _ZN6S469C63v22Ev();
extern void _ZN6S469C63v23Ev();
extern void _ZN6S469C63v24Ev();
extern void _ZN6S469C63v25Ev();
extern void _ZN6S469C63v26Ev();
static  VTBL_ENTRY _tg__ZTV6S469C6__6S469C2__6S469C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI6S469C2[0]),
  (VTBL_ENTRY)&_ZN6S469C82v9Ev,
  (VTBL_ENTRY)&_ZN6S469C83v10Ev,
  (VTBL_ENTRY)&_ZN6S469C83v11Ev,
  (VTBL_ENTRY)&_ZN6S469C83v12Ev,
  (VTBL_ENTRY)&_ZN6S469C83v13Ev,
  (VTBL_ENTRY)&_ZN6S469C73v14Ev,
  (VTBL_ENTRY)&_ZN6S469C73v15Ev,
  (VTBL_ENTRY)&_ZN6S469C73v16Ev,
  (VTBL_ENTRY)&_ZN6S469C73v17Ev,
  (VTBL_ENTRY)&_ZN6S469C73v18Ev,
  (VTBL_ENTRY)&_ZN6S469C63v19Ev,
  (VTBL_ENTRY)&_ZN6S469C63v20Ev,
  (VTBL_ENTRY)&_ZN6S469C63v21Ev,
  (VTBL_ENTRY)&_ZN6S469C63v22Ev,
  (VTBL_ENTRY)&_ZN6S469C63v23Ev,
  (VTBL_ENTRY)&_ZN6S469C63v24Ev,
  (VTBL_ENTRY)&_ZN6S469C63v25Ev,
  (VTBL_ENTRY)&_ZN6S469C63v26Ev,
};
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
static  VTBL_ENTRY _tg__ZTV6S469C5__A1__6S469C2__6S469C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-164),
  (VTBL_ENTRY)&(_ZTI6S469C2[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
};
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
static  VTBL_ENTRY _tg__ZTV6S469C56S469C76S469C6__A2__6S469C2__6S469C1[] = {
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI6S469C2[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
};
extern void _ZN6S469C82v9Ev();
extern void _ZN6S469C83v10Ev();
extern void _ZN6S469C83v11Ev();
extern void _ZN6S469C83v12Ev();
extern void _ZN6S469C83v13Ev();
extern void _ZN6S469C73v14Ev();
extern void _ZN6S469C73v15Ev();
extern void _ZN6S469C73v16Ev();
extern void _ZN6S469C73v17Ev();
extern void _ZN6S469C73v18Ev();
extern void _ZN6S469C63v19Ev();
extern void _ZN6S469C63v20Ev();
extern void _ZN6S469C63v21Ev();
extern void _ZN6S469C63v22Ev();
extern void _ZN6S469C63v23Ev();
extern void _ZN6S469C63v24Ev();
extern void _ZN6S469C63v25Ev();
extern void _ZN6S469C63v26Ev();
static  VTBL_ENTRY _tg__ZTV6S469C6__6S469C1[] = {
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI6S469C6[0]),
  (VTBL_ENTRY)&_ZN6S469C82v9Ev,
  (VTBL_ENTRY)&_ZN6S469C83v10Ev,
  (VTBL_ENTRY)&_ZN6S469C83v11Ev,
  (VTBL_ENTRY)&_ZN6S469C83v12Ev,
  (VTBL_ENTRY)&_ZN6S469C83v13Ev,
  (VTBL_ENTRY)&_ZN6S469C73v14Ev,
  (VTBL_ENTRY)&_ZN6S469C73v15Ev,
  (VTBL_ENTRY)&_ZN6S469C73v16Ev,
  (VTBL_ENTRY)&_ZN6S469C73v17Ev,
  (VTBL_ENTRY)&_ZN6S469C73v18Ev,
  (VTBL_ENTRY)&_ZN6S469C63v19Ev,
  (VTBL_ENTRY)&_ZN6S469C63v20Ev,
  (VTBL_ENTRY)&_ZN6S469C63v21Ev,
  (VTBL_ENTRY)&_ZN6S469C63v22Ev,
  (VTBL_ENTRY)&_ZN6S469C63v23Ev,
  (VTBL_ENTRY)&_ZN6S469C63v24Ev,
  (VTBL_ENTRY)&_ZN6S469C63v25Ev,
  (VTBL_ENTRY)&_ZN6S469C63v26Ev,
};
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
static  VTBL_ENTRY _tg__ZTV6S469C5__6S469C6__6S469C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI6S469C6[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
};
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
extern void _ZN6S469C42v5Ev();
extern void _ZN6S469C42v6Ev();
extern void _ZN6S469C42v7Ev();
extern void _ZN6S469C42v8Ev();
extern void _ZN6S469C3D1Ev();
extern void _ZN6S469C3D0Ev();
extern void _ZN6S469C33v27Ev();
extern void _ZN6S469C33v28Ev();
extern void _ZN6S469C33v29Ev();
static  VTBL_ENTRY _tg__ZTV6S469C3__A1__6S469C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-192,-96),
  0,
  (VTBL_ENTRY)&(_ZTI6S469C3[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
  (VTBL_ENTRY)&_ZN6S469C42v5Ev,
  (VTBL_ENTRY)&_ZN6S469C42v6Ev,
  (VTBL_ENTRY)&_ZN6S469C42v7Ev,
  (VTBL_ENTRY)&_ZN6S469C42v8Ev,
  (VTBL_ENTRY)&_ZN6S469C3D1Ev,
  (VTBL_ENTRY)&_ZN6S469C3D0Ev,
  (VTBL_ENTRY)&_ZN6S469C33v27Ev,
  (VTBL_ENTRY)&_ZN6S469C33v28Ev,
  (VTBL_ENTRY)&_ZN6S469C33v29Ev,
};
extern void _ZN6S469C82v9Ev();
extern void _ZN6S469C83v10Ev();
extern void _ZN6S469C83v11Ev();
extern void _ZN6S469C83v12Ev();
extern void _ZN6S469C83v13Ev();
extern void _ZN6S469C73v14Ev();
extern void _ZN6S469C73v15Ev();
extern void _ZN6S469C73v16Ev();
extern void _ZN6S469C73v17Ev();
extern void _ZN6S469C73v18Ev();
extern void _ZN6S469C63v19Ev();
extern void _ZN6S469C63v20Ev();
extern void _ZN6S469C63v21Ev();
extern void _ZN6S469C63v22Ev();
extern void _ZN6S469C63v23Ev();
extern void _ZN6S469C63v24Ev();
extern void _ZN6S469C63v25Ev();
extern void _ZN6S469C63v26Ev();
static  VTBL_ENTRY _tg__ZTV6S469C6__6S469C3__A1__6S469C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  ABISELECT(192,96),
  (VTBL_ENTRY)&(_ZTI6S469C3[0]),
  (VTBL_ENTRY)&_ZN6S469C82v9Ev,
  (VTBL_ENTRY)&_ZN6S469C83v10Ev,
  (VTBL_ENTRY)&_ZN6S469C83v11Ev,
  (VTBL_ENTRY)&_ZN6S469C83v12Ev,
  (VTBL_ENTRY)&_ZN6S469C83v13Ev,
  (VTBL_ENTRY)&_ZN6S469C73v14Ev,
  (VTBL_ENTRY)&_ZN6S469C73v15Ev,
  (VTBL_ENTRY)&_ZN6S469C73v16Ev,
  (VTBL_ENTRY)&_ZN6S469C73v17Ev,
  (VTBL_ENTRY)&_ZN6S469C73v18Ev,
  (VTBL_ENTRY)&_ZN6S469C63v19Ev,
  (VTBL_ENTRY)&_ZN6S469C63v20Ev,
  (VTBL_ENTRY)&_ZN6S469C63v21Ev,
  (VTBL_ENTRY)&_ZN6S469C63v22Ev,
  (VTBL_ENTRY)&_ZN6S469C63v23Ev,
  (VTBL_ENTRY)&_ZN6S469C63v24Ev,
  (VTBL_ENTRY)&_ZN6S469C63v25Ev,
  (VTBL_ENTRY)&_ZN6S469C63v26Ev,
};
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
static  VTBL_ENTRY _tg__ZTV6S469C5__A1__6S469C3__A1__6S469C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI6S469C3[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
};
extern void _ZN6S469C52v1Ev();
extern void _ZN6S469C52v2Ev();
extern void _ZN6S469C52v3Ev();
extern void _ZN6S469C52v4Ev();
static  VTBL_ENTRY _tg__ZTV6S469C56S469C76S469C6__A2__6S469C3__A1__6S469C1[] = {
  ABISELECT(152,76),
  (VTBL_ENTRY)&(_ZTI6S469C3[0]),
  (VTBL_ENTRY)&_ZN6S469C52v1Ev,
  (VTBL_ENTRY)&_ZN6S469C52v2Ev,
  (VTBL_ENTRY)&_ZN6S469C52v3Ev,
  (VTBL_ENTRY)&_ZN6S469C52v4Ev,
};
static  VTT_ENTRY vtt_S469C1[] = {
  {&(_ZTV6S469C1[5]),  5,113},
  {&(_tg__ZTV6S469C2__6S469C1[4]),  4,24},
  {&(_tg__ZTV6S469C36S469C2__6S469C1[4]),  4,17},
  {&(_tg__ZTV6S469C6__6S469C36S469C2__6S469C1[25]),  25,43},
  {&(_tg__ZTV6S469C5__A1__6S469C36S469C2__6S469C1[6]),  6,10},
  {&(_tg__ZTV6S469C56S469C76S469C6__A2__6S469C36S469C2__6S469C1[2]),  2,6},
  {&(_tg__ZTV6S469C6__6S469C2__6S469C1[25]),  25,43},
  {&(_tg__ZTV6S469C5__A1__6S469C2__6S469C1[6]),  6,10},
  {&(_tg__ZTV6S469C56S469C76S469C6__A2__6S469C2__6S469C1[2]),  2,6},
  {&(_ZTV6S469C1[50]),  50,113},
  {&(_ZTV6S469C1[80]),  80,113},
  {&(_ZTV6S469C1[70]),  70,113},
  {&(_ZTV6S469C1[100]),  100,113},
  {&(_tg__ZTV6S469C6__6S469C1[3]),  3,21},
  {&(_tg__ZTV6S469C5__6S469C6__6S469C1[6]),  6,10},
  {&(_tg__ZTV6S469C3__A1__6S469C1[4]),  4,17},
  {&(_tg__ZTV6S469C6__6S469C3__A1__6S469C1[25]),  25,43},
  {&(_tg__ZTV6S469C5__A1__6S469C3__A1__6S469C1[6]),  6,10},
  {&(_tg__ZTV6S469C56S469C76S469C6__A2__6S469C3__A1__6S469C1[2]),  2,6},
};
extern VTBL_ENTRY _ZTI6S469C1[];
extern  VTBL_ENTRY _ZTV6S469C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S469C1[];
static VTBL_ENTRY alt_thunk_names67[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N6S469C1D0Ev,_ZTv0_n52_N6S469C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N6S469C1D0Ev,_ZThn200_N6S469C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N6S469C1D1Ev,_ZTv0_n52_N6S469C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N6S469C1D1Ev,_ZThn200_N6S469C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S469C1 = {  "S469C1", // class name
  bases_S469C1, 12,
  &(vtc_S469C1[0]), // expected_vtbl_contents
  &(vtt_S469C1[0]), // expected_vtt_contents
  ABISELECT(568,292), // object size
  NSPAIRA(_ZTI6S469C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S469C1),113, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S469C1),19, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names67,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1392C4  {
  virtual  ~S1392C4(); // _ZN7S1392C4D1Ev
  virtual void  v3(); // _ZN7S1392C42v3Ev
  S1392C4(); // tgen
};
//SIG(-1 S1392C4) C1{ vd v1}


 S1392C4 ::~S1392C4(){ note_dtor("S1392C4", this);}
void  S1392C4 ::v3(){vfunc_called(this, "_ZN7S1392C42v3Ev");}
S1392C4 ::S1392C4(){ note_ctor("S1392C4", this);} // tgen

static void Test_S1392C4()
{
  extern Class_Descriptor cd_S1392C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1392C4, buf);
    S1392C4 *dp, &lv = *(dp=new (buf) S1392C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1392C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1392C4)");
    test_class_info(&lv, &cd_S1392C4);
    dp->~S1392C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1392C4(Test_S1392C4, "S1392C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1392C4C1Ev();
extern void _ZN7S1392C4D1Ev();
Name_Map name_map_S1392C4[] = {
  NSPAIR(_ZN7S1392C4C1Ev),
  NSPAIR(_ZN7S1392C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1392C4[];
extern void _ZN7S1392C4D1Ev();
extern void _ZN7S1392C4D0Ev();
extern void _ZN7S1392C42v3Ev();
static  VTBL_ENTRY vtc_S1392C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1392C4[0]),
  (VTBL_ENTRY)&_ZN7S1392C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1392C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
};
extern VTBL_ENTRY _ZTI7S1392C4[];
extern  VTBL_ENTRY _ZTV7S1392C4[];
Class_Descriptor cd_S1392C4 = {  "S1392C4", // class name
  0,0,//no base classes
  &(vtc_S1392C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1392C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1392C4),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  S1392C3  : S1392C4 {
  void *s1392c3f0;
  __tsi64 s1392c3f1:7;
  virtual  ~S1392C3(); // _ZN7S1392C3D1Ev
  virtual void  v4(); // _ZN7S1392C32v4Ev
  virtual void  v5(); // _ZN7S1392C32v5Ev
  virtual void  v6(); // _ZN7S1392C32v6Ev
  virtual void  v7(); // _ZN7S1392C32v7Ev
  virtual void  v8(); // _ZN7S1392C32v8Ev
  S1392C3(); // tgen
};
//SIG(-1 S1392C3) C1{ BC2{ vd v6} vd v1 v2 v3 v4 v5 Fp FL:7}


 S1392C3 ::~S1392C3(){ note_dtor("S1392C3", this);}
void  S1392C3 ::v4(){vfunc_called(this, "_ZN7S1392C32v4Ev");}
void  S1392C3 ::v5(){vfunc_called(this, "_ZN7S1392C32v5Ev");}
void  S1392C3 ::v6(){vfunc_called(this, "_ZN7S1392C32v6Ev");}
void  S1392C3 ::v7(){vfunc_called(this, "_ZN7S1392C32v7Ev");}
void  S1392C3 ::v8(){vfunc_called(this, "_ZN7S1392C32v8Ev");}
S1392C3 ::S1392C3(){ note_ctor("S1392C3", this);} // tgen

static void Test_S1392C3()
{
  extern Class_Descriptor cd_S1392C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S1392C3, buf);
    S1392C3 *dp, &lv = *(dp=new (buf) S1392C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1392C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1392C3)");
    check_base_class_offset(lv, (S1392C4*), 0, "S1392C3");
    check_field_offset(lv, s1392c3f0, ABISELECT(8,4), "S1392C3.s1392c3f0");
    set_bf_and_test(lv, s1392c3f1, ABISELECT(16,8), 0, 7, 1, "S1392C3");
    set_bf_and_test(lv, s1392c3f1, ABISELECT(16,8), 0, 7, hide_sll(1LL<<6), "S1392C3");
    test_class_info(&lv, &cd_S1392C3);
    dp->~S1392C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1392C3(Test_S1392C3, "S1392C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1392C3C1Ev();
extern void _ZN7S1392C3D1Ev();
Name_Map name_map_S1392C3[] = {
  NSPAIR(_ZN7S1392C3C1Ev),
  NSPAIR(_ZN7S1392C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1392C4;
extern VTBL_ENTRY _ZTI7S1392C4[];
extern  VTBL_ENTRY _ZTV7S1392C4[];
static Base_Class bases_S1392C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1392C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1392C3[];
extern void _ZN7S1392C3D1Ev();
extern void _ZN7S1392C3D0Ev();
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
static  VTBL_ENTRY vtc_S1392C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1392C3[0]),
  (VTBL_ENTRY)&_ZN7S1392C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1392C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S1392C3[];
extern  VTBL_ENTRY _ZTV7S1392C3[];
Class_Descriptor cd_S1392C3 = {  "S1392C3", // class name
  bases_S1392C3, 1,
  &(vtc_S1392C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1392C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1392C3),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1392C5  {
  char s1392c5f0;
  long double s1392c5f1[7];
  virtual void  v9(); // _ZN7S1392C52v9Ev
  virtual void  v10(); // _ZN7S1392C53v10Ev
  virtual void  v11(); // _ZN7S1392C53v11Ev
  virtual void  v12(); // _ZN7S1392C53v12Ev
  ~S1392C5(); // tgen
  S1392C5(); // tgen
};
//SIG(-1 S1392C5) C1{ v1 v2 v3 v4 Fc FD[7]}


void  S1392C5 ::v9(){vfunc_called(this, "_ZN7S1392C52v9Ev");}
void  S1392C5 ::v10(){vfunc_called(this, "_ZN7S1392C53v10Ev");}
void  S1392C5 ::v11(){vfunc_called(this, "_ZN7S1392C53v11Ev");}
void  S1392C5 ::v12(){vfunc_called(this, "_ZN7S1392C53v12Ev");}
S1392C5 ::~S1392C5(){ note_dtor("S1392C5", this);} // tgen
S1392C5 ::S1392C5(){ note_ctor("S1392C5", this);} // tgen

static void Test_S1392C5()
{
  extern Class_Descriptor cd_S1392C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,24)];
    init_test(&cd_S1392C5, buf);
    S1392C5 *dp, &lv = *(dp=new (buf) S1392C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,92), "sizeof(S1392C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1392C5)");
    check_field_offset(lv, s1392c5f0, ABISELECT(8,4), "S1392C5.s1392c5f0");
    check_field_offset(lv, s1392c5f1, ABISELECT(16,8), "S1392C5.s1392c5f1");
    test_class_info(&lv, &cd_S1392C5);
    dp->~S1392C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1392C5(Test_S1392C5, "S1392C5", ABISELECT(128,92));

#else // __cplusplus

extern void _ZN7S1392C5C1Ev();
extern void _ZN7S1392C5D1Ev();
Name_Map name_map_S1392C5[] = {
  NSPAIR(_ZN7S1392C5C1Ev),
  NSPAIR(_ZN7S1392C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1392C5[];
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
static  VTBL_ENTRY vtc_S1392C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1392C5[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S1392C5[];
extern  VTBL_ENTRY _ZTV7S1392C5[];
Class_Descriptor cd_S1392C5 = {  "S1392C5", // class name
  0,0,//no base classes
  &(vtc_S1392C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,92), // object size
  NSPAIRA(_ZTI7S1392C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1392C5),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  S1392C2  : S1392C3 , virtual S1392C5 {
  int s1392c2f0;
  virtual  ~S1392C2(); // _ZN7S1392C2D2Ev
  virtual void  v13(); // _ZN7S1392C23v13Ev
  virtual void  v14(); // _ZN7S1392C23v14Ev
  virtual void  v15(); // _ZN7S1392C23v15Ev
  virtual void  v16(); // _ZN7S1392C23v16Ev
  virtual void  v17(); // _ZN7S1392C23v17Ev
  virtual void  v18(); // _ZN7S1392C23v18Ev
  S1392C2(); // tgen
};
//SIG(-1 S1392C2) C1{ BC2{ BC3{ vd v7} vd v8 v9 v10 v11 v12 Fp FL:7} VBC4{ v13 v14 v15 v16 Fc FD[7]} vd v1 v2 v3 v4 v5 v6 Fi}


 S1392C2 ::~S1392C2(){ note_dtor("S1392C2", this);}
void  S1392C2 ::v13(){vfunc_called(this, "_ZN7S1392C23v13Ev");}
void  S1392C2 ::v14(){vfunc_called(this, "_ZN7S1392C23v14Ev");}
void  S1392C2 ::v15(){vfunc_called(this, "_ZN7S1392C23v15Ev");}
void  S1392C2 ::v16(){vfunc_called(this, "_ZN7S1392C23v16Ev");}
void  S1392C2 ::v17(){vfunc_called(this, "_ZN7S1392C23v17Ev");}
void  S1392C2 ::v18(){vfunc_called(this, "_ZN7S1392C23v18Ev");}
S1392C2 ::S1392C2(){ note_ctor("S1392C2", this);} // tgen

static void Test_S1392C2()
{
  extern Class_Descriptor cd_S1392C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S1392C2, buf);
    S1392C2 *dp, &lv = *(dp=new (buf) S1392C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S1392C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1392C2)");
    check_base_class_offset(lv, (S1392C4*)(S1392C3*), 0, "S1392C2");
    check_base_class_offset(lv, (S1392C3*), 0, "S1392C2");
    check_base_class_offset(lv, (S1392C5*), ABISELECT(32,16), "S1392C2");
    check_field_offset(lv, s1392c2f0, ABISELECT(20,12), "S1392C2.s1392c2f0");
    test_class_info(&lv, &cd_S1392C2);
    dp->~S1392C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1392C2(Test_S1392C2, "S1392C2", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN7S1392C2C1Ev();
extern void _ZN7S1392C2D2Ev();
Name_Map name_map_S1392C2[] = {
  NSPAIR(_ZN7S1392C2C1Ev),
  NSPAIR(_ZN7S1392C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1392C4;
extern VTBL_ENTRY _ZTI7S1392C4[];
extern  VTBL_ENTRY _ZTV7S1392C4[];
extern Class_Descriptor cd_S1392C3;
extern VTBL_ENTRY _ZTI7S1392C3[];
extern  VTBL_ENTRY _ZTV7S1392C3[];
extern Class_Descriptor cd_S1392C5;
extern VTBL_ENTRY _ZTI7S1392C5[];
extern  VTBL_ENTRY _ZTV7S1392C5[];
static Base_Class bases_S1392C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1392C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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
  0, 0},
  {&cd_S1392C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1392C5,    ABISELECT(32,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1392C2[];
extern void _ZN7S1392C2D1Ev();
extern void _ZN7S1392C2D0Ev();
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
static  VTBL_ENTRY vtc_S1392C2[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S1392C2[0]),
  (VTBL_ENTRY)&_ZN7S1392C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1392C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S1392C2[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
};
extern VTBL_ENTRY _ZTV7S1392C2[];
static  VTT_ENTRY vtt_S1392C2[] = {
  {&(_ZTV7S1392C2[3]),  3,27},
  {&(_ZTV7S1392C2[23]),  23,27},
};
extern VTBL_ENTRY _ZTI7S1392C2[];
extern  VTBL_ENTRY _ZTV7S1392C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1392C2[];
Class_Descriptor cd_S1392C2 = {  "S1392C2", // class name
  bases_S1392C2, 3,
  &(vtc_S1392C2[0]), // expected_vtbl_contents
  &(vtt_S1392C2[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI7S1392C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1392C2),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1392C2),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1392C7  {
  void *s1392c7f0[4];
  virtual void  v19(); // _ZN7S1392C73v19Ev
  virtual void  v20(); // _ZN7S1392C73v20Ev
  virtual void  v21(); // _ZN7S1392C73v21Ev
  virtual void  v22(); // _ZN7S1392C73v22Ev
  virtual void  v23(); // _ZN7S1392C73v23Ev
  ~S1392C7(); // tgen
  S1392C7(); // tgen
};
//SIG(-1 S1392C7) C1{ v1 v2 v3 v4 v5 Fp[4]}


void  S1392C7 ::v19(){vfunc_called(this, "_ZN7S1392C73v19Ev");}
void  S1392C7 ::v20(){vfunc_called(this, "_ZN7S1392C73v20Ev");}
void  S1392C7 ::v21(){vfunc_called(this, "_ZN7S1392C73v21Ev");}
void  S1392C7 ::v22(){vfunc_called(this, "_ZN7S1392C73v22Ev");}
void  S1392C7 ::v23(){vfunc_called(this, "_ZN7S1392C73v23Ev");}
S1392C7 ::~S1392C7(){ note_dtor("S1392C7", this);} // tgen
S1392C7 ::S1392C7(){ note_ctor("S1392C7", this);} // tgen

static void Test_S1392C7()
{
  extern Class_Descriptor cd_S1392C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S1392C7, buf);
    S1392C7 *dp, &lv = *(dp=new (buf) S1392C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S1392C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1392C7)");
    check_field_offset(lv, s1392c7f0, ABISELECT(8,4), "S1392C7.s1392c7f0");
    test_class_info(&lv, &cd_S1392C7);
    dp->~S1392C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1392C7(Test_S1392C7, "S1392C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S1392C7C1Ev();
extern void _ZN7S1392C7D1Ev();
Name_Map name_map_S1392C7[] = {
  NSPAIR(_ZN7S1392C7C1Ev),
  NSPAIR(_ZN7S1392C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1392C7[];
extern void _ZN7S1392C73v19Ev();
extern void _ZN7S1392C73v20Ev();
extern void _ZN7S1392C73v21Ev();
extern void _ZN7S1392C73v22Ev();
extern void _ZN7S1392C73v23Ev();
static  VTBL_ENTRY vtc_S1392C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1392C7[0]),
  (VTBL_ENTRY)&_ZN7S1392C73v19Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v20Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v21Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v23Ev,
};
extern VTBL_ENTRY _ZTI7S1392C7[];
extern  VTBL_ENTRY _ZTV7S1392C7[];
Class_Descriptor cd_S1392C7 = {  "S1392C7", // class name
  0,0,//no base classes
  &(vtc_S1392C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S1392C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1392C7),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  S1392C9  {
  __tsi64 s1392c9f0[2];
  virtual void  v24(); // _ZN7S1392C93v24Ev
  virtual void  v25(); // _ZN7S1392C93v25Ev
  virtual void  v26(); // _ZN7S1392C93v26Ev
  ~S1392C9(); // tgen
  S1392C9(); // tgen
};
//SIG(-1 S1392C9) C1{ v1 v2 v3 FL[2]}


void  S1392C9 ::v24(){vfunc_called(this, "_ZN7S1392C93v24Ev");}
void  S1392C9 ::v25(){vfunc_called(this, "_ZN7S1392C93v25Ev");}
void  S1392C9 ::v26(){vfunc_called(this, "_ZN7S1392C93v26Ev");}
S1392C9 ::~S1392C9(){ note_dtor("S1392C9", this);} // tgen
S1392C9 ::S1392C9(){ note_ctor("S1392C9", this);} // tgen

static void Test_S1392C9()
{
  extern Class_Descriptor cd_S1392C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S1392C9, buf);
    S1392C9 *dp, &lv = *(dp=new (buf) S1392C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S1392C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1392C9)");
    check_field_offset(lv, s1392c9f0, ABISELECT(8,4), "S1392C9.s1392c9f0");
    test_class_info(&lv, &cd_S1392C9);
    dp->~S1392C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1392C9(Test_S1392C9, "S1392C9", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S1392C9C1Ev();
extern void _ZN7S1392C9D1Ev();
Name_Map name_map_S1392C9[] = {
  NSPAIR(_ZN7S1392C9C1Ev),
  NSPAIR(_ZN7S1392C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1392C9[];
extern void _ZN7S1392C93v24Ev();
extern void _ZN7S1392C93v25Ev();
extern void _ZN7S1392C93v26Ev();
static  VTBL_ENTRY vtc_S1392C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1392C9[0]),
  (VTBL_ENTRY)&_ZN7S1392C93v24Ev,
  (VTBL_ENTRY)&_ZN7S1392C93v25Ev,
  (VTBL_ENTRY)&_ZN7S1392C93v26Ev,
};
extern VTBL_ENTRY _ZTI7S1392C9[];
extern  VTBL_ENTRY _ZTV7S1392C9[];
Class_Descriptor cd_S1392C9 = {  "S1392C9", // class name
  0,0,//no base classes
  &(vtc_S1392C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S1392C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1392C9),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  S1392C10  : virtual S1392C2 {
  __tsi64 s1392c10f0;
  int s1392c10f1;
  virtual  ~S1392C10(); // _ZN8S1392C10D2Ev
  virtual void  v27(); // _ZN8S1392C103v27Ev
  virtual void  v28(); // _ZN8S1392C103v28Ev
  virtual void  v29(); // _ZN8S1392C103v29Ev
  virtual void  v30(); // _ZN8S1392C103v30Ev
  virtual void  v31(); // _ZN8S1392C103v31Ev
  virtual void  v32(); // _ZN8S1392C103v32Ev
  S1392C10(); // tgen
};
//SIG(-1 S1392C10) C1{ VBC2{ BC3{ BC4{ vd v7} vd v8 v9 v10 v11 v12 Fp FL:7} VBC5{ v13 v14 v15 v16 Fc FD[7]} vd v17 v18 v19 v20 v21 v22 Fi} vd v1 v2 v3 v4 v5 v6 FL Fi}


 S1392C10 ::~S1392C10(){ note_dtor("S1392C10", this);}
void  S1392C10 ::v27(){vfunc_called(this, "_ZN8S1392C103v27Ev");}
void  S1392C10 ::v28(){vfunc_called(this, "_ZN8S1392C103v28Ev");}
void  S1392C10 ::v29(){vfunc_called(this, "_ZN8S1392C103v29Ev");}
void  S1392C10 ::v30(){vfunc_called(this, "_ZN8S1392C103v30Ev");}
void  S1392C10 ::v31(){vfunc_called(this, "_ZN8S1392C103v31Ev");}
void  S1392C10 ::v32(){vfunc_called(this, "_ZN8S1392C103v32Ev");}
S1392C10 ::S1392C10(){ note_ctor("S1392C10", this);} // tgen

static void Test_S1392C10()
{
  extern Class_Descriptor cd_S1392C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,32)];
    init_test(&cd_S1392C10, buf);
    S1392C10 *dp, &lv = *(dp=new (buf) S1392C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,124), "sizeof(S1392C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1392C10)");
    check_base_class_offset(lv, (S1392C4*)(S1392C3*)(S1392C2*), ABISELECT(24,16), "S1392C10");
    check_base_class_offset(lv, (S1392C3*)(S1392C2*), ABISELECT(24,16), "S1392C10");
    check_base_class_offset(lv, (S1392C5*)(S1392C2*), ABISELECT(48,32), "S1392C10");
    check_base_class_offset(lv, (S1392C2*), ABISELECT(24,16), "S1392C10");
    check_field_offset(lv, s1392c10f0, ABISELECT(8,4), "S1392C10.s1392c10f0");
    check_field_offset(lv, s1392c10f1, ABISELECT(16,12), "S1392C10.s1392c10f1");
    test_class_info(&lv, &cd_S1392C10);
    dp->~S1392C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1392C10(Test_S1392C10, "S1392C10", ABISELECT(176,124));

#else // __cplusplus

extern void _ZN8S1392C10C1Ev();
extern void _ZN8S1392C10D2Ev();
Name_Map name_map_S1392C10[] = {
  NSPAIR(_ZN8S1392C10C1Ev),
  NSPAIR(_ZN8S1392C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1392C4;
extern VTBL_ENTRY _ZTI7S1392C4[];
extern  VTBL_ENTRY _ZTV7S1392C4[];
extern Class_Descriptor cd_S1392C3;
extern VTBL_ENTRY _ZTI7S1392C3[];
extern  VTBL_ENTRY _ZTV7S1392C3[];
extern Class_Descriptor cd_S1392C5;
extern VTBL_ENTRY _ZTI7S1392C5[];
extern  VTBL_ENTRY _ZTV7S1392C5[];
extern Class_Descriptor cd_S1392C2;
extern VTBL_ENTRY _ZTI7S1392C2[];
extern  VTBL_ENTRY _ZTV7S1392C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1392C2[];
static Base_Class bases_S1392C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1392C4,    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
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1392C3,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1392C5,    ABISELECT(48,32), //bcp->offset
    42, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S1392C2,    ABISELECT(24,16), //bcp->offset
    12, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1392C10[];
extern void _ZN8S1392C10D1Ev();
extern void _ZN8S1392C10D0Ev();
extern void _ZN8S1392C103v27Ev();
extern void _ZN8S1392C103v28Ev();
extern void _ZN8S1392C103v29Ev();
extern void _ZN8S1392C103v30Ev();
extern void _ZN8S1392C103v31Ev();
extern void _ZN8S1392C103v32Ev();
extern void ABISELECT(_ZTv0_n32_N8S1392C10D1Ev,_ZTv0_n16_N8S1392C10D1Ev)();
extern void ABISELECT(_ZThn24_N8S1392C10D1Ev,_ZThn16_N8S1392C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S1392C10D0Ev,_ZTv0_n16_N8S1392C10D0Ev)();
extern void ABISELECT(_ZThn24_N8S1392C10D0Ev,_ZThn16_N8S1392C10D0Ev)() __attribute__((weak));
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
static  VTBL_ENTRY vtc_S1392C10[] = {
  ABISELECT(48,32),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S1392C10[0]),
  (VTBL_ENTRY)&_ZN8S1392C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1392C10D0Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v32Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(24,16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S1392C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1392C10D1Ev,_ZTv0_n16_N8S1392C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1392C10D0Ev,_ZTv0_n16_N8S1392C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S1392C10[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
};
extern VTBL_ENTRY _ZTV8S1392C10[];
extern void _ZN7S1392C2D1Ev();
extern void _ZN7S1392C2D0Ev();
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C2__8S1392C10[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S1392C2[0]),
  (VTBL_ENTRY)&_ZN7S1392C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1392C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
};
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C5__7S1392C2__8S1392C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S1392C2[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
};
static  VTT_ENTRY vtt_S1392C10[] = {
  {&(_ZTV8S1392C10[4]),  4,52},
  {&(_ZTV8S1392C10[28]),  28,52},
  {&(_ZTV8S1392C10[48]),  48,52},
  {&(_tg__ZTV7S1392C2__8S1392C10[3]),  3,17},
  {&(_tg__ZTV7S1392C5__7S1392C2__8S1392C10[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S1392C10[];
extern  VTBL_ENTRY _ZTV8S1392C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1392C10[];
static VTBL_ENTRY alt_thunk_names68[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S1392C10D0Ev,_ZTv0_n16_N8S1392C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S1392C10D0Ev,_ZThn16_N8S1392C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S1392C10D1Ev,_ZTv0_n16_N8S1392C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S1392C10D1Ev,_ZThn16_N8S1392C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1392C10 = {  "S1392C10", // class name
  bases_S1392C10, 4,
  &(vtc_S1392C10[0]), // expected_vtbl_contents
  &(vtt_S1392C10[0]), // expected_vtt_contents
  ABISELECT(176,124), // object size
  NSPAIRA(_ZTI8S1392C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S1392C10),52, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1392C10),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names68,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1392C8  : S1392C9 , virtual S1392C2 , S1392C5 , S1392C7 , S1392C10 {
  virtual void  v33(); // _ZN7S1392C83v33Ev
  ~S1392C8(); // tgen
  S1392C8(); // tgen
};
//SIG(-1 S1392C8) C1{ BC2{ v2 v3 v4 FL[2]} VBC3{ BC4{ BC5{ vd v5} vd v6 v7 v8 v9 v10 Fp FL:7} VBC6{ v11 v12 v13 v14 Fc FD[7]} vd v15 v16 v17 v18 v19 v20 Fi} BC6 BC7{ v21 v22 v23 v24 v25 Fp[4]} BC8{ VBC3 vd v26 v27 v28 v29 v30 v31 FL Fi} v1}


void  S1392C8 ::v33(){vfunc_called(this, "_ZN7S1392C83v33Ev");}
S1392C8 ::~S1392C8(){ note_dtor("S1392C8", this);} // tgen
S1392C8 ::S1392C8(){ note_ctor("S1392C8", this);} // tgen

static void Test_S1392C8()
{
  extern Class_Descriptor cd_S1392C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,65)];
    init_test(&cd_S1392C8, buf);
    S1392C8 *dp, &lv = *(dp=new (buf) S1392C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,256), "sizeof(S1392C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1392C8)");
    check_base_class_offset(lv, (S1392C9*), 0, "S1392C8");
    check_base_class_offset(lv, (S1392C4*)(S1392C3*)(S1392C2*), ABISELECT(224,148), "S1392C8");
    check_base_class_offset(lv, (S1392C3*)(S1392C2*), ABISELECT(224,148), "S1392C8");
    check_base_class_offset(lv, (S1392C5*)(S1392C2*), ABISELECT(256,164), "S1392C8");
    check_base_class_offset(lv, (S1392C2*), ABISELECT(224,148), "S1392C8");
    check_base_class_offset(lv, (S1392C2*)(S1392C10*), ABISELECT(224,148), "S1392C8");
    /*is_ambiguous_... S1392C8::S1392C5 */ AMB_check_base_class_offset(lv, (S1392C5*), ABISELECT(32,20), "S1392C8");
    check_base_class_offset(lv, (S1392C7*), ABISELECT(160,112), "S1392C8");
    check_base_class_offset(lv, (S1392C10*), ABISELECT(200,132), "S1392C8");
    test_class_info(&lv, &cd_S1392C8);
    dp->~S1392C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1392C8(Test_S1392C8, "S1392C8", ABISELECT(384,256));

#else // __cplusplus

extern void _ZN7S1392C8C1Ev();
extern void _ZN7S1392C8D1Ev();
Name_Map name_map_S1392C8[] = {
  NSPAIR(_ZN7S1392C8C1Ev),
  NSPAIR(_ZN7S1392C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1392C9;
extern VTBL_ENTRY _ZTI7S1392C9[];
extern  VTBL_ENTRY _ZTV7S1392C9[];
extern Class_Descriptor cd_S1392C4;
extern VTBL_ENTRY _ZTI7S1392C4[];
extern  VTBL_ENTRY _ZTV7S1392C4[];
extern Class_Descriptor cd_S1392C3;
extern VTBL_ENTRY _ZTI7S1392C3[];
extern  VTBL_ENTRY _ZTV7S1392C3[];
extern Class_Descriptor cd_S1392C5;
extern VTBL_ENTRY _ZTI7S1392C5[];
extern  VTBL_ENTRY _ZTV7S1392C5[];
extern Class_Descriptor cd_S1392C2;
extern VTBL_ENTRY _ZTI7S1392C2[];
extern  VTBL_ENTRY _ZTV7S1392C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1392C2[];
extern Class_Descriptor cd_S1392C5;
extern VTBL_ENTRY _ZTI7S1392C5[];
extern  VTBL_ENTRY _ZTV7S1392C5[];
extern Class_Descriptor cd_S1392C7;
extern VTBL_ENTRY _ZTI7S1392C7[];
extern  VTBL_ENTRY _ZTV7S1392C7[];
extern Class_Descriptor cd_S1392C10;
extern VTBL_ENTRY _ZTI8S1392C10[];
extern  VTBL_ENTRY _ZTV8S1392C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1392C10[];
static Base_Class bases_S1392C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1392C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1392C4,    ABISELECT(224,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1392C3,    ABISELECT(224,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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1392C5,    ABISELECT(256,164), //bcp->offset
    65, //bcp->virtual_function_table_offset
    6, //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_S1392C2,    ABISELECT(224,148), //bcp->offset
    35, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1392C5,    ABISELECT(32,20), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1392C7,    ABISELECT(160,112), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1392C10,    ABISELECT(200,132), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //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 _ZTI7S1392C8[];
extern void _ZN7S1392C93v24Ev();
extern void _ZN7S1392C93v25Ev();
extern void _ZN7S1392C93v26Ev();
extern void _ZN7S1392C83v33Ev();
extern void _ZN7S1392C8D1Ev();
extern void _ZN7S1392C8D0Ev();
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
extern void _ZN7S1392C73v19Ev();
extern void _ZN7S1392C73v20Ev();
extern void _ZN7S1392C73v21Ev();
extern void _ZN7S1392C73v22Ev();
extern void _ZN7S1392C73v23Ev();
extern void ABISELECT(_ZThn200_N7S1392C8D1Ev,_ZThn132_N7S1392C8D1Ev)();
extern void ABISELECT(_ZThn200_N7S1392C8D0Ev,_ZThn132_N7S1392C8D0Ev)();
extern void _ZN8S1392C103v27Ev();
extern void _ZN8S1392C103v28Ev();
extern void _ZN8S1392C103v29Ev();
extern void _ZN8S1392C103v30Ev();
extern void _ZN8S1392C103v31Ev();
extern void _ZN8S1392C103v32Ev();
extern void ABISELECT(_ZTv0_n32_N7S1392C8D1Ev,_ZTv0_n16_N7S1392C8D1Ev)();
extern void ABISELECT(_ZThn224_N7S1392C8D1Ev,_ZThn148_N7S1392C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S1392C8D0Ev,_ZTv0_n16_N7S1392C8D0Ev)();
extern void ABISELECT(_ZThn224_N7S1392C8D0Ev,_ZThn148_N7S1392C8D0Ev)() __attribute__((weak));
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
static  VTBL_ENTRY vtc_S1392C8[] = {
  ABISELECT(256,164),
  ABISELECT(224,148),
  0,
  (VTBL_ENTRY)&(_ZTI7S1392C8[0]),
  (VTBL_ENTRY)&_ZN7S1392C93v24Ev,
  (VTBL_ENTRY)&_ZN7S1392C93v25Ev,
  (VTBL_ENTRY)&_ZN7S1392C93v26Ev,
  (VTBL_ENTRY)&_ZN7S1392C83v33Ev,
  (VTBL_ENTRY)&_ZN7S1392C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1392C8D0Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1392C8[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI7S1392C8[0]),
  (VTBL_ENTRY)&_ZN7S1392C73v19Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v20Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v21Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v23Ev,
  ABISELECT(56,32),
  ABISELECT(24,16),
  ABISELECT(-200,-132),
  (VTBL_ENTRY)&(_ZTI7S1392C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N7S1392C8D1Ev,_ZThn132_N7S1392C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N7S1392C8D0Ev,_ZThn132_N7S1392C8D0Ev),
  (VTBL_ENTRY)&_ZN8S1392C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v32Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-148),
  ABISELECT(32,16),
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI7S1392C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1392C8D1Ev,_ZTv0_n16_N7S1392C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1392C8D0Ev,_ZTv0_n16_N7S1392C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI7S1392C8[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
};
extern VTBL_ENTRY _ZTV7S1392C8[];
extern void _ZN8S1392C10D1Ev();
extern void _ZN8S1392C10D0Ev();
extern void _ZN8S1392C103v27Ev();
extern void _ZN8S1392C103v28Ev();
extern void _ZN8S1392C103v29Ev();
extern void _ZN8S1392C103v30Ev();
extern void _ZN8S1392C103v31Ev();
extern void _ZN8S1392C103v32Ev();
static  VTBL_ENTRY _tg__ZTV8S1392C10__7S1392C8[] = {
  ABISELECT(56,32),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S1392C10[0]),
  (VTBL_ENTRY)&_ZN8S1392C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1392C10D0Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v32Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S1392C10D1Ev,_ZTv0_n16_N8S1392C10D1Ev)();
extern void ABISELECT(_ZThn24_N8S1392C10D1Ev,_ZThn16_N8S1392C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S1392C10D0Ev,_ZTv0_n16_N8S1392C10D0Ev)();
extern void ABISELECT(_ZThn24_N8S1392C10D0Ev,_ZThn16_N8S1392C10D0Ev)() __attribute__((weak));
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C2__8S1392C10__7S1392C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(32,16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S1392C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1392C10D1Ev,_ZTv0_n16_N8S1392C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1392C10D0Ev,_ZTv0_n16_N8S1392C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
};
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C5__8S1392C10__7S1392C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S1392C10[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
};
extern void _ZN7S1392C2D1Ev();
extern void _ZN7S1392C2D0Ev();
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C2__7S1392C8[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S1392C2[0]),
  (VTBL_ENTRY)&_ZN7S1392C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1392C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
};
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C5__7S1392C2__7S1392C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S1392C2[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
};
static  VTT_ENTRY vtt_S1392C8[] = {
  {&(_ZTV7S1392C8[4]),  4,75},
  {&(_tg__ZTV8S1392C10__7S1392C8[4]),  4,12},
  {&(_tg__ZTV7S1392C2__8S1392C10__7S1392C8[16]),  16,30},
  {&(_tg__ZTV7S1392C5__8S1392C10__7S1392C8[6]),  6,10},
  {&(_ZTV7S1392C8[51]),  51,75},
  {&(_ZTV7S1392C8[71]),  71,75},
  {&(_ZTV7S1392C8[27]),  27,75},
  {&(_tg__ZTV7S1392C2__7S1392C8[3]),  3,17},
  {&(_tg__ZTV7S1392C5__7S1392C2__7S1392C8[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S1392C8[];
extern  VTBL_ENTRY _ZTV7S1392C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1392C8[];
static VTBL_ENTRY alt_thunk_names69[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S1392C10D0Ev,_ZTv0_n16_N8S1392C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S1392C10D0Ev,_ZThn16_N8S1392C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S1392C10D1Ev,_ZTv0_n16_N8S1392C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S1392C10D1Ev,_ZThn16_N8S1392C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1392C8D0Ev,_ZTv0_n16_N7S1392C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S1392C8D0Ev,_ZThn148_N7S1392C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1392C8D1Ev,_ZTv0_n16_N7S1392C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S1392C8D1Ev,_ZThn148_N7S1392C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1392C8 = {  "S1392C8", // class name
  bases_S1392C8, 8,
  &(vtc_S1392C8[0]), // expected_vtbl_contents
  &(vtt_S1392C8[0]), // expected_vtt_contents
  ABISELECT(384,256), // object size
  NSPAIRA(_ZTI7S1392C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1392C8),75, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1392C8),9, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names69,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1392C11  {
  virtual  ~S1392C11(); // _ZN8S1392C11D1Ev
  virtual void  v34(); // _ZN8S1392C113v34Ev
  S1392C11(); // tgen
};
//SIG(-1 S1392C11) C1{ vd v1}


 S1392C11 ::~S1392C11(){ note_dtor("S1392C11", this);}
void  S1392C11 ::v34(){vfunc_called(this, "_ZN8S1392C113v34Ev");}
S1392C11 ::S1392C11(){ note_ctor("S1392C11", this);} // tgen

static void Test_S1392C11()
{
  extern Class_Descriptor cd_S1392C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1392C11, buf);
    S1392C11 *dp, &lv = *(dp=new (buf) S1392C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1392C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1392C11)");
    test_class_info(&lv, &cd_S1392C11);
    dp->~S1392C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1392C11(Test_S1392C11, "S1392C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S1392C11C1Ev();
extern void _ZN8S1392C11D1Ev();
Name_Map name_map_S1392C11[] = {
  NSPAIR(_ZN8S1392C11C1Ev),
  NSPAIR(_ZN8S1392C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1392C11[];
extern void _ZN8S1392C11D1Ev();
extern void _ZN8S1392C11D0Ev();
extern void _ZN8S1392C113v34Ev();
static  VTBL_ENTRY vtc_S1392C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1392C11[0]),
  (VTBL_ENTRY)&_ZN8S1392C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1392C11D0Ev,
  (VTBL_ENTRY)&_ZN8S1392C113v34Ev,
};
extern VTBL_ENTRY _ZTI8S1392C11[];
extern  VTBL_ENTRY _ZTV8S1392C11[];
Class_Descriptor cd_S1392C11 = {  "S1392C11", // class name
  0,0,//no base classes
  &(vtc_S1392C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S1392C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1392C11),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  S1392C6  : S1392C7 , S1392C8 , S1392C10 , S1392C11 {
  virtual  ~S1392C6(); // _ZN7S1392C6D2Ev
  virtual void  v35(); // _ZN7S1392C63v35Ev
  virtual void  v36(); // _ZN7S1392C63v36Ev
  virtual void  v37(); // _ZN7S1392C63v37Ev
  S1392C6(); // tgen
};
//SIG(-1 S1392C6) C1{ BC2{ v4 v5 v6 v7 v8 Fp[4]} BC3{ BC4{ v9 v10 v11 FL[2]} VBC5{ BC6{ BC7{ vd v12} vd v13 v14 v15 v16 v17 Fp FL:7} VBC8{ v18 v19 v20 v21 Fc FD[7]} vd v22 v23 v24 v25 v26 v27 Fi} BC8 BC2 BC9{ VBC5 vd v28 v29 v30 v31 v32 v33 FL Fi} v34} BC9 BC10{ vd v35} vd v1 v2 v3}


 S1392C6 ::~S1392C6(){ note_dtor("S1392C6", this);}
void  S1392C6 ::v35(){vfunc_called(this, "_ZN7S1392C63v35Ev");}
void  S1392C6 ::v36(){vfunc_called(this, "_ZN7S1392C63v36Ev");}
void  S1392C6 ::v37(){vfunc_called(this, "_ZN7S1392C63v37Ev");}
S1392C6 ::S1392C6(){ note_ctor("S1392C6", this);} // tgen

static void Test_S1392C6()
{
  extern Class_Descriptor cd_S1392C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,75)];
    init_test(&cd_S1392C6, buf);
    S1392C6 *dp, &lv = *(dp=new (buf) S1392C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,296), "sizeof(S1392C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1392C6)");
    /*is_ambiguous_... S1392C6::S1392C7 */ AMB_check_base_class_offset(lv, (S1392C7*), 0, "S1392C6");
    check_base_class_offset(lv, (S1392C9*)(S1392C8*), ABISELECT(48,20), "S1392C6");
    check_base_class_offset(lv, (S1392C4*)(S1392C3*)(S1392C2*), ABISELECT(304,188), "S1392C6");
    check_base_class_offset(lv, (S1392C3*)(S1392C2*), ABISELECT(304,188), "S1392C6");
    check_base_class_offset(lv, (S1392C5*)(S1392C2*), ABISELECT(336,204), "S1392C6");
    check_base_class_offset(lv, (S1392C2*)(S1392C8*), ABISELECT(304,188), "S1392C6");
    check_base_class_offset(lv, (S1392C2*)(S1392C10*)(S1392C8*), ABISELECT(304,188), "S1392C6");
    /*is_ambiguous_... S1392C6::S1392C10 */ AMB_check_base_class_offset(lv, (S1392C2*)(S1392C10*), ABISELECT(304,188), "S1392C6");
    /*is_ambiguous_... S1392C8::S1392C5 */ AMB_check_base_class_offset(lv, (S1392C5*)(S1392C8*), ABISELECT(80,40), "S1392C6");
    check_base_class_offset(lv, (S1392C7*)(S1392C8*), ABISELECT(208,132), "S1392C6");
    check_base_class_offset(lv, (S1392C10*)(S1392C8*), ABISELECT(248,152), "S1392C6");
    check_base_class_offset(lv, (S1392C8*), ABISELECT(48,20), "S1392C6");
    /*is_ambiguous_... S1392C6::S1392C10 */ AMB_check_base_class_offset(lv, (S1392C10*), ABISELECT(272,168), "S1392C6");
    check_base_class_offset(lv, (S1392C11*), ABISELECT(296,184), "S1392C6");
    test_class_info(&lv, &cd_S1392C6);
    dp->~S1392C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1392C6(Test_S1392C6, "S1392C6", ABISELECT(464,296));

#else // __cplusplus

extern void _ZN7S1392C6C1Ev();
extern void _ZN7S1392C6D2Ev();
Name_Map name_map_S1392C6[] = {
  NSPAIR(_ZN7S1392C6C1Ev),
  NSPAIR(_ZN7S1392C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1392C7;
extern VTBL_ENTRY _ZTI7S1392C7[];
extern  VTBL_ENTRY _ZTV7S1392C7[];
extern Class_Descriptor cd_S1392C9;
extern VTBL_ENTRY _ZTI7S1392C9[];
extern  VTBL_ENTRY _ZTV7S1392C9[];
extern Class_Descriptor cd_S1392C4;
extern VTBL_ENTRY _ZTI7S1392C4[];
extern  VTBL_ENTRY _ZTV7S1392C4[];
extern Class_Descriptor cd_S1392C3;
extern VTBL_ENTRY _ZTI7S1392C3[];
extern  VTBL_ENTRY _ZTV7S1392C3[];
extern Class_Descriptor cd_S1392C5;
extern VTBL_ENTRY _ZTI7S1392C5[];
extern  VTBL_ENTRY _ZTV7S1392C5[];
extern Class_Descriptor cd_S1392C2;
extern VTBL_ENTRY _ZTI7S1392C2[];
extern  VTBL_ENTRY _ZTV7S1392C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1392C2[];
extern Class_Descriptor cd_S1392C5;
extern VTBL_ENTRY _ZTI7S1392C5[];
extern  VTBL_ENTRY _ZTV7S1392C5[];
extern Class_Descriptor cd_S1392C7;
extern VTBL_ENTRY _ZTI7S1392C7[];
extern  VTBL_ENTRY _ZTV7S1392C7[];
extern Class_Descriptor cd_S1392C10;
extern VTBL_ENTRY _ZTI8S1392C10[];
extern  VTBL_ENTRY _ZTV8S1392C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1392C10[];
extern Class_Descriptor cd_S1392C8;
extern VTBL_ENTRY _ZTI7S1392C8[];
extern  VTBL_ENTRY _ZTV7S1392C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1392C8[];
extern Class_Descriptor cd_S1392C10;
extern VTBL_ENTRY _ZTI8S1392C10[];
extern  VTBL_ENTRY _ZTV8S1392C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1392C10[];
extern Class_Descriptor cd_S1392C11;
extern VTBL_ENTRY _ZTI8S1392C11[];
extern  VTBL_ENTRY _ZTV8S1392C11[];
static Base_Class bases_S1392C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1392C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1392C9,    ABISELECT(48,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
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S1392C4,    ABISELECT(304,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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1392C3,    ABISELECT(304,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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1392C5,    ABISELECT(336,204), //bcp->offset
    96, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S1392C2,    ABISELECT(304,188), //bcp->offset
    66, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S1392C5,    ABISELECT(80,40), //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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S1392C7,    ABISELECT(208,132), //bcp->offset
    30, //bcp->virtual_function_table_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_S1392C10,    ABISELECT(248,152), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S1392C8,    ABISELECT(48,20), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1392C10,    ABISELECT(272,168), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1392C11,    ABISELECT(296,184), //bcp->offset
    61, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1392C6[];
extern void _ZN7S1392C73v19Ev();
extern void _ZN7S1392C73v20Ev();
extern void _ZN7S1392C73v21Ev();
extern void _ZN7S1392C73v22Ev();
extern void _ZN7S1392C73v23Ev();
extern void _ZN7S1392C6D1Ev();
extern void _ZN7S1392C6D0Ev();
extern void _ZN7S1392C63v35Ev();
extern void _ZN7S1392C63v36Ev();
extern void _ZN7S1392C63v37Ev();
extern void _ZN7S1392C93v24Ev();
extern void _ZN7S1392C93v25Ev();
extern void _ZN7S1392C93v26Ev();
extern void _ZN7S1392C83v33Ev();
extern void ABISELECT(_ZThn48_N7S1392C6D1Ev,_ZThn20_N7S1392C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S1392C6D0Ev,_ZThn20_N7S1392C6D0Ev)();
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
extern void _ZN7S1392C73v19Ev();
extern void _ZN7S1392C73v20Ev();
extern void _ZN7S1392C73v21Ev();
extern void _ZN7S1392C73v22Ev();
extern void _ZN7S1392C73v23Ev();
extern void ABISELECT(_ZThn248_N7S1392C6D1Ev,_ZThn152_N7S1392C6D1Ev)();
extern void ABISELECT(_ZThn248_N7S1392C6D0Ev,_ZThn152_N7S1392C6D0Ev)();
extern void _ZN8S1392C103v27Ev();
extern void _ZN8S1392C103v28Ev();
extern void _ZN8S1392C103v29Ev();
extern void _ZN8S1392C103v30Ev();
extern void _ZN8S1392C103v31Ev();
extern void _ZN8S1392C103v32Ev();
extern void ABISELECT(_ZThn272_N7S1392C6D1Ev,_ZThn168_N7S1392C6D1Ev)();
extern void ABISELECT(_ZThn272_N7S1392C6D0Ev,_ZThn168_N7S1392C6D0Ev)();
extern void _ZN8S1392C103v27Ev();
extern void _ZN8S1392C103v28Ev();
extern void _ZN8S1392C103v29Ev();
extern void _ZN8S1392C103v30Ev();
extern void _ZN8S1392C103v31Ev();
extern void _ZN8S1392C103v32Ev();
extern void ABISELECT(_ZThn296_N7S1392C6D1Ev,_ZThn184_N7S1392C6D1Ev)();
extern void ABISELECT(_ZThn296_N7S1392C6D0Ev,_ZThn184_N7S1392C6D0Ev)();
extern void _ZN8S1392C113v34Ev();
extern void ABISELECT(_ZTv0_n32_N7S1392C6D1Ev,_ZTv0_n16_N7S1392C6D1Ev)();
extern void ABISELECT(_ZThn304_N7S1392C6D1Ev,_ZThn188_N7S1392C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S1392C6D0Ev,_ZTv0_n16_N7S1392C6D0Ev)();
extern void ABISELECT(_ZThn304_N7S1392C6D0Ev,_ZThn188_N7S1392C6D0Ev)() __attribute__((weak));
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
static  VTBL_ENTRY vtc_S1392C6[] = {
  ABISELECT(336,204),
  ABISELECT(304,188),
  0,
  (VTBL_ENTRY)&(_ZTI7S1392C6[0]),
  (VTBL_ENTRY)&_ZN7S1392C73v19Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v20Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v21Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v23Ev,
  (VTBL_ENTRY)&_ZN7S1392C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1392C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1392C63v35Ev,
  (VTBL_ENTRY)&_ZN7S1392C63v36Ev,
  (VTBL_ENTRY)&_ZN7S1392C63v37Ev,
  ABISELECT(288,184),
  ABISELECT(256,168),
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI7S1392C6[0]),
  (VTBL_ENTRY)&_ZN7S1392C93v24Ev,
  (VTBL_ENTRY)&_ZN7S1392C93v25Ev,
  (VTBL_ENTRY)&_ZN7S1392C93v26Ev,
  (VTBL_ENTRY)&_ZN7S1392C83v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S1392C6D1Ev,_ZThn20_N7S1392C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S1392C6D0Ev,_ZThn20_N7S1392C6D0Ev),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S1392C6[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S1392C6[0]),
  (VTBL_ENTRY)&_ZN7S1392C73v19Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v20Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v21Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v23Ev,
  ABISELECT(88,52),
  ABISELECT(56,36),
  ABISELECT(-248,-152),
  (VTBL_ENTRY)&(_ZTI7S1392C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn248_N7S1392C6D1Ev,_ZThn152_N7S1392C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn248_N7S1392C6D0Ev,_ZThn152_N7S1392C6D0Ev),
  (VTBL_ENTRY)&_ZN8S1392C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v32Ev,
  ABISELECT(64,36),
  ABISELECT(32,20),
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI7S1392C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S1392C6D1Ev,_ZThn168_N7S1392C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S1392C6D0Ev,_ZThn168_N7S1392C6D0Ev),
  (VTBL_ENTRY)&_ZN8S1392C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v32Ev,
  ABISELECT(-296,-184),
  (VTBL_ENTRY)&(_ZTI7S1392C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N7S1392C6D1Ev,_ZThn184_N7S1392C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N7S1392C6D0Ev,_ZThn184_N7S1392C6D0Ev),
  (VTBL_ENTRY)&_ZN8S1392C113v34Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-188),
  ABISELECT(32,16),
  ABISELECT(-304,-188),
  (VTBL_ENTRY)&(_ZTI7S1392C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1392C6D1Ev,_ZTv0_n16_N7S1392C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1392C6D0Ev,_ZTv0_n16_N7S1392C6D0Ev),
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-204),
  (VTBL_ENTRY)&(_ZTI7S1392C6[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
};
extern VTBL_ENTRY _ZTV7S1392C6[];
extern void _ZN7S1392C93v24Ev();
extern void _ZN7S1392C93v25Ev();
extern void _ZN7S1392C93v26Ev();
extern void _ZN7S1392C83v33Ev();
extern void _ZN7S1392C8D1Ev();
extern void _ZN7S1392C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C8__7S1392C6[] = {
  ABISELECT(288,184),
  ABISELECT(256,168),
  0,
  (VTBL_ENTRY)&(_ZTI7S1392C8[0]),
  (VTBL_ENTRY)&_ZN7S1392C93v24Ev,
  (VTBL_ENTRY)&_ZN7S1392C93v25Ev,
  (VTBL_ENTRY)&_ZN7S1392C93v26Ev,
  (VTBL_ENTRY)&_ZN7S1392C83v33Ev,
  (VTBL_ENTRY)&_ZN7S1392C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1392C8D0Ev,
};
extern void _ZN8S1392C10D1Ev();
extern void _ZN8S1392C10D0Ev();
extern void _ZN8S1392C103v27Ev();
extern void _ZN8S1392C103v28Ev();
extern void _ZN8S1392C103v29Ev();
extern void _ZN8S1392C103v30Ev();
extern void _ZN8S1392C103v31Ev();
extern void _ZN8S1392C103v32Ev();
static  VTBL_ENTRY _tg__ZTV8S1392C107S1392C8__7S1392C6[] = {
  ABISELECT(88,52),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S1392C10[0]),
  (VTBL_ENTRY)&_ZN8S1392C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1392C10D0Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v32Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S1392C10D1Ev,_ZTv0_n16_N8S1392C10D1Ev)();
extern void ABISELECT(_ZThn56_N8S1392C10D1Ev,_ZThn36_N8S1392C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S1392C10D0Ev,_ZTv0_n16_N8S1392C10D0Ev)();
extern void ABISELECT(_ZThn56_N8S1392C10D0Ev,_ZThn36_N8S1392C10D0Ev)() __attribute__((weak));
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C2__8S1392C107S1392C8__7S1392C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  ABISELECT(32,16),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S1392C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1392C10D1Ev,_ZTv0_n16_N8S1392C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1392C10D0Ev,_ZTv0_n16_N8S1392C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
};
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C5__8S1392C107S1392C8__7S1392C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S1392C10[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S1392C8D1Ev,_ZTv0_n16_N7S1392C8D1Ev)();
extern void ABISELECT(_ZThn256_N7S1392C8D1Ev,_ZThn168_N7S1392C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S1392C8D0Ev,_ZTv0_n16_N7S1392C8D0Ev)();
extern void ABISELECT(_ZThn256_N7S1392C8D0Ev,_ZThn168_N7S1392C8D0Ev)() __attribute__((weak));
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C2__7S1392C8__7S1392C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-168),
  ABISELECT(32,16),
  ABISELECT(-256,-168),
  (VTBL_ENTRY)&(_ZTI7S1392C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1392C8D1Ev,_ZTv0_n16_N7S1392C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1392C8D0Ev,_ZTv0_n16_N7S1392C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
};
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C5__7S1392C8__7S1392C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-288,-184),
  (VTBL_ENTRY)&(_ZTI7S1392C8[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
};
extern void ABISELECT(_ZThn200_N7S1392C8D1Ev,_ZThn132_N7S1392C8D1Ev)();
extern void ABISELECT(_ZThn200_N7S1392C8D0Ev,_ZThn132_N7S1392C8D0Ev)();
extern void _ZN8S1392C103v27Ev();
extern void _ZN8S1392C103v28Ev();
extern void _ZN8S1392C103v29Ev();
extern void _ZN8S1392C103v30Ev();
extern void _ZN8S1392C103v31Ev();
extern void _ZN8S1392C103v32Ev();
static  VTBL_ENTRY _tg__ZTV8S1392C10__7S1392C8__7S1392C6[] = {
  ABISELECT(88,52),
  ABISELECT(56,36),
  ABISELECT(-200,-132),
  (VTBL_ENTRY)&(_ZTI7S1392C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N7S1392C8D1Ev,_ZThn132_N7S1392C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N7S1392C8D0Ev,_ZThn132_N7S1392C8D0Ev),
  (VTBL_ENTRY)&_ZN8S1392C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v32Ev,
};
extern void _ZN8S1392C10D1Ev();
extern void _ZN8S1392C10D0Ev();
extern void _ZN8S1392C103v27Ev();
extern void _ZN8S1392C103v28Ev();
extern void _ZN8S1392C103v29Ev();
extern void _ZN8S1392C103v30Ev();
extern void _ZN8S1392C103v31Ev();
extern void _ZN8S1392C103v32Ev();
static  VTBL_ENTRY _tg__ZTV8S1392C10__A1__7S1392C6[] = {
  ABISELECT(64,36),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S1392C10[0]),
  (VTBL_ENTRY)&_ZN8S1392C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1392C10D0Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v32Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S1392C10D1Ev,_ZTv0_n16_N8S1392C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S1392C10D1Ev,_ZThn20_N8S1392C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S1392C10D0Ev,_ZTv0_n16_N8S1392C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S1392C10D0Ev,_ZThn20_N8S1392C10D0Ev)() __attribute__((weak));
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C2__8S1392C10__A1__7S1392C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(32,16),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S1392C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1392C10D1Ev,_ZTv0_n16_N8S1392C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1392C10D0Ev,_ZTv0_n16_N8S1392C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
};
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C5__8S1392C10__A1__7S1392C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S1392C10[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
};
extern void _ZN7S1392C2D1Ev();
extern void _ZN7S1392C2D0Ev();
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C2__7S1392C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S1392C2[0]),
  (VTBL_ENTRY)&_ZN7S1392C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1392C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
};
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C5__7S1392C2__7S1392C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S1392C2[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
};
static  VTT_ENTRY vtt_S1392C6[] = {
  {&(_ZTV7S1392C6[4]),  4,106},
  {&(_tg__ZTV7S1392C8__7S1392C6[4]),  4,10},
  {&(_tg__ZTV8S1392C107S1392C8__7S1392C6[4]),  4,12},
  {&(_tg__ZTV7S1392C2__8S1392C107S1392C8__7S1392C6[16]),  16,30},
  {&(_tg__ZTV7S1392C5__8S1392C107S1392C8__7S1392C6[6]),  6,10},
  {&(_tg__ZTV7S1392C2__7S1392C8__7S1392C6[16]),  16,30},
  {&(_tg__ZTV7S1392C5__7S1392C8__7S1392C6[6]),  6,10},
  {&(_tg__ZTV8S1392C10__7S1392C8__7S1392C6[4]),  4,12},
  {&(_tg__ZTV8S1392C10__A1__7S1392C6[4]),  4,12},
  {&(_tg__ZTV7S1392C2__8S1392C10__A1__7S1392C6[16]),  16,30},
  {&(_tg__ZTV7S1392C5__8S1392C10__A1__7S1392C6[6]),  6,10},
  {&(_ZTV7S1392C6[18]),  18,106},
  {&(_ZTV7S1392C6[82]),  82,106},
  {&(_ZTV7S1392C6[102]),  102,106},
  {&(_ZTV7S1392C6[41]),  41,106},
  {&(_ZTV7S1392C6[53]),  53,106},
  {&(_tg__ZTV7S1392C2__7S1392C6[3]),  3,17},
  {&(_tg__ZTV7S1392C5__7S1392C2__7S1392C6[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S1392C6[];
extern  VTBL_ENTRY _ZTV7S1392C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1392C6[];
static VTBL_ENTRY alt_thunk_names70[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1392C8D0Ev,_ZTv0_n16_N7S1392C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S1392C8D0Ev,_ZThn168_N7S1392C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1392C8D1Ev,_ZTv0_n16_N7S1392C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S1392C8D1Ev,_ZThn168_N7S1392C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S1392C10D0Ev,_ZTv0_n16_N8S1392C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1392C10D0Ev,_ZThn20_N8S1392C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S1392C10D0Ev,_ZThn36_N8S1392C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S1392C10D1Ev,_ZTv0_n16_N8S1392C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1392C10D1Ev,_ZThn20_N8S1392C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S1392C10D1Ev,_ZThn36_N8S1392C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1392C6D0Ev,_ZTv0_n16_N7S1392C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1392C6D0Ev,_ZThn188_N7S1392C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1392C6D1Ev,_ZTv0_n16_N7S1392C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1392C6D1Ev,_ZThn188_N7S1392C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1392C6 = {  "S1392C6", // class name
  bases_S1392C6, 12,
  &(vtc_S1392C6[0]), // expected_vtbl_contents
  &(vtt_S1392C6[0]), // expected_vtt_contents
  ABISELECT(464,296), // object size
  NSPAIRA(_ZTI7S1392C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S1392C6),106, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1392C6),18, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names70,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1392C1  : S1392C2 , virtual S1392C6 , virtual S1392C3 {
  char s1392c1f0;
  virtual void  v1(); // _ZN7S1392C12v1Ev
  virtual void  v2(); // _ZN7S1392C12v2Ev
  ~S1392C1(); // tgen
  S1392C1(); // tgen
};
//SIG(1 S1392C1) C1{ BC2{ BC3{ BC4{ vd v3} vd v4 v5 v6 v7 v8 Fp FL:7} VBC5{ v9 v10 v11 v12 Fc FD[7]} vd v13 v14 v15 v16 v17 v18 Fi} VBC6{ BC7{ v19 v20 v21 v22 v23 Fp[4]} BC8{ BC9{ v24 v25 v26 FL[2]} VBC2 BC5 BC7 BC10{ VBC2 vd v27 v28 v29 v30 v31 v32 FL Fi} v33} BC10 BC11{ vd v34} vd v35 v36 v37} VBC3 v1 v2 Fc}


void  S1392C1 ::v1(){vfunc_called(this, "_ZN7S1392C12v1Ev");}
void  S1392C1 ::v2(){vfunc_called(this, "_ZN7S1392C12v2Ev");}
S1392C1 ::~S1392C1(){ note_dtor("S1392C1", this);} // tgen
S1392C1 ::S1392C1(){ note_ctor("S1392C1", this);} // tgen

static void Test_S1392C1()
{
  extern Class_Descriptor cd_S1392C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,83)];
    init_test(&cd_S1392C1, buf);
    S1392C1 *dp, &lv = *(dp=new (buf) S1392C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,328), "sizeof(S1392C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1392C1)");
    /*is_ambiguous_... S1392C1::S1392C2 */ AMB_check_base_class_offset(lv, (S1392C4*)(S1392C3*)(S1392C2*), 0, "S1392C1");
    /*is_ambiguous_... S1392C1::S1392C2 */ AMB_check_base_class_offset(lv, (S1392C3*)(S1392C2*), 0, "S1392C1");
    /*is_ambiguous_... S1392C1::S1392C2 */ AMB_check_base_class_offset(lv, (S1392C5*)(S1392C2*), ABISELECT(32,20), "S1392C1");
    /*is_ambiguous_... S1392C1::S1392C2 */ AMB_check_base_class_offset(lv, (S1392C5*)(S1392C2*), ABISELECT(32,20), "S1392C1");
    /*is_ambiguous_... S1392C1::S1392C2 */ AMB_check_base_class_offset(lv, (S1392C2*), 0, "S1392C1");
    /*is_ambiguous_... S1392C6::S1392C7 */ AMB_check_base_class_offset(lv, (S1392C7*)(S1392C6*), ABISELECT(160,112), "S1392C1");
    check_base_class_offset(lv, (S1392C9*)(S1392C8*)(S1392C6*), ABISELECT(208,132), "S1392C1");
    /*is_ambiguous_... S1392C1::S1392C2 */ AMB_check_base_class_offset(lv, (S1392C4*)(S1392C3*)(S1392C2*), ABISELECT(464,300), "S1392C1");
    /*is_ambiguous_... S1392C1::S1392C2 */ AMB_check_base_class_offset(lv, (S1392C3*)(S1392C2*), ABISELECT(464,300), "S1392C1");
    check_base_class_offset(lv, (S1392C2*)(S1392C8*)(S1392C6*), ABISELECT(464,300), "S1392C1");
    check_base_class_offset(lv, (S1392C2*)(S1392C10*)(S1392C8*)(S1392C6*), ABISELECT(464,300), "S1392C1");
    /*is_ambiguous_... S1392C6::S1392C10 */ AMB_check_base_class_offset(lv, (S1392C2*)(S1392C10*)(S1392C6*), ABISELECT(464,300), "S1392C1");
    /*is_ambiguous_... S1392C8::S1392C5 */ AMB_check_base_class_offset(lv, (S1392C5*)(S1392C8*)(S1392C6*), ABISELECT(240,152), "S1392C1");
    check_base_class_offset(lv, (S1392C7*)(S1392C8*)(S1392C6*), ABISELECT(368,244), "S1392C1");
    check_base_class_offset(lv, (S1392C10*)(S1392C8*)(S1392C6*), ABISELECT(408,264), "S1392C1");
    check_base_class_offset(lv, (S1392C8*)(S1392C6*), ABISELECT(208,132), "S1392C1");
    /*is_ambiguous_... S1392C6::S1392C10 */ AMB_check_base_class_offset(lv, (S1392C10*)(S1392C6*), ABISELECT(432,280), "S1392C1");
    check_base_class_offset(lv, (S1392C11*)(S1392C6*), ABISELECT(456,296), "S1392C1");
    check_base_class_offset(lv, (S1392C6*), ABISELECT(160,112), "S1392C1");
    /*is_ambiguous_... S1392C1::S1392C3 */ AMB_check_base_class_offset(lv, (S1392C4*)(S1392C3*), ABISELECT(488,316), "S1392C1");
    /*is_ambiguous_... S1392C1::S1392C3 */ AMB_check_base_class_offset(lv, (S1392C3*), ABISELECT(488,316), "S1392C1");
    check_field_offset(lv, s1392c1f0, ABISELECT(24,16), "S1392C1.s1392c1f0");
    test_class_info(&lv, &cd_S1392C1);
    dp->~S1392C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1392C1(Test_S1392C1, "S1392C1", ABISELECT(512,328));

#else // __cplusplus

extern void _ZN7S1392C1C1Ev();
extern void _ZN7S1392C1D1Ev();
Name_Map name_map_S1392C1[] = {
  NSPAIR(_ZN7S1392C1C1Ev),
  NSPAIR(_ZN7S1392C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1392C4;
extern VTBL_ENTRY _ZTI7S1392C4[];
extern  VTBL_ENTRY _ZTV7S1392C4[];
extern Class_Descriptor cd_S1392C3;
extern VTBL_ENTRY _ZTI7S1392C3[];
extern  VTBL_ENTRY _ZTV7S1392C3[];
extern Class_Descriptor cd_S1392C5;
extern VTBL_ENTRY _ZTI7S1392C5[];
extern  VTBL_ENTRY _ZTV7S1392C5[];
extern Class_Descriptor cd_S1392C2;
extern VTBL_ENTRY _ZTI7S1392C2[];
extern  VTBL_ENTRY _ZTV7S1392C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1392C2[];
extern Class_Descriptor cd_S1392C7;
extern VTBL_ENTRY _ZTI7S1392C7[];
extern  VTBL_ENTRY _ZTV7S1392C7[];
extern Class_Descriptor cd_S1392C9;
extern VTBL_ENTRY _ZTI7S1392C9[];
extern  VTBL_ENTRY _ZTV7S1392C9[];
extern Class_Descriptor cd_S1392C4;
extern VTBL_ENTRY _ZTI7S1392C4[];
extern  VTBL_ENTRY _ZTV7S1392C4[];
extern Class_Descriptor cd_S1392C3;
extern VTBL_ENTRY _ZTI7S1392C3[];
extern  VTBL_ENTRY _ZTV7S1392C3[];
extern Class_Descriptor cd_S1392C2;
extern VTBL_ENTRY _ZTI7S1392C2[];
extern  VTBL_ENTRY _ZTV7S1392C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1392C2[];
extern Class_Descriptor cd_S1392C5;
extern VTBL_ENTRY _ZTI7S1392C5[];
extern  VTBL_ENTRY _ZTV7S1392C5[];
extern Class_Descriptor cd_S1392C7;
extern VTBL_ENTRY _ZTI7S1392C7[];
extern  VTBL_ENTRY _ZTV7S1392C7[];
extern Class_Descriptor cd_S1392C10;
extern VTBL_ENTRY _ZTI8S1392C10[];
extern  VTBL_ENTRY _ZTV8S1392C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1392C10[];
extern Class_Descriptor cd_S1392C8;
extern VTBL_ENTRY _ZTI7S1392C8[];
extern  VTBL_ENTRY _ZTV7S1392C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1392C8[];
extern Class_Descriptor cd_S1392C10;
extern VTBL_ENTRY _ZTI8S1392C10[];
extern  VTBL_ENTRY _ZTV8S1392C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1392C10[];
extern Class_Descriptor cd_S1392C11;
extern VTBL_ENTRY _ZTI8S1392C11[];
extern  VTBL_ENTRY _ZTV8S1392C11[];
extern Class_Descriptor cd_S1392C6;
extern VTBL_ENTRY _ZTI7S1392C6[];
extern  VTBL_ENTRY _ZTV7S1392C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1392C6[];
extern Class_Descriptor cd_S1392C4;
extern VTBL_ENTRY _ZTI7S1392C4[];
extern  VTBL_ENTRY _ZTV7S1392C4[];
extern Class_Descriptor cd_S1392C3;
extern VTBL_ENTRY _ZTI7S1392C3[];
extern  VTBL_ENTRY _ZTV7S1392C3[];
static Base_Class bases_S1392C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1392C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S1392C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S1392C5,    ABISELECT(32,20), //bcp->offset
    22, //bcp->virtual_function_table_offset
    6, //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
    3, //immediately_derived
  0, 1},
  {&cd_S1392C2,    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
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1392C7,    ABISELECT(160,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
    15, //immediately_derived
  0, 0},
  {&cd_S1392C9,    ABISELECT(208,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
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1392C4,    ABISELECT(464,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
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1392C3,    ABISELECT(464,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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1392C2,    ABISELECT(464,300), //bcp->offset
    122, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S1392C5,    ABISELECT(240,152), //bcp->offset
    80, //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
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1392C7,    ABISELECT(368,244), //bcp->offset
    86, //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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1392C10,    ABISELECT(408,264), //bcp->offset
    93, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1392C8,    ABISELECT(208,132), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1392C10,    ABISELECT(432,280), //bcp->offset
    105, //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
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1392C11,    ABISELECT(456,296), //bcp->offset
    117, //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
    12, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1392C6,    ABISELECT(160,112), //bcp->offset
    32, //bcp->virtual_function_table_offset
    28, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1392C4,    ABISELECT(488,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S1392C3,    ABISELECT(488,316), //bcp->offset
    152, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1392C1[];
extern void _ZN7S1392C1D1Ev();
extern void _ZN7S1392C1D0Ev();
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
extern void _ZN7S1392C12v1Ev();
extern void _ZN7S1392C12v2Ev();
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
extern void _ZN7S1392C73v19Ev();
extern void _ZN7S1392C73v20Ev();
extern void _ZN7S1392C73v21Ev();
extern void _ZN7S1392C73v22Ev();
extern void _ZN7S1392C73v23Ev();
extern void ABISELECT(_ZTv0_n80_N7S1392C1D1Ev,_ZTv0_n40_N7S1392C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S1392C1D1Ev,_ZThn112_N7S1392C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S1392C1D0Ev,_ZTv0_n40_N7S1392C1D0Ev)();
extern void ABISELECT(_ZThn160_N7S1392C1D0Ev,_ZThn112_N7S1392C1D0Ev)() __attribute__((weak));
extern void _ZN7S1392C63v35Ev();
extern void _ZN7S1392C63v36Ev();
extern void _ZN7S1392C63v37Ev();
extern void _ZN7S1392C93v24Ev();
extern void _ZN7S1392C93v25Ev();
extern void _ZN7S1392C93v26Ev();
extern void _ZN7S1392C83v33Ev();
extern void ABISELECT(_ZTvn48_n80_N7S1392C1D1Ev,_ZTvn20_n40_N7S1392C1D1Ev)();
extern void ABISELECT(_ZTvn48_n80_N7S1392C1D0Ev,_ZTvn20_n40_N7S1392C1D0Ev)();
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
extern void _ZN7S1392C73v19Ev();
extern void _ZN7S1392C73v20Ev();
extern void _ZN7S1392C73v21Ev();
extern void _ZN7S1392C73v22Ev();
extern void _ZN7S1392C73v23Ev();
extern void ABISELECT(_ZTvn248_n80_N7S1392C1D1Ev,_ZTvn152_n40_N7S1392C1D1Ev)();
extern void ABISELECT(_ZTvn248_n80_N7S1392C1D0Ev,_ZTvn152_n40_N7S1392C1D0Ev)();
extern void _ZN8S1392C103v27Ev();
extern void _ZN8S1392C103v28Ev();
extern void _ZN8S1392C103v29Ev();
extern void _ZN8S1392C103v30Ev();
extern void _ZN8S1392C103v31Ev();
extern void _ZN8S1392C103v32Ev();
extern void ABISELECT(_ZTvn272_n80_N7S1392C1D1Ev,_ZTvn168_n40_N7S1392C1D1Ev)();
extern void ABISELECT(_ZTvn272_n80_N7S1392C1D0Ev,_ZTvn168_n40_N7S1392C1D0Ev)();
extern void _ZN8S1392C103v27Ev();
extern void _ZN8S1392C103v28Ev();
extern void _ZN8S1392C103v29Ev();
extern void _ZN8S1392C103v30Ev();
extern void _ZN8S1392C103v31Ev();
extern void _ZN8S1392C103v32Ev();
extern void ABISELECT(_ZTvn296_n80_N7S1392C1D1Ev,_ZTvn184_n40_N7S1392C1D1Ev)();
extern void ABISELECT(_ZTvn296_n80_N7S1392C1D0Ev,_ZTvn184_n40_N7S1392C1D0Ev)();
extern void _ZN8S1392C113v34Ev();
extern void ABISELECT(_ZTv0_n32_N7S1392C1D1Ev,_ZTv0_n16_N7S1392C1D1Ev)();
extern void ABISELECT(_ZThn464_N7S1392C1D1Ev,_ZThn300_N7S1392C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S1392C1D0Ev,_ZTv0_n16_N7S1392C1D0Ev)();
extern void ABISELECT(_ZThn464_N7S1392C1D0Ev,_ZThn300_N7S1392C1D0Ev)() __attribute__((weak));
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
extern void ABISELECT(_ZTv0_n24_N7S1392C1D1Ev,_ZTv0_n12_N7S1392C1D1Ev)();
extern void ABISELECT(_ZThn488_N7S1392C1D1Ev,_ZThn316_N7S1392C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1392C1D0Ev,_ZTv0_n12_N7S1392C1D0Ev)();
extern void ABISELECT(_ZThn488_N7S1392C1D0Ev,_ZThn316_N7S1392C1D0Ev)() __attribute__((weak));
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
static  VTBL_ENTRY vtc_S1392C1[] = {
  ABISELECT(488,316),
  ABISELECT(464,300),
  ABISELECT(160,112),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1392C1[0]),
  (VTBL_ENTRY)&_ZN7S1392C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1392C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1392C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1392C12v2Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1392C1[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
  ABISELECT(296,184),
  ABISELECT(248,152),
  ABISELECT(248,152),
  ABISELECT(248,152),
  ABISELECT(248,152),
  ABISELECT(248,152),
  ABISELECT(248,152),
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(48,20),
  ABISELECT(48,20),
  ABISELECT(48,20),
  ABISELECT(48,20),
  0,
  0,
  0,
  ABISELECT(-160,-112),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-92),
  ABISELECT(304,188),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI7S1392C1[0]),
  (VTBL_ENTRY)&_ZN7S1392C73v19Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v20Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v21Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v23Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S1392C1D1Ev,_ZTv0_n40_N7S1392C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S1392C1D0Ev,_ZTv0_n40_N7S1392C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1392C63v35Ev,
  (VTBL_ENTRY)&_ZN7S1392C63v36Ev,
  (VTBL_ENTRY)&_ZN7S1392C63v37Ev,
  ABISELECT(-176,-112),
  ABISELECT(256,168),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S1392C1[0]),
  (VTBL_ENTRY)&_ZN7S1392C93v24Ev,
  (VTBL_ENTRY)&_ZN7S1392C93v25Ev,
  (VTBL_ENTRY)&_ZN7S1392C93v26Ev,
  (VTBL_ENTRY)&_ZN7S1392C83v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n80_N7S1392C1D1Ev,_ZTvn20_n40_N7S1392C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n80_N7S1392C1D0Ev,_ZTvn20_n40_N7S1392C1D0Ev),
  ABISELECT(-240,-152),
  (VTBL_ENTRY)&(_ZTI7S1392C1[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
  ABISELECT(-368,-244),
  (VTBL_ENTRY)&(_ZTI7S1392C1[0]),
  (VTBL_ENTRY)&_ZN7S1392C73v19Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v20Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v21Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v23Ev,
  ABISELECT(-376,-244),
  ABISELECT(56,36),
  ABISELECT(-408,-264),
  (VTBL_ENTRY)&(_ZTI7S1392C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn248_n80_N7S1392C1D1Ev,_ZTvn152_n40_N7S1392C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn248_n80_N7S1392C1D0Ev,_ZTvn152_n40_N7S1392C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1392C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v32Ev,
  ABISELECT(-400,-260),
  ABISELECT(32,20),
  ABISELECT(-432,-280),
  (VTBL_ENTRY)&(_ZTI7S1392C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n80_N7S1392C1D1Ev,_ZTvn168_n40_N7S1392C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n80_N7S1392C1D0Ev,_ZTvn168_n40_N7S1392C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1392C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v32Ev,
  ABISELECT(-456,-296),
  (VTBL_ENTRY)&(_ZTI7S1392C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n80_N7S1392C1D1Ev,_ZTvn184_n40_N7S1392C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n80_N7S1392C1D0Ev,_ZTvn184_n40_N7S1392C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1392C113v34Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-464,-300),
  ABISELECT(-432,-280),
  ABISELECT(-464,-300),
  (VTBL_ENTRY)&(_ZTI7S1392C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1392C1D1Ev,_ZTv0_n16_N7S1392C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1392C1D0Ev,_ZTv0_n16_N7S1392C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-488,-316),
  ABISELECT(-488,-316),
  (VTBL_ENTRY)&(_ZTI7S1392C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1392C1D1Ev,_ZTv0_n12_N7S1392C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1392C1D0Ev,_ZTv0_n12_N7S1392C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
};
extern VTBL_ENTRY _ZTV7S1392C1[];
extern void _ZN7S1392C2D1Ev();
extern void _ZN7S1392C2D0Ev();
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C2__A__7S1392C1[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1392C2[0]),
  (VTBL_ENTRY)&_ZN7S1392C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1392C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
};
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C5__7S1392C2__A__7S1392C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1392C2[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
};
extern void _ZN7S1392C73v19Ev();
extern void _ZN7S1392C73v20Ev();
extern void _ZN7S1392C73v21Ev();
extern void _ZN7S1392C73v22Ev();
extern void _ZN7S1392C73v23Ev();
extern void _ZN7S1392C6D1Ev();
extern void _ZN7S1392C6D0Ev();
extern void _ZN7S1392C63v35Ev();
extern void _ZN7S1392C63v36Ev();
extern void _ZN7S1392C63v37Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C6__7S1392C1[] = {
  ABISELECT(-128,-92),
  ABISELECT(304,188),
  0,
  (VTBL_ENTRY)&(_ZTI7S1392C6[0]),
  (VTBL_ENTRY)&_ZN7S1392C73v19Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v20Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v21Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1392C73v23Ev,
  (VTBL_ENTRY)&_ZN7S1392C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1392C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1392C63v35Ev,
  (VTBL_ENTRY)&_ZN7S1392C63v36Ev,
  (VTBL_ENTRY)&_ZN7S1392C63v37Ev,
};
extern void _ZN7S1392C93v24Ev();
extern void _ZN7S1392C93v25Ev();
extern void _ZN7S1392C93v26Ev();
extern void _ZN7S1392C83v33Ev();
extern void _ZN7S1392C8D1Ev();
extern void _ZN7S1392C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C87S1392C6__7S1392C1[] = {
  ABISELECT(-176,-112),
  ABISELECT(256,168),
  0,
  (VTBL_ENTRY)&(_ZTI7S1392C8[0]),
  (VTBL_ENTRY)&_ZN7S1392C93v24Ev,
  (VTBL_ENTRY)&_ZN7S1392C93v25Ev,
  (VTBL_ENTRY)&_ZN7S1392C93v26Ev,
  (VTBL_ENTRY)&_ZN7S1392C83v33Ev,
  (VTBL_ENTRY)&_ZN7S1392C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1392C8D0Ev,
};
extern void _ZN8S1392C10D1Ev();
extern void _ZN8S1392C10D0Ev();
extern void _ZN8S1392C103v27Ev();
extern void _ZN8S1392C103v28Ev();
extern void _ZN8S1392C103v29Ev();
extern void _ZN8S1392C103v30Ev();
extern void _ZN8S1392C103v31Ev();
extern void _ZN8S1392C103v32Ev();
static  VTBL_ENTRY _tg__ZTV8S1392C107S1392C87S1392C6__7S1392C1[] = {
  ABISELECT(-376,-244),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S1392C10[0]),
  (VTBL_ENTRY)&_ZN8S1392C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1392C10D0Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v32Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S1392C10D1Ev,_ZTv0_n16_N8S1392C10D1Ev)();
extern void ABISELECT(_ZThn56_N8S1392C10D1Ev,_ZThn36_N8S1392C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S1392C10D0Ev,_ZTv0_n16_N8S1392C10D0Ev)();
extern void ABISELECT(_ZThn56_N8S1392C10D0Ev,_ZThn36_N8S1392C10D0Ev)() __attribute__((weak));
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C2__8S1392C107S1392C87S1392C6__7S1392C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  ABISELECT(-432,-280),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S1392C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1392C10D1Ev,_ZTv0_n16_N8S1392C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1392C10D0Ev,_ZTv0_n16_N8S1392C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
};
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C5__8S1392C107S1392C87S1392C6__7S1392C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(376,244),
  (VTBL_ENTRY)&(_ZTI8S1392C10[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S1392C8D1Ev,_ZTv0_n16_N7S1392C8D1Ev)();
extern void ABISELECT(_ZThn256_N7S1392C8D1Ev,_ZThn168_N7S1392C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S1392C8D0Ev,_ZTv0_n16_N7S1392C8D0Ev)();
extern void ABISELECT(_ZThn256_N7S1392C8D0Ev,_ZThn168_N7S1392C8D0Ev)() __attribute__((weak));
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C2__7S1392C87S1392C6__7S1392C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-168),
  ABISELECT(-432,-280),
  ABISELECT(-256,-168),
  (VTBL_ENTRY)&(_ZTI7S1392C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1392C8D1Ev,_ZTv0_n16_N7S1392C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1392C8D0Ev,_ZTv0_n16_N7S1392C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
};
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C5__7S1392C87S1392C6__7S1392C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,112),
  (VTBL_ENTRY)&(_ZTI7S1392C8[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
};
extern void ABISELECT(_ZThn200_N7S1392C8D1Ev,_ZThn132_N7S1392C8D1Ev)();
extern void ABISELECT(_ZThn200_N7S1392C8D0Ev,_ZThn132_N7S1392C8D0Ev)();
extern void _ZN8S1392C103v27Ev();
extern void _ZN8S1392C103v28Ev();
extern void _ZN8S1392C103v29Ev();
extern void _ZN8S1392C103v30Ev();
extern void _ZN8S1392C103v31Ev();
extern void _ZN8S1392C103v32Ev();
static  VTBL_ENTRY _tg__ZTV8S1392C10__7S1392C87S1392C6__7S1392C1[] = {
  ABISELECT(-376,-244),
  ABISELECT(56,36),
  ABISELECT(-200,-132),
  (VTBL_ENTRY)&(_ZTI7S1392C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N7S1392C8D1Ev,_ZThn132_N7S1392C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N7S1392C8D0Ev,_ZThn132_N7S1392C8D0Ev),
  (VTBL_ENTRY)&_ZN8S1392C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v32Ev,
};
extern void _ZN8S1392C10D1Ev();
extern void _ZN8S1392C10D0Ev();
extern void _ZN8S1392C103v27Ev();
extern void _ZN8S1392C103v28Ev();
extern void _ZN8S1392C103v29Ev();
extern void _ZN8S1392C103v30Ev();
extern void _ZN8S1392C103v31Ev();
extern void _ZN8S1392C103v32Ev();
static  VTBL_ENTRY _tg__ZTV8S1392C107S1392C6__A1__7S1392C1[] = {
  ABISELECT(-400,-260),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S1392C10[0]),
  (VTBL_ENTRY)&_ZN8S1392C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1392C10D0Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v32Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S1392C10D1Ev,_ZTv0_n16_N8S1392C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S1392C10D1Ev,_ZThn20_N8S1392C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S1392C10D0Ev,_ZTv0_n16_N8S1392C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S1392C10D0Ev,_ZThn20_N8S1392C10D0Ev)() __attribute__((weak));
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C2__8S1392C107S1392C6__A1__7S1392C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-432,-280),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S1392C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1392C10D1Ev,_ZTv0_n16_N8S1392C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1392C10D0Ev,_ZTv0_n16_N8S1392C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
};
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C5__8S1392C107S1392C6__A1__7S1392C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(400,260),
  (VTBL_ENTRY)&(_ZTI8S1392C10[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
};
extern void _ZN7S1392C93v24Ev();
extern void _ZN7S1392C93v25Ev();
extern void _ZN7S1392C93v26Ev();
extern void _ZN7S1392C83v33Ev();
extern void ABISELECT(_ZThn48_N7S1392C6D1Ev,_ZThn20_N7S1392C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S1392C6D0Ev,_ZThn20_N7S1392C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1392C8__7S1392C6__7S1392C1[] = {
  ABISELECT(-176,-112),
  ABISELECT(256,168),
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI7S1392C6[0]),
  (VTBL_ENTRY)&_ZN7S1392C93v24Ev,
  (VTBL_ENTRY)&_ZN7S1392C93v25Ev,
  (VTBL_ENTRY)&_ZN7S1392C93v26Ev,
  (VTBL_ENTRY)&_ZN7S1392C83v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S1392C6D1Ev,_ZThn20_N7S1392C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S1392C6D0Ev,_ZThn20_N7S1392C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S1392C6D1Ev,_ZTv0_n16_N7S1392C6D1Ev)();
extern void ABISELECT(_ZThn304_N7S1392C6D1Ev,_ZThn188_N7S1392C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S1392C6D0Ev,_ZTv0_n16_N7S1392C6D0Ev)();
extern void ABISELECT(_ZThn304_N7S1392C6D0Ev,_ZThn188_N7S1392C6D0Ev)() __attribute__((weak));
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C2__7S1392C6__7S1392C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-188),
  ABISELECT(-432,-280),
  ABISELECT(-304,-188),
  (VTBL_ENTRY)&(_ZTI7S1392C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1392C6D1Ev,_ZTv0_n16_N7S1392C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1392C6D0Ev,_ZTv0_n16_N7S1392C6D0Ev),
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
};
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C5__7S1392C6__7S1392C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(128,92),
  (VTBL_ENTRY)&(_ZTI7S1392C6[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
};
extern void ABISELECT(_ZThn248_N7S1392C6D1Ev,_ZThn152_N7S1392C6D1Ev)();
extern void ABISELECT(_ZThn248_N7S1392C6D0Ev,_ZThn152_N7S1392C6D0Ev)();
extern void _ZN8S1392C103v27Ev();
extern void _ZN8S1392C103v28Ev();
extern void _ZN8S1392C103v29Ev();
extern void _ZN8S1392C103v30Ev();
extern void _ZN8S1392C103v31Ev();
extern void _ZN8S1392C103v32Ev();
static  VTBL_ENTRY _tg__ZTV8S1392C107S1392C8__7S1392C6__7S1392C1[] = {
  ABISELECT(-376,-244),
  ABISELECT(56,36),
  ABISELECT(-248,-152),
  (VTBL_ENTRY)&(_ZTI7S1392C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn248_N7S1392C6D1Ev,_ZThn152_N7S1392C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn248_N7S1392C6D0Ev,_ZThn152_N7S1392C6D0Ev),
  (VTBL_ENTRY)&_ZN8S1392C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v32Ev,
};
extern void ABISELECT(_ZThn272_N7S1392C6D1Ev,_ZThn168_N7S1392C6D1Ev)();
extern void ABISELECT(_ZThn272_N7S1392C6D0Ev,_ZThn168_N7S1392C6D0Ev)();
extern void _ZN8S1392C103v27Ev();
extern void _ZN8S1392C103v28Ev();
extern void _ZN8S1392C103v29Ev();
extern void _ZN8S1392C103v30Ev();
extern void _ZN8S1392C103v31Ev();
extern void _ZN8S1392C103v32Ev();
static  VTBL_ENTRY _tg__ZTV8S1392C10__A1__7S1392C6__7S1392C1[] = {
  ABISELECT(-400,-260),
  ABISELECT(32,20),
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI7S1392C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S1392C6D1Ev,_ZThn168_N7S1392C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S1392C6D0Ev,_ZThn168_N7S1392C6D0Ev),
  (VTBL_ENTRY)&_ZN8S1392C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1392C103v32Ev,
};
extern void _ZN7S1392C2D1Ev();
extern void _ZN7S1392C2D0Ev();
extern void _ZN7S1392C42v3Ev();
extern void _ZN7S1392C32v4Ev();
extern void _ZN7S1392C32v5Ev();
extern void _ZN7S1392C32v6Ev();
extern void _ZN7S1392C32v7Ev();
extern void _ZN7S1392C32v8Ev();
extern void _ZN7S1392C23v13Ev();
extern void _ZN7S1392C23v14Ev();
extern void _ZN7S1392C23v15Ev();
extern void _ZN7S1392C23v16Ev();
extern void _ZN7S1392C23v17Ev();
extern void _ZN7S1392C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C2__A1__7S1392C1[] = {
  ABISELECT(-432,-280),
  0,
  (VTBL_ENTRY)&(_ZTI7S1392C2[0]),
  (VTBL_ENTRY)&_ZN7S1392C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1392C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1392C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1392C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1392C23v18Ev,
};
extern void _ZN7S1392C52v9Ev();
extern void _ZN7S1392C53v10Ev();
extern void _ZN7S1392C53v11Ev();
extern void _ZN7S1392C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1392C5__7S1392C2__A1__7S1392C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(432,280),
  (VTBL_ENTRY)&(_ZTI7S1392C2[0]),
  (VTBL_ENTRY)&_ZN7S1392C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1392C53v12Ev,
};
static  VTT_ENTRY vtt_S1392C1[] = {
  {&(_ZTV7S1392C1[6]),  6,169},
  {&(_tg__ZTV7S1392C2__A__7S1392C1[3]),  3,17},
  {&(_tg__ZTV7S1392C5__7S1392C2__A__7S1392C1[6]),  6,10},
  {&(_ZTV7S1392C1[28]),  28,169},
  {&(_ZTV7S1392C1[60]),  60,169},
  {&(_ZTV7S1392C1[74]),  74,169},
  {&(_ZTV7S1392C1[138]),  138,169},
  {&(_ZTV7S1392C1[82]),  82,169},
  {&(_ZTV7S1392C1[88]),  88,169},
  {&(_ZTV7S1392C1[97]),  97,169},
  {&(_ZTV7S1392C1[109]),  109,169},
  {&(_ZTV7S1392C1[119]),  119,169},
  {&(_ZTV7S1392C1[161]),  161,169},
  {&(_tg__ZTV7S1392C6__7S1392C1[4]),  4,14},
  {&(_tg__ZTV7S1392C87S1392C6__7S1392C1[4]),  4,10},
  {&(_tg__ZTV8S1392C107S1392C87S1392C6__7S1392C1[4]),  4,12},
  {&(_tg__ZTV7S1392C2__8S1392C107S1392C87S1392C6__7S1392C1[16]),  16,30},
  {&(_tg__ZTV7S1392C5__8S1392C107S1392C87S1392C6__7S1392C1[6]),  6,10},
  {&(_tg__ZTV7S1392C2__7S1392C87S1392C6__7S1392C1[16]),  16,30},
  {&(_tg__ZTV7S1392C5__7S1392C87S1392C6__7S1392C1[6]),  6,10},
  {&(_tg__ZTV8S1392C10__7S1392C87S1392C6__7S1392C1[4]),  4,12},
  {&(_tg__ZTV8S1392C107S1392C6__A1__7S1392C1[4]),  4,12},
  {&(_tg__ZTV7S1392C2__8S1392C107S1392C6__A1__7S1392C1[16]),  16,30},
  {&(_tg__ZTV7S1392C5__8S1392C107S1392C6__A1__7S1392C1[6]),  6,10},
  {&(_tg__ZTV7S1392C8__7S1392C6__7S1392C1[4]),  4,10},
  {&(_tg__ZTV7S1392C2__7S1392C6__7S1392C1[16]),  16,30},
  {&(_tg__ZTV7S1392C5__7S1392C6__7S1392C1[6]),  6,10},
  {&(_tg__ZTV8S1392C107S1392C8__7S1392C6__7S1392C1[4]),  4,12},
  {&(_tg__ZTV8S1392C10__A1__7S1392C6__7S1392C1[4]),  4,12},
  {&(_tg__ZTV7S1392C2__A1__7S1392C1[3]),  3,17},
  {&(_tg__ZTV7S1392C5__7S1392C2__A1__7S1392C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S1392C1[];
extern  VTBL_ENTRY _ZTV7S1392C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1392C1[];
static VTBL_ENTRY alt_thunk_names71[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1392C6D0Ev,_ZTv0_n16_N7S1392C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1392C6D0Ev,_ZThn188_N7S1392C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1392C6D1Ev,_ZTv0_n16_N7S1392C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1392C6D1Ev,_ZThn188_N7S1392C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1392C8D0Ev,_ZTv0_n16_N7S1392C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S1392C8D0Ev,_ZThn168_N7S1392C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1392C8D1Ev,_ZTv0_n16_N7S1392C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S1392C8D1Ev,_ZThn168_N7S1392C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S1392C10D0Ev,_ZTv0_n16_N8S1392C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1392C10D0Ev,_ZThn20_N8S1392C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S1392C10D0Ev,_ZThn36_N8S1392C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S1392C10D1Ev,_ZTv0_n16_N8S1392C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1392C10D1Ev,_ZThn20_N8S1392C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S1392C10D1Ev,_ZThn36_N8S1392C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1392C1D0Ev,_ZTv0_n12_N7S1392C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N7S1392C1D0Ev,_ZThn316_N7S1392C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1392C1D1Ev,_ZTv0_n12_N7S1392C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N7S1392C1D1Ev,_ZThn316_N7S1392C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1392C1D0Ev,_ZTv0_n16_N7S1392C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S1392C1D0Ev,_ZThn300_N7S1392C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1392C1D1Ev,_ZTv0_n16_N7S1392C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S1392C1D1Ev,_ZThn300_N7S1392C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S1392C1D0Ev,_ZTv0_n40_N7S1392C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S1392C1D0Ev,_ZThn112_N7S1392C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S1392C1D1Ev,_ZTv0_n40_N7S1392C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S1392C1D1Ev,_ZThn112_N7S1392C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1392C1 = {  "S1392C1", // class name
  bases_S1392C1, 18,
  &(vtc_S1392C1[0]), // expected_vtbl_contents
  &(vtt_S1392C1[0]), // expected_vtt_contents
  ABISELECT(512,328), // object size
  NSPAIRA(_ZTI7S1392C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1392C1),169, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1392C1),31, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names71,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1391C4  {
  virtual  ~S1391C4(); // _ZN7S1391C4D1Ev
  virtual void  v3(); // _ZN7S1391C42v3Ev
  S1391C4(); // tgen
};
//SIG(-1 S1391C4) C1{ vd v1}


 S1391C4 ::~S1391C4(){ note_dtor("S1391C4", this);}
void  S1391C4 ::v3(){vfunc_called(this, "_ZN7S1391C42v3Ev");}
S1391C4 ::S1391C4(){ note_ctor("S1391C4", this);} // tgen

static void Test_S1391C4()
{
  extern Class_Descriptor cd_S1391C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1391C4, buf);
    S1391C4 *dp, &lv = *(dp=new (buf) S1391C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1391C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1391C4)");
    test_class_info(&lv, &cd_S1391C4);
    dp->~S1391C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1391C4(Test_S1391C4, "S1391C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1391C4C1Ev();
extern void _ZN7S1391C4D1Ev();
Name_Map name_map_S1391C4[] = {
  NSPAIR(_ZN7S1391C4C1Ev),
  NSPAIR(_ZN7S1391C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1391C4[];
extern void _ZN7S1391C4D1Ev();
extern void _ZN7S1391C4D0Ev();
extern void _ZN7S1391C42v3Ev();
static  VTBL_ENTRY vtc_S1391C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1391C4[0]),
  (VTBL_ENTRY)&_ZN7S1391C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1391C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
};
extern VTBL_ENTRY _ZTI7S1391C4[];
extern  VTBL_ENTRY _ZTV7S1391C4[];
Class_Descriptor cd_S1391C4 = {  "S1391C4", // class name
  0,0,//no base classes
  &(vtc_S1391C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1391C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1391C4),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  S1391C3  : S1391C4 {
  void *s1391c3f0;
  __tsi64 s1391c3f1:7;
  virtual  ~S1391C3(); // _ZN7S1391C3D1Ev
  virtual void  v4(); // _ZN7S1391C32v4Ev
  virtual void  v5(); // _ZN7S1391C32v5Ev
  virtual void  v6(); // _ZN7S1391C32v6Ev
  virtual void  v7(); // _ZN7S1391C32v7Ev
  virtual void  v8(); // _ZN7S1391C32v8Ev
  S1391C3(); // tgen
};
//SIG(-1 S1391C3) C1{ BC2{ vd v6} vd v1 v2 v3 v4 v5 Fp FL:7}


 S1391C3 ::~S1391C3(){ note_dtor("S1391C3", this);}
void  S1391C3 ::v4(){vfunc_called(this, "_ZN7S1391C32v4Ev");}
void  S1391C3 ::v5(){vfunc_called(this, "_ZN7S1391C32v5Ev");}
void  S1391C3 ::v6(){vfunc_called(this, "_ZN7S1391C32v6Ev");}
void  S1391C3 ::v7(){vfunc_called(this, "_ZN7S1391C32v7Ev");}
void  S1391C3 ::v8(){vfunc_called(this, "_ZN7S1391C32v8Ev");}
S1391C3 ::S1391C3(){ note_ctor("S1391C3", this);} // tgen

static void Test_S1391C3()
{
  extern Class_Descriptor cd_S1391C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S1391C3, buf);
    S1391C3 *dp, &lv = *(dp=new (buf) S1391C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1391C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1391C3)");
    check_base_class_offset(lv, (S1391C4*), 0, "S1391C3");
    check_field_offset(lv, s1391c3f0, ABISELECT(8,4), "S1391C3.s1391c3f0");
    set_bf_and_test(lv, s1391c3f1, ABISELECT(16,8), 0, 7, 1, "S1391C3");
    set_bf_and_test(lv, s1391c3f1, ABISELECT(16,8), 0, 7, hide_sll(1LL<<6), "S1391C3");
    test_class_info(&lv, &cd_S1391C3);
    dp->~S1391C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1391C3(Test_S1391C3, "S1391C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1391C3C1Ev();
extern void _ZN7S1391C3D1Ev();
Name_Map name_map_S1391C3[] = {
  NSPAIR(_ZN7S1391C3C1Ev),
  NSPAIR(_ZN7S1391C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1391C4;
extern VTBL_ENTRY _ZTI7S1391C4[];
extern  VTBL_ENTRY _ZTV7S1391C4[];
static Base_Class bases_S1391C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1391C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1391C3[];
extern void _ZN7S1391C3D1Ev();
extern void _ZN7S1391C3D0Ev();
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
static  VTBL_ENTRY vtc_S1391C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1391C3[0]),
  (VTBL_ENTRY)&_ZN7S1391C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1391C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S1391C3[];
extern  VTBL_ENTRY _ZTV7S1391C3[];
Class_Descriptor cd_S1391C3 = {  "S1391C3", // class name
  bases_S1391C3, 1,
  &(vtc_S1391C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1391C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1391C3),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1391C5  {
  char s1391c5f0;
  long double s1391c5f1[7];
  virtual void  v9(); // _ZN7S1391C52v9Ev
  virtual void  v10(); // _ZN7S1391C53v10Ev
  virtual void  v11(); // _ZN7S1391C53v11Ev
  virtual void  v12(); // _ZN7S1391C53v12Ev
  ~S1391C5(); // tgen
  S1391C5(); // tgen
};
//SIG(-1 S1391C5) C1{ v1 v2 v3 v4 Fc FD[7]}


void  S1391C5 ::v9(){vfunc_called(this, "_ZN7S1391C52v9Ev");}
void  S1391C5 ::v10(){vfunc_called(this, "_ZN7S1391C53v10Ev");}
void  S1391C5 ::v11(){vfunc_called(this, "_ZN7S1391C53v11Ev");}
void  S1391C5 ::v12(){vfunc_called(this, "_ZN7S1391C53v12Ev");}
S1391C5 ::~S1391C5(){ note_dtor("S1391C5", this);} // tgen
S1391C5 ::S1391C5(){ note_ctor("S1391C5", this);} // tgen

static void Test_S1391C5()
{
  extern Class_Descriptor cd_S1391C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,24)];
    init_test(&cd_S1391C5, buf);
    S1391C5 *dp, &lv = *(dp=new (buf) S1391C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,92), "sizeof(S1391C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1391C5)");
    check_field_offset(lv, s1391c5f0, ABISELECT(8,4), "S1391C5.s1391c5f0");
    check_field_offset(lv, s1391c5f1, ABISELECT(16,8), "S1391C5.s1391c5f1");
    test_class_info(&lv, &cd_S1391C5);
    dp->~S1391C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1391C5(Test_S1391C5, "S1391C5", ABISELECT(128,92));

#else // __cplusplus

extern void _ZN7S1391C5C1Ev();
extern void _ZN7S1391C5D1Ev();
Name_Map name_map_S1391C5[] = {
  NSPAIR(_ZN7S1391C5C1Ev),
  NSPAIR(_ZN7S1391C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1391C5[];
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
static  VTBL_ENTRY vtc_S1391C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1391C5[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S1391C5[];
extern  VTBL_ENTRY _ZTV7S1391C5[];
Class_Descriptor cd_S1391C5 = {  "S1391C5", // class name
  0,0,//no base classes
  &(vtc_S1391C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,92), // object size
  NSPAIRA(_ZTI7S1391C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1391C5),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  S1391C2  : S1391C3 , virtual S1391C5 {
  int s1391c2f0;
  virtual  ~S1391C2(); // _ZN7S1391C2D2Ev
  virtual void  v13(); // _ZN7S1391C23v13Ev
  virtual void  v14(); // _ZN7S1391C23v14Ev
  virtual void  v15(); // _ZN7S1391C23v15Ev
  virtual void  v16(); // _ZN7S1391C23v16Ev
  virtual void  v17(); // _ZN7S1391C23v17Ev
  virtual void  v18(); // _ZN7S1391C23v18Ev
  S1391C2(); // tgen
};
//SIG(-1 S1391C2) C1{ BC2{ BC3{ vd v7} vd v8 v9 v10 v11 v12 Fp FL:7} VBC4{ v13 v14 v15 v16 Fc FD[7]} vd v1 v2 v3 v4 v5 v6 Fi}


 S1391C2 ::~S1391C2(){ note_dtor("S1391C2", this);}
void  S1391C2 ::v13(){vfunc_called(this, "_ZN7S1391C23v13Ev");}
void  S1391C2 ::v14(){vfunc_called(this, "_ZN7S1391C23v14Ev");}
void  S1391C2 ::v15(){vfunc_called(this, "_ZN7S1391C23v15Ev");}
void  S1391C2 ::v16(){vfunc_called(this, "_ZN7S1391C23v16Ev");}
void  S1391C2 ::v17(){vfunc_called(this, "_ZN7S1391C23v17Ev");}
void  S1391C2 ::v18(){vfunc_called(this, "_ZN7S1391C23v18Ev");}
S1391C2 ::S1391C2(){ note_ctor("S1391C2", this);} // tgen

static void Test_S1391C2()
{
  extern Class_Descriptor cd_S1391C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S1391C2, buf);
    S1391C2 *dp, &lv = *(dp=new (buf) S1391C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S1391C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1391C2)");
    check_base_class_offset(lv, (S1391C4*)(S1391C3*), 0, "S1391C2");
    check_base_class_offset(lv, (S1391C3*), 0, "S1391C2");
    check_base_class_offset(lv, (S1391C5*), ABISELECT(32,16), "S1391C2");
    check_field_offset(lv, s1391c2f0, ABISELECT(20,12), "S1391C2.s1391c2f0");
    test_class_info(&lv, &cd_S1391C2);
    dp->~S1391C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1391C2(Test_S1391C2, "S1391C2", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN7S1391C2C1Ev();
extern void _ZN7S1391C2D2Ev();
Name_Map name_map_S1391C2[] = {
  NSPAIR(_ZN7S1391C2C1Ev),
  NSPAIR(_ZN7S1391C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1391C4;
extern VTBL_ENTRY _ZTI7S1391C4[];
extern  VTBL_ENTRY _ZTV7S1391C4[];
extern Class_Descriptor cd_S1391C3;
extern VTBL_ENTRY _ZTI7S1391C3[];
extern  VTBL_ENTRY _ZTV7S1391C3[];
extern Class_Descriptor cd_S1391C5;
extern VTBL_ENTRY _ZTI7S1391C5[];
extern  VTBL_ENTRY _ZTV7S1391C5[];
static Base_Class bases_S1391C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1391C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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
  0, 0},
  {&cd_S1391C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1391C5,    ABISELECT(32,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1391C2[];
extern void _ZN7S1391C2D1Ev();
extern void _ZN7S1391C2D0Ev();
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
static  VTBL_ENTRY vtc_S1391C2[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S1391C2[0]),
  (VTBL_ENTRY)&_ZN7S1391C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1391C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S1391C2[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
};
extern VTBL_ENTRY _ZTV7S1391C2[];
static  VTT_ENTRY vtt_S1391C2[] = {
  {&(_ZTV7S1391C2[3]),  3,27},
  {&(_ZTV7S1391C2[23]),  23,27},
};
extern VTBL_ENTRY _ZTI7S1391C2[];
extern  VTBL_ENTRY _ZTV7S1391C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1391C2[];
Class_Descriptor cd_S1391C2 = {  "S1391C2", // class name
  bases_S1391C2, 3,
  &(vtc_S1391C2[0]), // expected_vtbl_contents
  &(vtt_S1391C2[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI7S1391C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1391C2),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1391C2),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1391C7  {
  void *s1391c7f0[4];
  virtual void  v19(); // _ZN7S1391C73v19Ev
  virtual void  v20(); // _ZN7S1391C73v20Ev
  virtual void  v21(); // _ZN7S1391C73v21Ev
  virtual void  v22(); // _ZN7S1391C73v22Ev
  virtual void  v23(); // _ZN7S1391C73v23Ev
  ~S1391C7(); // tgen
  S1391C7(); // tgen
};
//SIG(-1 S1391C7) C1{ v1 v2 v3 v4 v5 Fp[4]}


void  S1391C7 ::v19(){vfunc_called(this, "_ZN7S1391C73v19Ev");}
void  S1391C7 ::v20(){vfunc_called(this, "_ZN7S1391C73v20Ev");}
void  S1391C7 ::v21(){vfunc_called(this, "_ZN7S1391C73v21Ev");}
void  S1391C7 ::v22(){vfunc_called(this, "_ZN7S1391C73v22Ev");}
void  S1391C7 ::v23(){vfunc_called(this, "_ZN7S1391C73v23Ev");}
S1391C7 ::~S1391C7(){ note_dtor("S1391C7", this);} // tgen
S1391C7 ::S1391C7(){ note_ctor("S1391C7", this);} // tgen

static void Test_S1391C7()
{
  extern Class_Descriptor cd_S1391C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S1391C7, buf);
    S1391C7 *dp, &lv = *(dp=new (buf) S1391C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S1391C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1391C7)");
    check_field_offset(lv, s1391c7f0, ABISELECT(8,4), "S1391C7.s1391c7f0");
    test_class_info(&lv, &cd_S1391C7);
    dp->~S1391C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1391C7(Test_S1391C7, "S1391C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S1391C7C1Ev();
extern void _ZN7S1391C7D1Ev();
Name_Map name_map_S1391C7[] = {
  NSPAIR(_ZN7S1391C7C1Ev),
  NSPAIR(_ZN7S1391C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1391C7[];
extern void _ZN7S1391C73v19Ev();
extern void _ZN7S1391C73v20Ev();
extern void _ZN7S1391C73v21Ev();
extern void _ZN7S1391C73v22Ev();
extern void _ZN7S1391C73v23Ev();
static  VTBL_ENTRY vtc_S1391C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1391C7[0]),
  (VTBL_ENTRY)&_ZN7S1391C73v19Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v20Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v21Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v23Ev,
};
extern VTBL_ENTRY _ZTI7S1391C7[];
extern  VTBL_ENTRY _ZTV7S1391C7[];
Class_Descriptor cd_S1391C7 = {  "S1391C7", // class name
  0,0,//no base classes
  &(vtc_S1391C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S1391C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1391C7),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  S1391C9  {
  long s1391c9f0[2];
  virtual void  v24(); // _ZN7S1391C93v24Ev
  virtual void  v25(); // _ZN7S1391C93v25Ev
  virtual void  v26(); // _ZN7S1391C93v26Ev
  ~S1391C9(); // tgen
  S1391C9(); // tgen
};
//SIG(-1 S1391C9) C1{ v1 v2 v3 Fl[2]}


void  S1391C9 ::v24(){vfunc_called(this, "_ZN7S1391C93v24Ev");}
void  S1391C9 ::v25(){vfunc_called(this, "_ZN7S1391C93v25Ev");}
void  S1391C9 ::v26(){vfunc_called(this, "_ZN7S1391C93v26Ev");}
S1391C9 ::~S1391C9(){ note_dtor("S1391C9", this);} // tgen
S1391C9 ::S1391C9(){ note_ctor("S1391C9", this);} // tgen

static void Test_S1391C9()
{
  extern Class_Descriptor cd_S1391C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1391C9, buf);
    S1391C9 *dp, &lv = *(dp=new (buf) S1391C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1391C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1391C9)");
    check_field_offset(lv, s1391c9f0, ABISELECT(8,4), "S1391C9.s1391c9f0");
    test_class_info(&lv, &cd_S1391C9);
    dp->~S1391C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1391C9(Test_S1391C9, "S1391C9", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1391C9C1Ev();
extern void _ZN7S1391C9D1Ev();
Name_Map name_map_S1391C9[] = {
  NSPAIR(_ZN7S1391C9C1Ev),
  NSPAIR(_ZN7S1391C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1391C9[];
extern void _ZN7S1391C93v24Ev();
extern void _ZN7S1391C93v25Ev();
extern void _ZN7S1391C93v26Ev();
static  VTBL_ENTRY vtc_S1391C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1391C9[0]),
  (VTBL_ENTRY)&_ZN7S1391C93v24Ev,
  (VTBL_ENTRY)&_ZN7S1391C93v25Ev,
  (VTBL_ENTRY)&_ZN7S1391C93v26Ev,
};
extern VTBL_ENTRY _ZTI7S1391C9[];
extern  VTBL_ENTRY _ZTV7S1391C9[];
Class_Descriptor cd_S1391C9 = {  "S1391C9", // class name
  0,0,//no base classes
  &(vtc_S1391C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1391C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1391C9),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  S1391C10  : virtual S1391C2 {
  __tsi64 s1391c10f0;
  int s1391c10f1;
  virtual  ~S1391C10(); // _ZN8S1391C10D2Ev
  virtual void  v27(); // _ZN8S1391C103v27Ev
  virtual void  v28(); // _ZN8S1391C103v28Ev
  virtual void  v29(); // _ZN8S1391C103v29Ev
  virtual void  v30(); // _ZN8S1391C103v30Ev
  virtual void  v31(); // _ZN8S1391C103v31Ev
  virtual void  v32(); // _ZN8S1391C103v32Ev
  S1391C10(); // tgen
};
//SIG(-1 S1391C10) C1{ VBC2{ BC3{ BC4{ vd v7} vd v8 v9 v10 v11 v12 Fp FL:7} VBC5{ v13 v14 v15 v16 Fc FD[7]} vd v17 v18 v19 v20 v21 v22 Fi} vd v1 v2 v3 v4 v5 v6 FL Fi}


 S1391C10 ::~S1391C10(){ note_dtor("S1391C10", this);}
void  S1391C10 ::v27(){vfunc_called(this, "_ZN8S1391C103v27Ev");}
void  S1391C10 ::v28(){vfunc_called(this, "_ZN8S1391C103v28Ev");}
void  S1391C10 ::v29(){vfunc_called(this, "_ZN8S1391C103v29Ev");}
void  S1391C10 ::v30(){vfunc_called(this, "_ZN8S1391C103v30Ev");}
void  S1391C10 ::v31(){vfunc_called(this, "_ZN8S1391C103v31Ev");}
void  S1391C10 ::v32(){vfunc_called(this, "_ZN8S1391C103v32Ev");}
S1391C10 ::S1391C10(){ note_ctor("S1391C10", this);} // tgen

static void Test_S1391C10()
{
  extern Class_Descriptor cd_S1391C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,32)];
    init_test(&cd_S1391C10, buf);
    S1391C10 *dp, &lv = *(dp=new (buf) S1391C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,124), "sizeof(S1391C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1391C10)");
    check_base_class_offset(lv, (S1391C4*)(S1391C3*)(S1391C2*), ABISELECT(24,16), "S1391C10");
    check_base_class_offset(lv, (S1391C3*)(S1391C2*), ABISELECT(24,16), "S1391C10");
    check_base_class_offset(lv, (S1391C5*)(S1391C2*), ABISELECT(48,32), "S1391C10");
    check_base_class_offset(lv, (S1391C2*), ABISELECT(24,16), "S1391C10");
    check_field_offset(lv, s1391c10f0, ABISELECT(8,4), "S1391C10.s1391c10f0");
    check_field_offset(lv, s1391c10f1, ABISELECT(16,12), "S1391C10.s1391c10f1");
    test_class_info(&lv, &cd_S1391C10);
    dp->~S1391C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1391C10(Test_S1391C10, "S1391C10", ABISELECT(176,124));

#else // __cplusplus

extern void _ZN8S1391C10C1Ev();
extern void _ZN8S1391C10D2Ev();
Name_Map name_map_S1391C10[] = {
  NSPAIR(_ZN8S1391C10C1Ev),
  NSPAIR(_ZN8S1391C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1391C4;
extern VTBL_ENTRY _ZTI7S1391C4[];
extern  VTBL_ENTRY _ZTV7S1391C4[];
extern Class_Descriptor cd_S1391C3;
extern VTBL_ENTRY _ZTI7S1391C3[];
extern  VTBL_ENTRY _ZTV7S1391C3[];
extern Class_Descriptor cd_S1391C5;
extern VTBL_ENTRY _ZTI7S1391C5[];
extern  VTBL_ENTRY _ZTV7S1391C5[];
extern Class_Descriptor cd_S1391C2;
extern VTBL_ENTRY _ZTI7S1391C2[];
extern  VTBL_ENTRY _ZTV7S1391C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1391C2[];
static Base_Class bases_S1391C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1391C4,    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
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1391C3,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1391C5,    ABISELECT(48,32), //bcp->offset
    42, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S1391C2,    ABISELECT(24,16), //bcp->offset
    12, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1391C10[];
extern void _ZN8S1391C10D1Ev();
extern void _ZN8S1391C10D0Ev();
extern void _ZN8S1391C103v27Ev();
extern void _ZN8S1391C103v28Ev();
extern void _ZN8S1391C103v29Ev();
extern void _ZN8S1391C103v30Ev();
extern void _ZN8S1391C103v31Ev();
extern void _ZN8S1391C103v32Ev();
extern void ABISELECT(_ZTv0_n32_N8S1391C10D1Ev,_ZTv0_n16_N8S1391C10D1Ev)();
extern void ABISELECT(_ZThn24_N8S1391C10D1Ev,_ZThn16_N8S1391C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S1391C10D0Ev,_ZTv0_n16_N8S1391C10D0Ev)();
extern void ABISELECT(_ZThn24_N8S1391C10D0Ev,_ZThn16_N8S1391C10D0Ev)() __attribute__((weak));
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
static  VTBL_ENTRY vtc_S1391C10[] = {
  ABISELECT(48,32),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S1391C10[0]),
  (VTBL_ENTRY)&_ZN8S1391C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1391C10D0Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v32Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(24,16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S1391C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1391C10D1Ev,_ZTv0_n16_N8S1391C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1391C10D0Ev,_ZTv0_n16_N8S1391C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S1391C10[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
};
extern VTBL_ENTRY _ZTV8S1391C10[];
extern void _ZN7S1391C2D1Ev();
extern void _ZN7S1391C2D0Ev();
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C2__8S1391C10[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S1391C2[0]),
  (VTBL_ENTRY)&_ZN7S1391C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1391C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
};
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C5__7S1391C2__8S1391C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S1391C2[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
};
static  VTT_ENTRY vtt_S1391C10[] = {
  {&(_ZTV8S1391C10[4]),  4,52},
  {&(_ZTV8S1391C10[28]),  28,52},
  {&(_ZTV8S1391C10[48]),  48,52},
  {&(_tg__ZTV7S1391C2__8S1391C10[3]),  3,17},
  {&(_tg__ZTV7S1391C5__7S1391C2__8S1391C10[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S1391C10[];
extern  VTBL_ENTRY _ZTV8S1391C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1391C10[];
static VTBL_ENTRY alt_thunk_names72[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S1391C10D0Ev,_ZTv0_n16_N8S1391C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S1391C10D0Ev,_ZThn16_N8S1391C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S1391C10D1Ev,_ZTv0_n16_N8S1391C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S1391C10D1Ev,_ZThn16_N8S1391C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1391C10 = {  "S1391C10", // class name
  bases_S1391C10, 4,
  &(vtc_S1391C10[0]), // expected_vtbl_contents
  &(vtt_S1391C10[0]), // expected_vtt_contents
  ABISELECT(176,124), // object size
  NSPAIRA(_ZTI8S1391C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S1391C10),52, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1391C10),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names72,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1391C8  : S1391C9 , virtual S1391C2 , S1391C5 , S1391C7 , S1391C10 {
  virtual void  v33(); // _ZN7S1391C83v33Ev
  ~S1391C8(); // tgen
  S1391C8(); // tgen
};
//SIG(-1 S1391C8) C1{ BC2{ v2 v3 v4 Fl[2]} VBC3{ BC4{ BC5{ vd v5} vd v6 v7 v8 v9 v10 Fp FL:7} VBC6{ v11 v12 v13 v14 Fc FD[7]} vd v15 v16 v17 v18 v19 v20 Fi} BC6 BC7{ v21 v22 v23 v24 v25 Fp[4]} BC8{ VBC3 vd v26 v27 v28 v29 v30 v31 FL Fi} v1}


void  S1391C8 ::v33(){vfunc_called(this, "_ZN7S1391C83v33Ev");}
S1391C8 ::~S1391C8(){ note_dtor("S1391C8", this);} // tgen
S1391C8 ::S1391C8(){ note_ctor("S1391C8", this);} // tgen

static void Test_S1391C8()
{
  extern Class_Descriptor cd_S1391C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,63)];
    init_test(&cd_S1391C8, buf);
    S1391C8 *dp, &lv = *(dp=new (buf) S1391C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,248), "sizeof(S1391C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1391C8)");
    check_base_class_offset(lv, (S1391C9*), 0, "S1391C8");
    check_base_class_offset(lv, (S1391C4*)(S1391C3*)(S1391C2*), ABISELECT(224,140), "S1391C8");
    check_base_class_offset(lv, (S1391C3*)(S1391C2*), ABISELECT(224,140), "S1391C8");
    check_base_class_offset(lv, (S1391C5*)(S1391C2*), ABISELECT(256,156), "S1391C8");
    check_base_class_offset(lv, (S1391C2*), ABISELECT(224,140), "S1391C8");
    check_base_class_offset(lv, (S1391C2*)(S1391C10*), ABISELECT(224,140), "S1391C8");
    /*is_ambiguous_... S1391C8::S1391C5 */ AMB_check_base_class_offset(lv, (S1391C5*), ABISELECT(32,12), "S1391C8");
    check_base_class_offset(lv, (S1391C7*), ABISELECT(160,104), "S1391C8");
    check_base_class_offset(lv, (S1391C10*), ABISELECT(200,124), "S1391C8");
    test_class_info(&lv, &cd_S1391C8);
    dp->~S1391C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1391C8(Test_S1391C8, "S1391C8", ABISELECT(384,248));

#else // __cplusplus

extern void _ZN7S1391C8C1Ev();
extern void _ZN7S1391C8D1Ev();
Name_Map name_map_S1391C8[] = {
  NSPAIR(_ZN7S1391C8C1Ev),
  NSPAIR(_ZN7S1391C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1391C9;
extern VTBL_ENTRY _ZTI7S1391C9[];
extern  VTBL_ENTRY _ZTV7S1391C9[];
extern Class_Descriptor cd_S1391C4;
extern VTBL_ENTRY _ZTI7S1391C4[];
extern  VTBL_ENTRY _ZTV7S1391C4[];
extern Class_Descriptor cd_S1391C3;
extern VTBL_ENTRY _ZTI7S1391C3[];
extern  VTBL_ENTRY _ZTV7S1391C3[];
extern Class_Descriptor cd_S1391C5;
extern VTBL_ENTRY _ZTI7S1391C5[];
extern  VTBL_ENTRY _ZTV7S1391C5[];
extern Class_Descriptor cd_S1391C2;
extern VTBL_ENTRY _ZTI7S1391C2[];
extern  VTBL_ENTRY _ZTV7S1391C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1391C2[];
extern Class_Descriptor cd_S1391C5;
extern VTBL_ENTRY _ZTI7S1391C5[];
extern  VTBL_ENTRY _ZTV7S1391C5[];
extern Class_Descriptor cd_S1391C7;
extern VTBL_ENTRY _ZTI7S1391C7[];
extern  VTBL_ENTRY _ZTV7S1391C7[];
extern Class_Descriptor cd_S1391C10;
extern VTBL_ENTRY _ZTI8S1391C10[];
extern  VTBL_ENTRY _ZTV8S1391C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1391C10[];
static Base_Class bases_S1391C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1391C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1391C4,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1391C3,    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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1391C5,    ABISELECT(256,156), //bcp->offset
    65, //bcp->virtual_function_table_offset
    6, //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_S1391C2,    ABISELECT(224,140), //bcp->offset
    35, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1391C5,    ABISELECT(32,12), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1391C7,    ABISELECT(160,104), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1391C10,    ABISELECT(200,124), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //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 _ZTI7S1391C8[];
extern void _ZN7S1391C93v24Ev();
extern void _ZN7S1391C93v25Ev();
extern void _ZN7S1391C93v26Ev();
extern void _ZN7S1391C83v33Ev();
extern void _ZN7S1391C8D1Ev();
extern void _ZN7S1391C8D0Ev();
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
extern void _ZN7S1391C73v19Ev();
extern void _ZN7S1391C73v20Ev();
extern void _ZN7S1391C73v21Ev();
extern void _ZN7S1391C73v22Ev();
extern void _ZN7S1391C73v23Ev();
extern void ABISELECT(_ZThn200_N7S1391C8D1Ev,_ZThn124_N7S1391C8D1Ev)();
extern void ABISELECT(_ZThn200_N7S1391C8D0Ev,_ZThn124_N7S1391C8D0Ev)();
extern void _ZN8S1391C103v27Ev();
extern void _ZN8S1391C103v28Ev();
extern void _ZN8S1391C103v29Ev();
extern void _ZN8S1391C103v30Ev();
extern void _ZN8S1391C103v31Ev();
extern void _ZN8S1391C103v32Ev();
extern void ABISELECT(_ZTv0_n32_N7S1391C8D1Ev,_ZTv0_n16_N7S1391C8D1Ev)();
extern void ABISELECT(_ZThn224_N7S1391C8D1Ev,_ZThn140_N7S1391C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S1391C8D0Ev,_ZTv0_n16_N7S1391C8D0Ev)();
extern void ABISELECT(_ZThn224_N7S1391C8D0Ev,_ZThn140_N7S1391C8D0Ev)() __attribute__((weak));
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
static  VTBL_ENTRY vtc_S1391C8[] = {
  ABISELECT(256,156),
  ABISELECT(224,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S1391C8[0]),
  (VTBL_ENTRY)&_ZN7S1391C93v24Ev,
  (VTBL_ENTRY)&_ZN7S1391C93v25Ev,
  (VTBL_ENTRY)&_ZN7S1391C93v26Ev,
  (VTBL_ENTRY)&_ZN7S1391C83v33Ev,
  (VTBL_ENTRY)&_ZN7S1391C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1391C8D0Ev,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S1391C8[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI7S1391C8[0]),
  (VTBL_ENTRY)&_ZN7S1391C73v19Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v20Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v21Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v23Ev,
  ABISELECT(56,32),
  ABISELECT(24,16),
  ABISELECT(-200,-124),
  (VTBL_ENTRY)&(_ZTI7S1391C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N7S1391C8D1Ev,_ZThn124_N7S1391C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N7S1391C8D0Ev,_ZThn124_N7S1391C8D0Ev),
  (VTBL_ENTRY)&_ZN8S1391C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v32Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-140),
  ABISELECT(32,16),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI7S1391C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1391C8D1Ev,_ZTv0_n16_N7S1391C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1391C8D0Ev,_ZTv0_n16_N7S1391C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  (VTBL_ENTRY)&(_ZTI7S1391C8[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
};
extern VTBL_ENTRY _ZTV7S1391C8[];
extern void _ZN8S1391C10D1Ev();
extern void _ZN8S1391C10D0Ev();
extern void _ZN8S1391C103v27Ev();
extern void _ZN8S1391C103v28Ev();
extern void _ZN8S1391C103v29Ev();
extern void _ZN8S1391C103v30Ev();
extern void _ZN8S1391C103v31Ev();
extern void _ZN8S1391C103v32Ev();
static  VTBL_ENTRY _tg__ZTV8S1391C10__7S1391C8[] = {
  ABISELECT(56,32),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S1391C10[0]),
  (VTBL_ENTRY)&_ZN8S1391C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1391C10D0Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v32Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S1391C10D1Ev,_ZTv0_n16_N8S1391C10D1Ev)();
extern void ABISELECT(_ZThn24_N8S1391C10D1Ev,_ZThn16_N8S1391C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S1391C10D0Ev,_ZTv0_n16_N8S1391C10D0Ev)();
extern void ABISELECT(_ZThn24_N8S1391C10D0Ev,_ZThn16_N8S1391C10D0Ev)() __attribute__((weak));
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C2__8S1391C10__7S1391C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(32,16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S1391C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1391C10D1Ev,_ZTv0_n16_N8S1391C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1391C10D0Ev,_ZTv0_n16_N8S1391C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
};
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C5__8S1391C10__7S1391C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S1391C10[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
};
extern void _ZN7S1391C2D1Ev();
extern void _ZN7S1391C2D0Ev();
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C2__7S1391C8[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S1391C2[0]),
  (VTBL_ENTRY)&_ZN7S1391C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1391C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
};
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C5__7S1391C2__7S1391C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S1391C2[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
};
static  VTT_ENTRY vtt_S1391C8[] = {
  {&(_ZTV7S1391C8[4]),  4,75},
  {&(_tg__ZTV8S1391C10__7S1391C8[4]),  4,12},
  {&(_tg__ZTV7S1391C2__8S1391C10__7S1391C8[16]),  16,30},
  {&(_tg__ZTV7S1391C5__8S1391C10__7S1391C8[6]),  6,10},
  {&(_ZTV7S1391C8[51]),  51,75},
  {&(_ZTV7S1391C8[71]),  71,75},
  {&(_ZTV7S1391C8[27]),  27,75},
  {&(_tg__ZTV7S1391C2__7S1391C8[3]),  3,17},
  {&(_tg__ZTV7S1391C5__7S1391C2__7S1391C8[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S1391C8[];
extern  VTBL_ENTRY _ZTV7S1391C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1391C8[];
static VTBL_ENTRY alt_thunk_names73[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S1391C10D0Ev,_ZTv0_n16_N8S1391C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S1391C10D0Ev,_ZThn16_N8S1391C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S1391C10D1Ev,_ZTv0_n16_N8S1391C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S1391C10D1Ev,_ZThn16_N8S1391C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1391C8D0Ev,_ZTv0_n16_N7S1391C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S1391C8D0Ev,_ZThn140_N7S1391C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1391C8D1Ev,_ZTv0_n16_N7S1391C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S1391C8D1Ev,_ZThn140_N7S1391C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1391C8 = {  "S1391C8", // class name
  bases_S1391C8, 8,
  &(vtc_S1391C8[0]), // expected_vtbl_contents
  &(vtt_S1391C8[0]), // expected_vtt_contents
  ABISELECT(384,248), // object size
  NSPAIRA(_ZTI7S1391C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1391C8),75, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1391C8),9, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names73,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1391C11  {
  virtual  ~S1391C11(); // _ZN8S1391C11D1Ev
  virtual void  v34(); // _ZN8S1391C113v34Ev
  S1391C11(); // tgen
};
//SIG(-1 S1391C11) C1{ vd v1}


 S1391C11 ::~S1391C11(){ note_dtor("S1391C11", this);}
void  S1391C11 ::v34(){vfunc_called(this, "_ZN8S1391C113v34Ev");}
S1391C11 ::S1391C11(){ note_ctor("S1391C11", this);} // tgen

static void Test_S1391C11()
{
  extern Class_Descriptor cd_S1391C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1391C11, buf);
    S1391C11 *dp, &lv = *(dp=new (buf) S1391C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1391C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1391C11)");
    test_class_info(&lv, &cd_S1391C11);
    dp->~S1391C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1391C11(Test_S1391C11, "S1391C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S1391C11C1Ev();
extern void _ZN8S1391C11D1Ev();
Name_Map name_map_S1391C11[] = {
  NSPAIR(_ZN8S1391C11C1Ev),
  NSPAIR(_ZN8S1391C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1391C11[];
extern void _ZN8S1391C11D1Ev();
extern void _ZN8S1391C11D0Ev();
extern void _ZN8S1391C113v34Ev();
static  VTBL_ENTRY vtc_S1391C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1391C11[0]),
  (VTBL_ENTRY)&_ZN8S1391C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1391C11D0Ev,
  (VTBL_ENTRY)&_ZN8S1391C113v34Ev,
};
extern VTBL_ENTRY _ZTI8S1391C11[];
extern  VTBL_ENTRY _ZTV8S1391C11[];
Class_Descriptor cd_S1391C11 = {  "S1391C11", // class name
  0,0,//no base classes
  &(vtc_S1391C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S1391C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1391C11),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  S1391C6  : S1391C7 , S1391C8 , S1391C10 , S1391C11 {
  virtual  ~S1391C6(); // _ZN7S1391C6D2Ev
  virtual void  v35(); // _ZN7S1391C63v35Ev
  virtual void  v36(); // _ZN7S1391C63v36Ev
  virtual void  v37(); // _ZN7S1391C63v37Ev
  S1391C6(); // tgen
};
//SIG(-1 S1391C6) C1{ BC2{ v4 v5 v6 v7 v8 Fp[4]} BC3{ BC4{ v9 v10 v11 Fl[2]} VBC5{ BC6{ BC7{ vd v12} vd v13 v14 v15 v16 v17 Fp FL:7} VBC8{ v18 v19 v20 v21 Fc FD[7]} vd v22 v23 v24 v25 v26 v27 Fi} BC8 BC2 BC9{ VBC5 vd v28 v29 v30 v31 v32 v33 FL Fi} v34} BC9 BC10{ vd v35} vd v1 v2 v3}


 S1391C6 ::~S1391C6(){ note_dtor("S1391C6", this);}
void  S1391C6 ::v35(){vfunc_called(this, "_ZN7S1391C63v35Ev");}
void  S1391C6 ::v36(){vfunc_called(this, "_ZN7S1391C63v36Ev");}
void  S1391C6 ::v37(){vfunc_called(this, "_ZN7S1391C63v37Ev");}
S1391C6 ::S1391C6(){ note_ctor("S1391C6", this);} // tgen

static void Test_S1391C6()
{
  extern Class_Descriptor cd_S1391C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,73)];
    init_test(&cd_S1391C6, buf);
    S1391C6 *dp, &lv = *(dp=new (buf) S1391C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,288), "sizeof(S1391C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1391C6)");
    /*is_ambiguous_... S1391C6::S1391C7 */ AMB_check_base_class_offset(lv, (S1391C7*), 0, "S1391C6");
    check_base_class_offset(lv, (S1391C9*)(S1391C8*), ABISELECT(48,20), "S1391C6");
    check_base_class_offset(lv, (S1391C4*)(S1391C3*)(S1391C2*), ABISELECT(304,180), "S1391C6");
    check_base_class_offset(lv, (S1391C3*)(S1391C2*), ABISELECT(304,180), "S1391C6");
    check_base_class_offset(lv, (S1391C5*)(S1391C2*), ABISELECT(336,196), "S1391C6");
    check_base_class_offset(lv, (S1391C2*)(S1391C8*), ABISELECT(304,180), "S1391C6");
    check_base_class_offset(lv, (S1391C2*)(S1391C10*)(S1391C8*), ABISELECT(304,180), "S1391C6");
    /*is_ambiguous_... S1391C6::S1391C10 */ AMB_check_base_class_offset(lv, (S1391C2*)(S1391C10*), ABISELECT(304,180), "S1391C6");
    /*is_ambiguous_... S1391C8::S1391C5 */ AMB_check_base_class_offset(lv, (S1391C5*)(S1391C8*), ABISELECT(80,32), "S1391C6");
    check_base_class_offset(lv, (S1391C7*)(S1391C8*), ABISELECT(208,124), "S1391C6");
    check_base_class_offset(lv, (S1391C10*)(S1391C8*), ABISELECT(248,144), "S1391C6");
    check_base_class_offset(lv, (S1391C8*), ABISELECT(48,20), "S1391C6");
    /*is_ambiguous_... S1391C6::S1391C10 */ AMB_check_base_class_offset(lv, (S1391C10*), ABISELECT(272,160), "S1391C6");
    check_base_class_offset(lv, (S1391C11*), ABISELECT(296,176), "S1391C6");
    test_class_info(&lv, &cd_S1391C6);
    dp->~S1391C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1391C6(Test_S1391C6, "S1391C6", ABISELECT(464,288));

#else // __cplusplus

extern void _ZN7S1391C6C1Ev();
extern void _ZN7S1391C6D2Ev();
Name_Map name_map_S1391C6[] = {
  NSPAIR(_ZN7S1391C6C1Ev),
  NSPAIR(_ZN7S1391C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1391C7;
extern VTBL_ENTRY _ZTI7S1391C7[];
extern  VTBL_ENTRY _ZTV7S1391C7[];
extern Class_Descriptor cd_S1391C9;
extern VTBL_ENTRY _ZTI7S1391C9[];
extern  VTBL_ENTRY _ZTV7S1391C9[];
extern Class_Descriptor cd_S1391C4;
extern VTBL_ENTRY _ZTI7S1391C4[];
extern  VTBL_ENTRY _ZTV7S1391C4[];
extern Class_Descriptor cd_S1391C3;
extern VTBL_ENTRY _ZTI7S1391C3[];
extern  VTBL_ENTRY _ZTV7S1391C3[];
extern Class_Descriptor cd_S1391C5;
extern VTBL_ENTRY _ZTI7S1391C5[];
extern  VTBL_ENTRY _ZTV7S1391C5[];
extern Class_Descriptor cd_S1391C2;
extern VTBL_ENTRY _ZTI7S1391C2[];
extern  VTBL_ENTRY _ZTV7S1391C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1391C2[];
extern Class_Descriptor cd_S1391C5;
extern VTBL_ENTRY _ZTI7S1391C5[];
extern  VTBL_ENTRY _ZTV7S1391C5[];
extern Class_Descriptor cd_S1391C7;
extern VTBL_ENTRY _ZTI7S1391C7[];
extern  VTBL_ENTRY _ZTV7S1391C7[];
extern Class_Descriptor cd_S1391C10;
extern VTBL_ENTRY _ZTI8S1391C10[];
extern  VTBL_ENTRY _ZTV8S1391C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1391C10[];
extern Class_Descriptor cd_S1391C8;
extern VTBL_ENTRY _ZTI7S1391C8[];
extern  VTBL_ENTRY _ZTV7S1391C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1391C8[];
extern Class_Descriptor cd_S1391C10;
extern VTBL_ENTRY _ZTI8S1391C10[];
extern  VTBL_ENTRY _ZTV8S1391C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1391C10[];
extern Class_Descriptor cd_S1391C11;
extern VTBL_ENTRY _ZTI8S1391C11[];
extern  VTBL_ENTRY _ZTV8S1391C11[];
static Base_Class bases_S1391C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1391C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1391C9,    ABISELECT(48,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
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S1391C4,    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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1391C3,    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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1391C5,    ABISELECT(336,196), //bcp->offset
    96, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S1391C2,    ABISELECT(304,180), //bcp->offset
    66, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S1391C5,    ABISELECT(80,32), //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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S1391C7,    ABISELECT(208,124), //bcp->offset
    30, //bcp->virtual_function_table_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_S1391C10,    ABISELECT(248,144), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S1391C8,    ABISELECT(48,20), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1391C10,    ABISELECT(272,160), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1391C11,    ABISELECT(296,176), //bcp->offset
    61, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1391C6[];
extern void _ZN7S1391C73v19Ev();
extern void _ZN7S1391C73v20Ev();
extern void _ZN7S1391C73v21Ev();
extern void _ZN7S1391C73v22Ev();
extern void _ZN7S1391C73v23Ev();
extern void _ZN7S1391C6D1Ev();
extern void _ZN7S1391C6D0Ev();
extern void _ZN7S1391C63v35Ev();
extern void _ZN7S1391C63v36Ev();
extern void _ZN7S1391C63v37Ev();
extern void _ZN7S1391C93v24Ev();
extern void _ZN7S1391C93v25Ev();
extern void _ZN7S1391C93v26Ev();
extern void _ZN7S1391C83v33Ev();
extern void ABISELECT(_ZThn48_N7S1391C6D1Ev,_ZThn20_N7S1391C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S1391C6D0Ev,_ZThn20_N7S1391C6D0Ev)();
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
extern void _ZN7S1391C73v19Ev();
extern void _ZN7S1391C73v20Ev();
extern void _ZN7S1391C73v21Ev();
extern void _ZN7S1391C73v22Ev();
extern void _ZN7S1391C73v23Ev();
extern void ABISELECT(_ZThn248_N7S1391C6D1Ev,_ZThn144_N7S1391C6D1Ev)();
extern void ABISELECT(_ZThn248_N7S1391C6D0Ev,_ZThn144_N7S1391C6D0Ev)();
extern void _ZN8S1391C103v27Ev();
extern void _ZN8S1391C103v28Ev();
extern void _ZN8S1391C103v29Ev();
extern void _ZN8S1391C103v30Ev();
extern void _ZN8S1391C103v31Ev();
extern void _ZN8S1391C103v32Ev();
extern void ABISELECT(_ZThn272_N7S1391C6D1Ev,_ZThn160_N7S1391C6D1Ev)();
extern void ABISELECT(_ZThn272_N7S1391C6D0Ev,_ZThn160_N7S1391C6D0Ev)();
extern void _ZN8S1391C103v27Ev();
extern void _ZN8S1391C103v28Ev();
extern void _ZN8S1391C103v29Ev();
extern void _ZN8S1391C103v30Ev();
extern void _ZN8S1391C103v31Ev();
extern void _ZN8S1391C103v32Ev();
extern void ABISELECT(_ZThn296_N7S1391C6D1Ev,_ZThn176_N7S1391C6D1Ev)();
extern void ABISELECT(_ZThn296_N7S1391C6D0Ev,_ZThn176_N7S1391C6D0Ev)();
extern void _ZN8S1391C113v34Ev();
extern void ABISELECT(_ZTv0_n32_N7S1391C6D1Ev,_ZTv0_n16_N7S1391C6D1Ev)();
extern void ABISELECT(_ZThn304_N7S1391C6D1Ev,_ZThn180_N7S1391C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S1391C6D0Ev,_ZTv0_n16_N7S1391C6D0Ev)();
extern void ABISELECT(_ZThn304_N7S1391C6D0Ev,_ZThn180_N7S1391C6D0Ev)() __attribute__((weak));
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
static  VTBL_ENTRY vtc_S1391C6[] = {
  ABISELECT(336,196),
  ABISELECT(304,180),
  0,
  (VTBL_ENTRY)&(_ZTI7S1391C6[0]),
  (VTBL_ENTRY)&_ZN7S1391C73v19Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v20Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v21Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v23Ev,
  (VTBL_ENTRY)&_ZN7S1391C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1391C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1391C63v35Ev,
  (VTBL_ENTRY)&_ZN7S1391C63v36Ev,
  (VTBL_ENTRY)&_ZN7S1391C63v37Ev,
  ABISELECT(288,176),
  ABISELECT(256,160),
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI7S1391C6[0]),
  (VTBL_ENTRY)&_ZN7S1391C93v24Ev,
  (VTBL_ENTRY)&_ZN7S1391C93v25Ev,
  (VTBL_ENTRY)&_ZN7S1391C93v26Ev,
  (VTBL_ENTRY)&_ZN7S1391C83v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S1391C6D1Ev,_ZThn20_N7S1391C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S1391C6D0Ev,_ZThn20_N7S1391C6D0Ev),
  ABISELECT(-80,-32),
  (VTBL_ENTRY)&(_ZTI7S1391C6[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S1391C6[0]),
  (VTBL_ENTRY)&_ZN7S1391C73v19Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v20Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v21Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v23Ev,
  ABISELECT(88,52),
  ABISELECT(56,36),
  ABISELECT(-248,-144),
  (VTBL_ENTRY)&(_ZTI7S1391C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn248_N7S1391C6D1Ev,_ZThn144_N7S1391C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn248_N7S1391C6D0Ev,_ZThn144_N7S1391C6D0Ev),
  (VTBL_ENTRY)&_ZN8S1391C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v32Ev,
  ABISELECT(64,36),
  ABISELECT(32,20),
  ABISELECT(-272,-160),
  (VTBL_ENTRY)&(_ZTI7S1391C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S1391C6D1Ev,_ZThn160_N7S1391C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S1391C6D0Ev,_ZThn160_N7S1391C6D0Ev),
  (VTBL_ENTRY)&_ZN8S1391C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v32Ev,
  ABISELECT(-296,-176),
  (VTBL_ENTRY)&(_ZTI7S1391C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N7S1391C6D1Ev,_ZThn176_N7S1391C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N7S1391C6D0Ev,_ZThn176_N7S1391C6D0Ev),
  (VTBL_ENTRY)&_ZN8S1391C113v34Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-180),
  ABISELECT(32,16),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI7S1391C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1391C6D1Ev,_ZTv0_n16_N7S1391C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1391C6D0Ev,_ZTv0_n16_N7S1391C6D0Ev),
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-196),
  (VTBL_ENTRY)&(_ZTI7S1391C6[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
};
extern VTBL_ENTRY _ZTV7S1391C6[];
extern void _ZN7S1391C93v24Ev();
extern void _ZN7S1391C93v25Ev();
extern void _ZN7S1391C93v26Ev();
extern void _ZN7S1391C83v33Ev();
extern void _ZN7S1391C8D1Ev();
extern void _ZN7S1391C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C8__7S1391C6[] = {
  ABISELECT(288,176),
  ABISELECT(256,160),
  0,
  (VTBL_ENTRY)&(_ZTI7S1391C8[0]),
  (VTBL_ENTRY)&_ZN7S1391C93v24Ev,
  (VTBL_ENTRY)&_ZN7S1391C93v25Ev,
  (VTBL_ENTRY)&_ZN7S1391C93v26Ev,
  (VTBL_ENTRY)&_ZN7S1391C83v33Ev,
  (VTBL_ENTRY)&_ZN7S1391C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1391C8D0Ev,
};
extern void _ZN8S1391C10D1Ev();
extern void _ZN8S1391C10D0Ev();
extern void _ZN8S1391C103v27Ev();
extern void _ZN8S1391C103v28Ev();
extern void _ZN8S1391C103v29Ev();
extern void _ZN8S1391C103v30Ev();
extern void _ZN8S1391C103v31Ev();
extern void _ZN8S1391C103v32Ev();
static  VTBL_ENTRY _tg__ZTV8S1391C107S1391C8__7S1391C6[] = {
  ABISELECT(88,52),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S1391C10[0]),
  (VTBL_ENTRY)&_ZN8S1391C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1391C10D0Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v32Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S1391C10D1Ev,_ZTv0_n16_N8S1391C10D1Ev)();
extern void ABISELECT(_ZThn56_N8S1391C10D1Ev,_ZThn36_N8S1391C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S1391C10D0Ev,_ZTv0_n16_N8S1391C10D0Ev)();
extern void ABISELECT(_ZThn56_N8S1391C10D0Ev,_ZThn36_N8S1391C10D0Ev)() __attribute__((weak));
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C2__8S1391C107S1391C8__7S1391C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  ABISELECT(32,16),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S1391C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1391C10D1Ev,_ZTv0_n16_N8S1391C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1391C10D0Ev,_ZTv0_n16_N8S1391C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
};
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C5__8S1391C107S1391C8__7S1391C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S1391C10[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S1391C8D1Ev,_ZTv0_n16_N7S1391C8D1Ev)();
extern void ABISELECT(_ZThn256_N7S1391C8D1Ev,_ZThn160_N7S1391C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S1391C8D0Ev,_ZTv0_n16_N7S1391C8D0Ev)();
extern void ABISELECT(_ZThn256_N7S1391C8D0Ev,_ZThn160_N7S1391C8D0Ev)() __attribute__((weak));
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C2__7S1391C8__7S1391C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-160),
  ABISELECT(32,16),
  ABISELECT(-256,-160),
  (VTBL_ENTRY)&(_ZTI7S1391C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1391C8D1Ev,_ZTv0_n16_N7S1391C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1391C8D0Ev,_ZTv0_n16_N7S1391C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
};
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C5__7S1391C8__7S1391C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-288,-176),
  (VTBL_ENTRY)&(_ZTI7S1391C8[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
};
extern void ABISELECT(_ZThn200_N7S1391C8D1Ev,_ZThn124_N7S1391C8D1Ev)();
extern void ABISELECT(_ZThn200_N7S1391C8D0Ev,_ZThn124_N7S1391C8D0Ev)();
extern void _ZN8S1391C103v27Ev();
extern void _ZN8S1391C103v28Ev();
extern void _ZN8S1391C103v29Ev();
extern void _ZN8S1391C103v30Ev();
extern void _ZN8S1391C103v31Ev();
extern void _ZN8S1391C103v32Ev();
static  VTBL_ENTRY _tg__ZTV8S1391C10__7S1391C8__7S1391C6[] = {
  ABISELECT(88,52),
  ABISELECT(56,36),
  ABISELECT(-200,-124),
  (VTBL_ENTRY)&(_ZTI7S1391C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N7S1391C8D1Ev,_ZThn124_N7S1391C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N7S1391C8D0Ev,_ZThn124_N7S1391C8D0Ev),
  (VTBL_ENTRY)&_ZN8S1391C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v32Ev,
};
extern void _ZN8S1391C10D1Ev();
extern void _ZN8S1391C10D0Ev();
extern void _ZN8S1391C103v27Ev();
extern void _ZN8S1391C103v28Ev();
extern void _ZN8S1391C103v29Ev();
extern void _ZN8S1391C103v30Ev();
extern void _ZN8S1391C103v31Ev();
extern void _ZN8S1391C103v32Ev();
static  VTBL_ENTRY _tg__ZTV8S1391C10__A1__7S1391C6[] = {
  ABISELECT(64,36),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S1391C10[0]),
  (VTBL_ENTRY)&_ZN8S1391C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1391C10D0Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v32Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S1391C10D1Ev,_ZTv0_n16_N8S1391C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S1391C10D1Ev,_ZThn20_N8S1391C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S1391C10D0Ev,_ZTv0_n16_N8S1391C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S1391C10D0Ev,_ZThn20_N8S1391C10D0Ev)() __attribute__((weak));
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C2__8S1391C10__A1__7S1391C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(32,16),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S1391C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1391C10D1Ev,_ZTv0_n16_N8S1391C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1391C10D0Ev,_ZTv0_n16_N8S1391C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
};
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C5__8S1391C10__A1__7S1391C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S1391C10[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
};
extern void _ZN7S1391C2D1Ev();
extern void _ZN7S1391C2D0Ev();
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C2__7S1391C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S1391C2[0]),
  (VTBL_ENTRY)&_ZN7S1391C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1391C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
};
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C5__7S1391C2__7S1391C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S1391C2[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
};
static  VTT_ENTRY vtt_S1391C6[] = {
  {&(_ZTV7S1391C6[4]),  4,106},
  {&(_tg__ZTV7S1391C8__7S1391C6[4]),  4,10},
  {&(_tg__ZTV8S1391C107S1391C8__7S1391C6[4]),  4,12},
  {&(_tg__ZTV7S1391C2__8S1391C107S1391C8__7S1391C6[16]),  16,30},
  {&(_tg__ZTV7S1391C5__8S1391C107S1391C8__7S1391C6[6]),  6,10},
  {&(_tg__ZTV7S1391C2__7S1391C8__7S1391C6[16]),  16,30},
  {&(_tg__ZTV7S1391C5__7S1391C8__7S1391C6[6]),  6,10},
  {&(_tg__ZTV8S1391C10__7S1391C8__7S1391C6[4]),  4,12},
  {&(_tg__ZTV8S1391C10__A1__7S1391C6[4]),  4,12},
  {&(_tg__ZTV7S1391C2__8S1391C10__A1__7S1391C6[16]),  16,30},
  {&(_tg__ZTV7S1391C5__8S1391C10__A1__7S1391C6[6]),  6,10},
  {&(_ZTV7S1391C6[18]),  18,106},
  {&(_ZTV7S1391C6[82]),  82,106},
  {&(_ZTV7S1391C6[102]),  102,106},
  {&(_ZTV7S1391C6[41]),  41,106},
  {&(_ZTV7S1391C6[53]),  53,106},
  {&(_tg__ZTV7S1391C2__7S1391C6[3]),  3,17},
  {&(_tg__ZTV7S1391C5__7S1391C2__7S1391C6[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S1391C6[];
extern  VTBL_ENTRY _ZTV7S1391C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1391C6[];
static VTBL_ENTRY alt_thunk_names74[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1391C8D0Ev,_ZTv0_n16_N7S1391C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S1391C8D0Ev,_ZThn160_N7S1391C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1391C8D1Ev,_ZTv0_n16_N7S1391C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S1391C8D1Ev,_ZThn160_N7S1391C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S1391C10D0Ev,_ZTv0_n16_N8S1391C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1391C10D0Ev,_ZThn20_N8S1391C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S1391C10D0Ev,_ZThn36_N8S1391C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S1391C10D1Ev,_ZTv0_n16_N8S1391C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1391C10D1Ev,_ZThn20_N8S1391C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S1391C10D1Ev,_ZThn36_N8S1391C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1391C6D0Ev,_ZTv0_n16_N7S1391C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1391C6D0Ev,_ZThn180_N7S1391C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1391C6D1Ev,_ZTv0_n16_N7S1391C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1391C6D1Ev,_ZThn180_N7S1391C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1391C6 = {  "S1391C6", // class name
  bases_S1391C6, 12,
  &(vtc_S1391C6[0]), // expected_vtbl_contents
  &(vtt_S1391C6[0]), // expected_vtt_contents
  ABISELECT(464,288), // object size
  NSPAIRA(_ZTI7S1391C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S1391C6),106, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1391C6),18, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names74,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1391C1  : S1391C2 , virtual S1391C6 , virtual S1391C3 {
  char s1391c1f0;
  virtual void  v1(); // _ZN7S1391C12v1Ev
  virtual void  v2(); // _ZN7S1391C12v2Ev
  ~S1391C1(); // tgen
  S1391C1(); // tgen
};
//SIG(1 S1391C1) C1{ BC2{ BC3{ BC4{ vd v3} vd v4 v5 v6 v7 v8 Fp FL:7} VBC5{ v9 v10 v11 v12 Fc FD[7]} vd v13 v14 v15 v16 v17 v18 Fi} VBC6{ BC7{ v19 v20 v21 v22 v23 Fp[4]} BC8{ BC9{ v24 v25 v26 Fl[2]} VBC2 BC5 BC7 BC10{ VBC2 vd v27 v28 v29 v30 v31 v32 FL Fi} v33} BC10 BC11{ vd v34} vd v35 v36 v37} VBC3 v1 v2 Fc}


void  S1391C1 ::v1(){vfunc_called(this, "_ZN7S1391C12v1Ev");}
void  S1391C1 ::v2(){vfunc_called(this, "_ZN7S1391C12v2Ev");}
S1391C1 ::~S1391C1(){ note_dtor("S1391C1", this);} // tgen
S1391C1 ::S1391C1(){ note_ctor("S1391C1", this);} // tgen

static void Test_S1391C1()
{
  extern Class_Descriptor cd_S1391C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,81)];
    init_test(&cd_S1391C1, buf);
    S1391C1 *dp, &lv = *(dp=new (buf) S1391C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,320), "sizeof(S1391C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1391C1)");
    /*is_ambiguous_... S1391C1::S1391C2 */ AMB_check_base_class_offset(lv, (S1391C4*)(S1391C3*)(S1391C2*), 0, "S1391C1");
    /*is_ambiguous_... S1391C1::S1391C2 */ AMB_check_base_class_offset(lv, (S1391C3*)(S1391C2*), 0, "S1391C1");
    /*is_ambiguous_... S1391C1::S1391C2 */ AMB_check_base_class_offset(lv, (S1391C5*)(S1391C2*), ABISELECT(32,20), "S1391C1");
    /*is_ambiguous_... S1391C1::S1391C2 */ AMB_check_base_class_offset(lv, (S1391C5*)(S1391C2*), ABISELECT(32,20), "S1391C1");
    /*is_ambiguous_... S1391C1::S1391C2 */ AMB_check_base_class_offset(lv, (S1391C2*), 0, "S1391C1");
    /*is_ambiguous_... S1391C6::S1391C7 */ AMB_check_base_class_offset(lv, (S1391C7*)(S1391C6*), ABISELECT(160,112), "S1391C1");
    check_base_class_offset(lv, (S1391C9*)(S1391C8*)(S1391C6*), ABISELECT(208,132), "S1391C1");
    /*is_ambiguous_... S1391C1::S1391C2 */ AMB_check_base_class_offset(lv, (S1391C4*)(S1391C3*)(S1391C2*), ABISELECT(464,292), "S1391C1");
    /*is_ambiguous_... S1391C1::S1391C2 */ AMB_check_base_class_offset(lv, (S1391C3*)(S1391C2*), ABISELECT(464,292), "S1391C1");
    check_base_class_offset(lv, (S1391C2*)(S1391C8*)(S1391C6*), ABISELECT(464,292), "S1391C1");
    check_base_class_offset(lv, (S1391C2*)(S1391C10*)(S1391C8*)(S1391C6*), ABISELECT(464,292), "S1391C1");
    /*is_ambiguous_... S1391C6::S1391C10 */ AMB_check_base_class_offset(lv, (S1391C2*)(S1391C10*)(S1391C6*), ABISELECT(464,292), "S1391C1");
    /*is_ambiguous_... S1391C8::S1391C5 */ AMB_check_base_class_offset(lv, (S1391C5*)(S1391C8*)(S1391C6*), ABISELECT(240,144), "S1391C1");
    check_base_class_offset(lv, (S1391C7*)(S1391C8*)(S1391C6*), ABISELECT(368,236), "S1391C1");
    check_base_class_offset(lv, (S1391C10*)(S1391C8*)(S1391C6*), ABISELECT(408,256), "S1391C1");
    check_base_class_offset(lv, (S1391C8*)(S1391C6*), ABISELECT(208,132), "S1391C1");
    /*is_ambiguous_... S1391C6::S1391C10 */ AMB_check_base_class_offset(lv, (S1391C10*)(S1391C6*), ABISELECT(432,272), "S1391C1");
    check_base_class_offset(lv, (S1391C11*)(S1391C6*), ABISELECT(456,288), "S1391C1");
    check_base_class_offset(lv, (S1391C6*), ABISELECT(160,112), "S1391C1");
    /*is_ambiguous_... S1391C1::S1391C3 */ AMB_check_base_class_offset(lv, (S1391C4*)(S1391C3*), ABISELECT(488,308), "S1391C1");
    /*is_ambiguous_... S1391C1::S1391C3 */ AMB_check_base_class_offset(lv, (S1391C3*), ABISELECT(488,308), "S1391C1");
    check_field_offset(lv, s1391c1f0, ABISELECT(24,16), "S1391C1.s1391c1f0");
    test_class_info(&lv, &cd_S1391C1);
    dp->~S1391C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1391C1(Test_S1391C1, "S1391C1", ABISELECT(512,320));

#else // __cplusplus

extern void _ZN7S1391C1C1Ev();
extern void _ZN7S1391C1D1Ev();
Name_Map name_map_S1391C1[] = {
  NSPAIR(_ZN7S1391C1C1Ev),
  NSPAIR(_ZN7S1391C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1391C4;
extern VTBL_ENTRY _ZTI7S1391C4[];
extern  VTBL_ENTRY _ZTV7S1391C4[];
extern Class_Descriptor cd_S1391C3;
extern VTBL_ENTRY _ZTI7S1391C3[];
extern  VTBL_ENTRY _ZTV7S1391C3[];
extern Class_Descriptor cd_S1391C5;
extern VTBL_ENTRY _ZTI7S1391C5[];
extern  VTBL_ENTRY _ZTV7S1391C5[];
extern Class_Descriptor cd_S1391C2;
extern VTBL_ENTRY _ZTI7S1391C2[];
extern  VTBL_ENTRY _ZTV7S1391C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1391C2[];
extern Class_Descriptor cd_S1391C7;
extern VTBL_ENTRY _ZTI7S1391C7[];
extern  VTBL_ENTRY _ZTV7S1391C7[];
extern Class_Descriptor cd_S1391C9;
extern VTBL_ENTRY _ZTI7S1391C9[];
extern  VTBL_ENTRY _ZTV7S1391C9[];
extern Class_Descriptor cd_S1391C4;
extern VTBL_ENTRY _ZTI7S1391C4[];
extern  VTBL_ENTRY _ZTV7S1391C4[];
extern Class_Descriptor cd_S1391C3;
extern VTBL_ENTRY _ZTI7S1391C3[];
extern  VTBL_ENTRY _ZTV7S1391C3[];
extern Class_Descriptor cd_S1391C2;
extern VTBL_ENTRY _ZTI7S1391C2[];
extern  VTBL_ENTRY _ZTV7S1391C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1391C2[];
extern Class_Descriptor cd_S1391C5;
extern VTBL_ENTRY _ZTI7S1391C5[];
extern  VTBL_ENTRY _ZTV7S1391C5[];
extern Class_Descriptor cd_S1391C7;
extern VTBL_ENTRY _ZTI7S1391C7[];
extern  VTBL_ENTRY _ZTV7S1391C7[];
extern Class_Descriptor cd_S1391C10;
extern VTBL_ENTRY _ZTI8S1391C10[];
extern  VTBL_ENTRY _ZTV8S1391C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1391C10[];
extern Class_Descriptor cd_S1391C8;
extern VTBL_ENTRY _ZTI7S1391C8[];
extern  VTBL_ENTRY _ZTV7S1391C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1391C8[];
extern Class_Descriptor cd_S1391C10;
extern VTBL_ENTRY _ZTI8S1391C10[];
extern  VTBL_ENTRY _ZTV8S1391C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1391C10[];
extern Class_Descriptor cd_S1391C11;
extern VTBL_ENTRY _ZTI8S1391C11[];
extern  VTBL_ENTRY _ZTV8S1391C11[];
extern Class_Descriptor cd_S1391C6;
extern VTBL_ENTRY _ZTI7S1391C6[];
extern  VTBL_ENTRY _ZTV7S1391C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1391C6[];
extern Class_Descriptor cd_S1391C4;
extern VTBL_ENTRY _ZTI7S1391C4[];
extern  VTBL_ENTRY _ZTV7S1391C4[];
extern Class_Descriptor cd_S1391C3;
extern VTBL_ENTRY _ZTI7S1391C3[];
extern  VTBL_ENTRY _ZTV7S1391C3[];
static Base_Class bases_S1391C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1391C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S1391C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S1391C5,    ABISELECT(32,20), //bcp->offset
    22, //bcp->virtual_function_table_offset
    6, //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
    3, //immediately_derived
  0, 1},
  {&cd_S1391C2,    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
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1391C7,    ABISELECT(160,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
    15, //immediately_derived
  0, 0},
  {&cd_S1391C9,    ABISELECT(208,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
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1391C4,    ABISELECT(464,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
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1391C3,    ABISELECT(464,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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1391C2,    ABISELECT(464,292), //bcp->offset
    122, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S1391C5,    ABISELECT(240,144), //bcp->offset
    80, //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
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1391C7,    ABISELECT(368,236), //bcp->offset
    86, //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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1391C10,    ABISELECT(408,256), //bcp->offset
    93, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1391C8,    ABISELECT(208,132), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1391C10,    ABISELECT(432,272), //bcp->offset
    105, //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
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1391C11,    ABISELECT(456,288), //bcp->offset
    117, //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
    12, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1391C6,    ABISELECT(160,112), //bcp->offset
    32, //bcp->virtual_function_table_offset
    28, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1391C4,    ABISELECT(488,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S1391C3,    ABISELECT(488,308), //bcp->offset
    152, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1391C1[];
extern void _ZN7S1391C1D1Ev();
extern void _ZN7S1391C1D0Ev();
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
extern void _ZN7S1391C12v1Ev();
extern void _ZN7S1391C12v2Ev();
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
extern void _ZN7S1391C73v19Ev();
extern void _ZN7S1391C73v20Ev();
extern void _ZN7S1391C73v21Ev();
extern void _ZN7S1391C73v22Ev();
extern void _ZN7S1391C73v23Ev();
extern void ABISELECT(_ZTv0_n80_N7S1391C1D1Ev,_ZTv0_n40_N7S1391C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S1391C1D1Ev,_ZThn112_N7S1391C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S1391C1D0Ev,_ZTv0_n40_N7S1391C1D0Ev)();
extern void ABISELECT(_ZThn160_N7S1391C1D0Ev,_ZThn112_N7S1391C1D0Ev)() __attribute__((weak));
extern void _ZN7S1391C63v35Ev();
extern void _ZN7S1391C63v36Ev();
extern void _ZN7S1391C63v37Ev();
extern void _ZN7S1391C93v24Ev();
extern void _ZN7S1391C93v25Ev();
extern void _ZN7S1391C93v26Ev();
extern void _ZN7S1391C83v33Ev();
extern void ABISELECT(_ZTvn48_n80_N7S1391C1D1Ev,_ZTvn20_n40_N7S1391C1D1Ev)();
extern void ABISELECT(_ZTvn48_n80_N7S1391C1D0Ev,_ZTvn20_n40_N7S1391C1D0Ev)();
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
extern void _ZN7S1391C73v19Ev();
extern void _ZN7S1391C73v20Ev();
extern void _ZN7S1391C73v21Ev();
extern void _ZN7S1391C73v22Ev();
extern void _ZN7S1391C73v23Ev();
extern void ABISELECT(_ZTvn248_n80_N7S1391C1D1Ev,_ZTvn144_n40_N7S1391C1D1Ev)();
extern void ABISELECT(_ZTvn248_n80_N7S1391C1D0Ev,_ZTvn144_n40_N7S1391C1D0Ev)();
extern void _ZN8S1391C103v27Ev();
extern void _ZN8S1391C103v28Ev();
extern void _ZN8S1391C103v29Ev();
extern void _ZN8S1391C103v30Ev();
extern void _ZN8S1391C103v31Ev();
extern void _ZN8S1391C103v32Ev();
extern void ABISELECT(_ZTvn272_n80_N7S1391C1D1Ev,_ZTvn160_n40_N7S1391C1D1Ev)();
extern void ABISELECT(_ZTvn272_n80_N7S1391C1D0Ev,_ZTvn160_n40_N7S1391C1D0Ev)();
extern void _ZN8S1391C103v27Ev();
extern void _ZN8S1391C103v28Ev();
extern void _ZN8S1391C103v29Ev();
extern void _ZN8S1391C103v30Ev();
extern void _ZN8S1391C103v31Ev();
extern void _ZN8S1391C103v32Ev();
extern void ABISELECT(_ZTvn296_n80_N7S1391C1D1Ev,_ZTvn176_n40_N7S1391C1D1Ev)();
extern void ABISELECT(_ZTvn296_n80_N7S1391C1D0Ev,_ZTvn176_n40_N7S1391C1D0Ev)();
extern void _ZN8S1391C113v34Ev();
extern void ABISELECT(_ZTv0_n32_N7S1391C1D1Ev,_ZTv0_n16_N7S1391C1D1Ev)();
extern void ABISELECT(_ZThn464_N7S1391C1D1Ev,_ZThn292_N7S1391C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S1391C1D0Ev,_ZTv0_n16_N7S1391C1D0Ev)();
extern void ABISELECT(_ZThn464_N7S1391C1D0Ev,_ZThn292_N7S1391C1D0Ev)() __attribute__((weak));
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
extern void ABISELECT(_ZTv0_n24_N7S1391C1D1Ev,_ZTv0_n12_N7S1391C1D1Ev)();
extern void ABISELECT(_ZThn488_N7S1391C1D1Ev,_ZThn308_N7S1391C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1391C1D0Ev,_ZTv0_n12_N7S1391C1D0Ev)();
extern void ABISELECT(_ZThn488_N7S1391C1D0Ev,_ZThn308_N7S1391C1D0Ev)() __attribute__((weak));
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
static  VTBL_ENTRY vtc_S1391C1[] = {
  ABISELECT(488,308),
  ABISELECT(464,292),
  ABISELECT(160,112),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1391C1[0]),
  (VTBL_ENTRY)&_ZN7S1391C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1391C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1391C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1391C12v2Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1391C1[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
  ABISELECT(296,176),
  ABISELECT(248,144),
  ABISELECT(248,144),
  ABISELECT(248,144),
  ABISELECT(248,144),
  ABISELECT(248,144),
  ABISELECT(248,144),
  ABISELECT(80,32),
  ABISELECT(80,32),
  ABISELECT(80,32),
  ABISELECT(80,32),
  ABISELECT(48,20),
  ABISELECT(48,20),
  ABISELECT(48,20),
  ABISELECT(48,20),
  0,
  0,
  0,
  ABISELECT(-160,-112),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-92),
  ABISELECT(304,180),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI7S1391C1[0]),
  (VTBL_ENTRY)&_ZN7S1391C73v19Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v20Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v21Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v23Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S1391C1D1Ev,_ZTv0_n40_N7S1391C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S1391C1D0Ev,_ZTv0_n40_N7S1391C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1391C63v35Ev,
  (VTBL_ENTRY)&_ZN7S1391C63v36Ev,
  (VTBL_ENTRY)&_ZN7S1391C63v37Ev,
  ABISELECT(-176,-112),
  ABISELECT(256,160),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S1391C1[0]),
  (VTBL_ENTRY)&_ZN7S1391C93v24Ev,
  (VTBL_ENTRY)&_ZN7S1391C93v25Ev,
  (VTBL_ENTRY)&_ZN7S1391C93v26Ev,
  (VTBL_ENTRY)&_ZN7S1391C83v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n80_N7S1391C1D1Ev,_ZTvn20_n40_N7S1391C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n80_N7S1391C1D0Ev,_ZTvn20_n40_N7S1391C1D0Ev),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI7S1391C1[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
  ABISELECT(-368,-236),
  (VTBL_ENTRY)&(_ZTI7S1391C1[0]),
  (VTBL_ENTRY)&_ZN7S1391C73v19Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v20Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v21Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v23Ev,
  ABISELECT(-376,-236),
  ABISELECT(56,36),
  ABISELECT(-408,-256),
  (VTBL_ENTRY)&(_ZTI7S1391C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn248_n80_N7S1391C1D1Ev,_ZTvn144_n40_N7S1391C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn248_n80_N7S1391C1D0Ev,_ZTvn144_n40_N7S1391C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1391C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v32Ev,
  ABISELECT(-400,-252),
  ABISELECT(32,20),
  ABISELECT(-432,-272),
  (VTBL_ENTRY)&(_ZTI7S1391C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n80_N7S1391C1D1Ev,_ZTvn160_n40_N7S1391C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n80_N7S1391C1D0Ev,_ZTvn160_n40_N7S1391C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1391C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v32Ev,
  ABISELECT(-456,-288),
  (VTBL_ENTRY)&(_ZTI7S1391C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n80_N7S1391C1D1Ev,_ZTvn176_n40_N7S1391C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n80_N7S1391C1D0Ev,_ZTvn176_n40_N7S1391C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1391C113v34Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-464,-292),
  ABISELECT(-432,-272),
  ABISELECT(-464,-292),
  (VTBL_ENTRY)&(_ZTI7S1391C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1391C1D1Ev,_ZTv0_n16_N7S1391C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1391C1D0Ev,_ZTv0_n16_N7S1391C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-488,-308),
  ABISELECT(-488,-308),
  (VTBL_ENTRY)&(_ZTI7S1391C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1391C1D1Ev,_ZTv0_n12_N7S1391C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1391C1D0Ev,_ZTv0_n12_N7S1391C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
};
extern VTBL_ENTRY _ZTV7S1391C1[];
extern void _ZN7S1391C2D1Ev();
extern void _ZN7S1391C2D0Ev();
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C2__A__7S1391C1[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1391C2[0]),
  (VTBL_ENTRY)&_ZN7S1391C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1391C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
};
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C5__7S1391C2__A__7S1391C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1391C2[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
};
extern void _ZN7S1391C73v19Ev();
extern void _ZN7S1391C73v20Ev();
extern void _ZN7S1391C73v21Ev();
extern void _ZN7S1391C73v22Ev();
extern void _ZN7S1391C73v23Ev();
extern void _ZN7S1391C6D1Ev();
extern void _ZN7S1391C6D0Ev();
extern void _ZN7S1391C63v35Ev();
extern void _ZN7S1391C63v36Ev();
extern void _ZN7S1391C63v37Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C6__7S1391C1[] = {
  ABISELECT(-128,-92),
  ABISELECT(304,180),
  0,
  (VTBL_ENTRY)&(_ZTI7S1391C6[0]),
  (VTBL_ENTRY)&_ZN7S1391C73v19Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v20Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v21Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1391C73v23Ev,
  (VTBL_ENTRY)&_ZN7S1391C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1391C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1391C63v35Ev,
  (VTBL_ENTRY)&_ZN7S1391C63v36Ev,
  (VTBL_ENTRY)&_ZN7S1391C63v37Ev,
};
extern void _ZN7S1391C93v24Ev();
extern void _ZN7S1391C93v25Ev();
extern void _ZN7S1391C93v26Ev();
extern void _ZN7S1391C83v33Ev();
extern void _ZN7S1391C8D1Ev();
extern void _ZN7S1391C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C87S1391C6__7S1391C1[] = {
  ABISELECT(-176,-112),
  ABISELECT(256,160),
  0,
  (VTBL_ENTRY)&(_ZTI7S1391C8[0]),
  (VTBL_ENTRY)&_ZN7S1391C93v24Ev,
  (VTBL_ENTRY)&_ZN7S1391C93v25Ev,
  (VTBL_ENTRY)&_ZN7S1391C93v26Ev,
  (VTBL_ENTRY)&_ZN7S1391C83v33Ev,
  (VTBL_ENTRY)&_ZN7S1391C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1391C8D0Ev,
};
extern void _ZN8S1391C10D1Ev();
extern void _ZN8S1391C10D0Ev();
extern void _ZN8S1391C103v27Ev();
extern void _ZN8S1391C103v28Ev();
extern void _ZN8S1391C103v29Ev();
extern void _ZN8S1391C103v30Ev();
extern void _ZN8S1391C103v31Ev();
extern void _ZN8S1391C103v32Ev();
static  VTBL_ENTRY _tg__ZTV8S1391C107S1391C87S1391C6__7S1391C1[] = {
  ABISELECT(-376,-236),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S1391C10[0]),
  (VTBL_ENTRY)&_ZN8S1391C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1391C10D0Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v32Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S1391C10D1Ev,_ZTv0_n16_N8S1391C10D1Ev)();
extern void ABISELECT(_ZThn56_N8S1391C10D1Ev,_ZThn36_N8S1391C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S1391C10D0Ev,_ZTv0_n16_N8S1391C10D0Ev)();
extern void ABISELECT(_ZThn56_N8S1391C10D0Ev,_ZThn36_N8S1391C10D0Ev)() __attribute__((weak));
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C2__8S1391C107S1391C87S1391C6__7S1391C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  ABISELECT(-432,-272),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S1391C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1391C10D1Ev,_ZTv0_n16_N8S1391C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1391C10D0Ev,_ZTv0_n16_N8S1391C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
};
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C5__8S1391C107S1391C87S1391C6__7S1391C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(376,236),
  (VTBL_ENTRY)&(_ZTI8S1391C10[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S1391C8D1Ev,_ZTv0_n16_N7S1391C8D1Ev)();
extern void ABISELECT(_ZThn256_N7S1391C8D1Ev,_ZThn160_N7S1391C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S1391C8D0Ev,_ZTv0_n16_N7S1391C8D0Ev)();
extern void ABISELECT(_ZThn256_N7S1391C8D0Ev,_ZThn160_N7S1391C8D0Ev)() __attribute__((weak));
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C2__7S1391C87S1391C6__7S1391C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-160),
  ABISELECT(-432,-272),
  ABISELECT(-256,-160),
  (VTBL_ENTRY)&(_ZTI7S1391C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1391C8D1Ev,_ZTv0_n16_N7S1391C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1391C8D0Ev,_ZTv0_n16_N7S1391C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
};
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C5__7S1391C87S1391C6__7S1391C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,112),
  (VTBL_ENTRY)&(_ZTI7S1391C8[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
};
extern void ABISELECT(_ZThn200_N7S1391C8D1Ev,_ZThn124_N7S1391C8D1Ev)();
extern void ABISELECT(_ZThn200_N7S1391C8D0Ev,_ZThn124_N7S1391C8D0Ev)();
extern void _ZN8S1391C103v27Ev();
extern void _ZN8S1391C103v28Ev();
extern void _ZN8S1391C103v29Ev();
extern void _ZN8S1391C103v30Ev();
extern void _ZN8S1391C103v31Ev();
extern void _ZN8S1391C103v32Ev();
static  VTBL_ENTRY _tg__ZTV8S1391C10__7S1391C87S1391C6__7S1391C1[] = {
  ABISELECT(-376,-236),
  ABISELECT(56,36),
  ABISELECT(-200,-124),
  (VTBL_ENTRY)&(_ZTI7S1391C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N7S1391C8D1Ev,_ZThn124_N7S1391C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N7S1391C8D0Ev,_ZThn124_N7S1391C8D0Ev),
  (VTBL_ENTRY)&_ZN8S1391C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v32Ev,
};
extern void _ZN8S1391C10D1Ev();
extern void _ZN8S1391C10D0Ev();
extern void _ZN8S1391C103v27Ev();
extern void _ZN8S1391C103v28Ev();
extern void _ZN8S1391C103v29Ev();
extern void _ZN8S1391C103v30Ev();
extern void _ZN8S1391C103v31Ev();
extern void _ZN8S1391C103v32Ev();
static  VTBL_ENTRY _tg__ZTV8S1391C107S1391C6__A1__7S1391C1[] = {
  ABISELECT(-400,-252),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S1391C10[0]),
  (VTBL_ENTRY)&_ZN8S1391C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1391C10D0Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v32Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S1391C10D1Ev,_ZTv0_n16_N8S1391C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S1391C10D1Ev,_ZThn20_N8S1391C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S1391C10D0Ev,_ZTv0_n16_N8S1391C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S1391C10D0Ev,_ZThn20_N8S1391C10D0Ev)() __attribute__((weak));
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C2__8S1391C107S1391C6__A1__7S1391C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-432,-272),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S1391C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1391C10D1Ev,_ZTv0_n16_N8S1391C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S1391C10D0Ev,_ZTv0_n16_N8S1391C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
};
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C5__8S1391C107S1391C6__A1__7S1391C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(400,252),
  (VTBL_ENTRY)&(_ZTI8S1391C10[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
};
extern void _ZN7S1391C93v24Ev();
extern void _ZN7S1391C93v25Ev();
extern void _ZN7S1391C93v26Ev();
extern void _ZN7S1391C83v33Ev();
extern void ABISELECT(_ZThn48_N7S1391C6D1Ev,_ZThn20_N7S1391C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S1391C6D0Ev,_ZThn20_N7S1391C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1391C8__7S1391C6__7S1391C1[] = {
  ABISELECT(-176,-112),
  ABISELECT(256,160),
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI7S1391C6[0]),
  (VTBL_ENTRY)&_ZN7S1391C93v24Ev,
  (VTBL_ENTRY)&_ZN7S1391C93v25Ev,
  (VTBL_ENTRY)&_ZN7S1391C93v26Ev,
  (VTBL_ENTRY)&_ZN7S1391C83v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S1391C6D1Ev,_ZThn20_N7S1391C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S1391C6D0Ev,_ZThn20_N7S1391C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S1391C6D1Ev,_ZTv0_n16_N7S1391C6D1Ev)();
extern void ABISELECT(_ZThn304_N7S1391C6D1Ev,_ZThn180_N7S1391C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S1391C6D0Ev,_ZTv0_n16_N7S1391C6D0Ev)();
extern void ABISELECT(_ZThn304_N7S1391C6D0Ev,_ZThn180_N7S1391C6D0Ev)() __attribute__((weak));
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C2__7S1391C6__7S1391C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-180),
  ABISELECT(-432,-272),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI7S1391C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1391C6D1Ev,_ZTv0_n16_N7S1391C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S1391C6D0Ev,_ZTv0_n16_N7S1391C6D0Ev),
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
};
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C5__7S1391C6__7S1391C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(128,92),
  (VTBL_ENTRY)&(_ZTI7S1391C6[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
};
extern void ABISELECT(_ZThn248_N7S1391C6D1Ev,_ZThn144_N7S1391C6D1Ev)();
extern void ABISELECT(_ZThn248_N7S1391C6D0Ev,_ZThn144_N7S1391C6D0Ev)();
extern void _ZN8S1391C103v27Ev();
extern void _ZN8S1391C103v28Ev();
extern void _ZN8S1391C103v29Ev();
extern void _ZN8S1391C103v30Ev();
extern void _ZN8S1391C103v31Ev();
extern void _ZN8S1391C103v32Ev();
static  VTBL_ENTRY _tg__ZTV8S1391C107S1391C8__7S1391C6__7S1391C1[] = {
  ABISELECT(-376,-236),
  ABISELECT(56,36),
  ABISELECT(-248,-144),
  (VTBL_ENTRY)&(_ZTI7S1391C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn248_N7S1391C6D1Ev,_ZThn144_N7S1391C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn248_N7S1391C6D0Ev,_ZThn144_N7S1391C6D0Ev),
  (VTBL_ENTRY)&_ZN8S1391C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v32Ev,
};
extern void ABISELECT(_ZThn272_N7S1391C6D1Ev,_ZThn160_N7S1391C6D1Ev)();
extern void ABISELECT(_ZThn272_N7S1391C6D0Ev,_ZThn160_N7S1391C6D0Ev)();
extern void _ZN8S1391C103v27Ev();
extern void _ZN8S1391C103v28Ev();
extern void _ZN8S1391C103v29Ev();
extern void _ZN8S1391C103v30Ev();
extern void _ZN8S1391C103v31Ev();
extern void _ZN8S1391C103v32Ev();
static  VTBL_ENTRY _tg__ZTV8S1391C10__A1__7S1391C6__7S1391C1[] = {
  ABISELECT(-400,-252),
  ABISELECT(32,20),
  ABISELECT(-272,-160),
  (VTBL_ENTRY)&(_ZTI7S1391C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S1391C6D1Ev,_ZThn160_N7S1391C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S1391C6D0Ev,_ZThn160_N7S1391C6D0Ev),
  (VTBL_ENTRY)&_ZN8S1391C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v28Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v29Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v30Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v31Ev,
  (VTBL_ENTRY)&_ZN8S1391C103v32Ev,
};
extern void _ZN7S1391C2D1Ev();
extern void _ZN7S1391C2D0Ev();
extern void _ZN7S1391C42v3Ev();
extern void _ZN7S1391C32v4Ev();
extern void _ZN7S1391C32v5Ev();
extern void _ZN7S1391C32v6Ev();
extern void _ZN7S1391C32v7Ev();
extern void _ZN7S1391C32v8Ev();
extern void _ZN7S1391C23v13Ev();
extern void _ZN7S1391C23v14Ev();
extern void _ZN7S1391C23v15Ev();
extern void _ZN7S1391C23v16Ev();
extern void _ZN7S1391C23v17Ev();
extern void _ZN7S1391C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C2__A1__7S1391C1[] = {
  ABISELECT(-432,-272),
  0,
  (VTBL_ENTRY)&(_ZTI7S1391C2[0]),
  (VTBL_ENTRY)&_ZN7S1391C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1391C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1391C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1391C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1391C23v18Ev,
};
extern void _ZN7S1391C52v9Ev();
extern void _ZN7S1391C53v10Ev();
extern void _ZN7S1391C53v11Ev();
extern void _ZN7S1391C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1391C5__7S1391C2__A1__7S1391C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(432,272),
  (VTBL_ENTRY)&(_ZTI7S1391C2[0]),
  (VTBL_ENTRY)&_ZN7S1391C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1391C53v12Ev,
};
static  VTT_ENTRY vtt_S1391C1[] = {
  {&(_ZTV7S1391C1[6]),  6,169},
  {&(_tg__ZTV7S1391C2__A__7S1391C1[3]),  3,17},
  {&(_tg__ZTV7S1391C5__7S1391C2__A__7S1391C1[6]),  6,10},
  {&(_ZTV7S1391C1[28]),  28,169},
  {&(_ZTV7S1391C1[60]),  60,169},
  {&(_ZTV7S1391C1[74]),  74,169},
  {&(_ZTV7S1391C1[138]),  138,169},
  {&(_ZTV7S1391C1[82]),  82,169},
  {&(_ZTV7S1391C1[88]),  88,169},
  {&(_ZTV7S1391C1[97]),  97,169},
  {&(_ZTV7S1391C1[109]),  109,169},
  {&(_ZTV7S1391C1[119]),  119,169},
  {&(_ZTV7S1391C1[161]),  161,169},
  {&(_tg__ZTV7S1391C6__7S1391C1[4]),  4,14},
  {&(_tg__ZTV7S1391C87S1391C6__7S1391C1[4]),  4,10},
  {&(_tg__ZTV8S1391C107S1391C87S1391C6__7S1391C1[4]),  4,12},
  {&(_tg__ZTV7S1391C2__8S1391C107S1391C87S1391C6__7S1391C1[16]),  16,30},
  {&(_tg__ZTV7S1391C5__8S1391C107S1391C87S1391C6__7S1391C1[6]),  6,10},
  {&(_tg__ZTV7S1391C2__7S1391C87S1391C6__7S1391C1[16]),  16,30},
  {&(_tg__ZTV7S1391C5__7S1391C87S1391C6__7S1391C1[6]),  6,10},
  {&(_tg__ZTV8S1391C10__7S1391C87S1391C6__7S1391C1[4]),  4,12},
  {&(_tg__ZTV8S1391C107S1391C6__A1__7S1391C1[4]),  4,12},
  {&(_tg__ZTV7S1391C2__8S1391C107S1391C6__A1__7S1391C1[16]),  16,30},
  {&(_tg__ZTV7S1391C5__8S1391C107S1391C6__A1__7S1391C1[6]),  6,10},
  {&(_tg__ZTV7S1391C8__7S1391C6__7S1391C1[4]),  4,10},
  {&(_tg__ZTV7S1391C2__7S1391C6__7S1391C1[16]),  16,30},
  {&(_tg__ZTV7S1391C5__7S1391C6__7S1391C1[6]),  6,10},
  {&(_tg__ZTV8S1391C107S1391C8__7S1391C6__7S1391C1[4]),  4,12},
  {&(_tg__ZTV8S1391C10__A1__7S1391C6__7S1391C1[4]),  4,12},
  {&(_tg__ZTV7S1391C2__A1__7S1391C1[3]),  3,17},
  {&(_tg__ZTV7S1391C5__7S1391C2__A1__7S1391C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S1391C1[];
extern  VTBL_ENTRY _ZTV7S1391C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1391C1[];
static VTBL_ENTRY alt_thunk_names75[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1391C6D0Ev,_ZTv0_n16_N7S1391C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1391C6D0Ev,_ZThn180_N7S1391C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1391C6D1Ev,_ZTv0_n16_N7S1391C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1391C6D1Ev,_ZThn180_N7S1391C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1391C8D0Ev,_ZTv0_n16_N7S1391C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S1391C8D0Ev,_ZThn160_N7S1391C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1391C8D1Ev,_ZTv0_n16_N7S1391C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S1391C8D1Ev,_ZThn160_N7S1391C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S1391C10D0Ev,_ZTv0_n16_N8S1391C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1391C10D0Ev,_ZThn20_N8S1391C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S1391C10D0Ev,_ZThn36_N8S1391C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S1391C10D1Ev,_ZTv0_n16_N8S1391C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1391C10D1Ev,_ZThn20_N8S1391C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S1391C10D1Ev,_ZThn36_N8S1391C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1391C1D0Ev,_ZTv0_n12_N7S1391C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N7S1391C1D0Ev,_ZThn308_N7S1391C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1391C1D1Ev,_ZTv0_n12_N7S1391C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N7S1391C1D1Ev,_ZThn308_N7S1391C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1391C1D0Ev,_ZTv0_n16_N7S1391C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S1391C1D0Ev,_ZThn292_N7S1391C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S1391C1D1Ev,_ZTv0_n16_N7S1391C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S1391C1D1Ev,_ZThn292_N7S1391C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S1391C1D0Ev,_ZTv0_n40_N7S1391C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S1391C1D0Ev,_ZThn112_N7S1391C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S1391C1D1Ev,_ZTv0_n40_N7S1391C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S1391C1D1Ev,_ZThn112_N7S1391C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1391C1 = {  "S1391C1", // class name
  bases_S1391C1, 18,
  &(vtc_S1391C1[0]), // expected_vtbl_contents
  &(vtt_S1391C1[0]), // expected_vtt_contents
  ABISELECT(512,320), // object size
  NSPAIRA(_ZTI7S1391C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1391C1),169, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1391C1),31, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names75,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19060C4  {
  virtual  ~S19060C4(); // _ZN8S19060C4D1Ev
  virtual void  v4(); // _ZN8S19060C42v4Ev
  S19060C4(); // tgen
};
//SIG(-1 S19060C4) C1{ vd v1}


 S19060C4 ::~S19060C4(){ note_dtor("S19060C4", this);}
void  S19060C4 ::v4(){vfunc_called(this, "_ZN8S19060C42v4Ev");}
S19060C4 ::S19060C4(){ note_ctor("S19060C4", this);} // tgen

static void Test_S19060C4()
{
  extern Class_Descriptor cd_S19060C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19060C4, buf);
    S19060C4 *dp, &lv = *(dp=new (buf) S19060C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19060C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19060C4)");
    test_class_info(&lv, &cd_S19060C4);
    dp->~S19060C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19060C4(Test_S19060C4, "S19060C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19060C4C1Ev();
extern void _ZN8S19060C4D1Ev();
Name_Map name_map_S19060C4[] = {
  NSPAIR(_ZN8S19060C4C1Ev),
  NSPAIR(_ZN8S19060C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19060C4[];
extern void _ZN8S19060C4D1Ev();
extern void _ZN8S19060C4D0Ev();
extern void _ZN8S19060C42v4Ev();
static  VTBL_ENTRY vtc_S19060C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19060C4[0]),
  (VTBL_ENTRY)&_ZN8S19060C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19060C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19060C42v4Ev,
};
extern VTBL_ENTRY _ZTI8S19060C4[];
extern  VTBL_ENTRY _ZTV8S19060C4[];
Class_Descriptor cd_S19060C4 = {  "S19060C4", // class name
  0,0,//no base classes
  &(vtc_S19060C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19060C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19060C4),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  S19060C3  : S19060C4 {
  ::S19060C4 s19060c3f0;
  virtual  ~S19060C3(); // _ZN8S19060C3D1Ev
  virtual void  v5(); // _ZN8S19060C32v5Ev
  virtual void  v6(); // _ZN8S19060C32v6Ev
  S19060C3(); // tgen
};
//SIG(-1 S19060C3) C1{ BC2{ vd v3} vd v1 v2 FC2}


 S19060C3 ::~S19060C3(){ note_dtor("S19060C3", this);}
void  S19060C3 ::v5(){vfunc_called(this, "_ZN8S19060C32v5Ev");}
void  S19060C3 ::v6(){vfunc_called(this, "_ZN8S19060C32v6Ev");}
S19060C3 ::S19060C3(){ note_ctor("S19060C3", this);} // tgen

static void Test_S19060C3()
{
  extern Class_Descriptor cd_S19060C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19060C3, buf);
    S19060C3 *dp, &lv = *(dp=new (buf) S19060C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19060C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19060C3)");
    check_base_class_offset(lv, (S19060C4*), 0, "S19060C3");
    check_field_offset(lv, s19060c3f0, ABISELECT(8,4), "S19060C3.s19060c3f0");
    test_class_info(&lv, &cd_S19060C3);
    dp->~S19060C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19060C3(Test_S19060C3, "S19060C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19060C3C1Ev();
extern void _ZN8S19060C3D1Ev();
Name_Map name_map_S19060C3[] = {
  NSPAIR(_ZN8S19060C3C1Ev),
  NSPAIR(_ZN8S19060C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19060C4;
extern VTBL_ENTRY _ZTI8S19060C4[];
extern  VTBL_ENTRY _ZTV8S19060C4[];
static Base_Class bases_S19060C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19060C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S19060C3[];
extern void _ZN8S19060C3D1Ev();
extern void _ZN8S19060C3D0Ev();
extern void _ZN8S19060C42v4Ev();
extern void _ZN8S19060C32v5Ev();
extern void _ZN8S19060C32v6Ev();
static  VTBL_ENTRY vtc_S19060C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19060C3[0]),
  (VTBL_ENTRY)&_ZN8S19060C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19060C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19060C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19060C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19060C32v6Ev,
};
extern VTBL_ENTRY _ZTI8S19060C3[];
extern  VTBL_ENTRY _ZTV8S19060C3[];
Class_Descriptor cd_S19060C3 = {  "S19060C3", // class name
  bases_S19060C3, 1,
  &(vtc_S19060C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19060C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19060C3),7, //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  S19060C5  {
  void *s19060c5f0[4];
  virtual void  v7(); // _ZN8S19060C52v7Ev
  virtual void  v8(); // _ZN8S19060C52v8Ev
  virtual void  v9(); // _ZN8S19060C52v9Ev
  virtual void  v10(); // _ZN8S19060C53v10Ev
  virtual void  v11(); // _ZN8S19060C53v11Ev
  ~S19060C5(); // tgen
  S19060C5(); // tgen
};
//SIG(-1 S19060C5) C1{ v1 v2 v3 v4 v5 Fp[4]}


void  S19060C5 ::v7(){vfunc_called(this, "_ZN8S19060C52v7Ev");}
void  S19060C5 ::v8(){vfunc_called(this, "_ZN8S19060C52v8Ev");}
void  S19060C5 ::v9(){vfunc_called(this, "_ZN8S19060C52v9Ev");}
void  S19060C5 ::v10(){vfunc_called(this, "_ZN8S19060C53v10Ev");}
void  S19060C5 ::v11(){vfunc_called(this, "_ZN8S19060C53v11Ev");}
S19060C5 ::~S19060C5(){ note_dtor("S19060C5", this);} // tgen
S19060C5 ::S19060C5(){ note_ctor("S19060C5", this);} // tgen

static void Test_S19060C5()
{
  extern Class_Descriptor cd_S19060C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19060C5, buf);
    S19060C5 *dp, &lv = *(dp=new (buf) S19060C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19060C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19060C5)");
    check_field_offset(lv, s19060c5f0, ABISELECT(8,4), "S19060C5.s19060c5f0");
    test_class_info(&lv, &cd_S19060C5);
    dp->~S19060C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19060C5(Test_S19060C5, "S19060C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19060C5C1Ev();
extern void _ZN8S19060C5D1Ev();
Name_Map name_map_S19060C5[] = {
  NSPAIR(_ZN8S19060C5C1Ev),
  NSPAIR(_ZN8S19060C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19060C5[];
extern void _ZN8S19060C52v7Ev();
extern void _ZN8S19060C52v8Ev();
extern void _ZN8S19060C52v9Ev();
extern void _ZN8S19060C53v10Ev();
extern void _ZN8S19060C53v11Ev();
static  VTBL_ENTRY vtc_S19060C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19060C5[0]),
  (VTBL_ENTRY)&_ZN8S19060C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19060C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19060C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19060C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19060C53v11Ev,
};
extern VTBL_ENTRY _ZTI8S19060C5[];
extern  VTBL_ENTRY _ZTV8S19060C5[];
Class_Descriptor cd_S19060C5 = {  "S19060C5", // class name
  0,0,//no base classes
  &(vtc_S19060C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19060C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19060C5),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  S19060C7  {
  char s19060c7f0;
  long double s19060c7f1[7];
  virtual void  v12(); // _ZN8S19060C73v12Ev
  virtual void  v13(); // _ZN8S19060C73v13Ev
  virtual void  v14(); // _ZN8S19060C73v14Ev
  virtual void  v15(); // _ZN8S19060C73v15Ev
  ~S19060C7(); // tgen
  S19060C7(); // tgen
};
//SIG(-1 S19060C7) C1{ v1 v2 v3 v4 Fc FD[7]}


void  S19060C7 ::v12(){vfunc_called(this, "_ZN8S19060C73v12Ev");}
void  S19060C7 ::v13(){vfunc_called(this, "_ZN8S19060C73v13Ev");}
void  S19060C7 ::v14(){vfunc_called(this, "_ZN8S19060C73v14Ev");}
void  S19060C7 ::v15(){vfunc_called(this, "_ZN8S19060C73v15Ev");}
S19060C7 ::~S19060C7(){ note_dtor("S19060C7", this);} // tgen
S19060C7 ::S19060C7(){ note_ctor("S19060C7", this);} // tgen

static void Test_S19060C7()
{
  extern Class_Descriptor cd_S19060C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,24)];
    init_test(&cd_S19060C7, buf);
    S19060C7 *dp, &lv = *(dp=new (buf) S19060C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,92), "sizeof(S19060C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19060C7)");
    check_field_offset(lv, s19060c7f0, ABISELECT(8,4), "S19060C7.s19060c7f0");
    check_field_offset(lv, s19060c7f1, ABISELECT(16,8), "S19060C7.s19060c7f1");
    test_class_info(&lv, &cd_S19060C7);
    dp->~S19060C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19060C7(Test_S19060C7, "S19060C7", ABISELECT(128,92));

#else // __cplusplus

extern void _ZN8S19060C7C1Ev();
extern void _ZN8S19060C7D1Ev();
Name_Map name_map_S19060C7[] = {
  NSPAIR(_ZN8S19060C7C1Ev),
  NSPAIR(_ZN8S19060C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19060C7[];
extern void _ZN8S19060C73v12Ev();
extern void _ZN8S19060C73v13Ev();
extern void _ZN8S19060C73v14Ev();
extern void _ZN8S19060C73v15Ev();
static  VTBL_ENTRY vtc_S19060C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19060C7[0]),
  (VTBL_ENTRY)&_ZN8S19060C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v15Ev,
};
extern VTBL_ENTRY _ZTI8S19060C7[];
extern  VTBL_ENTRY _ZTV8S19060C7[];
Class_Descriptor cd_S19060C7 = {  "S19060C7", // class name
  0,0,//no base classes
  &(vtc_S19060C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,92), // object size
  NSPAIRA(_ZTI8S19060C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19060C7),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  S19060C8  {
  ::S19060C4 s19060c8f0;
  virtual  ~S19060C8(); // _ZN8S19060C8D1Ev
  virtual void  v16(); // _ZN8S19060C83v16Ev
  virtual void  v17(); // _ZN8S19060C83v17Ev
  virtual void  v18(); // _ZN8S19060C83v18Ev
  virtual void  v19(); // _ZN8S19060C83v19Ev
  S19060C8(); // tgen
};
//SIG(-1 S19060C8) C1{ vd v1 v2 v3 v4 FC2{ vd v5}}


 S19060C8 ::~S19060C8(){ note_dtor("S19060C8", this);}
void  S19060C8 ::v16(){vfunc_called(this, "_ZN8S19060C83v16Ev");}
void  S19060C8 ::v17(){vfunc_called(this, "_ZN8S19060C83v17Ev");}
void  S19060C8 ::v18(){vfunc_called(this, "_ZN8S19060C83v18Ev");}
void  S19060C8 ::v19(){vfunc_called(this, "_ZN8S19060C83v19Ev");}
S19060C8 ::S19060C8(){ note_ctor("S19060C8", this);} // tgen

static void Test_S19060C8()
{
  extern Class_Descriptor cd_S19060C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19060C8, buf);
    S19060C8 *dp, &lv = *(dp=new (buf) S19060C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19060C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19060C8)");
    check_field_offset(lv, s19060c8f0, ABISELECT(8,4), "S19060C8.s19060c8f0");
    test_class_info(&lv, &cd_S19060C8);
    dp->~S19060C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19060C8(Test_S19060C8, "S19060C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19060C8C1Ev();
extern void _ZN8S19060C8D1Ev();
Name_Map name_map_S19060C8[] = {
  NSPAIR(_ZN8S19060C8C1Ev),
  NSPAIR(_ZN8S19060C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19060C8[];
extern void _ZN8S19060C8D1Ev();
extern void _ZN8S19060C8D0Ev();
extern void _ZN8S19060C83v16Ev();
extern void _ZN8S19060C83v17Ev();
extern void _ZN8S19060C83v18Ev();
extern void _ZN8S19060C83v19Ev();
static  VTBL_ENTRY vtc_S19060C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19060C8[0]),
  (VTBL_ENTRY)&_ZN8S19060C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19060C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v19Ev,
};
extern VTBL_ENTRY _ZTI8S19060C8[];
extern  VTBL_ENTRY _ZTV8S19060C8[];
Class_Descriptor cd_S19060C8 = {  "S19060C8", // class name
  0,0,//no base classes
  &(vtc_S19060C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19060C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19060C8),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19060C6  : virtual S19060C7 , S19060C8 , virtual S19060C4 {
  void *s19060c6f0;
  int s19060c6f1;
  __tsi64 s19060c6f2[3];
  virtual  ~S19060C6(); // _ZN8S19060C6D2Ev
  virtual void  v20(); // _ZN8S19060C63v20Ev
  virtual void  v21(); // _ZN8S19060C63v21Ev
  virtual void  v22(); // _ZN8S19060C63v22Ev
  virtual void  v23(); // _ZN8S19060C63v23Ev
  S19060C6(); // tgen
};
//SIG(-1 S19060C6) C1{ VBC2{ v5 v6 v7 v8 Fc FD[7]} BC3{ vd v9 v10 v11 v12 FC4{ vd v13}} VBC4 vd v1 v2 v3 v4 Fp Fi FL[3]}


 S19060C6 ::~S19060C6(){ note_dtor("S19060C6", this);}
void  S19060C6 ::v20(){vfunc_called(this, "_ZN8S19060C63v20Ev");}
void  S19060C6 ::v21(){vfunc_called(this, "_ZN8S19060C63v21Ev");}
void  S19060C6 ::v22(){vfunc_called(this, "_ZN8S19060C63v22Ev");}
void  S19060C6 ::v23(){vfunc_called(this, "_ZN8S19060C63v23Ev");}
S19060C6 ::S19060C6(){ note_ctor("S19060C6", this);} // tgen

static void Test_S19060C6()
{
  extern Class_Descriptor cd_S19060C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,35)];
    init_test(&cd_S19060C6, buf);
    S19060C6 *dp, &lv = *(dp=new (buf) S19060C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,136), "sizeof(S19060C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19060C6)");
    check_base_class_offset(lv, (S19060C7*), ABISELECT(64,40), "S19060C6");
    check_base_class_offset(lv, (S19060C8*), 0, "S19060C6");
    check_base_class_offset(lv, (S19060C4*), ABISELECT(192,132), "S19060C6");
    check_field_offset(lv, s19060c6f0, ABISELECT(16,8), "S19060C6.s19060c6f0");
    check_field_offset(lv, s19060c6f1, ABISELECT(24,12), "S19060C6.s19060c6f1");
    check_field_offset(lv, s19060c6f2, ABISELECT(32,16), "S19060C6.s19060c6f2");
    test_class_info(&lv, &cd_S19060C6);
    dp->~S19060C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19060C6(Test_S19060C6, "S19060C6", ABISELECT(208,136));

#else // __cplusplus

extern void _ZN8S19060C6C1Ev();
extern void _ZN8S19060C6D2Ev();
Name_Map name_map_S19060C6[] = {
  NSPAIR(_ZN8S19060C6C1Ev),
  NSPAIR(_ZN8S19060C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19060C7;
extern VTBL_ENTRY _ZTI8S19060C7[];
extern  VTBL_ENTRY _ZTV8S19060C7[];
extern Class_Descriptor cd_S19060C8;
extern VTBL_ENTRY _ZTI8S19060C8[];
extern  VTBL_ENTRY _ZTV8S19060C8[];
extern Class_Descriptor cd_S19060C4;
extern VTBL_ENTRY _ZTI8S19060C4[];
extern  VTBL_ENTRY _ZTV8S19060C4[];
static Base_Class bases_S19060C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19060C7,    ABISELECT(64,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19060C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19060C4,    ABISELECT(192,132), //bcp->offset
    24, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19060C6[];
extern void _ZN8S19060C6D1Ev();
extern void _ZN8S19060C6D0Ev();
extern void _ZN8S19060C83v16Ev();
extern void _ZN8S19060C83v17Ev();
extern void _ZN8S19060C83v18Ev();
extern void _ZN8S19060C83v19Ev();
extern void _ZN8S19060C63v20Ev();
extern void _ZN8S19060C63v21Ev();
extern void _ZN8S19060C63v22Ev();
extern void _ZN8S19060C63v23Ev();
extern void _ZN8S19060C73v12Ev();
extern void _ZN8S19060C73v13Ev();
extern void _ZN8S19060C73v14Ev();
extern void _ZN8S19060C73v15Ev();
extern void ABISELECT(_ZTv0_n24_N8S19060C6D1Ev,_ZTv0_n12_N8S19060C6D1Ev)();
extern void ABISELECT(_ZThn192_N8S19060C6D1Ev,_ZThn132_N8S19060C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19060C6D0Ev,_ZTv0_n12_N8S19060C6D0Ev)();
extern void ABISELECT(_ZThn192_N8S19060C6D0Ev,_ZThn132_N8S19060C6D0Ev)() __attribute__((weak));
extern void _ZN8S19060C42v4Ev();
static  VTBL_ENTRY vtc_S19060C6[] = {
  ABISELECT(192,132),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19060C6[0]),
  (VTBL_ENTRY)&_ZN8S19060C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19060C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19060C6[0]),
  (VTBL_ENTRY)&_ZN8S19060C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v15Ev,
  0,
  ABISELECT(-192,-132),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI8S19060C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19060C6D1Ev,_ZTv0_n12_N8S19060C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19060C6D0Ev,_ZTv0_n12_N8S19060C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19060C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S19060C6[];
static  VTT_ENTRY vtt_S19060C6[] = {
  {&(_ZTV8S19060C6[4]),  4,31},
  {&(_ZTV8S19060C6[20]),  20,31},
  {&(_ZTV8S19060C6[28]),  28,31},
};
extern VTBL_ENTRY _ZTI8S19060C6[];
extern  VTBL_ENTRY _ZTV8S19060C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19060C6[];
static VTBL_ENTRY alt_thunk_names76[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19060C6D0Ev,_ZTv0_n12_N8S19060C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19060C6D0Ev,_ZThn132_N8S19060C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19060C6D1Ev,_ZTv0_n12_N8S19060C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19060C6D1Ev,_ZThn132_N8S19060C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19060C6 = {  "S19060C6", // class name
  bases_S19060C6, 3,
  &(vtc_S19060C6[0]), // expected_vtbl_contents
  &(vtt_S19060C6[0]), // expected_vtt_contents
  ABISELECT(208,136), // object size
  NSPAIRA(_ZTI8S19060C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19060C6),31, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19060C6),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names76,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19060C9  {
  virtual  ~S19060C9(); // _ZN8S19060C9D1Ev
  virtual void  v24(); // _ZN8S19060C93v24Ev
  S19060C9(); // tgen
};
//SIG(-1 S19060C9) C1{ vd v1}


 S19060C9 ::~S19060C9(){ note_dtor("S19060C9", this);}
void  S19060C9 ::v24(){vfunc_called(this, "_ZN8S19060C93v24Ev");}
S19060C9 ::S19060C9(){ note_ctor("S19060C9", this);} // tgen

static void Test_S19060C9()
{
  extern Class_Descriptor cd_S19060C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19060C9, buf);
    S19060C9 *dp, &lv = *(dp=new (buf) S19060C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19060C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19060C9)");
    test_class_info(&lv, &cd_S19060C9);
    dp->~S19060C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19060C9(Test_S19060C9, "S19060C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19060C9C1Ev();
extern void _ZN8S19060C9D1Ev();
Name_Map name_map_S19060C9[] = {
  NSPAIR(_ZN8S19060C9C1Ev),
  NSPAIR(_ZN8S19060C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19060C9[];
extern void _ZN8S19060C9D1Ev();
extern void _ZN8S19060C9D0Ev();
extern void _ZN8S19060C93v24Ev();
static  VTBL_ENTRY vtc_S19060C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19060C9[0]),
  (VTBL_ENTRY)&_ZN8S19060C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19060C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19060C93v24Ev,
};
extern VTBL_ENTRY _ZTI8S19060C9[];
extern  VTBL_ENTRY _ZTV8S19060C9[];
Class_Descriptor cd_S19060C9 = {  "S19060C9", // class name
  0,0,//no base classes
  &(vtc_S19060C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19060C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19060C9),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  S19060C2  : S19060C3 , virtual S19060C5 , S19060C6 , S19060C9 {
  virtual void  v25(); // _ZN8S19060C23v25Ev
  ~S19060C2(); // tgen
  S19060C2(); // tgen
};
//SIG(-1 S19060C2) C1{ BC2{ BC3{ vd v2} vd v3 v4 FC3} VBC4{ v5 v6 v7 v8 v9 Fp[4]} BC5{ VBC6{ v10 v11 v12 v13 Fc FD[7]} BC7{ vd v14 v15 v16 v17 FC3} VBC3 vd v18 v19 v20 v21 Fp Fi FL[3]} BC8{ vd v22} v1}


void  S19060C2 ::v25(){vfunc_called(this, "_ZN8S19060C23v25Ev");}
S19060C2 ::~S19060C2(){ note_dtor("S19060C2", this);} // tgen
S19060C2 ::S19060C2(){ note_ctor("S19060C2", this);} // tgen

static void Test_S19060C2()
{
  extern Class_Descriptor cd_S19060C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,43)];
    init_test(&cd_S19060C2, buf);
    S19060C2 *dp, &lv = *(dp=new (buf) S19060C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,168), "sizeof(S19060C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19060C2)");
    check_base_class_offset(lv, (S19060C4*)(S19060C3*), 0, "S19060C2");
    check_base_class_offset(lv, (S19060C3*), 0, "S19060C2");
    check_base_class_offset(lv, (S19060C5*), ABISELECT(80,52), "S19060C2");
    check_base_class_offset(lv, (S19060C7*)(S19060C6*), ABISELECT(128,72), "S19060C2");
    check_base_class_offset(lv, (S19060C8*)(S19060C6*), ABISELECT(16,8), "S19060C2");
    check_base_class_offset(lv, (S19060C4*)(S19060C6*), ABISELECT(256,164), "S19060C2");
    check_base_class_offset(lv, (S19060C6*), ABISELECT(16,8), "S19060C2");
    check_base_class_offset(lv, (S19060C9*), ABISELECT(72,48), "S19060C2");
    test_class_info(&lv, &cd_S19060C2);
    dp->~S19060C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19060C2(Test_S19060C2, "S19060C2", ABISELECT(272,168));

#else // __cplusplus

extern void _ZN8S19060C2C1Ev();
extern void _ZN8S19060C2D1Ev();
Name_Map name_map_S19060C2[] = {
  NSPAIR(_ZN8S19060C2C1Ev),
  NSPAIR(_ZN8S19060C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19060C4;
extern VTBL_ENTRY _ZTI8S19060C4[];
extern  VTBL_ENTRY _ZTV8S19060C4[];
extern Class_Descriptor cd_S19060C3;
extern VTBL_ENTRY _ZTI8S19060C3[];
extern  VTBL_ENTRY _ZTV8S19060C3[];
extern Class_Descriptor cd_S19060C5;
extern VTBL_ENTRY _ZTI8S19060C5[];
extern  VTBL_ENTRY _ZTV8S19060C5[];
extern Class_Descriptor cd_S19060C7;
extern VTBL_ENTRY _ZTI8S19060C7[];
extern  VTBL_ENTRY _ZTV8S19060C7[];
extern Class_Descriptor cd_S19060C8;
extern VTBL_ENTRY _ZTI8S19060C8[];
extern  VTBL_ENTRY _ZTV8S19060C8[];
extern Class_Descriptor cd_S19060C4;
extern VTBL_ENTRY _ZTI8S19060C4[];
extern  VTBL_ENTRY _ZTV8S19060C4[];
extern Class_Descriptor cd_S19060C6;
extern VTBL_ENTRY _ZTI8S19060C6[];
extern  VTBL_ENTRY _ZTV8S19060C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19060C6[];
extern Class_Descriptor cd_S19060C9;
extern VTBL_ENTRY _ZTI8S19060C9[];
extern  VTBL_ENTRY _ZTV8S19060C9[];
static Base_Class bases_S19060C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19060C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19060C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19060C5,    ABISELECT(80,52), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19060C7,    ABISELECT(128,72), //bcp->offset
    42, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19060C8,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19060C4,    ABISELECT(256,164), //bcp->offset
    52, //bcp->virtual_function_table_offset
    4, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19060C6,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19060C9,    ABISELECT(72,48), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19060C2[];
extern void _ZN8S19060C2D1Ev();
extern void _ZN8S19060C2D0Ev();
extern void _ZN8S19060C42v4Ev();
extern void _ZN8S19060C32v5Ev();
extern void _ZN8S19060C32v6Ev();
extern void _ZN8S19060C23v25Ev();
extern void ABISELECT(_ZThn16_N8S19060C2D1Ev,_ZThn8_N8S19060C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19060C2D0Ev,_ZThn8_N8S19060C2D0Ev)();
extern void _ZN8S19060C83v16Ev();
extern void _ZN8S19060C83v17Ev();
extern void _ZN8S19060C83v18Ev();
extern void _ZN8S19060C83v19Ev();
extern void _ZN8S19060C63v20Ev();
extern void _ZN8S19060C63v21Ev();
extern void _ZN8S19060C63v22Ev();
extern void _ZN8S19060C63v23Ev();
extern void ABISELECT(_ZThn72_N8S19060C2D1Ev,_ZThn48_N8S19060C2D1Ev)();
extern void ABISELECT(_ZThn72_N8S19060C2D0Ev,_ZThn48_N8S19060C2D0Ev)();
extern void _ZN8S19060C93v24Ev();
extern void _ZN8S19060C52v7Ev();
extern void _ZN8S19060C52v8Ev();
extern void _ZN8S19060C52v9Ev();
extern void _ZN8S19060C53v10Ev();
extern void _ZN8S19060C53v11Ev();
extern void _ZN8S19060C73v12Ev();
extern void _ZN8S19060C73v13Ev();
extern void _ZN8S19060C73v14Ev();
extern void _ZN8S19060C73v15Ev();
extern void ABISELECT(_ZTv0_n24_N8S19060C2D1Ev,_ZTv0_n12_N8S19060C2D1Ev)();
extern void ABISELECT(_ZThn256_N8S19060C2D1Ev,_ZThn164_N8S19060C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19060C2D0Ev,_ZTv0_n12_N8S19060C2D0Ev)();
extern void ABISELECT(_ZThn256_N8S19060C2D0Ev,_ZThn164_N8S19060C2D0Ev)() __attribute__((weak));
extern void _ZN8S19060C42v4Ev();
static  VTBL_ENTRY vtc_S19060C2[] = {
  ABISELECT(256,164),
  ABISELECT(128,72),
  ABISELECT(80,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19060C2[0]),
  (VTBL_ENTRY)&_ZN8S19060C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19060C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19060C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19060C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19060C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19060C23v25Ev,
  ABISELECT(240,156),
  ABISELECT(112,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19060C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19060C2D1Ev,_ZThn8_N8S19060C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19060C2D0Ev,_ZThn8_N8S19060C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19060C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v23Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19060C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N8S19060C2D1Ev,_ZThn48_N8S19060C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N8S19060C2D0Ev,_ZThn48_N8S19060C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19060C93v24Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S19060C2[0]),
  (VTBL_ENTRY)&_ZN8S19060C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19060C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19060C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19060C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19060C53v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S19060C2[0]),
  (VTBL_ENTRY)&_ZN8S19060C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v15Ev,
  0,
  ABISELECT(-256,-164),
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI8S19060C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19060C2D1Ev,_ZTv0_n12_N8S19060C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19060C2D0Ev,_ZTv0_n12_N8S19060C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19060C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S19060C2[];
extern void _ZN8S19060C6D1Ev();
extern void _ZN8S19060C6D0Ev();
extern void _ZN8S19060C83v16Ev();
extern void _ZN8S19060C83v17Ev();
extern void _ZN8S19060C83v18Ev();
extern void _ZN8S19060C83v19Ev();
extern void _ZN8S19060C63v20Ev();
extern void _ZN8S19060C63v21Ev();
extern void _ZN8S19060C63v22Ev();
extern void _ZN8S19060C63v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19060C6__8S19060C2[] = {
  ABISELECT(240,156),
  ABISELECT(112,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19060C6[0]),
  (VTBL_ENTRY)&_ZN8S19060C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19060C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v23Ev,
};
extern void _ZN8S19060C73v12Ev();
extern void _ZN8S19060C73v13Ev();
extern void _ZN8S19060C73v14Ev();
extern void _ZN8S19060C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19060C7__8S19060C6__8S19060C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S19060C6[0]),
  (VTBL_ENTRY)&_ZN8S19060C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19060C6D1Ev,_ZTv0_n12_N8S19060C6D1Ev)();
extern void ABISELECT(_ZThn240_N8S19060C6D1Ev,_ZThn156_N8S19060C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19060C6D0Ev,_ZTv0_n12_N8S19060C6D0Ev)();
extern void ABISELECT(_ZThn240_N8S19060C6D0Ev,_ZThn156_N8S19060C6D0Ev)() __attribute__((weak));
extern void _ZN8S19060C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19060C4__8S19060C6__8S19060C2[] = {
  0,
  ABISELECT(-240,-156),
  ABISELECT(-240,-156),
  (VTBL_ENTRY)&(_ZTI8S19060C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19060C6D1Ev,_ZTv0_n12_N8S19060C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19060C6D0Ev,_ZTv0_n12_N8S19060C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19060C42v4Ev,
};
static  VTT_ENTRY vtt_S19060C2[] = {
  {&(_ZTV8S19060C2[5]),  5,59},
  {&(_tg__ZTV8S19060C6__8S19060C2[4]),  4,14},
  {&(_tg__ZTV8S19060C7__8S19060C6__8S19060C2[6]),  6,10},
  {&(_tg__ZTV8S19060C4__8S19060C6__8S19060C2[4]),  4,7},
  {&(_ZTV8S19060C2[37]),  37,59},
  {&(_ZTV8S19060C2[15]),  15,59},
  {&(_ZTV8S19060C2[48]),  48,59},
  {&(_ZTV8S19060C2[56]),  56,59},
};
extern VTBL_ENTRY _ZTI8S19060C2[];
extern  VTBL_ENTRY _ZTV8S19060C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19060C2[];
static VTBL_ENTRY alt_thunk_names77[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19060C6D0Ev,_ZTv0_n12_N8S19060C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19060C6D0Ev,_ZThn156_N8S19060C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19060C6D1Ev,_ZTv0_n12_N8S19060C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19060C6D1Ev,_ZThn156_N8S19060C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19060C2D0Ev,_ZTv0_n12_N8S19060C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19060C2D0Ev,_ZThn164_N8S19060C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19060C2D1Ev,_ZTv0_n12_N8S19060C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19060C2D1Ev,_ZThn164_N8S19060C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19060C2 = {  "S19060C2", // class name
  bases_S19060C2, 8,
  &(vtc_S19060C2[0]), // expected_vtbl_contents
  &(vtt_S19060C2[0]), // expected_vtt_contents
  ABISELECT(272,168), // object size
  NSPAIRA(_ZTI8S19060C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19060C2),59, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19060C2),8, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names77,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19060C11  : S19060C4 {
  void *s19060c11f0;
  __tsi64 s19060c11f1:7;
  virtual  ~S19060C11(); // _ZN9S19060C11D1Ev
  virtual void  v26(); // _ZN9S19060C113v26Ev
  virtual void  v27(); // _ZN9S19060C113v27Ev
  virtual void  v28(); // _ZN9S19060C113v28Ev
  virtual void  v29(); // _ZN9S19060C113v29Ev
  virtual void  v30(); // _ZN9S19060C113v30Ev
  S19060C11(); // tgen
};
//SIG(-1 S19060C11) C1{ BC2{ vd v6} vd v1 v2 v3 v4 v5 Fp FL:7}


 S19060C11 ::~S19060C11(){ note_dtor("S19060C11", this);}
void  S19060C11 ::v26(){vfunc_called(this, "_ZN9S19060C113v26Ev");}
void  S19060C11 ::v27(){vfunc_called(this, "_ZN9S19060C113v27Ev");}
void  S19060C11 ::v28(){vfunc_called(this, "_ZN9S19060C113v28Ev");}
void  S19060C11 ::v29(){vfunc_called(this, "_ZN9S19060C113v29Ev");}
void  S19060C11 ::v30(){vfunc_called(this, "_ZN9S19060C113v30Ev");}
S19060C11 ::S19060C11(){ note_ctor("S19060C11", this);} // tgen

static void Test_S19060C11()
{
  extern Class_Descriptor cd_S19060C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S19060C11, buf);
    S19060C11 *dp, &lv = *(dp=new (buf) S19060C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19060C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19060C11)");
    check_base_class_offset(lv, (S19060C4*), 0, "S19060C11");
    check_field_offset(lv, s19060c11f0, ABISELECT(8,4), "S19060C11.s19060c11f0");
    set_bf_and_test(lv, s19060c11f1, ABISELECT(16,8), 0, 7, 1, "S19060C11");
    set_bf_and_test(lv, s19060c11f1, ABISELECT(16,8), 0, 7, hide_sll(1LL<<6), "S19060C11");
    test_class_info(&lv, &cd_S19060C11);
    dp->~S19060C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19060C11(Test_S19060C11, "S19060C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S19060C11C1Ev();
extern void _ZN9S19060C11D1Ev();
Name_Map name_map_S19060C11[] = {
  NSPAIR(_ZN9S19060C11C1Ev),
  NSPAIR(_ZN9S19060C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19060C4;
extern VTBL_ENTRY _ZTI8S19060C4[];
extern  VTBL_ENTRY _ZTV8S19060C4[];
static Base_Class bases_S19060C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19060C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI9S19060C11[];
extern void _ZN9S19060C11D1Ev();
extern void _ZN9S19060C11D0Ev();
extern void _ZN8S19060C42v4Ev();
extern void _ZN9S19060C113v26Ev();
extern void _ZN9S19060C113v27Ev();
extern void _ZN9S19060C113v28Ev();
extern void _ZN9S19060C113v29Ev();
extern void _ZN9S19060C113v30Ev();
static  VTBL_ENTRY vtc_S19060C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19060C11[0]),
  (VTBL_ENTRY)&_ZN9S19060C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19060C11D0Ev,
  (VTBL_ENTRY)&_ZN8S19060C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v30Ev,
};
extern VTBL_ENTRY _ZTI9S19060C11[];
extern  VTBL_ENTRY _ZTV9S19060C11[];
Class_Descriptor cd_S19060C11 = {  "S19060C11", // class name
  bases_S19060C11, 1,
  &(vtc_S19060C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S19060C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19060C11),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19060C10  : S19060C11 , virtual S19060C7 {
  int s19060c10f0;
  virtual  ~S19060C10(); // _ZN9S19060C10D2Ev
  virtual void  v31(); // _ZN9S19060C103v31Ev
  virtual void  v32(); // _ZN9S19060C103v32Ev
  virtual void  v33(); // _ZN9S19060C103v33Ev
  virtual void  v34(); // _ZN9S19060C103v34Ev
  virtual void  v35(); // _ZN9S19060C103v35Ev
  virtual void  v36(); // _ZN9S19060C103v36Ev
  S19060C10(); // tgen
};
//SIG(-1 S19060C10) C1{ BC2{ BC3{ vd v7} vd v8 v9 v10 v11 v12 Fp FL:7} VBC4{ v13 v14 v15 v16 Fc FD[7]} vd v1 v2 v3 v4 v5 v6 Fi}


 S19060C10 ::~S19060C10(){ note_dtor("S19060C10", this);}
void  S19060C10 ::v31(){vfunc_called(this, "_ZN9S19060C103v31Ev");}
void  S19060C10 ::v32(){vfunc_called(this, "_ZN9S19060C103v32Ev");}
void  S19060C10 ::v33(){vfunc_called(this, "_ZN9S19060C103v33Ev");}
void  S19060C10 ::v34(){vfunc_called(this, "_ZN9S19060C103v34Ev");}
void  S19060C10 ::v35(){vfunc_called(this, "_ZN9S19060C103v35Ev");}
void  S19060C10 ::v36(){vfunc_called(this, "_ZN9S19060C103v36Ev");}
S19060C10 ::S19060C10(){ note_ctor("S19060C10", this);} // tgen

static void Test_S19060C10()
{
  extern Class_Descriptor cd_S19060C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S19060C10, buf);
    S19060C10 *dp, &lv = *(dp=new (buf) S19060C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S19060C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19060C10)");
    check_base_class_offset(lv, (S19060C4*)(S19060C11*), 0, "S19060C10");
    check_base_class_offset(lv, (S19060C11*), 0, "S19060C10");
    check_base_class_offset(lv, (S19060C7*), ABISELECT(32,16), "S19060C10");
    check_field_offset(lv, s19060c10f0, ABISELECT(20,12), "S19060C10.s19060c10f0");
    test_class_info(&lv, &cd_S19060C10);
    dp->~S19060C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19060C10(Test_S19060C10, "S19060C10", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN9S19060C10C1Ev();
extern void _ZN9S19060C10D2Ev();
Name_Map name_map_S19060C10[] = {
  NSPAIR(_ZN9S19060C10C1Ev),
  NSPAIR(_ZN9S19060C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19060C4;
extern VTBL_ENTRY _ZTI8S19060C4[];
extern  VTBL_ENTRY _ZTV8S19060C4[];
extern Class_Descriptor cd_S19060C11;
extern VTBL_ENTRY _ZTI9S19060C11[];
extern  VTBL_ENTRY _ZTV9S19060C11[];
extern Class_Descriptor cd_S19060C7;
extern VTBL_ENTRY _ZTI8S19060C7[];
extern  VTBL_ENTRY _ZTV8S19060C7[];
static Base_Class bases_S19060C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19060C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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
  0, 0},
  {&cd_S19060C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19060C7,    ABISELECT(32,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19060C10[];
extern void _ZN9S19060C10D1Ev();
extern void _ZN9S19060C10D0Ev();
extern void _ZN8S19060C42v4Ev();
extern void _ZN9S19060C113v26Ev();
extern void _ZN9S19060C113v27Ev();
extern void _ZN9S19060C113v28Ev();
extern void _ZN9S19060C113v29Ev();
extern void _ZN9S19060C113v30Ev();
extern void _ZN9S19060C103v31Ev();
extern void _ZN9S19060C103v32Ev();
extern void _ZN9S19060C103v33Ev();
extern void _ZN9S19060C103v34Ev();
extern void _ZN9S19060C103v35Ev();
extern void _ZN9S19060C103v36Ev();
extern void _ZN8S19060C73v12Ev();
extern void _ZN8S19060C73v13Ev();
extern void _ZN8S19060C73v14Ev();
extern void _ZN8S19060C73v15Ev();
static  VTBL_ENTRY vtc_S19060C10[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19060C10[0]),
  (VTBL_ENTRY)&_ZN9S19060C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19060C10D0Ev,
  (VTBL_ENTRY)&_ZN8S19060C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19060C103v31Ev,
  (VTBL_ENTRY)&_ZN9S19060C103v32Ev,
  (VTBL_ENTRY)&_ZN9S19060C103v33Ev,
  (VTBL_ENTRY)&_ZN9S19060C103v34Ev,
  (VTBL_ENTRY)&_ZN9S19060C103v35Ev,
  (VTBL_ENTRY)&_ZN9S19060C103v36Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19060C10[0]),
  (VTBL_ENTRY)&_ZN8S19060C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v15Ev,
};
extern VTBL_ENTRY _ZTV9S19060C10[];
static  VTT_ENTRY vtt_S19060C10[] = {
  {&(_ZTV9S19060C10[3]),  3,27},
  {&(_ZTV9S19060C10[23]),  23,27},
};
extern VTBL_ENTRY _ZTI9S19060C10[];
extern  VTBL_ENTRY _ZTV9S19060C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19060C10[];
Class_Descriptor cd_S19060C10 = {  "S19060C10", // class name
  bases_S19060C10, 3,
  &(vtc_S19060C10[0]), // expected_vtbl_contents
  &(vtt_S19060C10[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI9S19060C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19060C10),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19060C10),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19060C1  : virtual S19060C2 , S19060C10 {
  long double s19060c1f0;
  virtual  ~S19060C1(); // _ZN8S19060C1D2Ev
  virtual void  v1(); // _ZN8S19060C12v1Ev
  virtual void  v2(); // _ZN8S19060C12v2Ev
  virtual void  v3(); // _ZN8S19060C12v3Ev
  S19060C1(); // tgen
};
//SIG(1 S19060C1) C1{ VBC2{ BC3{ BC4{ vd v4} vd v5 v6 FC4} VBC5{ v7 v8 v9 v10 v11 Fp[4]} BC6{ VBC7{ v12 v13 v14 v15 Fc FD[7]} BC8{ vd v16 v17 v18 v19 FC4} VBC4 vd v20 v21 v22 v23 Fp Fi FL[3]} BC9{ vd v24} v25} BC10{ BC11{ BC4 vd v26 v27 v28 v29 v30 Fp FL:7} VBC7 vd v31 v32 v33 v34 v35 v36 Fi} vd v1 v2 v3 FD}


 S19060C1 ::~S19060C1(){ note_dtor("S19060C1", this);}
void  S19060C1 ::v1(){vfunc_called(this, "_ZN8S19060C12v1Ev");}
void  S19060C1 ::v2(){vfunc_called(this, "_ZN8S19060C12v2Ev");}
void  S19060C1 ::v3(){vfunc_called(this, "_ZN8S19060C12v3Ev");}
S19060C1 ::S19060C1(){ note_ctor("S19060C1", this);} // tgen

static void Test_S19060C1()
{
  extern Class_Descriptor cd_S19060C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,50)];
    init_test(&cd_S19060C1, buf);
    S19060C1 *dp, &lv = *(dp=new (buf) S19060C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,196), "sizeof(S19060C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19060C1)");
    check_base_class_offset(lv, (S19060C4*)(S19060C3*)(S19060C2*), ABISELECT(48,28), "S19060C1");
    check_base_class_offset(lv, (S19060C3*)(S19060C2*), ABISELECT(48,28), "S19060C1");
    check_base_class_offset(lv, (S19060C5*)(S19060C2*), ABISELECT(128,80), "S19060C1");
    check_base_class_offset(lv, (S19060C7*)(S19060C6*)(S19060C2*), ABISELECT(176,100), "S19060C1");
    check_base_class_offset(lv, (S19060C7*)(S19060C10*), ABISELECT(176,100), "S19060C1");
    check_base_class_offset(lv, (S19060C8*)(S19060C6*)(S19060C2*), ABISELECT(64,36), "S19060C1");
    check_base_class_offset(lv, (S19060C4*)(S19060C6*)(S19060C2*), ABISELECT(304,192), "S19060C1");
    check_base_class_offset(lv, (S19060C6*)(S19060C2*), ABISELECT(64,36), "S19060C1");
    check_base_class_offset(lv, (S19060C9*)(S19060C2*), ABISELECT(120,76), "S19060C1");
    check_base_class_offset(lv, (S19060C2*), ABISELECT(48,28), "S19060C1");
    check_base_class_offset(lv, (S19060C4*)(S19060C11*)(S19060C10*), 0, "S19060C1");
    check_base_class_offset(lv, (S19060C11*)(S19060C10*), 0, "S19060C1");
    check_base_class_offset(lv, (S19060C10*), 0, "S19060C1");
    check_field_offset(lv, s19060c1f0, ABISELECT(32,16), "S19060C1.s19060c1f0");
    test_class_info(&lv, &cd_S19060C1);
    dp->~S19060C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19060C1(Test_S19060C1, "S19060C1", ABISELECT(320,196));

#else // __cplusplus

extern void _ZN8S19060C1C1Ev();
extern void _ZN8S19060C1D2Ev();
Name_Map name_map_S19060C1[] = {
  NSPAIR(_ZN8S19060C1C1Ev),
  NSPAIR(_ZN8S19060C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19060C4;
extern VTBL_ENTRY _ZTI8S19060C4[];
extern  VTBL_ENTRY _ZTV8S19060C4[];
extern Class_Descriptor cd_S19060C3;
extern VTBL_ENTRY _ZTI8S19060C3[];
extern  VTBL_ENTRY _ZTV8S19060C3[];
extern Class_Descriptor cd_S19060C5;
extern VTBL_ENTRY _ZTI8S19060C5[];
extern  VTBL_ENTRY _ZTV8S19060C5[];
extern Class_Descriptor cd_S19060C7;
extern VTBL_ENTRY _ZTI8S19060C7[];
extern  VTBL_ENTRY _ZTV8S19060C7[];
extern Class_Descriptor cd_S19060C8;
extern VTBL_ENTRY _ZTI8S19060C8[];
extern  VTBL_ENTRY _ZTV8S19060C8[];
extern Class_Descriptor cd_S19060C4;
extern VTBL_ENTRY _ZTI8S19060C4[];
extern  VTBL_ENTRY _ZTV8S19060C4[];
extern Class_Descriptor cd_S19060C6;
extern VTBL_ENTRY _ZTI8S19060C6[];
extern  VTBL_ENTRY _ZTV8S19060C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19060C6[];
extern Class_Descriptor cd_S19060C9;
extern VTBL_ENTRY _ZTI8S19060C9[];
extern  VTBL_ENTRY _ZTV8S19060C9[];
extern Class_Descriptor cd_S19060C2;
extern VTBL_ENTRY _ZTI8S19060C2[];
extern  VTBL_ENTRY _ZTV8S19060C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19060C2[];
extern Class_Descriptor cd_S19060C4;
extern VTBL_ENTRY _ZTI8S19060C4[];
extern  VTBL_ENTRY _ZTV8S19060C4[];
extern Class_Descriptor cd_S19060C11;
extern VTBL_ENTRY _ZTI9S19060C11[];
extern  VTBL_ENTRY _ZTV9S19060C11[];
extern Class_Descriptor cd_S19060C10;
extern VTBL_ENTRY _ZTI9S19060C10[];
extern  VTBL_ENTRY _ZTV9S19060C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19060C10[];
static Base_Class bases_S19060C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19060C4,    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
    4, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19060C3,    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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19060C5,    ABISELECT(128,80), //bcp->offset
    67, //bcp->virtual_function_table_offset
    7, //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
    8, //immediately_derived
  0, 1},
  {&cd_S19060C7,    ABISELECT(176,100), //bcp->offset
    79, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19060C8,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19060C4,    ABISELECT(304,192), //bcp->offset
    89, //bcp->virtual_function_table_offset
    4, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19060C6,    ABISELECT(64,36), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19060C9,    ABISELECT(120,76), //bcp->offset
    62, //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
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19060C2,    ABISELECT(48,28), //bcp->offset
    23, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19060C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19060C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19060C10,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19060C1[];
extern void _ZN8S19060C1D1Ev();
extern void _ZN8S19060C1D0Ev();
extern void _ZN8S19060C42v4Ev();
extern void _ZN9S19060C113v26Ev();
extern void _ZN9S19060C113v27Ev();
extern void _ZN9S19060C113v28Ev();
extern void _ZN9S19060C113v29Ev();
extern void _ZN9S19060C113v30Ev();
extern void _ZN9S19060C103v31Ev();
extern void _ZN9S19060C103v32Ev();
extern void _ZN9S19060C103v33Ev();
extern void _ZN9S19060C103v34Ev();
extern void _ZN9S19060C103v35Ev();
extern void _ZN9S19060C103v36Ev();
extern void _ZN8S19060C12v1Ev();
extern void _ZN8S19060C12v2Ev();
extern void _ZN8S19060C12v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19060C1D1Ev,_ZTv0_n24_N8S19060C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S19060C1D1Ev,_ZThn28_N8S19060C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19060C1D0Ev,_ZTv0_n24_N8S19060C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S19060C1D0Ev,_ZThn28_N8S19060C1D0Ev)() __attribute__((weak));
extern void _ZN8S19060C42v4Ev();
extern void _ZN8S19060C32v5Ev();
extern void _ZN8S19060C32v6Ev();
extern void _ZN8S19060C23v25Ev();
extern void ABISELECT(_ZTvn16_n48_N8S19060C1D1Ev,_ZTvn8_n24_N8S19060C1D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S19060C1D0Ev,_ZTvn8_n24_N8S19060C1D0Ev)();
extern void _ZN8S19060C83v16Ev();
extern void _ZN8S19060C83v17Ev();
extern void _ZN8S19060C83v18Ev();
extern void _ZN8S19060C83v19Ev();
extern void _ZN8S19060C63v20Ev();
extern void _ZN8S19060C63v21Ev();
extern void _ZN8S19060C63v22Ev();
extern void _ZN8S19060C63v23Ev();
extern void ABISELECT(_ZTvn72_n48_N8S19060C1D1Ev,_ZTvn48_n24_N8S19060C1D1Ev)();
extern void ABISELECT(_ZTvn72_n48_N8S19060C1D0Ev,_ZTvn48_n24_N8S19060C1D0Ev)();
extern void _ZN8S19060C93v24Ev();
extern void _ZN8S19060C52v7Ev();
extern void _ZN8S19060C52v8Ev();
extern void _ZN8S19060C52v9Ev();
extern void _ZN8S19060C53v10Ev();
extern void _ZN8S19060C53v11Ev();
extern void _ZN8S19060C73v12Ev();
extern void _ZN8S19060C73v13Ev();
extern void _ZN8S19060C73v14Ev();
extern void _ZN8S19060C73v15Ev();
extern void ABISELECT(_ZTv0_n24_N8S19060C1D1Ev,_ZTv0_n12_N8S19060C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S19060C1D1Ev,_ZThn192_N8S19060C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19060C1D0Ev,_ZTv0_n12_N8S19060C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S19060C1D0Ev,_ZThn192_N8S19060C1D0Ev)() __attribute__((weak));
extern void _ZN8S19060C42v4Ev();
static  VTBL_ENTRY vtc_S19060C1[] = {
  ABISELECT(304,192),
  ABISELECT(128,80),
  ABISELECT(48,28),
  ABISELECT(176,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19060C1[0]),
  (VTBL_ENTRY)&_ZN8S19060C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19060C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19060C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19060C103v31Ev,
  (VTBL_ENTRY)&_ZN9S19060C103v32Ev,
  (VTBL_ENTRY)&_ZN9S19060C103v33Ev,
  (VTBL_ENTRY)&_ZN9S19060C103v34Ev,
  (VTBL_ENTRY)&_ZN9S19060C103v35Ev,
  (VTBL_ENTRY)&_ZN9S19060C103v36Ev,
  (VTBL_ENTRY)&_ZN8S19060C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19060C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19060C12v3Ev,
  ABISELECT(72,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(256,164),
  ABISELECT(128,72),
  ABISELECT(80,52),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19060C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19060C1D1Ev,_ZTv0_n24_N8S19060C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19060C1D0Ev,_ZTv0_n24_N8S19060C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19060C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19060C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19060C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19060C23v25Ev,
  ABISELECT(240,156),
  ABISELECT(112,64),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19060C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19060C1D1Ev,_ZTvn8_n24_N8S19060C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19060C1D0Ev,_ZTvn8_n24_N8S19060C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19060C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v23Ev,
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S19060C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn72_n48_N8S19060C1D1Ev,_ZTvn48_n24_N8S19060C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn72_n48_N8S19060C1D0Ev,_ZTvn48_n24_N8S19060C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19060C93v24Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S19060C1[0]),
  (VTBL_ENTRY)&_ZN8S19060C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19060C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19060C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19060C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19060C53v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19060C1[0]),
  (VTBL_ENTRY)&_ZN8S19060C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v15Ev,
  0,
  ABISELECT(-304,-192),
  ABISELECT(-304,-192),
  (VTBL_ENTRY)&(_ZTI8S19060C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19060C1D1Ev,_ZTv0_n12_N8S19060C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19060C1D0Ev,_ZTv0_n12_N8S19060C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19060C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S19060C1[];
extern void _ZN9S19060C10D1Ev();
extern void _ZN9S19060C10D0Ev();
extern void _ZN8S19060C42v4Ev();
extern void _ZN9S19060C113v26Ev();
extern void _ZN9S19060C113v27Ev();
extern void _ZN9S19060C113v28Ev();
extern void _ZN9S19060C113v29Ev();
extern void _ZN9S19060C113v30Ev();
extern void _ZN9S19060C103v31Ev();
extern void _ZN9S19060C103v32Ev();
extern void _ZN9S19060C103v33Ev();
extern void _ZN9S19060C103v34Ev();
extern void _ZN9S19060C103v35Ev();
extern void _ZN9S19060C103v36Ev();
static  VTBL_ENTRY _tg__ZTV9S19060C10__8S19060C1[] = {
  ABISELECT(176,100),
  0,
  (VTBL_ENTRY)&(_ZTI9S19060C10[0]),
  (VTBL_ENTRY)&_ZN9S19060C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19060C10D0Ev,
  (VTBL_ENTRY)&_ZN8S19060C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v26Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v27Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v28Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v29Ev,
  (VTBL_ENTRY)&_ZN9S19060C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19060C103v31Ev,
  (VTBL_ENTRY)&_ZN9S19060C103v32Ev,
  (VTBL_ENTRY)&_ZN9S19060C103v33Ev,
  (VTBL_ENTRY)&_ZN9S19060C103v34Ev,
  (VTBL_ENTRY)&_ZN9S19060C103v35Ev,
  (VTBL_ENTRY)&_ZN9S19060C103v36Ev,
};
extern void _ZN8S19060C73v12Ev();
extern void _ZN8S19060C73v13Ev();
extern void _ZN8S19060C73v14Ev();
extern void _ZN8S19060C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19060C7__9S19060C10__8S19060C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI9S19060C10[0]),
  (VTBL_ENTRY)&_ZN8S19060C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v15Ev,
};
extern void _ZN8S19060C2D1Ev();
extern void _ZN8S19060C2D0Ev();
extern void _ZN8S19060C42v4Ev();
extern void _ZN8S19060C32v5Ev();
extern void _ZN8S19060C32v6Ev();
extern void _ZN8S19060C23v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19060C2__8S19060C1[] = {
  ABISELECT(256,164),
  ABISELECT(128,72),
  ABISELECT(80,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19060C2[0]),
  (VTBL_ENTRY)&_ZN8S19060C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19060C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19060C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19060C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19060C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19060C23v25Ev,
};
extern void _ZN8S19060C6D1Ev();
extern void _ZN8S19060C6D0Ev();
extern void _ZN8S19060C83v16Ev();
extern void _ZN8S19060C83v17Ev();
extern void _ZN8S19060C83v18Ev();
extern void _ZN8S19060C83v19Ev();
extern void _ZN8S19060C63v20Ev();
extern void _ZN8S19060C63v21Ev();
extern void _ZN8S19060C63v22Ev();
extern void _ZN8S19060C63v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19060C68S19060C2__8S19060C1[] = {
  ABISELECT(240,156),
  ABISELECT(112,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19060C6[0]),
  (VTBL_ENTRY)&_ZN8S19060C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19060C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v23Ev,
};
extern void _ZN8S19060C73v12Ev();
extern void _ZN8S19060C73v13Ev();
extern void _ZN8S19060C73v14Ev();
extern void _ZN8S19060C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19060C7__8S19060C68S19060C2__8S19060C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S19060C6[0]),
  (VTBL_ENTRY)&_ZN8S19060C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19060C6D1Ev,_ZTv0_n12_N8S19060C6D1Ev)();
extern void ABISELECT(_ZThn240_N8S19060C6D1Ev,_ZThn156_N8S19060C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19060C6D0Ev,_ZTv0_n12_N8S19060C6D0Ev)();
extern void ABISELECT(_ZThn240_N8S19060C6D0Ev,_ZThn156_N8S19060C6D0Ev)() __attribute__((weak));
extern void _ZN8S19060C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19060C4__8S19060C68S19060C2__8S19060C1[] = {
  0,
  ABISELECT(-240,-156),
  ABISELECT(-240,-156),
  (VTBL_ENTRY)&(_ZTI8S19060C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19060C6D1Ev,_ZTv0_n12_N8S19060C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19060C6D0Ev,_ZTv0_n12_N8S19060C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19060C42v4Ev,
};
extern void _ZN8S19060C52v7Ev();
extern void _ZN8S19060C52v8Ev();
extern void _ZN8S19060C52v9Ev();
extern void _ZN8S19060C53v10Ev();
extern void _ZN8S19060C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19060C5__8S19060C2__8S19060C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S19060C2[0]),
  (VTBL_ENTRY)&_ZN8S19060C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19060C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19060C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19060C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19060C53v11Ev,
};
extern void ABISELECT(_ZThn16_N8S19060C2D1Ev,_ZThn8_N8S19060C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19060C2D0Ev,_ZThn8_N8S19060C2D0Ev)();
extern void _ZN8S19060C83v16Ev();
extern void _ZN8S19060C83v17Ev();
extern void _ZN8S19060C83v18Ev();
extern void _ZN8S19060C83v19Ev();
extern void _ZN8S19060C63v20Ev();
extern void _ZN8S19060C63v21Ev();
extern void _ZN8S19060C63v22Ev();
extern void _ZN8S19060C63v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19060C6__8S19060C2__8S19060C1[] = {
  ABISELECT(240,156),
  ABISELECT(112,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19060C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19060C2D1Ev,_ZThn8_N8S19060C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19060C2D0Ev,_ZThn8_N8S19060C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19060C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19060C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19060C63v23Ev,
};
extern void _ZN8S19060C73v12Ev();
extern void _ZN8S19060C73v13Ev();
extern void _ZN8S19060C73v14Ev();
extern void _ZN8S19060C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19060C7__8S19060C2__8S19060C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S19060C2[0]),
  (VTBL_ENTRY)&_ZN8S19060C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19060C73v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19060C2D1Ev,_ZTv0_n12_N8S19060C2D1Ev)();
extern void ABISELECT(_ZThn256_N8S19060C2D1Ev,_ZThn164_N8S19060C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19060C2D0Ev,_ZTv0_n12_N8S19060C2D0Ev)();
extern void ABISELECT(_ZThn256_N8S19060C2D0Ev,_ZThn164_N8S19060C2D0Ev)() __attribute__((weak));
extern void _ZN8S19060C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19060C4__A1__8S19060C2__8S19060C1[] = {
  0,
  ABISELECT(-256,-164),
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI8S19060C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19060C2D1Ev,_ZTv0_n12_N8S19060C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19060C2D0Ev,_ZTv0_n12_N8S19060C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19060C42v4Ev,
};
static  VTT_ENTRY vtt_S19060C1[] = {
  {&(_ZTV8S19060C1[6]),  6,96},
  {&(_tg__ZTV9S19060C10__8S19060C1[3]),  3,17},
  {&(_tg__ZTV8S19060C7__9S19060C10__8S19060C1[6]),  6,10},
  {&(_ZTV8S19060C1[42]),  42,96},
  {&(_ZTV8S19060C1[74]),  74,96},
  {&(_ZTV8S19060C1[52]),  52,96},
  {&(_ZTV8S19060C1[85]),  85,96},
  {&(_ZTV8S19060C1[93]),  93,96},
  {&(_ZTV8S19060C1[64]),  64,96},
  {&(_tg__ZTV8S19060C2__8S19060C1[5]),  5,11},
  {&(_tg__ZTV8S19060C68S19060C2__8S19060C1[4]),  4,14},
  {&(_tg__ZTV8S19060C7__8S19060C68S19060C2__8S19060C1[6]),  6,10},
  {&(_tg__ZTV8S19060C4__8S19060C68S19060C2__8S19060C1[4]),  4,7},
  {&(_tg__ZTV8S19060C5__8S19060C2__8S19060C1[7]),  7,12},
  {&(_tg__ZTV8S19060C6__8S19060C2__8S19060C1[4]),  4,14},
  {&(_tg__ZTV8S19060C7__8S19060C2__8S19060C1[6]),  6,10},
  {&(_tg__ZTV8S19060C4__A1__8S19060C2__8S19060C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19060C1[];
extern  VTBL_ENTRY _ZTV8S19060C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19060C1[];
static VTBL_ENTRY alt_thunk_names78[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19060C2D0Ev,_ZTv0_n12_N8S19060C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19060C2D0Ev,_ZThn164_N8S19060C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19060C2D1Ev,_ZTv0_n12_N8S19060C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19060C2D1Ev,_ZThn164_N8S19060C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19060C6D0Ev,_ZTv0_n12_N8S19060C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19060C6D0Ev,_ZThn156_N8S19060C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19060C6D1Ev,_ZTv0_n12_N8S19060C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19060C6D1Ev,_ZThn156_N8S19060C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19060C1D0Ev,_ZTv0_n12_N8S19060C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19060C1D0Ev,_ZThn192_N8S19060C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19060C1D1Ev,_ZTv0_n12_N8S19060C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19060C1D1Ev,_ZThn192_N8S19060C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19060C1D0Ev,_ZTv0_n24_N8S19060C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19060C1D0Ev,_ZThn28_N8S19060C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19060C1D1Ev,_ZTv0_n24_N8S19060C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19060C1D1Ev,_ZThn28_N8S19060C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19060C1 = {  "S19060C1", // class name
  bases_S19060C1, 12,
  &(vtc_S19060C1[0]), // expected_vtbl_contents
  &(vtt_S19060C1[0]), // expected_vtt_contents
  ABISELECT(320,196), // object size
  NSPAIRA(_ZTI8S19060C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19060C1),96, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19060C1),17, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names78,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7334C4  {
  int s7334c4f0;
  void *s7334c4f1[2];
  char s7334c4f2[4];
  virtual void  v8(); // _ZN7S7334C42v8Ev
  virtual void  v9(); // _ZN7S7334C42v9Ev
  virtual void  v10(); // _ZN7S7334C43v10Ev
  virtual void  v11(); // _ZN7S7334C43v11Ev
  virtual void  v12(); // _ZN7S7334C43v12Ev
  ~S7334C4(); // tgen
  S7334C4(); // tgen
};
//SIG(-1 S7334C4) C1{ v1 v2 v3 v4 v5 Fi Fp[2] Fc[4]}


void  S7334C4 ::v8(){vfunc_called(this, "_ZN7S7334C42v8Ev");}
void  S7334C4 ::v9(){vfunc_called(this, "_ZN7S7334C42v9Ev");}
void  S7334C4 ::v10(){vfunc_called(this, "_ZN7S7334C43v10Ev");}
void  S7334C4 ::v11(){vfunc_called(this, "_ZN7S7334C43v11Ev");}
void  S7334C4 ::v12(){vfunc_called(this, "_ZN7S7334C43v12Ev");}
S7334C4 ::~S7334C4(){ note_dtor("S7334C4", this);} // tgen
S7334C4 ::S7334C4(){ note_ctor("S7334C4", this);} // tgen

static void Test_S7334C4()
{
  extern Class_Descriptor cd_S7334C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7334C4, buf);
    S7334C4 *dp, &lv = *(dp=new (buf) S7334C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7334C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7334C4)");
    check_field_offset(lv, s7334c4f0, ABISELECT(8,4), "S7334C4.s7334c4f0");
    check_field_offset(lv, s7334c4f1, ABISELECT(16,8), "S7334C4.s7334c4f1");
    check_field_offset(lv, s7334c4f2, ABISELECT(32,16), "S7334C4.s7334c4f2");
    test_class_info(&lv, &cd_S7334C4);
    dp->~S7334C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7334C4(Test_S7334C4, "S7334C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7334C4C1Ev();
extern void _ZN7S7334C4D1Ev();
Name_Map name_map_S7334C4[] = {
  NSPAIR(_ZN7S7334C4C1Ev),
  NSPAIR(_ZN7S7334C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7334C4[];
extern void _ZN7S7334C42v8Ev();
extern void _ZN7S7334C42v9Ev();
extern void _ZN7S7334C43v10Ev();
extern void _ZN7S7334C43v11Ev();
extern void _ZN7S7334C43v12Ev();
static  VTBL_ENTRY vtc_S7334C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7334C4[0]),
  (VTBL_ENTRY)&_ZN7S7334C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7334C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v12Ev,
};
extern VTBL_ENTRY _ZTI7S7334C4[];
extern  VTBL_ENTRY _ZTV7S7334C4[];
Class_Descriptor cd_S7334C4 = {  "S7334C4", // class name
  0,0,//no base classes
  &(vtc_S7334C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7334C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7334C4),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  S7334C5  {
  void *s7334c5f0;
  long s7334c5f1[6];
  char s7334c5f2:5;
  virtual void  v13(); // _ZN7S7334C53v13Ev
  virtual void  v14(); // _ZN7S7334C53v14Ev
  virtual void  v15(); // _ZN7S7334C53v15Ev
  virtual void  v16(); // _ZN7S7334C53v16Ev
  ~S7334C5(); // tgen
  S7334C5(); // tgen
};
//SIG(-1 S7334C5) C1{ v1 v2 v3 v4 Fp Fl[6] Fc:5}


void  S7334C5 ::v13(){vfunc_called(this, "_ZN7S7334C53v13Ev");}
void  S7334C5 ::v14(){vfunc_called(this, "_ZN7S7334C53v14Ev");}
void  S7334C5 ::v15(){vfunc_called(this, "_ZN7S7334C53v15Ev");}
void  S7334C5 ::v16(){vfunc_called(this, "_ZN7S7334C53v16Ev");}
S7334C5 ::~S7334C5(){ note_dtor("S7334C5", this);} // tgen
S7334C5 ::S7334C5(){ note_ctor("S7334C5", this);} // tgen

static void Test_S7334C5()
{
  extern Class_Descriptor cd_S7334C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S7334C5, buf);
    S7334C5 *dp, &lv = *(dp=new (buf) S7334C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S7334C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7334C5)");
    check_field_offset(lv, s7334c5f0, ABISELECT(8,4), "S7334C5.s7334c5f0");
    check_field_offset(lv, s7334c5f1, ABISELECT(16,8), "S7334C5.s7334c5f1");
    set_bf_and_test(lv, s7334c5f2, ABISELECT(64,32), 0, 5, 1, "S7334C5");
    set_bf_and_test(lv, s7334c5f2, ABISELECT(64,32), 0, 5, hide_sll(1LL<<4), "S7334C5");
    test_class_info(&lv, &cd_S7334C5);
    dp->~S7334C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7334C5(Test_S7334C5, "S7334C5", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S7334C5C1Ev();
extern void _ZN7S7334C5D1Ev();
Name_Map name_map_S7334C5[] = {
  NSPAIR(_ZN7S7334C5C1Ev),
  NSPAIR(_ZN7S7334C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7334C5[];
extern void _ZN7S7334C53v13Ev();
extern void _ZN7S7334C53v14Ev();
extern void _ZN7S7334C53v15Ev();
extern void _ZN7S7334C53v16Ev();
static  VTBL_ENTRY vtc_S7334C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7334C5[0]),
  (VTBL_ENTRY)&_ZN7S7334C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v16Ev,
};
extern VTBL_ENTRY _ZTI7S7334C5[];
extern  VTBL_ENTRY _ZTV7S7334C5[];
Class_Descriptor cd_S7334C5 = {  "S7334C5", // class name
  0,0,//no base classes
  &(vtc_S7334C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S7334C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7334C5),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  S7334C3  : S7334C4 , S7334C5 {
  short s7334c3f0;
  void *s7334c3f1;
  virtual void  v17(); // _ZN7S7334C33v17Ev
  virtual void  v18(); // _ZN7S7334C33v18Ev
  virtual void  v19(); // _ZN7S7334C33v19Ev
  virtual void  v20(); // _ZN7S7334C33v20Ev
  virtual void  v21(); // _ZN7S7334C33v21Ev
  ~S7334C3(); // tgen
  S7334C3(); // tgen
};
//SIG(-1 S7334C3) C1{ BC2{ v6 v7 v8 v9 v10 Fi Fp[2] Fc[4]} BC3{ v11 v12 v13 v14 Fp Fl[6] Fc:5} v1 v2 v3 v4 v5 Fs Fp}


void  S7334C3 ::v17(){vfunc_called(this, "_ZN7S7334C33v17Ev");}
void  S7334C3 ::v18(){vfunc_called(this, "_ZN7S7334C33v18Ev");}
void  S7334C3 ::v19(){vfunc_called(this, "_ZN7S7334C33v19Ev");}
void  S7334C3 ::v20(){vfunc_called(this, "_ZN7S7334C33v20Ev");}
void  S7334C3 ::v21(){vfunc_called(this, "_ZN7S7334C33v21Ev");}
S7334C3 ::~S7334C3(){ note_dtor("S7334C3", this);} // tgen
S7334C3 ::S7334C3(){ note_ctor("S7334C3", this);} // tgen

static void Test_S7334C3()
{
  extern Class_Descriptor cd_S7334C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S7334C3, buf);
    S7334C3 *dp, &lv = *(dp=new (buf) S7334C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S7334C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7334C3)");
    check_base_class_offset(lv, (S7334C4*), 0, "S7334C3");
    check_base_class_offset(lv, (S7334C5*), ABISELECT(40,20), "S7334C3");
    check_field_offset(lv, s7334c3f0, ABISELECT(106,54), "S7334C3.s7334c3f0");
    check_field_offset(lv, s7334c3f1, ABISELECT(112,56), "S7334C3.s7334c3f1");
    test_class_info(&lv, &cd_S7334C3);
    dp->~S7334C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7334C3(Test_S7334C3, "S7334C3", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN7S7334C3C1Ev();
extern void _ZN7S7334C3D1Ev();
Name_Map name_map_S7334C3[] = {
  NSPAIR(_ZN7S7334C3C1Ev),
  NSPAIR(_ZN7S7334C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7334C4;
extern VTBL_ENTRY _ZTI7S7334C4[];
extern  VTBL_ENTRY _ZTV7S7334C4[];
extern Class_Descriptor cd_S7334C5;
extern VTBL_ENTRY _ZTI7S7334C5[];
extern  VTBL_ENTRY _ZTV7S7334C5[];
static Base_Class bases_S7334C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7334C5,    ABISELECT(40,20), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7334C3[];
extern void _ZN7S7334C42v8Ev();
extern void _ZN7S7334C42v9Ev();
extern void _ZN7S7334C43v10Ev();
extern void _ZN7S7334C43v11Ev();
extern void _ZN7S7334C43v12Ev();
extern void _ZN7S7334C33v17Ev();
extern void _ZN7S7334C33v18Ev();
extern void _ZN7S7334C33v19Ev();
extern void _ZN7S7334C33v20Ev();
extern void _ZN7S7334C33v21Ev();
extern void _ZN7S7334C53v13Ev();
extern void _ZN7S7334C53v14Ev();
extern void _ZN7S7334C53v15Ev();
extern void _ZN7S7334C53v16Ev();
static  VTBL_ENTRY vtc_S7334C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7334C3[0]),
  (VTBL_ENTRY)&_ZN7S7334C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7334C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v21Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7334C3[0]),
  (VTBL_ENTRY)&_ZN7S7334C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v16Ev,
};
extern VTBL_ENTRY _ZTI7S7334C3[];
extern  VTBL_ENTRY _ZTV7S7334C3[];
Class_Descriptor cd_S7334C3 = {  "S7334C3", // class name
  bases_S7334C3, 2,
  &(vtc_S7334C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI7S7334C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7334C3),18, //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  S7334C6  : virtual S7334C5 , S7334C3 {
  virtual void  v22(); // _ZN7S7334C63v22Ev
  virtual void  v23(); // _ZN7S7334C63v23Ev
  virtual void  v24(); // _ZN7S7334C63v24Ev
  virtual void  v25(); // _ZN7S7334C63v25Ev
  virtual void  v26(); // _ZN7S7334C63v26Ev
  virtual void  v27(); // _ZN7S7334C63v27Ev
  virtual void  v28(); // _ZN7S7334C63v28Ev
  virtual void  v29(); // _ZN7S7334C63v29Ev
  ~S7334C6(); // tgen
  S7334C6(); // tgen
};
//SIG(-1 S7334C6) C1{ VBC2{ v9 v10 v11 v12 Fp Fl[6] Fc:5} BC3{ BC4{ v13 v14 v15 v16 v17 Fi Fp[2] Fc[4]} BC2 v18 v19 v20 v21 v22 Fs Fp} v1 v2 v3 v4 v5 v6 v7 v8}


void  S7334C6 ::v22(){vfunc_called(this, "_ZN7S7334C63v22Ev");}
void  S7334C6 ::v23(){vfunc_called(this, "_ZN7S7334C63v23Ev");}
void  S7334C6 ::v24(){vfunc_called(this, "_ZN7S7334C63v24Ev");}
void  S7334C6 ::v25(){vfunc_called(this, "_ZN7S7334C63v25Ev");}
void  S7334C6 ::v26(){vfunc_called(this, "_ZN7S7334C63v26Ev");}
void  S7334C6 ::v27(){vfunc_called(this, "_ZN7S7334C63v27Ev");}
void  S7334C6 ::v28(){vfunc_called(this, "_ZN7S7334C63v28Ev");}
void  S7334C6 ::v29(){vfunc_called(this, "_ZN7S7334C63v29Ev");}
S7334C6 ::~S7334C6(){ note_dtor("S7334C6", this);} // tgen
S7334C6 ::S7334C6(){ note_ctor("S7334C6", this);} // tgen

static void Test_S7334C6()
{
  extern Class_Descriptor cd_S7334C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[25];
    init_test(&cd_S7334C6, buf);
    S7334C6 *dp, &lv = *(dp=new (buf) S7334C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,96), "sizeof(S7334C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7334C6)");
    /*is_ambiguous_... S7334C6::S7334C5 */ AMB_check_base_class_offset(lv, (S7334C5*), ABISELECT(120,60), "S7334C6");
    check_base_class_offset(lv, (S7334C4*)(S7334C3*), 0, "S7334C6");
    check_base_class_offset(lv, (S7334C5*)(S7334C3*), ABISELECT(40,20), "S7334C6");
    check_base_class_offset(lv, (S7334C3*), 0, "S7334C6");
    test_class_info(&lv, &cd_S7334C6);
    dp->~S7334C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7334C6(Test_S7334C6, "S7334C6", ABISELECT(192,96));

#else // __cplusplus

extern void _ZN7S7334C6C1Ev();
extern void _ZN7S7334C6D1Ev();
Name_Map name_map_S7334C6[] = {
  NSPAIR(_ZN7S7334C6C1Ev),
  NSPAIR(_ZN7S7334C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7334C5;
extern VTBL_ENTRY _ZTI7S7334C5[];
extern  VTBL_ENTRY _ZTV7S7334C5[];
extern Class_Descriptor cd_S7334C4;
extern VTBL_ENTRY _ZTI7S7334C4[];
extern  VTBL_ENTRY _ZTV7S7334C4[];
extern Class_Descriptor cd_S7334C5;
extern VTBL_ENTRY _ZTI7S7334C5[];
extern  VTBL_ENTRY _ZTV7S7334C5[];
extern Class_Descriptor cd_S7334C3;
extern VTBL_ENTRY _ZTI7S7334C3[];
extern  VTBL_ENTRY _ZTV7S7334C3[];
static Base_Class bases_S7334C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7334C5,    ABISELECT(120,60), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7334C5,    ABISELECT(40,20), //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7334C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7334C6[];
extern void _ZN7S7334C42v8Ev();
extern void _ZN7S7334C42v9Ev();
extern void _ZN7S7334C43v10Ev();
extern void _ZN7S7334C43v11Ev();
extern void _ZN7S7334C43v12Ev();
extern void _ZN7S7334C33v17Ev();
extern void _ZN7S7334C33v18Ev();
extern void _ZN7S7334C33v19Ev();
extern void _ZN7S7334C33v20Ev();
extern void _ZN7S7334C33v21Ev();
extern void _ZN7S7334C63v22Ev();
extern void _ZN7S7334C63v23Ev();
extern void _ZN7S7334C63v24Ev();
extern void _ZN7S7334C63v25Ev();
extern void _ZN7S7334C63v26Ev();
extern void _ZN7S7334C63v27Ev();
extern void _ZN7S7334C63v28Ev();
extern void _ZN7S7334C63v29Ev();
extern void _ZN7S7334C53v13Ev();
extern void _ZN7S7334C53v14Ev();
extern void _ZN7S7334C53v15Ev();
extern void _ZN7S7334C53v16Ev();
extern void _ZN7S7334C53v13Ev();
extern void _ZN7S7334C53v14Ev();
extern void _ZN7S7334C53v15Ev();
extern void _ZN7S7334C53v16Ev();
static  VTBL_ENTRY vtc_S7334C6[] = {
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7334C6[0]),
  (VTBL_ENTRY)&_ZN7S7334C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7334C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v26Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v29Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7334C6[0]),
  (VTBL_ENTRY)&_ZN7S7334C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7334C6[0]),
  (VTBL_ENTRY)&_ZN7S7334C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v16Ev,
};
extern VTBL_ENTRY _ZTV7S7334C6[];
static  VTT_ENTRY vtt_S7334C6[] = {
  {&(_ZTV7S7334C6[3]),  3,37},
  {&(_ZTV7S7334C6[33]),  33,37},
};
extern VTBL_ENTRY _ZTI7S7334C6[];
extern  VTBL_ENTRY _ZTV7S7334C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7334C6[];
Class_Descriptor cd_S7334C6 = {  "S7334C6", // class name
  bases_S7334C6, 4,
  &(vtc_S7334C6[0]), // expected_vtbl_contents
  &(vtt_S7334C6[0]), // expected_vtt_contents
  ABISELECT(192,96), // object size
  NSPAIRA(_ZTI7S7334C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7334C6),37, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7334C6),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7334C2  : virtual S7334C3 , virtual S7334C6 {
  __tsi64 s7334c2f0;
  void *s7334c2f1[3];
  virtual void  v30(); // _ZN7S7334C23v30Ev
  virtual void  v31(); // _ZN7S7334C23v31Ev
  virtual void  v32(); // _ZN7S7334C23v32Ev
  virtual void  v33(); // _ZN7S7334C23v33Ev
  virtual void  v34(); // _ZN7S7334C23v34Ev
  virtual void  v35(); // _ZN7S7334C23v35Ev
  ~S7334C2(); // tgen
  S7334C2(); // tgen
};
//SIG(-1 S7334C2) C1{ VBC2{ BC3{ v7 v8 v9 v10 v11 Fi Fp[2] Fc[4]} BC4{ v12 v13 v14 v15 Fp Fl[6] Fc:5} v16 v17 v18 v19 v20 Fs Fp} VBC5{ VBC4 BC2 v21 v22 v23 v24 v25 v26 v27 v28} v1 v2 v3 v4 v5 v6 FL Fp[3]}


void  S7334C2 ::v30(){vfunc_called(this, "_ZN7S7334C23v30Ev");}
void  S7334C2 ::v31(){vfunc_called(this, "_ZN7S7334C23v31Ev");}
void  S7334C2 ::v32(){vfunc_called(this, "_ZN7S7334C23v32Ev");}
void  S7334C2 ::v33(){vfunc_called(this, "_ZN7S7334C23v33Ev");}
void  S7334C2 ::v34(){vfunc_called(this, "_ZN7S7334C23v34Ev");}
void  S7334C2 ::v35(){vfunc_called(this, "_ZN7S7334C23v35Ev");}
S7334C2 ::~S7334C2(){ note_dtor("S7334C2", this);} // tgen
S7334C2 ::S7334C2(){ note_ctor("S7334C2", this);} // tgen

static void Test_S7334C2()
{
  extern Class_Descriptor cd_S7334C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,46)];
    init_test(&cd_S7334C2, buf);
    S7334C2 *dp, &lv = *(dp=new (buf) S7334C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,180), "sizeof(S7334C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7334C2)");
    /*is_ambiguous_... S7334C2::S7334C3 */ AMB_check_base_class_offset(lv, (S7334C4*)(S7334C3*), ABISELECT(40,24), "S7334C2");
    /*is_ambiguous_... S7334C2::S7334C3 */ AMB_check_base_class_offset(lv, (S7334C5*)(S7334C3*), ABISELECT(80,44), "S7334C2");
    /*is_ambiguous_... S7334C2::S7334C3 */ AMB_check_base_class_offset(lv, (S7334C3*), ABISELECT(40,24), "S7334C2");
    /*is_ambiguous_... S7334C6::S7334C5 */ AMB_check_base_class_offset(lv, (S7334C5*)(S7334C6*), ABISELECT(280,144), "S7334C2");
    check_base_class_offset(lv, (S7334C4*)(S7334C3*)(S7334C6*), ABISELECT(160,84), "S7334C2");
    check_base_class_offset(lv, (S7334C5*)(S7334C3*)(S7334C6*), ABISELECT(200,104), "S7334C2");
    check_base_class_offset(lv, (S7334C3*)(S7334C6*), ABISELECT(160,84), "S7334C2");
    check_base_class_offset(lv, (S7334C6*), ABISELECT(160,84), "S7334C2");
    check_field_offset(lv, s7334c2f0, ABISELECT(8,4), "S7334C2.s7334c2f0");
    check_field_offset(lv, s7334c2f1, ABISELECT(16,12), "S7334C2.s7334c2f1");
    test_class_info(&lv, &cd_S7334C2);
    dp->~S7334C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7334C2(Test_S7334C2, "S7334C2", ABISELECT(352,180));

#else // __cplusplus

extern void _ZN7S7334C2C1Ev();
extern void _ZN7S7334C2D1Ev();
Name_Map name_map_S7334C2[] = {
  NSPAIR(_ZN7S7334C2C1Ev),
  NSPAIR(_ZN7S7334C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7334C4;
extern VTBL_ENTRY _ZTI7S7334C4[];
extern  VTBL_ENTRY _ZTV7S7334C4[];
extern Class_Descriptor cd_S7334C5;
extern VTBL_ENTRY _ZTI7S7334C5[];
extern  VTBL_ENTRY _ZTV7S7334C5[];
extern Class_Descriptor cd_S7334C3;
extern VTBL_ENTRY _ZTI7S7334C3[];
extern  VTBL_ENTRY _ZTV7S7334C3[];
extern Class_Descriptor cd_S7334C5;
extern VTBL_ENTRY _ZTI7S7334C5[];
extern  VTBL_ENTRY _ZTV7S7334C5[];
extern Class_Descriptor cd_S7334C4;
extern VTBL_ENTRY _ZTI7S7334C4[];
extern  VTBL_ENTRY _ZTV7S7334C4[];
extern Class_Descriptor cd_S7334C5;
extern VTBL_ENTRY _ZTI7S7334C5[];
extern  VTBL_ENTRY _ZTV7S7334C5[];
extern Class_Descriptor cd_S7334C3;
extern VTBL_ENTRY _ZTI7S7334C3[];
extern  VTBL_ENTRY _ZTV7S7334C3[];
extern Class_Descriptor cd_S7334C6;
extern VTBL_ENTRY _ZTI7S7334C6[];
extern  VTBL_ENTRY _ZTV7S7334C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7334C6[];
static Base_Class bases_S7334C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7334C4,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7334C5,    ABISELECT(80,44), //bcp->offset
    37, //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7334C3,    ABISELECT(40,24), //bcp->offset
    11, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7334C5,    ABISELECT(280,144), //bcp->offset
    92, //bcp->virtual_function_table_offset
    6, //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
    7, //immediately_derived
  0, 1},
  {&cd_S7334C4,    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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7334C5,    ABISELECT(200,104), //bcp->offset
    86, //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_S7334C3,    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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7334C6,    ABISELECT(160,84), //bcp->offset
    43, //bcp->virtual_function_table_offset
    25, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI7S7334C2[];
extern void _ZN7S7334C23v30Ev();
extern void _ZN7S7334C23v31Ev();
extern void _ZN7S7334C23v32Ev();
extern void _ZN7S7334C23v33Ev();
extern void _ZN7S7334C23v34Ev();
extern void _ZN7S7334C23v35Ev();
extern void _ZN7S7334C42v8Ev();
extern void _ZN7S7334C42v9Ev();
extern void _ZN7S7334C43v10Ev();
extern void _ZN7S7334C43v11Ev();
extern void _ZN7S7334C43v12Ev();
extern void _ZN7S7334C33v17Ev();
extern void _ZN7S7334C33v18Ev();
extern void _ZN7S7334C33v19Ev();
extern void _ZN7S7334C33v20Ev();
extern void _ZN7S7334C33v21Ev();
extern void _ZN7S7334C53v13Ev();
extern void _ZN7S7334C53v14Ev();
extern void _ZN7S7334C53v15Ev();
extern void _ZN7S7334C53v16Ev();
extern void _ZN7S7334C42v8Ev();
extern void _ZN7S7334C42v9Ev();
extern void _ZN7S7334C43v10Ev();
extern void _ZN7S7334C43v11Ev();
extern void _ZN7S7334C43v12Ev();
extern void _ZN7S7334C33v17Ev();
extern void _ZN7S7334C33v18Ev();
extern void _ZN7S7334C33v19Ev();
extern void _ZN7S7334C33v20Ev();
extern void _ZN7S7334C33v21Ev();
extern void _ZN7S7334C63v22Ev();
extern void _ZN7S7334C63v23Ev();
extern void _ZN7S7334C63v24Ev();
extern void _ZN7S7334C63v25Ev();
extern void _ZN7S7334C63v26Ev();
extern void _ZN7S7334C63v27Ev();
extern void _ZN7S7334C63v28Ev();
extern void _ZN7S7334C63v29Ev();
extern void _ZN7S7334C53v13Ev();
extern void _ZN7S7334C53v14Ev();
extern void _ZN7S7334C53v15Ev();
extern void _ZN7S7334C53v16Ev();
extern void _ZN7S7334C53v13Ev();
extern void _ZN7S7334C53v14Ev();
extern void _ZN7S7334C53v15Ev();
extern void _ZN7S7334C53v16Ev();
static  VTBL_ENTRY vtc_S7334C2[] = {
  ABISELECT(280,144),
  ABISELECT(160,84),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7334C2[0]),
  (VTBL_ENTRY)&_ZN7S7334C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7334C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7334C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7334C23v33Ev,
  (VTBL_ENTRY)&_ZN7S7334C23v34Ev,
  (VTBL_ENTRY)&_ZN7S7334C23v35Ev,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7334C2[0]),
  (VTBL_ENTRY)&_ZN7S7334C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7334C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v21Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S7334C2[0]),
  (VTBL_ENTRY)&_ZN7S7334C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI7S7334C2[0]),
  (VTBL_ENTRY)&_ZN7S7334C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7334C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v26Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v29Ev,
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI7S7334C2[0]),
  (VTBL_ENTRY)&_ZN7S7334C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-280,-144),
  (VTBL_ENTRY)&(_ZTI7S7334C2[0]),
  (VTBL_ENTRY)&_ZN7S7334C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v16Ev,
};
extern VTBL_ENTRY _ZTV7S7334C2[];
extern void _ZN7S7334C42v8Ev();
extern void _ZN7S7334C42v9Ev();
extern void _ZN7S7334C43v10Ev();
extern void _ZN7S7334C43v11Ev();
extern void _ZN7S7334C43v12Ev();
extern void _ZN7S7334C33v17Ev();
extern void _ZN7S7334C33v18Ev();
extern void _ZN7S7334C33v19Ev();
extern void _ZN7S7334C33v20Ev();
extern void _ZN7S7334C33v21Ev();
extern void _ZN7S7334C63v22Ev();
extern void _ZN7S7334C63v23Ev();
extern void _ZN7S7334C63v24Ev();
extern void _ZN7S7334C63v25Ev();
extern void _ZN7S7334C63v26Ev();
extern void _ZN7S7334C63v27Ev();
extern void _ZN7S7334C63v28Ev();
extern void _ZN7S7334C63v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7334C6__7S7334C2[] = {
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7334C6[0]),
  (VTBL_ENTRY)&_ZN7S7334C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7334C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v26Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v29Ev,
};
extern void _ZN7S7334C53v13Ev();
extern void _ZN7S7334C53v14Ev();
extern void _ZN7S7334C53v15Ev();
extern void _ZN7S7334C53v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7334C5__7S7334C6__7S7334C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7334C6[0]),
  (VTBL_ENTRY)&_ZN7S7334C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v16Ev,
};
static  VTT_ENTRY vtt_S7334C2[] = {
  {&(_ZTV7S7334C2[5]),  5,102},
  {&(_ZTV7S7334C2[27]),  27,102},
  {&(_ZTV7S7334C2[39]),  39,102},
  {&(_ZTV7S7334C2[68]),  68,102},
  {&(_ZTV7S7334C2[98]),  98,102},
  {&(_ZTV7S7334C2[88]),  88,102},
  {&(_tg__ZTV7S7334C6__7S7334C2[3]),  3,21},
  {&(_tg__ZTV7S7334C5__7S7334C6__7S7334C2[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S7334C2[];
extern  VTBL_ENTRY _ZTV7S7334C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7334C2[];
Class_Descriptor cd_S7334C2 = {  "S7334C2", // class name
  bases_S7334C2, 8,
  &(vtc_S7334C2[0]), // expected_vtbl_contents
  &(vtt_S7334C2[0]), // expected_vtt_contents
  ABISELECT(352,180), // object size
  NSPAIRA(_ZTI7S7334C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7334C2),102, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7334C2),8, //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  S7334C7  {
  int s7334c7f0;
  virtual  ~S7334C7(); // _ZN7S7334C7D1Ev
  virtual void  v36(); // _ZN7S7334C73v36Ev
  virtual void  v37(); // _ZN7S7334C73v37Ev
  virtual void  v38(); // _ZN7S7334C73v38Ev
  virtual void  v39(); // _ZN7S7334C73v39Ev
  virtual void  v40(); // _ZN7S7334C73v40Ev
  virtual void  v41(); // _ZN7S7334C73v41Ev
  S7334C7(); // tgen
};
//SIG(-1 S7334C7) C1{ vd v1 v2 v3 v4 v5 v6 Fi}


 S7334C7 ::~S7334C7(){ note_dtor("S7334C7", this);}
void  S7334C7 ::v36(){vfunc_called(this, "_ZN7S7334C73v36Ev");}
void  S7334C7 ::v37(){vfunc_called(this, "_ZN7S7334C73v37Ev");}
void  S7334C7 ::v38(){vfunc_called(this, "_ZN7S7334C73v38Ev");}
void  S7334C7 ::v39(){vfunc_called(this, "_ZN7S7334C73v39Ev");}
void  S7334C7 ::v40(){vfunc_called(this, "_ZN7S7334C73v40Ev");}
void  S7334C7 ::v41(){vfunc_called(this, "_ZN7S7334C73v41Ev");}
S7334C7 ::S7334C7(){ note_ctor("S7334C7", this);} // tgen

static void Test_S7334C7()
{
  extern Class_Descriptor cd_S7334C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7334C7, buf);
    S7334C7 *dp, &lv = *(dp=new (buf) S7334C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7334C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7334C7)");
    check_field_offset(lv, s7334c7f0, ABISELECT(8,4), "S7334C7.s7334c7f0");
    test_class_info(&lv, &cd_S7334C7);
    dp->~S7334C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7334C7(Test_S7334C7, "S7334C7", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7334C7C1Ev();
extern void _ZN7S7334C7D1Ev();
Name_Map name_map_S7334C7[] = {
  NSPAIR(_ZN7S7334C7C1Ev),
  NSPAIR(_ZN7S7334C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7334C7[];
extern void _ZN7S7334C7D1Ev();
extern void _ZN7S7334C7D0Ev();
extern void _ZN7S7334C73v36Ev();
extern void _ZN7S7334C73v37Ev();
extern void _ZN7S7334C73v38Ev();
extern void _ZN7S7334C73v39Ev();
extern void _ZN7S7334C73v40Ev();
extern void _ZN7S7334C73v41Ev();
static  VTBL_ENTRY vtc_S7334C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7334C7[0]),
  (VTBL_ENTRY)&_ZN7S7334C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7334C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7334C73v36Ev,
  (VTBL_ENTRY)&_ZN7S7334C73v37Ev,
  (VTBL_ENTRY)&_ZN7S7334C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7334C73v39Ev,
  (VTBL_ENTRY)&_ZN7S7334C73v40Ev,
  (VTBL_ENTRY)&_ZN7S7334C73v41Ev,
};
extern VTBL_ENTRY _ZTI7S7334C7[];
extern  VTBL_ENTRY _ZTV7S7334C7[];
Class_Descriptor cd_S7334C7 = {  "S7334C7", // class name
  0,0,//no base classes
  &(vtc_S7334C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7334C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7334C7),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7334C1  : S7334C2 , virtual S7334C7 {
  short s7334c1f0[7];
  int s7334c1f1;
  virtual  ~S7334C1(); // _ZN7S7334C1D2Ev
  virtual void  v1(); // _ZN7S7334C12v1Ev
  virtual void  v2(); // _ZN7S7334C12v2Ev
  virtual void  v3(); // _ZN7S7334C12v3Ev
  virtual void  v4(); // _ZN7S7334C12v4Ev
  virtual void  v5(); // _ZN7S7334C12v5Ev
  virtual void  v6(); // _ZN7S7334C12v6Ev
  virtual void  v7(); // _ZN7S7334C12v7Ev
  S7334C1(); // tgen
};
//SIG(1 S7334C1) C1{ BC2{ VBC3{ BC4{ v8 v9 v10 v11 v12 Fi Fp[2] Fc[4]} BC5{ v13 v14 v15 v16 Fp Fl[6] Fc:5} v17 v18 v19 v20 v21 Fs Fp} VBC6{ VBC5 BC3 v22 v23 v24 v25 v26 v27 v28 v29} v30 v31 v32 v33 v34 v35 FL Fp[3]} VBC7{ vd v36 v37 v38 v39 v40 v41 Fi} vd v1 v2 v3 v4 v5 v6 v7 Fs[7] Fi}


 S7334C1 ::~S7334C1(){ note_dtor("S7334C1", this);}
void  S7334C1 ::v1(){vfunc_called(this, "_ZN7S7334C12v1Ev");}
void  S7334C1 ::v2(){vfunc_called(this, "_ZN7S7334C12v2Ev");}
void  S7334C1 ::v3(){vfunc_called(this, "_ZN7S7334C12v3Ev");}
void  S7334C1 ::v4(){vfunc_called(this, "_ZN7S7334C12v4Ev");}
void  S7334C1 ::v5(){vfunc_called(this, "_ZN7S7334C12v5Ev");}
void  S7334C1 ::v6(){vfunc_called(this, "_ZN7S7334C12v6Ev");}
void  S7334C1 ::v7(){vfunc_called(this, "_ZN7S7334C12v7Ev");}
S7334C1 ::S7334C1(){ note_ctor("S7334C1", this);} // tgen

static void Test_S7334C1()
{
  extern Class_Descriptor cd_S7334C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,53)];
    init_test(&cd_S7334C1, buf);
    S7334C1 *dp, &lv = *(dp=new (buf) S7334C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,208), "sizeof(S7334C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7334C1)");
    /*is_ambiguous_... S7334C1::S7334C3 */ AMB_check_base_class_offset(lv, (S7334C4*)(S7334C3*), ABISELECT(64,44), "S7334C1");
    /*is_ambiguous_... S7334C1::S7334C3 */ AMB_check_base_class_offset(lv, (S7334C5*)(S7334C3*), ABISELECT(104,64), "S7334C1");
    /*is_ambiguous_... S7334C2::S7334C3 */ AMB_check_base_class_offset(lv, (S7334C3*)(S7334C2*), ABISELECT(64,44), "S7334C1");
    /*is_ambiguous_... S7334C6::S7334C5 */ AMB_check_base_class_offset(lv, (S7334C5*)(S7334C6*), ABISELECT(304,164), "S7334C1");
    check_base_class_offset(lv, (S7334C4*)(S7334C3*)(S7334C6*), ABISELECT(184,104), "S7334C1");
    check_base_class_offset(lv, (S7334C5*)(S7334C3*)(S7334C6*), ABISELECT(224,124), "S7334C1");
    check_base_class_offset(lv, (S7334C3*)(S7334C6*), ABISELECT(184,104), "S7334C1");
    check_base_class_offset(lv, (S7334C6*)(S7334C2*), ABISELECT(184,104), "S7334C1");
    check_base_class_offset(lv, (S7334C2*), 0, "S7334C1");
    check_base_class_offset(lv, (S7334C7*), ABISELECT(376,200), "S7334C1");
    check_field_offset(lv, s7334c1f0, ABISELECT(40,24), "S7334C1.s7334c1f0");
    check_field_offset(lv, s7334c1f1, ABISELECT(56,40), "S7334C1.s7334c1f1");
    test_class_info(&lv, &cd_S7334C1);
    dp->~S7334C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7334C1(Test_S7334C1, "S7334C1", ABISELECT(392,208));

#else // __cplusplus

extern void _ZN7S7334C1C1Ev();
extern void _ZN7S7334C1D2Ev();
Name_Map name_map_S7334C1[] = {
  NSPAIR(_ZN7S7334C1C1Ev),
  NSPAIR(_ZN7S7334C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7334C4;
extern VTBL_ENTRY _ZTI7S7334C4[];
extern  VTBL_ENTRY _ZTV7S7334C4[];
extern Class_Descriptor cd_S7334C5;
extern VTBL_ENTRY _ZTI7S7334C5[];
extern  VTBL_ENTRY _ZTV7S7334C5[];
extern Class_Descriptor cd_S7334C3;
extern VTBL_ENTRY _ZTI7S7334C3[];
extern  VTBL_ENTRY _ZTV7S7334C3[];
extern Class_Descriptor cd_S7334C5;
extern VTBL_ENTRY _ZTI7S7334C5[];
extern  VTBL_ENTRY _ZTV7S7334C5[];
extern Class_Descriptor cd_S7334C4;
extern VTBL_ENTRY _ZTI7S7334C4[];
extern  VTBL_ENTRY _ZTV7S7334C4[];
extern Class_Descriptor cd_S7334C5;
extern VTBL_ENTRY _ZTI7S7334C5[];
extern  VTBL_ENTRY _ZTV7S7334C5[];
extern Class_Descriptor cd_S7334C3;
extern VTBL_ENTRY _ZTI7S7334C3[];
extern  VTBL_ENTRY _ZTV7S7334C3[];
extern Class_Descriptor cd_S7334C6;
extern VTBL_ENTRY _ZTI7S7334C6[];
extern  VTBL_ENTRY _ZTV7S7334C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7334C6[];
extern Class_Descriptor cd_S7334C2;
extern VTBL_ENTRY _ZTI7S7334C2[];
extern  VTBL_ENTRY _ZTV7S7334C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7334C2[];
extern Class_Descriptor cd_S7334C7;
extern VTBL_ENTRY _ZTI7S7334C7[];
extern  VTBL_ENTRY _ZTV7S7334C7[];
static Base_Class bases_S7334C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7334C4,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S7334C5,    ABISELECT(104,64), //bcp->offset
    47, //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7334C3,    ABISELECT(64,44), //bcp->offset
    21, //bcp->virtual_function_table_offset
    16, //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
    8, //immediately_derived
  0, 1},
  {&cd_S7334C5,    ABISELECT(304,164), //bcp->offset
    102, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7334C4,    ABISELECT(184,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7334C5,    ABISELECT(224,124), //bcp->offset
    96, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7334C3,    ABISELECT(184,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7334C6,    ABISELECT(184,104), //bcp->offset
    53, //bcp->virtual_function_table_offset
    25, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7334C2,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7334C7,    ABISELECT(376,200), //bcp->offset
    112, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    13, //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 _ZTI7S7334C1[];
extern void _ZN7S7334C23v30Ev();
extern void _ZN7S7334C23v31Ev();
extern void _ZN7S7334C23v32Ev();
extern void _ZN7S7334C23v33Ev();
extern void _ZN7S7334C23v34Ev();
extern void _ZN7S7334C23v35Ev();
extern void _ZN7S7334C1D1Ev();
extern void _ZN7S7334C1D0Ev();
extern void _ZN7S7334C12v1Ev();
extern void _ZN7S7334C12v2Ev();
extern void _ZN7S7334C12v3Ev();
extern void _ZN7S7334C12v4Ev();
extern void _ZN7S7334C12v5Ev();
extern void _ZN7S7334C12v6Ev();
extern void _ZN7S7334C12v7Ev();
extern void _ZN7S7334C42v8Ev();
extern void _ZN7S7334C42v9Ev();
extern void _ZN7S7334C43v10Ev();
extern void _ZN7S7334C43v11Ev();
extern void _ZN7S7334C43v12Ev();
extern void _ZN7S7334C33v17Ev();
extern void _ZN7S7334C33v18Ev();
extern void _ZN7S7334C33v19Ev();
extern void _ZN7S7334C33v20Ev();
extern void _ZN7S7334C33v21Ev();
extern void _ZN7S7334C53v13Ev();
extern void _ZN7S7334C53v14Ev();
extern void _ZN7S7334C53v15Ev();
extern void _ZN7S7334C53v16Ev();
extern void _ZN7S7334C42v8Ev();
extern void _ZN7S7334C42v9Ev();
extern void _ZN7S7334C43v10Ev();
extern void _ZN7S7334C43v11Ev();
extern void _ZN7S7334C43v12Ev();
extern void _ZN7S7334C33v17Ev();
extern void _ZN7S7334C33v18Ev();
extern void _ZN7S7334C33v19Ev();
extern void _ZN7S7334C33v20Ev();
extern void _ZN7S7334C33v21Ev();
extern void _ZN7S7334C63v22Ev();
extern void _ZN7S7334C63v23Ev();
extern void _ZN7S7334C63v24Ev();
extern void _ZN7S7334C63v25Ev();
extern void _ZN7S7334C63v26Ev();
extern void _ZN7S7334C63v27Ev();
extern void _ZN7S7334C63v28Ev();
extern void _ZN7S7334C63v29Ev();
extern void _ZN7S7334C53v13Ev();
extern void _ZN7S7334C53v14Ev();
extern void _ZN7S7334C53v15Ev();
extern void _ZN7S7334C53v16Ev();
extern void _ZN7S7334C53v13Ev();
extern void _ZN7S7334C53v14Ev();
extern void _ZN7S7334C53v15Ev();
extern void _ZN7S7334C53v16Ev();
extern void ABISELECT(_ZTv0_n24_N7S7334C1D1Ev,_ZTv0_n12_N7S7334C1D1Ev)();
extern void ABISELECT(_ZThn376_N7S7334C1D1Ev,_ZThn200_N7S7334C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7334C1D0Ev,_ZTv0_n12_N7S7334C1D0Ev)();
extern void ABISELECT(_ZThn376_N7S7334C1D0Ev,_ZThn200_N7S7334C1D0Ev)() __attribute__((weak));
extern void _ZN7S7334C73v36Ev();
extern void _ZN7S7334C73v37Ev();
extern void _ZN7S7334C73v38Ev();
extern void _ZN7S7334C73v39Ev();
extern void _ZN7S7334C73v40Ev();
extern void _ZN7S7334C73v41Ev();
static  VTBL_ENTRY vtc_S7334C1[] = {
  ABISELECT(376,200),
  ABISELECT(304,164),
  ABISELECT(184,104),
  ABISELECT(64,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7334C1[0]),
  (VTBL_ENTRY)&_ZN7S7334C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7334C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7334C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7334C23v33Ev,
  (VTBL_ENTRY)&_ZN7S7334C23v34Ev,
  (VTBL_ENTRY)&_ZN7S7334C23v35Ev,
  (VTBL_ENTRY)&_ZN7S7334C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7334C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7334C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7334C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7334C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7334C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7334C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7334C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7334C12v7Ev,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S7334C1[0]),
  (VTBL_ENTRY)&_ZN7S7334C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7334C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v21Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S7334C1[0]),
  (VTBL_ENTRY)&_ZN7S7334C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  ABISELECT(-184,-104),
  (VTBL_ENTRY)&(_ZTI7S7334C1[0]),
  (VTBL_ENTRY)&_ZN7S7334C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7334C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v26Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v29Ev,
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI7S7334C1[0]),
  (VTBL_ENTRY)&_ZN7S7334C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-164),
  (VTBL_ENTRY)&(_ZTI7S7334C1[0]),
  (VTBL_ENTRY)&_ZN7S7334C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-376,-200),
  ABISELECT(-376,-200),
  (VTBL_ENTRY)&(_ZTI7S7334C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7334C1D1Ev,_ZTv0_n12_N7S7334C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7334C1D0Ev,_ZTv0_n12_N7S7334C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7334C73v36Ev,
  (VTBL_ENTRY)&_ZN7S7334C73v37Ev,
  (VTBL_ENTRY)&_ZN7S7334C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7334C73v39Ev,
  (VTBL_ENTRY)&_ZN7S7334C73v40Ev,
  (VTBL_ENTRY)&_ZN7S7334C73v41Ev,
};
extern VTBL_ENTRY _ZTV7S7334C1[];
extern void _ZN7S7334C23v30Ev();
extern void _ZN7S7334C23v31Ev();
extern void _ZN7S7334C23v32Ev();
extern void _ZN7S7334C23v33Ev();
extern void _ZN7S7334C23v34Ev();
extern void _ZN7S7334C23v35Ev();
static  VTBL_ENTRY _tg__ZTV7S7334C2__7S7334C1[] = {
  ABISELECT(304,164),
  ABISELECT(184,104),
  ABISELECT(64,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7334C2[0]),
  (VTBL_ENTRY)&_ZN7S7334C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7334C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7334C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7334C23v33Ev,
  (VTBL_ENTRY)&_ZN7S7334C23v34Ev,
  (VTBL_ENTRY)&_ZN7S7334C23v35Ev,
};
extern void _ZN7S7334C42v8Ev();
extern void _ZN7S7334C42v9Ev();
extern void _ZN7S7334C43v10Ev();
extern void _ZN7S7334C43v11Ev();
extern void _ZN7S7334C43v12Ev();
extern void _ZN7S7334C33v17Ev();
extern void _ZN7S7334C33v18Ev();
extern void _ZN7S7334C33v19Ev();
extern void _ZN7S7334C33v20Ev();
extern void _ZN7S7334C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7334C3__7S7334C2__7S7334C1[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S7334C2[0]),
  (VTBL_ENTRY)&_ZN7S7334C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7334C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v21Ev,
};
extern void _ZN7S7334C53v13Ev();
extern void _ZN7S7334C53v14Ev();
extern void _ZN7S7334C53v15Ev();
extern void _ZN7S7334C53v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7334C57S7334C3__7S7334C2__7S7334C1[] = {
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S7334C2[0]),
  (VTBL_ENTRY)&_ZN7S7334C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v16Ev,
};
extern void _ZN7S7334C42v8Ev();
extern void _ZN7S7334C42v9Ev();
extern void _ZN7S7334C43v10Ev();
extern void _ZN7S7334C43v11Ev();
extern void _ZN7S7334C43v12Ev();
extern void _ZN7S7334C33v17Ev();
extern void _ZN7S7334C33v18Ev();
extern void _ZN7S7334C33v19Ev();
extern void _ZN7S7334C33v20Ev();
extern void _ZN7S7334C33v21Ev();
extern void _ZN7S7334C63v22Ev();
extern void _ZN7S7334C63v23Ev();
extern void _ZN7S7334C63v24Ev();
extern void _ZN7S7334C63v25Ev();
extern void _ZN7S7334C63v26Ev();
extern void _ZN7S7334C63v27Ev();
extern void _ZN7S7334C63v28Ev();
extern void _ZN7S7334C63v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7334C6__7S7334C2__7S7334C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  ABISELECT(-184,-104),
  (VTBL_ENTRY)&(_ZTI7S7334C2[0]),
  (VTBL_ENTRY)&_ZN7S7334C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7334C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v26Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v29Ev,
};
extern void _ZN7S7334C53v13Ev();
extern void _ZN7S7334C53v14Ev();
extern void _ZN7S7334C53v15Ev();
extern void _ZN7S7334C53v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7334C5__A1__7S7334C2__7S7334C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-304,-164),
  (VTBL_ENTRY)&(_ZTI7S7334C2[0]),
  (VTBL_ENTRY)&_ZN7S7334C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v16Ev,
};
extern void _ZN7S7334C53v13Ev();
extern void _ZN7S7334C53v14Ev();
extern void _ZN7S7334C53v15Ev();
extern void _ZN7S7334C53v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7334C57S7334C37S7334C6__A2__7S7334C2__7S7334C1[] = {
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI7S7334C2[0]),
  (VTBL_ENTRY)&_ZN7S7334C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v16Ev,
};
extern void _ZN7S7334C42v8Ev();
extern void _ZN7S7334C42v9Ev();
extern void _ZN7S7334C43v10Ev();
extern void _ZN7S7334C43v11Ev();
extern void _ZN7S7334C43v12Ev();
extern void _ZN7S7334C33v17Ev();
extern void _ZN7S7334C33v18Ev();
extern void _ZN7S7334C33v19Ev();
extern void _ZN7S7334C33v20Ev();
extern void _ZN7S7334C33v21Ev();
extern void _ZN7S7334C63v22Ev();
extern void _ZN7S7334C63v23Ev();
extern void _ZN7S7334C63v24Ev();
extern void _ZN7S7334C63v25Ev();
extern void _ZN7S7334C63v26Ev();
extern void _ZN7S7334C63v27Ev();
extern void _ZN7S7334C63v28Ev();
extern void _ZN7S7334C63v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7334C6__7S7334C1[] = {
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7334C6[0]),
  (VTBL_ENTRY)&_ZN7S7334C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7334C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7334C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7334C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v26Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7334C63v29Ev,
};
extern void _ZN7S7334C53v13Ev();
extern void _ZN7S7334C53v14Ev();
extern void _ZN7S7334C53v15Ev();
extern void _ZN7S7334C53v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7334C5__7S7334C6__7S7334C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7334C6[0]),
  (VTBL_ENTRY)&_ZN7S7334C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7334C53v16Ev,
};
static  VTT_ENTRY vtt_S7334C1[] = {
  {&(_ZTV7S7334C1[6]),  6,129},
  {&(_tg__ZTV7S7334C2__7S7334C1[5]),  5,11},
  {&(_tg__ZTV7S7334C3__7S7334C2__7S7334C1[16]),  16,26},
  {&(_tg__ZTV7S7334C57S7334C3__7S7334C2__7S7334C1[2]),  2,6},
  {&(_tg__ZTV7S7334C6__7S7334C2__7S7334C1[25]),  25,43},
  {&(_tg__ZTV7S7334C5__A1__7S7334C2__7S7334C1[6]),  6,10},
  {&(_tg__ZTV7S7334C57S7334C37S7334C6__A2__7S7334C2__7S7334C1[2]),  2,6},
  {&(_ZTV7S7334C1[37]),  37,129},
  {&(_ZTV7S7334C1[49]),  49,129},
  {&(_ZTV7S7334C1[78]),  78,129},
  {&(_ZTV7S7334C1[108]),  108,129},
  {&(_ZTV7S7334C1[98]),  98,129},
  {&(_ZTV7S7334C1[121]),  121,129},
  {&(_tg__ZTV7S7334C6__7S7334C1[3]),  3,21},
  {&(_tg__ZTV7S7334C5__7S7334C6__7S7334C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S7334C1[];
extern  VTBL_ENTRY _ZTV7S7334C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7334C1[];
static VTBL_ENTRY alt_thunk_names79[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7334C1D0Ev,_ZTv0_n12_N7S7334C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N7S7334C1D0Ev,_ZThn200_N7S7334C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7334C1D1Ev,_ZTv0_n12_N7S7334C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N7S7334C1D1Ev,_ZThn200_N7S7334C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7334C1 = {  "S7334C1", // class name
  bases_S7334C1, 10,
  &(vtc_S7334C1[0]), // expected_vtbl_contents
  &(vtt_S7334C1[0]), // expected_vtt_contents
  ABISELECT(392,208), // object size
  NSPAIRA(_ZTI7S7334C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7334C1),129, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7334C1),15, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names79,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10220C2_nt  {
  virtual  ~S10220C2_nt(); // _ZN11S10220C2_ntD1Ev
  virtual void  v8(); // _ZN11S10220C2_nt2v8Ev
  virtual void  v9(); // _ZN11S10220C2_nt2v9Ev
  virtual void  v10(); // _ZN11S10220C2_nt3v10Ev
  virtual void  v11(); // _ZN11S10220C2_nt3v11Ev
  virtual void  v12(); // _ZN11S10220C2_nt3v12Ev
  virtual void  v13(); // _ZN11S10220C2_nt3v13Ev
  virtual void  v14(); // _ZN11S10220C2_nt3v14Ev
  S10220C2_nt(); // tgen
};
//SIG(-1 S10220C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S10220C2_nt ::~S10220C2_nt(){ note_dtor("S10220C2_nt", this);}
void  S10220C2_nt ::v8(){vfunc_called(this, "_ZN11S10220C2_nt2v8Ev");}
void  S10220C2_nt ::v9(){vfunc_called(this, "_ZN11S10220C2_nt2v9Ev");}
void  S10220C2_nt ::v10(){vfunc_called(this, "_ZN11S10220C2_nt3v10Ev");}
void  S10220C2_nt ::v11(){vfunc_called(this, "_ZN11S10220C2_nt3v11Ev");}
void  S10220C2_nt ::v12(){vfunc_called(this, "_ZN11S10220C2_nt3v12Ev");}
void  S10220C2_nt ::v13(){vfunc_called(this, "_ZN11S10220C2_nt3v13Ev");}
void  S10220C2_nt ::v14(){vfunc_called(this, "_ZN11S10220C2_nt3v14Ev");}
S10220C2_nt ::S10220C2_nt(){ note_ctor("S10220C2_nt", this);} // tgen

//skip512 S10220C2_nt

#else // __cplusplus

extern void _ZN11S10220C2_ntC1Ev();
extern void _ZN11S10220C2_ntD1Ev();
Name_Map name_map_S10220C2_nt[] = {
  NSPAIR(_ZN11S10220C2_ntC1Ev),
  NSPAIR(_ZN11S10220C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10220C2_nt[];
extern void _ZN11S10220C2_ntD1Ev();
extern void _ZN11S10220C2_ntD0Ev();
extern void _ZN11S10220C2_nt2v8Ev();
extern void _ZN11S10220C2_nt2v9Ev();
extern void _ZN11S10220C2_nt3v10Ev();
extern void _ZN11S10220C2_nt3v11Ev();
extern void _ZN11S10220C2_nt3v12Ev();
extern void _ZN11S10220C2_nt3v13Ev();
extern void _ZN11S10220C2_nt3v14Ev();
static  VTBL_ENTRY vtc_S10220C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10220C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S10220C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10220C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10220C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S10220C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10220C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10220C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10220C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10220C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10220C2_nt3v14Ev,
};
extern VTBL_ENTRY _ZTI11S10220C2_nt[];
VTBL_ENTRY *P__ZTI11S10220C2_nt = _ZTI11S10220C2_nt; 
extern  VTBL_ENTRY _ZTV11S10220C2_nt[];
Class_Descriptor cd_S10220C2_nt = {  "S10220C2_nt", // class name
  0,0,//no base classes
  &(vtc_S10220C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S10220C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10220C2_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10220C5_nt  {
  long s10220c5f0[4];
};
//SIG(-1 S10220C5_nt) C1{ Fl[4]}



//skip512 S10220C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10220C4_nt  {
  ::S10220C5_nt s10220c4f0;
  void  mf10220c4(); // _ZN11S10220C4_nt9mf10220c4Ev
};
//SIG(-1 S10220C4_nt) C1{ m FC2{ Fl[4]}}


void  S10220C4_nt ::mf10220c4(){}

//skip512 S10220C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10220C9_nt  {
  char s10220c9f0;
  void  mf10220c9(); // _ZN11S10220C9_nt9mf10220c9Ev
};
//SIG(-1 S10220C9_nt) C1{ m Fc}


void  S10220C9_nt ::mf10220c9(){}

//skip512 S10220C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10220C13_nt  {
  char s10220c13f0;
  int s10220c13f1;
  void *s10220c13f2;
  int s10220c13f3;
  void *s10220c13f4;
  void  mf10220c13(); // _ZN12S10220C13_nt10mf10220c13Ev
};
//SIG(-1 S10220C13_nt) C1{ m Fc Fi Fp Fi Fp}


void  S10220C13_nt ::mf10220c13(){}

//skip512 S10220C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10220C14_nt  {
  void *s10220c14f0;
  int s10220c14f1;
  ::S3600C6_nt s10220c14f2;
  ::S1325C18_nt s10220c14f3;
  void  mf10220c14(); // _ZN12S10220C14_nt10mf10220c14Ev
};
//SIG(-1 S10220C14_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S10220C14_nt ::mf10220c14(){}

//skip512 S10220C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10220C1  : S10220C2_nt , S3600C19 {
  char s10220c1f0;
  int s10220c1f1[3];
  void *s10220c1f2[2];
  int s10220c1f3;
  ::S10220C4_nt s10220c1f4;
  ::S3600C18 s10220c1f5;
  int s10220c1f6[6];
  ::S10220C9_nt s10220c1f7;
  ::S10220C4_nt s10220c1f8;
  ::S3600C4_nt s10220c1f9;
  int s10220c1f10;
  ::S10220C13_nt s10220c1f11;
  int s10220c1f12[2];
  ::S10220C4_nt s10220c1f13;
  ::S10220C14_nt s10220c1f14;
  char s10220c1f15[2];
  virtual  ~S10220C1(); // _ZN8S10220C1D1Ev
  virtual void  v1(); // _ZN8S10220C12v1Ev
  virtual void  v2(); // _ZN8S10220C12v2Ev
  virtual void  v3(); // _ZN8S10220C12v3Ev
  virtual void  v4(); // _ZN8S10220C12v4Ev
  virtual void  v5(); // _ZN8S10220C12v5Ev
  virtual void  v6(); // _ZN8S10220C12v6Ev
  virtual void  v7(); // _ZN8S10220C12v7Ev
  S10220C1(); // tgen
};
//SIG(1 S10220C1) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14} BC3{ m} vd v1 v2 v3 v4 v5 v6 v7 Fc Fi[3] Fp[2] Fi FC4{ m FC5{ Fl[4]}} FC6{ m Fp Fi FC3 FC3} Fi[6] FC7{ m Fc} FC4 FC8{ m Fp Fi FC9{ m} FC10{ m}} Fi FC11{ m Fc Fi Fp Fi Fp} Fi[2] FC4 FC12{ m Fp Fi FC10 FC9} Fc[2]}


 S10220C1 ::~S10220C1(){ note_dtor("S10220C1", this);}
void  S10220C1 ::v1(){vfunc_called(this, "_ZN8S10220C12v1Ev");}
void  S10220C1 ::v2(){vfunc_called(this, "_ZN8S10220C12v2Ev");}
void  S10220C1 ::v3(){vfunc_called(this, "_ZN8S10220C12v3Ev");}
void  S10220C1 ::v4(){vfunc_called(this, "_ZN8S10220C12v4Ev");}
void  S10220C1 ::v5(){vfunc_called(this, "_ZN8S10220C12v5Ev");}
void  S10220C1 ::v6(){vfunc_called(this, "_ZN8S10220C12v6Ev");}
void  S10220C1 ::v7(){vfunc_called(this, "_ZN8S10220C12v7Ev");}
S10220C1 ::S10220C1(){ note_ctor("S10220C1", this);} // tgen

static void Test_S10220C1()
{
  extern Class_Descriptor cd_S10220C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,46)];
    init_test(&cd_S10220C1, buf);
    S10220C1 *dp, &lv = *(dp=new (buf) S10220C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,180), "sizeof(S10220C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10220C1)");
    check_base_class_offset(lv, (S10220C2_nt*), 0, "S10220C1");
    check_base_class_offset(lv, (S3600C19*), 0, "S10220C1");
    check_field_offset(lv, s10220c1f0, ABISELECT(8,4), "S10220C1.s10220c1f0");
    check_field_offset(lv, s10220c1f1, ABISELECT(12,8), "S10220C1.s10220c1f1");
    check_field_offset(lv, s10220c1f2, ABISELECT(24,20), "S10220C1.s10220c1f2");
    check_field_offset(lv, s10220c1f3, ABISELECT(40,28), "S10220C1.s10220c1f3");
    check_field_offset(lv, s10220c1f4, ABISELECT(48,32), "S10220C1.s10220c1f4");
    check_field_offset(lv, s10220c1f5, ABISELECT(80,48), "S10220C1.s10220c1f5");
    check_field_offset(lv, s10220c1f6, ABISELECT(96,60), "S10220C1.s10220c1f6");
    check_field_offset(lv, s10220c1f7, ABISELECT(120,84), "S10220C1.s10220c1f7");
    check_field_offset(lv, s10220c1f8, ABISELECT(128,88), "S10220C1.s10220c1f8");
    check_field_offset(lv, s10220c1f9, ABISELECT(160,104), "S10220C1.s10220c1f9");
    check_field_offset(lv, s10220c1f10, ABISELECT(176,116), "S10220C1.s10220c1f10");
    check_field_offset(lv, s10220c1f11, ABISELECT(184,120), "S10220C1.s10220c1f11");
    check_field_offset(lv, s10220c1f12, ABISELECT(216,140), "S10220C1.s10220c1f12");
    check_field_offset(lv, s10220c1f13, ABISELECT(224,148), "S10220C1.s10220c1f13");
    check_field_offset(lv, s10220c1f14, ABISELECT(256,164), "S10220C1.s10220c1f14");
    check_field_offset(lv, s10220c1f15, ABISELECT(272,176), "S10220C1.s10220c1f15");
    test_class_info(&lv, &cd_S10220C1);
    dp->~S10220C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10220C1(Test_S10220C1, "S10220C1", ABISELECT(280,180));

#else // __cplusplus

extern void _ZN8S10220C1C1Ev();
extern void _ZN8S10220C1D1Ev();
Name_Map name_map_S10220C1[] = {
  NSPAIR(_ZN8S10220C1C1Ev),
  NSPAIR(_ZN8S10220C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10220C2_nt;
extern VTBL_ENTRY _ZTI11S10220C2_nt[];
extern  VTBL_ENTRY _ZTV11S10220C2_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S10220C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10220C2_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_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10220C1[];
extern void _ZN8S10220C1D1Ev();
extern void _ZN8S10220C1D0Ev();
extern void _ZN11S10220C2_nt2v8Ev();
extern void _ZN11S10220C2_nt2v9Ev();
extern void _ZN11S10220C2_nt3v10Ev();
extern void _ZN11S10220C2_nt3v11Ev();
extern void _ZN11S10220C2_nt3v12Ev();
extern void _ZN11S10220C2_nt3v13Ev();
extern void _ZN11S10220C2_nt3v14Ev();
extern void _ZN8S10220C12v1Ev();
extern void _ZN8S10220C12v2Ev();
extern void _ZN8S10220C12v3Ev();
extern void _ZN8S10220C12v4Ev();
extern void _ZN8S10220C12v5Ev();
extern void _ZN8S10220C12v6Ev();
extern void _ZN8S10220C12v7Ev();
static  VTBL_ENTRY vtc_S10220C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10220C1[0]),
  (VTBL_ENTRY)&_ZN8S10220C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10220C1D0Ev,
  (VTBL_ENTRY)&_ZN11S10220C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S10220C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10220C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10220C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10220C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10220C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10220C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN8S10220C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10220C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10220C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10220C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10220C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10220C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10220C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S10220C1[];
extern  VTBL_ENTRY _ZTV8S10220C1[];
Class_Descriptor cd_S10220C1 = {  "S10220C1", // class name
  bases_S10220C1, 2,
  &(vtc_S10220C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,180), // object size
  NSPAIRA(_ZTI8S10220C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S10220C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20009C2  {
  char s20009c2f0;
  long double s20009c2f1[7];
  virtual void  v14(); // _ZN8S20009C23v14Ev
  virtual void  v15(); // _ZN8S20009C23v15Ev
  virtual void  v16(); // _ZN8S20009C23v16Ev
  virtual void  v17(); // _ZN8S20009C23v17Ev
  ~S20009C2(); // tgen
  S20009C2(); // tgen
};
//SIG(-1 S20009C2) C1{ v1 v2 v3 v4 Fc FD[7]}


void  S20009C2 ::v14(){vfunc_called(this, "_ZN8S20009C23v14Ev");}
void  S20009C2 ::v15(){vfunc_called(this, "_ZN8S20009C23v15Ev");}
void  S20009C2 ::v16(){vfunc_called(this, "_ZN8S20009C23v16Ev");}
void  S20009C2 ::v17(){vfunc_called(this, "_ZN8S20009C23v17Ev");}
S20009C2 ::~S20009C2(){ note_dtor("S20009C2", this);} // tgen
S20009C2 ::S20009C2(){ note_ctor("S20009C2", this);} // tgen

static void Test_S20009C2()
{
  extern Class_Descriptor cd_S20009C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,24)];
    init_test(&cd_S20009C2, buf);
    S20009C2 *dp, &lv = *(dp=new (buf) S20009C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,92), "sizeof(S20009C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20009C2)");
    check_field_offset(lv, s20009c2f0, ABISELECT(8,4), "S20009C2.s20009c2f0");
    check_field_offset(lv, s20009c2f1, ABISELECT(16,8), "S20009C2.s20009c2f1");
    test_class_info(&lv, &cd_S20009C2);
    dp->~S20009C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20009C2(Test_S20009C2, "S20009C2", ABISELECT(128,92));

#else // __cplusplus

extern void _ZN8S20009C2C1Ev();
extern void _ZN8S20009C2D1Ev();
Name_Map name_map_S20009C2[] = {
  NSPAIR(_ZN8S20009C2C1Ev),
  NSPAIR(_ZN8S20009C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20009C2[];
extern void _ZN8S20009C23v14Ev();
extern void _ZN8S20009C23v15Ev();
extern void _ZN8S20009C23v16Ev();
extern void _ZN8S20009C23v17Ev();
static  VTBL_ENTRY vtc_S20009C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20009C2[0]),
  (VTBL_ENTRY)&_ZN8S20009C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v17Ev,
};
extern VTBL_ENTRY _ZTI8S20009C2[];
extern  VTBL_ENTRY _ZTV8S20009C2[];
Class_Descriptor cd_S20009C2 = {  "S20009C2", // class name
  0,0,//no base classes
  &(vtc_S20009C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,92), // object size
  NSPAIRA(_ZTI8S20009C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20009C2),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  S20009C4  {
  long s20009c4f0[2];
  virtual void  v5(); // _ZN8S20009C42v5Ev
  virtual void  v6(); // _ZN8S20009C42v6Ev
  virtual void  v7(); // _ZN8S20009C42v7Ev
  ~S20009C4(); // tgen
  S20009C4(); // tgen
};
//SIG(-1 S20009C4) C1{ v1 v2 v3 Fl[2]}


void  S20009C4 ::v5(){vfunc_called(this, "_ZN8S20009C42v5Ev");}
void  S20009C4 ::v6(){vfunc_called(this, "_ZN8S20009C42v6Ev");}
void  S20009C4 ::v7(){vfunc_called(this, "_ZN8S20009C42v7Ev");}
S20009C4 ::~S20009C4(){ note_dtor("S20009C4", this);} // tgen
S20009C4 ::S20009C4(){ note_ctor("S20009C4", this);} // tgen

static void Test_S20009C4()
{
  extern Class_Descriptor cd_S20009C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20009C4, buf);
    S20009C4 *dp, &lv = *(dp=new (buf) S20009C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20009C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20009C4)");
    check_field_offset(lv, s20009c4f0, ABISELECT(8,4), "S20009C4.s20009c4f0");
    test_class_info(&lv, &cd_S20009C4);
    dp->~S20009C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20009C4(Test_S20009C4, "S20009C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20009C4C1Ev();
extern void _ZN8S20009C4D1Ev();
Name_Map name_map_S20009C4[] = {
  NSPAIR(_ZN8S20009C4C1Ev),
  NSPAIR(_ZN8S20009C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20009C4[];
extern void _ZN8S20009C42v5Ev();
extern void _ZN8S20009C42v6Ev();
extern void _ZN8S20009C42v7Ev();
static  VTBL_ENTRY vtc_S20009C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20009C4[0]),
  (VTBL_ENTRY)&_ZN8S20009C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20009C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20009C42v7Ev,
};
extern VTBL_ENTRY _ZTI8S20009C4[];
extern  VTBL_ENTRY _ZTV8S20009C4[];
Class_Descriptor cd_S20009C4 = {  "S20009C4", // class name
  0,0,//no base classes
  &(vtc_S20009C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20009C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20009C4),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  S20009C7  {
  virtual  ~S20009C7(); // _ZN8S20009C7D1Ev
  virtual void  v8(); // _ZN8S20009C72v8Ev
  S20009C7(); // tgen
};
//SIG(-1 S20009C7) C1{ vd v1}


 S20009C7 ::~S20009C7(){ note_dtor("S20009C7", this);}
void  S20009C7 ::v8(){vfunc_called(this, "_ZN8S20009C72v8Ev");}
S20009C7 ::S20009C7(){ note_ctor("S20009C7", this);} // tgen

static void Test_S20009C7()
{
  extern Class_Descriptor cd_S20009C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20009C7, buf);
    S20009C7 *dp, &lv = *(dp=new (buf) S20009C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20009C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20009C7)");
    test_class_info(&lv, &cd_S20009C7);
    dp->~S20009C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20009C7(Test_S20009C7, "S20009C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20009C7C1Ev();
extern void _ZN8S20009C7D1Ev();
Name_Map name_map_S20009C7[] = {
  NSPAIR(_ZN8S20009C7C1Ev),
  NSPAIR(_ZN8S20009C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20009C7[];
extern void _ZN8S20009C7D1Ev();
extern void _ZN8S20009C7D0Ev();
extern void _ZN8S20009C72v8Ev();
static  VTBL_ENTRY vtc_S20009C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20009C7[0]),
  (VTBL_ENTRY)&_ZN8S20009C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20009C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20009C72v8Ev,
};
extern VTBL_ENTRY _ZTI8S20009C7[];
extern  VTBL_ENTRY _ZTV8S20009C7[];
Class_Descriptor cd_S20009C7 = {  "S20009C7", // class name
  0,0,//no base classes
  &(vtc_S20009C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20009C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20009C7),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  S20009C6  : S20009C7 {
  void *s20009c6f0;
  __tsi64 s20009c6f1:7;
  virtual  ~S20009C6(); // _ZN8S20009C6D1Ev
  virtual void  v9(); // _ZN8S20009C62v9Ev
  virtual void  v10(); // _ZN8S20009C63v10Ev
  virtual void  v11(); // _ZN8S20009C63v11Ev
  virtual void  v12(); // _ZN8S20009C63v12Ev
  virtual void  v13(); // _ZN8S20009C63v13Ev
  S20009C6(); // tgen
};
//SIG(-1 S20009C6) C1{ BC2{ vd v6} vd v1 v2 v3 v4 v5 Fp FL:7}


 S20009C6 ::~S20009C6(){ note_dtor("S20009C6", this);}
void  S20009C6 ::v9(){vfunc_called(this, "_ZN8S20009C62v9Ev");}
void  S20009C6 ::v10(){vfunc_called(this, "_ZN8S20009C63v10Ev");}
void  S20009C6 ::v11(){vfunc_called(this, "_ZN8S20009C63v11Ev");}
void  S20009C6 ::v12(){vfunc_called(this, "_ZN8S20009C63v12Ev");}
void  S20009C6 ::v13(){vfunc_called(this, "_ZN8S20009C63v13Ev");}
S20009C6 ::S20009C6(){ note_ctor("S20009C6", this);} // tgen

static void Test_S20009C6()
{
  extern Class_Descriptor cd_S20009C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S20009C6, buf);
    S20009C6 *dp, &lv = *(dp=new (buf) S20009C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20009C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20009C6)");
    check_base_class_offset(lv, (S20009C7*), 0, "S20009C6");
    check_field_offset(lv, s20009c6f0, ABISELECT(8,4), "S20009C6.s20009c6f0");
    set_bf_and_test(lv, s20009c6f1, ABISELECT(16,8), 0, 7, 1, "S20009C6");
    set_bf_and_test(lv, s20009c6f1, ABISELECT(16,8), 0, 7, hide_sll(1LL<<6), "S20009C6");
    test_class_info(&lv, &cd_S20009C6);
    dp->~S20009C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20009C6(Test_S20009C6, "S20009C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20009C6C1Ev();
extern void _ZN8S20009C6D1Ev();
Name_Map name_map_S20009C6[] = {
  NSPAIR(_ZN8S20009C6C1Ev),
  NSPAIR(_ZN8S20009C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20009C7;
extern VTBL_ENTRY _ZTI8S20009C7[];
extern  VTBL_ENTRY _ZTV8S20009C7[];
static Base_Class bases_S20009C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20009C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S20009C6[];
extern void _ZN8S20009C6D1Ev();
extern void _ZN8S20009C6D0Ev();
extern void _ZN8S20009C72v8Ev();
extern void _ZN8S20009C62v9Ev();
extern void _ZN8S20009C63v10Ev();
extern void _ZN8S20009C63v11Ev();
extern void _ZN8S20009C63v12Ev();
extern void _ZN8S20009C63v13Ev();
static  VTBL_ENTRY vtc_S20009C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20009C6[0]),
  (VTBL_ENTRY)&_ZN8S20009C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20009C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20009C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20009C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v13Ev,
};
extern VTBL_ENTRY _ZTI8S20009C6[];
extern  VTBL_ENTRY _ZTV8S20009C6[];
Class_Descriptor cd_S20009C6 = {  "S20009C6", // class name
  bases_S20009C6, 1,
  &(vtc_S20009C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20009C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20009C6),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20009C5  : S20009C6 , virtual S20009C2 {
  int s20009c5f0;
  virtual  ~S20009C5(); // _ZN8S20009C5D2Ev
  virtual void  v18(); // _ZN8S20009C53v18Ev
  virtual void  v19(); // _ZN8S20009C53v19Ev
  virtual void  v20(); // _ZN8S20009C53v20Ev
  virtual void  v21(); // _ZN8S20009C53v21Ev
  virtual void  v22(); // _ZN8S20009C53v22Ev
  virtual void  v23(); // _ZN8S20009C53v23Ev
  S20009C5(); // tgen
};
//SIG(-1 S20009C5) C1{ BC2{ BC3{ vd v7} vd v8 v9 v10 v11 v12 Fp FL:7} VBC4{ v13 v14 v15 v16 Fc FD[7]} vd v1 v2 v3 v4 v5 v6 Fi}


 S20009C5 ::~S20009C5(){ note_dtor("S20009C5", this);}
void  S20009C5 ::v18(){vfunc_called(this, "_ZN8S20009C53v18Ev");}
void  S20009C5 ::v19(){vfunc_called(this, "_ZN8S20009C53v19Ev");}
void  S20009C5 ::v20(){vfunc_called(this, "_ZN8S20009C53v20Ev");}
void  S20009C5 ::v21(){vfunc_called(this, "_ZN8S20009C53v21Ev");}
void  S20009C5 ::v22(){vfunc_called(this, "_ZN8S20009C53v22Ev");}
void  S20009C5 ::v23(){vfunc_called(this, "_ZN8S20009C53v23Ev");}
S20009C5 ::S20009C5(){ note_ctor("S20009C5", this);} // tgen

static void Test_S20009C5()
{
  extern Class_Descriptor cd_S20009C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S20009C5, buf);
    S20009C5 *dp, &lv = *(dp=new (buf) S20009C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S20009C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20009C5)");
    check_base_class_offset(lv, (S20009C7*)(S20009C6*), 0, "S20009C5");
    check_base_class_offset(lv, (S20009C6*), 0, "S20009C5");
    check_base_class_offset(lv, (S20009C2*), ABISELECT(32,16), "S20009C5");
    check_field_offset(lv, s20009c5f0, ABISELECT(20,12), "S20009C5.s20009c5f0");
    test_class_info(&lv, &cd_S20009C5);
    dp->~S20009C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20009C5(Test_S20009C5, "S20009C5", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN8S20009C5C1Ev();
extern void _ZN8S20009C5D2Ev();
Name_Map name_map_S20009C5[] = {
  NSPAIR(_ZN8S20009C5C1Ev),
  NSPAIR(_ZN8S20009C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20009C7;
extern VTBL_ENTRY _ZTI8S20009C7[];
extern  VTBL_ENTRY _ZTV8S20009C7[];
extern Class_Descriptor cd_S20009C6;
extern VTBL_ENTRY _ZTI8S20009C6[];
extern  VTBL_ENTRY _ZTV8S20009C6[];
extern Class_Descriptor cd_S20009C2;
extern VTBL_ENTRY _ZTI8S20009C2[];
extern  VTBL_ENTRY _ZTV8S20009C2[];
static Base_Class bases_S20009C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20009C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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
  0, 0},
  {&cd_S20009C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20009C2,    ABISELECT(32,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20009C5[];
extern void _ZN8S20009C5D1Ev();
extern void _ZN8S20009C5D0Ev();
extern void _ZN8S20009C72v8Ev();
extern void _ZN8S20009C62v9Ev();
extern void _ZN8S20009C63v10Ev();
extern void _ZN8S20009C63v11Ev();
extern void _ZN8S20009C63v12Ev();
extern void _ZN8S20009C63v13Ev();
extern void _ZN8S20009C53v18Ev();
extern void _ZN8S20009C53v19Ev();
extern void _ZN8S20009C53v20Ev();
extern void _ZN8S20009C53v21Ev();
extern void _ZN8S20009C53v22Ev();
extern void _ZN8S20009C53v23Ev();
extern void _ZN8S20009C23v14Ev();
extern void _ZN8S20009C23v15Ev();
extern void _ZN8S20009C23v16Ev();
extern void _ZN8S20009C23v17Ev();
static  VTBL_ENTRY vtc_S20009C5[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20009C5[0]),
  (VTBL_ENTRY)&_ZN8S20009C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20009C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20009C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20009C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20009C5[0]),
  (VTBL_ENTRY)&_ZN8S20009C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v17Ev,
};
extern VTBL_ENTRY _ZTV8S20009C5[];
static  VTT_ENTRY vtt_S20009C5[] = {
  {&(_ZTV8S20009C5[3]),  3,27},
  {&(_ZTV8S20009C5[23]),  23,27},
};
extern VTBL_ENTRY _ZTI8S20009C5[];
extern  VTBL_ENTRY _ZTV8S20009C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20009C5[];
Class_Descriptor cd_S20009C5 = {  "S20009C5", // class name
  bases_S20009C5, 3,
  &(vtc_S20009C5[0]), // expected_vtbl_contents
  &(vtt_S20009C5[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI8S20009C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20009C5),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20009C5),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20009C8  {
  void *s20009c8f0[4];
  virtual void  v24(); // _ZN8S20009C83v24Ev
  virtual void  v25(); // _ZN8S20009C83v25Ev
  virtual void  v26(); // _ZN8S20009C83v26Ev
  virtual void  v27(); // _ZN8S20009C83v27Ev
  virtual void  v28(); // _ZN8S20009C83v28Ev
  ~S20009C8(); // tgen
  S20009C8(); // tgen
};
//SIG(-1 S20009C8) C1{ v1 v2 v3 v4 v5 Fp[4]}


void  S20009C8 ::v24(){vfunc_called(this, "_ZN8S20009C83v24Ev");}
void  S20009C8 ::v25(){vfunc_called(this, "_ZN8S20009C83v25Ev");}
void  S20009C8 ::v26(){vfunc_called(this, "_ZN8S20009C83v26Ev");}
void  S20009C8 ::v27(){vfunc_called(this, "_ZN8S20009C83v27Ev");}
void  S20009C8 ::v28(){vfunc_called(this, "_ZN8S20009C83v28Ev");}
S20009C8 ::~S20009C8(){ note_dtor("S20009C8", this);} // tgen
S20009C8 ::S20009C8(){ note_ctor("S20009C8", this);} // tgen

static void Test_S20009C8()
{
  extern Class_Descriptor cd_S20009C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20009C8, buf);
    S20009C8 *dp, &lv = *(dp=new (buf) S20009C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20009C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20009C8)");
    check_field_offset(lv, s20009c8f0, ABISELECT(8,4), "S20009C8.s20009c8f0");
    test_class_info(&lv, &cd_S20009C8);
    dp->~S20009C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20009C8(Test_S20009C8, "S20009C8", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20009C8C1Ev();
extern void _ZN8S20009C8D1Ev();
Name_Map name_map_S20009C8[] = {
  NSPAIR(_ZN8S20009C8C1Ev),
  NSPAIR(_ZN8S20009C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20009C8[];
extern void _ZN8S20009C83v24Ev();
extern void _ZN8S20009C83v25Ev();
extern void _ZN8S20009C83v26Ev();
extern void _ZN8S20009C83v27Ev();
extern void _ZN8S20009C83v28Ev();
static  VTBL_ENTRY vtc_S20009C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20009C8[0]),
  (VTBL_ENTRY)&_ZN8S20009C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20009C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20009C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20009C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20009C83v28Ev,
};
extern VTBL_ENTRY _ZTI8S20009C8[];
extern  VTBL_ENTRY _ZTV8S20009C8[];
Class_Descriptor cd_S20009C8 = {  "S20009C8", // class name
  0,0,//no base classes
  &(vtc_S20009C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20009C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20009C8),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  S20009C9  : virtual S20009C5 {
  __tsi64 s20009c9f0;
  int s20009c9f1;
  virtual  ~S20009C9(); // _ZN8S20009C9D2Ev
  virtual void  v29(); // _ZN8S20009C93v29Ev
  virtual void  v30(); // _ZN8S20009C93v30Ev
  virtual void  v31(); // _ZN8S20009C93v31Ev
  virtual void  v32(); // _ZN8S20009C93v32Ev
  virtual void  v33(); // _ZN8S20009C93v33Ev
  virtual void  v34(); // _ZN8S20009C93v34Ev
  S20009C9(); // tgen
};
//SIG(-1 S20009C9) C1{ VBC2{ BC3{ BC4{ vd v7} vd v8 v9 v10 v11 v12 Fp FL:7} VBC5{ v13 v14 v15 v16 Fc FD[7]} vd v17 v18 v19 v20 v21 v22 Fi} vd v1 v2 v3 v4 v5 v6 FL Fi}


 S20009C9 ::~S20009C9(){ note_dtor("S20009C9", this);}
void  S20009C9 ::v29(){vfunc_called(this, "_ZN8S20009C93v29Ev");}
void  S20009C9 ::v30(){vfunc_called(this, "_ZN8S20009C93v30Ev");}
void  S20009C9 ::v31(){vfunc_called(this, "_ZN8S20009C93v31Ev");}
void  S20009C9 ::v32(){vfunc_called(this, "_ZN8S20009C93v32Ev");}
void  S20009C9 ::v33(){vfunc_called(this, "_ZN8S20009C93v33Ev");}
void  S20009C9 ::v34(){vfunc_called(this, "_ZN8S20009C93v34Ev");}
S20009C9 ::S20009C9(){ note_ctor("S20009C9", this);} // tgen

static void Test_S20009C9()
{
  extern Class_Descriptor cd_S20009C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,32)];
    init_test(&cd_S20009C9, buf);
    S20009C9 *dp, &lv = *(dp=new (buf) S20009C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,124), "sizeof(S20009C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20009C9)");
    check_base_class_offset(lv, (S20009C7*)(S20009C6*)(S20009C5*), ABISELECT(24,16), "S20009C9");
    check_base_class_offset(lv, (S20009C6*)(S20009C5*), ABISELECT(24,16), "S20009C9");
    check_base_class_offset(lv, (S20009C2*)(S20009C5*), ABISELECT(48,32), "S20009C9");
    check_base_class_offset(lv, (S20009C5*), ABISELECT(24,16), "S20009C9");
    check_field_offset(lv, s20009c9f0, ABISELECT(8,4), "S20009C9.s20009c9f0");
    check_field_offset(lv, s20009c9f1, ABISELECT(16,12), "S20009C9.s20009c9f1");
    test_class_info(&lv, &cd_S20009C9);
    dp->~S20009C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20009C9(Test_S20009C9, "S20009C9", ABISELECT(176,124));

#else // __cplusplus

extern void _ZN8S20009C9C1Ev();
extern void _ZN8S20009C9D2Ev();
Name_Map name_map_S20009C9[] = {
  NSPAIR(_ZN8S20009C9C1Ev),
  NSPAIR(_ZN8S20009C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20009C7;
extern VTBL_ENTRY _ZTI8S20009C7[];
extern  VTBL_ENTRY _ZTV8S20009C7[];
extern Class_Descriptor cd_S20009C6;
extern VTBL_ENTRY _ZTI8S20009C6[];
extern  VTBL_ENTRY _ZTV8S20009C6[];
extern Class_Descriptor cd_S20009C2;
extern VTBL_ENTRY _ZTI8S20009C2[];
extern  VTBL_ENTRY _ZTV8S20009C2[];
extern Class_Descriptor cd_S20009C5;
extern VTBL_ENTRY _ZTI8S20009C5[];
extern  VTBL_ENTRY _ZTV8S20009C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20009C5[];
static Base_Class bases_S20009C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20009C7,    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
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20009C6,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20009C2,    ABISELECT(48,32), //bcp->offset
    42, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20009C5,    ABISELECT(24,16), //bcp->offset
    12, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20009C9[];
extern void _ZN8S20009C9D1Ev();
extern void _ZN8S20009C9D0Ev();
extern void _ZN8S20009C93v29Ev();
extern void _ZN8S20009C93v30Ev();
extern void _ZN8S20009C93v31Ev();
extern void _ZN8S20009C93v32Ev();
extern void _ZN8S20009C93v33Ev();
extern void _ZN8S20009C93v34Ev();
extern void ABISELECT(_ZTv0_n32_N8S20009C9D1Ev,_ZTv0_n16_N8S20009C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S20009C9D1Ev,_ZThn16_N8S20009C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20009C9D0Ev,_ZTv0_n16_N8S20009C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S20009C9D0Ev,_ZThn16_N8S20009C9D0Ev)() __attribute__((weak));
extern void _ZN8S20009C72v8Ev();
extern void _ZN8S20009C62v9Ev();
extern void _ZN8S20009C63v10Ev();
extern void _ZN8S20009C63v11Ev();
extern void _ZN8S20009C63v12Ev();
extern void _ZN8S20009C63v13Ev();
extern void _ZN8S20009C53v18Ev();
extern void _ZN8S20009C53v19Ev();
extern void _ZN8S20009C53v20Ev();
extern void _ZN8S20009C53v21Ev();
extern void _ZN8S20009C53v22Ev();
extern void _ZN8S20009C53v23Ev();
extern void _ZN8S20009C23v14Ev();
extern void _ZN8S20009C23v15Ev();
extern void _ZN8S20009C23v16Ev();
extern void _ZN8S20009C23v17Ev();
static  VTBL_ENTRY vtc_S20009C9[] = {
  ABISELECT(48,32),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20009C9[0]),
  (VTBL_ENTRY)&_ZN8S20009C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20009C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v29Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v30Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v34Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(24,16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20009C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20009C9D1Ev,_ZTv0_n16_N8S20009C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20009C9D0Ev,_ZTv0_n16_N8S20009C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20009C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20009C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20009C9[0]),
  (VTBL_ENTRY)&_ZN8S20009C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v17Ev,
};
extern VTBL_ENTRY _ZTV8S20009C9[];
extern void _ZN8S20009C5D1Ev();
extern void _ZN8S20009C5D0Ev();
extern void _ZN8S20009C72v8Ev();
extern void _ZN8S20009C62v9Ev();
extern void _ZN8S20009C63v10Ev();
extern void _ZN8S20009C63v11Ev();
extern void _ZN8S20009C63v12Ev();
extern void _ZN8S20009C63v13Ev();
extern void _ZN8S20009C53v18Ev();
extern void _ZN8S20009C53v19Ev();
extern void _ZN8S20009C53v20Ev();
extern void _ZN8S20009C53v21Ev();
extern void _ZN8S20009C53v22Ev();
extern void _ZN8S20009C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C5__8S20009C9[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20009C5[0]),
  (VTBL_ENTRY)&_ZN8S20009C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20009C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20009C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20009C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v23Ev,
};
extern void _ZN8S20009C23v14Ev();
extern void _ZN8S20009C23v15Ev();
extern void _ZN8S20009C23v16Ev();
extern void _ZN8S20009C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C2__8S20009C5__8S20009C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20009C5[0]),
  (VTBL_ENTRY)&_ZN8S20009C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v17Ev,
};
static  VTT_ENTRY vtt_S20009C9[] = {
  {&(_ZTV8S20009C9[4]),  4,52},
  {&(_ZTV8S20009C9[28]),  28,52},
  {&(_ZTV8S20009C9[48]),  48,52},
  {&(_tg__ZTV8S20009C5__8S20009C9[3]),  3,17},
  {&(_tg__ZTV8S20009C2__8S20009C5__8S20009C9[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20009C9[];
extern  VTBL_ENTRY _ZTV8S20009C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20009C9[];
static VTBL_ENTRY alt_thunk_names80[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20009C9D0Ev,_ZTv0_n16_N8S20009C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20009C9D0Ev,_ZThn16_N8S20009C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20009C9D1Ev,_ZTv0_n16_N8S20009C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20009C9D1Ev,_ZThn16_N8S20009C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20009C9 = {  "S20009C9", // class name
  bases_S20009C9, 4,
  &(vtc_S20009C9[0]), // expected_vtbl_contents
  &(vtt_S20009C9[0]), // expected_vtt_contents
  ABISELECT(176,124), // object size
  NSPAIRA(_ZTI8S20009C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20009C9),52, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20009C9),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names80,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20009C3  : S20009C4 , virtual S20009C5 , S20009C2 , S20009C8 , S20009C9 {
  virtual void  v35(); // _ZN8S20009C33v35Ev
  ~S20009C3(); // tgen
  S20009C3(); // tgen
};
//SIG(-1 S20009C3) C1{ BC2{ v2 v3 v4 Fl[2]} VBC3{ BC4{ BC5{ vd v5} vd v6 v7 v8 v9 v10 Fp FL:7} VBC6{ v11 v12 v13 v14 Fc FD[7]} vd v15 v16 v17 v18 v19 v20 Fi} BC6 BC7{ v21 v22 v23 v24 v25 Fp[4]} BC8{ VBC3 vd v26 v27 v28 v29 v30 v31 FL Fi} v1}


void  S20009C3 ::v35(){vfunc_called(this, "_ZN8S20009C33v35Ev");}
S20009C3 ::~S20009C3(){ note_dtor("S20009C3", this);} // tgen
S20009C3 ::S20009C3(){ note_ctor("S20009C3", this);} // tgen

static void Test_S20009C3()
{
  extern Class_Descriptor cd_S20009C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,63)];
    init_test(&cd_S20009C3, buf);
    S20009C3 *dp, &lv = *(dp=new (buf) S20009C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,248), "sizeof(S20009C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20009C3)");
    check_base_class_offset(lv, (S20009C4*), 0, "S20009C3");
    check_base_class_offset(lv, (S20009C7*)(S20009C6*)(S20009C5*), ABISELECT(224,140), "S20009C3");
    check_base_class_offset(lv, (S20009C6*)(S20009C5*), ABISELECT(224,140), "S20009C3");
    check_base_class_offset(lv, (S20009C2*)(S20009C5*), ABISELECT(256,156), "S20009C3");
    check_base_class_offset(lv, (S20009C5*), ABISELECT(224,140), "S20009C3");
    check_base_class_offset(lv, (S20009C5*)(S20009C9*), ABISELECT(224,140), "S20009C3");
    /*is_ambiguous_... S20009C3::S20009C2 */ AMB_check_base_class_offset(lv, (S20009C2*), ABISELECT(32,12), "S20009C3");
    check_base_class_offset(lv, (S20009C8*), ABISELECT(160,104), "S20009C3");
    check_base_class_offset(lv, (S20009C9*), ABISELECT(200,124), "S20009C3");
    test_class_info(&lv, &cd_S20009C3);
    dp->~S20009C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20009C3(Test_S20009C3, "S20009C3", ABISELECT(384,248));

#else // __cplusplus

extern void _ZN8S20009C3C1Ev();
extern void _ZN8S20009C3D1Ev();
Name_Map name_map_S20009C3[] = {
  NSPAIR(_ZN8S20009C3C1Ev),
  NSPAIR(_ZN8S20009C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20009C4;
extern VTBL_ENTRY _ZTI8S20009C4[];
extern  VTBL_ENTRY _ZTV8S20009C4[];
extern Class_Descriptor cd_S20009C7;
extern VTBL_ENTRY _ZTI8S20009C7[];
extern  VTBL_ENTRY _ZTV8S20009C7[];
extern Class_Descriptor cd_S20009C6;
extern VTBL_ENTRY _ZTI8S20009C6[];
extern  VTBL_ENTRY _ZTV8S20009C6[];
extern Class_Descriptor cd_S20009C2;
extern VTBL_ENTRY _ZTI8S20009C2[];
extern  VTBL_ENTRY _ZTV8S20009C2[];
extern Class_Descriptor cd_S20009C5;
extern VTBL_ENTRY _ZTI8S20009C5[];
extern  VTBL_ENTRY _ZTV8S20009C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20009C5[];
extern Class_Descriptor cd_S20009C2;
extern VTBL_ENTRY _ZTI8S20009C2[];
extern  VTBL_ENTRY _ZTV8S20009C2[];
extern Class_Descriptor cd_S20009C8;
extern VTBL_ENTRY _ZTI8S20009C8[];
extern  VTBL_ENTRY _ZTV8S20009C8[];
extern Class_Descriptor cd_S20009C9;
extern VTBL_ENTRY _ZTI8S20009C9[];
extern  VTBL_ENTRY _ZTV8S20009C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20009C9[];
static Base_Class bases_S20009C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20009C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20009C7,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20009C6,    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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20009C2,    ABISELECT(256,156), //bcp->offset
    65, //bcp->virtual_function_table_offset
    6, //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_S20009C5,    ABISELECT(224,140), //bcp->offset
    35, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20009C2,    ABISELECT(32,12), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20009C8,    ABISELECT(160,104), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20009C9,    ABISELECT(200,124), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //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 _ZTI8S20009C3[];
extern void _ZN8S20009C42v5Ev();
extern void _ZN8S20009C42v6Ev();
extern void _ZN8S20009C42v7Ev();
extern void _ZN8S20009C33v35Ev();
extern void _ZN8S20009C3D1Ev();
extern void _ZN8S20009C3D0Ev();
extern void _ZN8S20009C23v14Ev();
extern void _ZN8S20009C23v15Ev();
extern void _ZN8S20009C23v16Ev();
extern void _ZN8S20009C23v17Ev();
extern void _ZN8S20009C83v24Ev();
extern void _ZN8S20009C83v25Ev();
extern void _ZN8S20009C83v26Ev();
extern void _ZN8S20009C83v27Ev();
extern void _ZN8S20009C83v28Ev();
extern void ABISELECT(_ZThn200_N8S20009C3D1Ev,_ZThn124_N8S20009C3D1Ev)();
extern void ABISELECT(_ZThn200_N8S20009C3D0Ev,_ZThn124_N8S20009C3D0Ev)();
extern void _ZN8S20009C93v29Ev();
extern void _ZN8S20009C93v30Ev();
extern void _ZN8S20009C93v31Ev();
extern void _ZN8S20009C93v32Ev();
extern void _ZN8S20009C93v33Ev();
extern void _ZN8S20009C93v34Ev();
extern void ABISELECT(_ZTv0_n32_N8S20009C3D1Ev,_ZTv0_n16_N8S20009C3D1Ev)();
extern void ABISELECT(_ZThn224_N8S20009C3D1Ev,_ZThn140_N8S20009C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20009C3D0Ev,_ZTv0_n16_N8S20009C3D0Ev)();
extern void ABISELECT(_ZThn224_N8S20009C3D0Ev,_ZThn140_N8S20009C3D0Ev)() __attribute__((weak));
extern void _ZN8S20009C72v8Ev();
extern void _ZN8S20009C62v9Ev();
extern void _ZN8S20009C63v10Ev();
extern void _ZN8S20009C63v11Ev();
extern void _ZN8S20009C63v12Ev();
extern void _ZN8S20009C63v13Ev();
extern void _ZN8S20009C53v18Ev();
extern void _ZN8S20009C53v19Ev();
extern void _ZN8S20009C53v20Ev();
extern void _ZN8S20009C53v21Ev();
extern void _ZN8S20009C53v22Ev();
extern void _ZN8S20009C53v23Ev();
extern void _ZN8S20009C23v14Ev();
extern void _ZN8S20009C23v15Ev();
extern void _ZN8S20009C23v16Ev();
extern void _ZN8S20009C23v17Ev();
static  VTBL_ENTRY vtc_S20009C3[] = {
  ABISELECT(256,156),
  ABISELECT(224,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20009C3[0]),
  (VTBL_ENTRY)&_ZN8S20009C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20009C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20009C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20009C33v35Ev,
  (VTBL_ENTRY)&_ZN8S20009C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20009C3D0Ev,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S20009C3[0]),
  (VTBL_ENTRY)&_ZN8S20009C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v17Ev,
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI8S20009C3[0]),
  (VTBL_ENTRY)&_ZN8S20009C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20009C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20009C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20009C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20009C83v28Ev,
  ABISELECT(56,32),
  ABISELECT(24,16),
  ABISELECT(-200,-124),
  (VTBL_ENTRY)&(_ZTI8S20009C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N8S20009C3D1Ev,_ZThn124_N8S20009C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N8S20009C3D0Ev,_ZThn124_N8S20009C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20009C93v29Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v30Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v34Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-140),
  ABISELECT(32,16),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI8S20009C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20009C3D1Ev,_ZTv0_n16_N8S20009C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20009C3D0Ev,_ZTv0_n16_N8S20009C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20009C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20009C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  (VTBL_ENTRY)&(_ZTI8S20009C3[0]),
  (VTBL_ENTRY)&_ZN8S20009C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v17Ev,
};
extern VTBL_ENTRY _ZTV8S20009C3[];
extern void _ZN8S20009C9D1Ev();
extern void _ZN8S20009C9D0Ev();
extern void _ZN8S20009C93v29Ev();
extern void _ZN8S20009C93v30Ev();
extern void _ZN8S20009C93v31Ev();
extern void _ZN8S20009C93v32Ev();
extern void _ZN8S20009C93v33Ev();
extern void _ZN8S20009C93v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C9__8S20009C3[] = {
  ABISELECT(56,32),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20009C9[0]),
  (VTBL_ENTRY)&_ZN8S20009C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20009C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v29Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v30Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v34Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20009C9D1Ev,_ZTv0_n16_N8S20009C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S20009C9D1Ev,_ZThn16_N8S20009C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20009C9D0Ev,_ZTv0_n16_N8S20009C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S20009C9D0Ev,_ZThn16_N8S20009C9D0Ev)() __attribute__((weak));
extern void _ZN8S20009C72v8Ev();
extern void _ZN8S20009C62v9Ev();
extern void _ZN8S20009C63v10Ev();
extern void _ZN8S20009C63v11Ev();
extern void _ZN8S20009C63v12Ev();
extern void _ZN8S20009C63v13Ev();
extern void _ZN8S20009C53v18Ev();
extern void _ZN8S20009C53v19Ev();
extern void _ZN8S20009C53v20Ev();
extern void _ZN8S20009C53v21Ev();
extern void _ZN8S20009C53v22Ev();
extern void _ZN8S20009C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C5__8S20009C9__8S20009C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(32,16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20009C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20009C9D1Ev,_ZTv0_n16_N8S20009C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20009C9D0Ev,_ZTv0_n16_N8S20009C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20009C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20009C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v23Ev,
};
extern void _ZN8S20009C23v14Ev();
extern void _ZN8S20009C23v15Ev();
extern void _ZN8S20009C23v16Ev();
extern void _ZN8S20009C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C2__8S20009C9__8S20009C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20009C9[0]),
  (VTBL_ENTRY)&_ZN8S20009C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v17Ev,
};
extern void _ZN8S20009C5D1Ev();
extern void _ZN8S20009C5D0Ev();
extern void _ZN8S20009C72v8Ev();
extern void _ZN8S20009C62v9Ev();
extern void _ZN8S20009C63v10Ev();
extern void _ZN8S20009C63v11Ev();
extern void _ZN8S20009C63v12Ev();
extern void _ZN8S20009C63v13Ev();
extern void _ZN8S20009C53v18Ev();
extern void _ZN8S20009C53v19Ev();
extern void _ZN8S20009C53v20Ev();
extern void _ZN8S20009C53v21Ev();
extern void _ZN8S20009C53v22Ev();
extern void _ZN8S20009C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C5__8S20009C3[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20009C5[0]),
  (VTBL_ENTRY)&_ZN8S20009C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20009C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20009C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20009C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v23Ev,
};
extern void _ZN8S20009C23v14Ev();
extern void _ZN8S20009C23v15Ev();
extern void _ZN8S20009C23v16Ev();
extern void _ZN8S20009C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C2__8S20009C5__8S20009C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20009C5[0]),
  (VTBL_ENTRY)&_ZN8S20009C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v17Ev,
};
static  VTT_ENTRY vtt_S20009C3[] = {
  {&(_ZTV8S20009C3[4]),  4,75},
  {&(_tg__ZTV8S20009C9__8S20009C3[4]),  4,12},
  {&(_tg__ZTV8S20009C5__8S20009C9__8S20009C3[16]),  16,30},
  {&(_tg__ZTV8S20009C2__8S20009C9__8S20009C3[6]),  6,10},
  {&(_ZTV8S20009C3[51]),  51,75},
  {&(_ZTV8S20009C3[71]),  71,75},
  {&(_ZTV8S20009C3[27]),  27,75},
  {&(_tg__ZTV8S20009C5__8S20009C3[3]),  3,17},
  {&(_tg__ZTV8S20009C2__8S20009C5__8S20009C3[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20009C3[];
extern  VTBL_ENTRY _ZTV8S20009C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20009C3[];
static VTBL_ENTRY alt_thunk_names81[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20009C9D0Ev,_ZTv0_n16_N8S20009C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20009C9D0Ev,_ZThn16_N8S20009C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20009C9D1Ev,_ZTv0_n16_N8S20009C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20009C9D1Ev,_ZThn16_N8S20009C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20009C3D0Ev,_ZTv0_n16_N8S20009C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20009C3D0Ev,_ZThn140_N8S20009C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20009C3D1Ev,_ZTv0_n16_N8S20009C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20009C3D1Ev,_ZThn140_N8S20009C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20009C3 = {  "S20009C3", // class name
  bases_S20009C3, 8,
  &(vtc_S20009C3[0]), // expected_vtbl_contents
  &(vtt_S20009C3[0]), // expected_vtt_contents
  ABISELECT(384,248), // object size
  NSPAIRA(_ZTI8S20009C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20009C3),75, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20009C3),9, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names81,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20009C1  : virtual S20009C2 , S20009C3 , S20009C7 , S20009C9 {
  virtual void  v1(); // _ZN8S20009C12v1Ev
  virtual void  v2(); // _ZN8S20009C12v2Ev
  virtual void  v3(); // _ZN8S20009C12v3Ev
  virtual void  v4(); // _ZN8S20009C12v4Ev
  ~S20009C1(); // tgen
  S20009C1(); // tgen
};
//SIG(1 S20009C1) C1{ VBC2{ v5 v6 v7 v8 Fc FD[7]} BC3{ BC4{ v9 v10 v11 Fl[2]} VBC5{ BC6{ BC7{ vd v12} vd v13 v14 v15 v16 v17 Fp FL:7} VBC2 vd v18 v19 v20 v21 v22 v23 Fi} BC2 BC8{ v24 v25 v26 v27 v28 Fp[4]} BC9{ VBC5 vd v29 v30 v31 v32 v33 v34 FL Fi} v35} BC7 BC9 v1 v2 v3 v4}


void  S20009C1 ::v1(){vfunc_called(this, "_ZN8S20009C12v1Ev");}
void  S20009C1 ::v2(){vfunc_called(this, "_ZN8S20009C12v2Ev");}
void  S20009C1 ::v3(){vfunc_called(this, "_ZN8S20009C12v3Ev");}
void  S20009C1 ::v4(){vfunc_called(this, "_ZN8S20009C12v4Ev");}
S20009C1 ::~S20009C1(){ note_dtor("S20009C1", this);} // tgen
S20009C1 ::S20009C1(){ note_ctor("S20009C1", this);} // tgen

static void Test_S20009C1()
{
  extern Class_Descriptor cd_S20009C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,68)];
    init_test(&cd_S20009C1, buf);
    S20009C1 *dp, &lv = *(dp=new (buf) S20009C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,268), "sizeof(S20009C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20009C1)");
    /*is_ambiguous_... S20009C1::S20009C2 */ AMB_check_base_class_offset(lv, (S20009C2*), ABISELECT(256,160), "S20009C1");
    check_base_class_offset(lv, (S20009C2*)(S20009C5*), ABISELECT(256,160), "S20009C1");
    check_base_class_offset(lv, (S20009C4*)(S20009C3*), 0, "S20009C1");
    check_base_class_offset(lv, (S20009C7*)(S20009C6*)(S20009C5*), ABISELECT(384,252), "S20009C1");
    check_base_class_offset(lv, (S20009C6*)(S20009C5*), ABISELECT(384,252), "S20009C1");
    check_base_class_offset(lv, (S20009C5*)(S20009C3*), ABISELECT(384,252), "S20009C1");
    check_base_class_offset(lv, (S20009C5*)(S20009C9*)(S20009C3*), ABISELECT(384,252), "S20009C1");
    /*is_ambiguous_... S20009C1::S20009C9 */ AMB_check_base_class_offset(lv, (S20009C5*)(S20009C9*), ABISELECT(384,252), "S20009C1");
    /*is_ambiguous_... S20009C3::S20009C2 */ AMB_check_base_class_offset(lv, (S20009C2*)(S20009C3*), ABISELECT(32,12), "S20009C1");
    check_base_class_offset(lv, (S20009C8*)(S20009C3*), ABISELECT(160,104), "S20009C1");
    check_base_class_offset(lv, (S20009C9*)(S20009C3*), ABISELECT(200,124), "S20009C1");
    check_base_class_offset(lv, (S20009C3*), 0, "S20009C1");
    /*is_ambiguous_... S20009C1::S20009C7 */ AMB_check_base_class_offset(lv, (S20009C7*), ABISELECT(224,140), "S20009C1");
    /*is_ambiguous_... S20009C1::S20009C9 */ AMB_check_base_class_offset(lv, (S20009C9*), ABISELECT(232,144), "S20009C1");
    test_class_info(&lv, &cd_S20009C1);
    dp->~S20009C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20009C1(Test_S20009C1, "S20009C1", ABISELECT(416,268));

#else // __cplusplus

extern void _ZN8S20009C1C1Ev();
extern void _ZN8S20009C1D1Ev();
Name_Map name_map_S20009C1[] = {
  NSPAIR(_ZN8S20009C1C1Ev),
  NSPAIR(_ZN8S20009C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20009C2;
extern VTBL_ENTRY _ZTI8S20009C2[];
extern  VTBL_ENTRY _ZTV8S20009C2[];
extern Class_Descriptor cd_S20009C4;
extern VTBL_ENTRY _ZTI8S20009C4[];
extern  VTBL_ENTRY _ZTV8S20009C4[];
extern Class_Descriptor cd_S20009C7;
extern VTBL_ENTRY _ZTI8S20009C7[];
extern  VTBL_ENTRY _ZTV8S20009C7[];
extern Class_Descriptor cd_S20009C6;
extern VTBL_ENTRY _ZTI8S20009C6[];
extern  VTBL_ENTRY _ZTV8S20009C6[];
extern Class_Descriptor cd_S20009C5;
extern VTBL_ENTRY _ZTI8S20009C5[];
extern  VTBL_ENTRY _ZTV8S20009C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20009C5[];
extern Class_Descriptor cd_S20009C2;
extern VTBL_ENTRY _ZTI8S20009C2[];
extern  VTBL_ENTRY _ZTV8S20009C2[];
extern Class_Descriptor cd_S20009C8;
extern VTBL_ENTRY _ZTI8S20009C8[];
extern  VTBL_ENTRY _ZTV8S20009C8[];
extern Class_Descriptor cd_S20009C9;
extern VTBL_ENTRY _ZTI8S20009C9[];
extern  VTBL_ENTRY _ZTV8S20009C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20009C9[];
extern Class_Descriptor cd_S20009C3;
extern VTBL_ENTRY _ZTI8S20009C3[];
extern  VTBL_ENTRY _ZTV8S20009C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20009C3[];
extern Class_Descriptor cd_S20009C7;
extern VTBL_ENTRY _ZTI8S20009C7[];
extern  VTBL_ENTRY _ZTV8S20009C7[];
extern Class_Descriptor cd_S20009C9;
extern VTBL_ENTRY _ZTI8S20009C9[];
extern  VTBL_ENTRY _ZTV8S20009C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20009C9[];
static Base_Class bases_S20009C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20009C2,    ABISELECT(256,160), //bcp->offset
    56, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20009C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20009C7,    ABISELECT(384,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20009C6,    ABISELECT(384,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20009C5,    ABISELECT(384,252), //bcp->offset
    66, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20009C2,    ABISELECT(32,12), //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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20009C8,    ABISELECT(160,104), //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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20009C9,    ABISELECT(200,124), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20009C3,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20009C7,    ABISELECT(224,140), //bcp->offset
    39, //bcp->virtual_function_table_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_S20009C9,    ABISELECT(232,144), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20009C1[];
extern void _ZN8S20009C42v5Ev();
extern void _ZN8S20009C42v6Ev();
extern void _ZN8S20009C42v7Ev();
extern void _ZN8S20009C33v35Ev();
extern void _ZN8S20009C1D1Ev();
extern void _ZN8S20009C1D0Ev();
extern void _ZN8S20009C12v1Ev();
extern void _ZN8S20009C12v2Ev();
extern void _ZN8S20009C12v3Ev();
extern void _ZN8S20009C12v4Ev();
extern void _ZN8S20009C23v14Ev();
extern void _ZN8S20009C23v15Ev();
extern void _ZN8S20009C23v16Ev();
extern void _ZN8S20009C23v17Ev();
extern void _ZN8S20009C83v24Ev();
extern void _ZN8S20009C83v25Ev();
extern void _ZN8S20009C83v26Ev();
extern void _ZN8S20009C83v27Ev();
extern void _ZN8S20009C83v28Ev();
extern void ABISELECT(_ZThn200_N8S20009C1D1Ev,_ZThn124_N8S20009C1D1Ev)();
extern void ABISELECT(_ZThn200_N8S20009C1D0Ev,_ZThn124_N8S20009C1D0Ev)();
extern void _ZN8S20009C93v29Ev();
extern void _ZN8S20009C93v30Ev();
extern void _ZN8S20009C93v31Ev();
extern void _ZN8S20009C93v32Ev();
extern void _ZN8S20009C93v33Ev();
extern void _ZN8S20009C93v34Ev();
extern void ABISELECT(_ZThn224_N8S20009C1D1Ev,_ZThn140_N8S20009C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S20009C1D0Ev,_ZThn140_N8S20009C1D0Ev)();
extern void _ZN8S20009C72v8Ev();
extern void ABISELECT(_ZThn232_N8S20009C1D1Ev,_ZThn144_N8S20009C1D1Ev)();
extern void ABISELECT(_ZThn232_N8S20009C1D0Ev,_ZThn144_N8S20009C1D0Ev)();
extern void _ZN8S20009C93v29Ev();
extern void _ZN8S20009C93v30Ev();
extern void _ZN8S20009C93v31Ev();
extern void _ZN8S20009C93v32Ev();
extern void _ZN8S20009C93v33Ev();
extern void _ZN8S20009C93v34Ev();
extern void _ZN8S20009C23v14Ev();
extern void _ZN8S20009C23v15Ev();
extern void _ZN8S20009C23v16Ev();
extern void _ZN8S20009C23v17Ev();
extern void ABISELECT(_ZTv0_n32_N8S20009C1D1Ev,_ZTv0_n16_N8S20009C1D1Ev)();
extern void ABISELECT(_ZThn384_N8S20009C1D1Ev,_ZThn252_N8S20009C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20009C1D0Ev,_ZTv0_n16_N8S20009C1D0Ev)();
extern void ABISELECT(_ZThn384_N8S20009C1D0Ev,_ZThn252_N8S20009C1D0Ev)() __attribute__((weak));
extern void _ZN8S20009C72v8Ev();
extern void _ZN8S20009C62v9Ev();
extern void _ZN8S20009C63v10Ev();
extern void _ZN8S20009C63v11Ev();
extern void _ZN8S20009C63v12Ev();
extern void _ZN8S20009C63v13Ev();
extern void _ZN8S20009C53v18Ev();
extern void _ZN8S20009C53v19Ev();
extern void _ZN8S20009C53v20Ev();
extern void _ZN8S20009C53v21Ev();
extern void _ZN8S20009C53v22Ev();
extern void _ZN8S20009C53v23Ev();
static  VTBL_ENTRY vtc_S20009C1[] = {
  ABISELECT(256,160),
  ABISELECT(384,252),
  0,
  (VTBL_ENTRY)&(_ZTI8S20009C1[0]),
  (VTBL_ENTRY)&_ZN8S20009C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20009C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20009C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20009C33v35Ev,
  (VTBL_ENTRY)&_ZN8S20009C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20009C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20009C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20009C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20009C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20009C12v4Ev,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S20009C1[0]),
  (VTBL_ENTRY)&_ZN8S20009C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v17Ev,
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI8S20009C1[0]),
  (VTBL_ENTRY)&_ZN8S20009C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20009C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20009C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20009C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20009C83v28Ev,
  ABISELECT(56,36),
  ABISELECT(184,128),
  ABISELECT(-200,-124),
  (VTBL_ENTRY)&(_ZTI8S20009C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N8S20009C1D1Ev,_ZThn124_N8S20009C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N8S20009C1D0Ev,_ZThn124_N8S20009C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20009C93v29Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v30Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v34Ev,
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI8S20009C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N8S20009C1D1Ev,_ZThn140_N8S20009C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N8S20009C1D0Ev,_ZThn140_N8S20009C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20009C72v8Ev,
  ABISELECT(24,16),
  ABISELECT(152,108),
  ABISELECT(-232,-144),
  (VTBL_ENTRY)&(_ZTI8S20009C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N8S20009C1D1Ev,_ZThn144_N8S20009C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N8S20009C1D0Ev,_ZThn144_N8S20009C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20009C93v29Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v30Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v34Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-160),
  (VTBL_ENTRY)&(_ZTI8S20009C1[0]),
  (VTBL_ENTRY)&_ZN8S20009C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-252),
  ABISELECT(-128,-92),
  ABISELECT(-384,-252),
  (VTBL_ENTRY)&(_ZTI8S20009C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20009C1D1Ev,_ZTv0_n16_N8S20009C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20009C1D0Ev,_ZTv0_n16_N8S20009C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20009C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20009C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v23Ev,
};
extern VTBL_ENTRY _ZTV8S20009C1[];
extern void _ZN8S20009C42v5Ev();
extern void _ZN8S20009C42v6Ev();
extern void _ZN8S20009C42v7Ev();
extern void _ZN8S20009C33v35Ev();
extern void _ZN8S20009C3D1Ev();
extern void _ZN8S20009C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C3__8S20009C1[] = {
  ABISELECT(256,160),
  ABISELECT(384,252),
  0,
  (VTBL_ENTRY)&(_ZTI8S20009C3[0]),
  (VTBL_ENTRY)&_ZN8S20009C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20009C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20009C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20009C33v35Ev,
  (VTBL_ENTRY)&_ZN8S20009C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20009C3D0Ev,
};
extern void _ZN8S20009C9D1Ev();
extern void _ZN8S20009C9D0Ev();
extern void _ZN8S20009C93v29Ev();
extern void _ZN8S20009C93v30Ev();
extern void _ZN8S20009C93v31Ev();
extern void _ZN8S20009C93v32Ev();
extern void _ZN8S20009C93v33Ev();
extern void _ZN8S20009C93v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C98S20009C3__8S20009C1[] = {
  ABISELECT(56,36),
  ABISELECT(184,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S20009C9[0]),
  (VTBL_ENTRY)&_ZN8S20009C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20009C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v29Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v30Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v34Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20009C9D1Ev,_ZTv0_n16_N8S20009C9D1Ev)();
extern void ABISELECT(_ZThn184_N8S20009C9D1Ev,_ZThn128_N8S20009C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20009C9D0Ev,_ZTv0_n16_N8S20009C9D0Ev)();
extern void ABISELECT(_ZThn184_N8S20009C9D0Ev,_ZThn128_N8S20009C9D0Ev)() __attribute__((weak));
extern void _ZN8S20009C72v8Ev();
extern void _ZN8S20009C62v9Ev();
extern void _ZN8S20009C63v10Ev();
extern void _ZN8S20009C63v11Ev();
extern void _ZN8S20009C63v12Ev();
extern void _ZN8S20009C63v13Ev();
extern void _ZN8S20009C53v18Ev();
extern void _ZN8S20009C53v19Ev();
extern void _ZN8S20009C53v20Ev();
extern void _ZN8S20009C53v21Ev();
extern void _ZN8S20009C53v22Ev();
extern void _ZN8S20009C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C5__8S20009C98S20009C3__8S20009C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-128),
  ABISELECT(-128,-92),
  ABISELECT(-184,-128),
  (VTBL_ENTRY)&(_ZTI8S20009C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20009C9D1Ev,_ZTv0_n16_N8S20009C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20009C9D0Ev,_ZTv0_n16_N8S20009C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20009C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20009C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v23Ev,
};
extern void _ZN8S20009C23v14Ev();
extern void _ZN8S20009C23v15Ev();
extern void _ZN8S20009C23v16Ev();
extern void _ZN8S20009C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C2__8S20009C98S20009C3__8S20009C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20009C9[0]),
  (VTBL_ENTRY)&_ZN8S20009C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v17Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20009C3D1Ev,_ZTv0_n16_N8S20009C3D1Ev)();
extern void ABISELECT(_ZThn384_N8S20009C3D1Ev,_ZThn252_N8S20009C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20009C3D0Ev,_ZTv0_n16_N8S20009C3D0Ev)();
extern void ABISELECT(_ZThn384_N8S20009C3D0Ev,_ZThn252_N8S20009C3D0Ev)() __attribute__((weak));
extern void _ZN8S20009C72v8Ev();
extern void _ZN8S20009C62v9Ev();
extern void _ZN8S20009C63v10Ev();
extern void _ZN8S20009C63v11Ev();
extern void _ZN8S20009C63v12Ev();
extern void _ZN8S20009C63v13Ev();
extern void _ZN8S20009C53v18Ev();
extern void _ZN8S20009C53v19Ev();
extern void _ZN8S20009C53v20Ev();
extern void _ZN8S20009C53v21Ev();
extern void _ZN8S20009C53v22Ev();
extern void _ZN8S20009C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C5__8S20009C3__8S20009C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-252),
  ABISELECT(-128,-92),
  ABISELECT(-384,-252),
  (VTBL_ENTRY)&(_ZTI8S20009C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20009C3D1Ev,_ZTv0_n16_N8S20009C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20009C3D0Ev,_ZTv0_n16_N8S20009C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20009C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20009C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v23Ev,
};
extern void _ZN8S20009C23v14Ev();
extern void _ZN8S20009C23v15Ev();
extern void _ZN8S20009C23v16Ev();
extern void _ZN8S20009C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C2__8S20009C3__8S20009C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-256,-160),
  (VTBL_ENTRY)&(_ZTI8S20009C3[0]),
  (VTBL_ENTRY)&_ZN8S20009C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v17Ev,
};
extern void ABISELECT(_ZThn200_N8S20009C3D1Ev,_ZThn124_N8S20009C3D1Ev)();
extern void ABISELECT(_ZThn200_N8S20009C3D0Ev,_ZThn124_N8S20009C3D0Ev)();
extern void _ZN8S20009C93v29Ev();
extern void _ZN8S20009C93v30Ev();
extern void _ZN8S20009C93v31Ev();
extern void _ZN8S20009C93v32Ev();
extern void _ZN8S20009C93v33Ev();
extern void _ZN8S20009C93v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C9__8S20009C3__8S20009C1[] = {
  ABISELECT(56,36),
  ABISELECT(184,128),
  ABISELECT(-200,-124),
  (VTBL_ENTRY)&(_ZTI8S20009C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N8S20009C3D1Ev,_ZThn124_N8S20009C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N8S20009C3D0Ev,_ZThn124_N8S20009C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20009C93v29Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v30Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v34Ev,
};
extern void _ZN8S20009C9D1Ev();
extern void _ZN8S20009C9D0Ev();
extern void _ZN8S20009C93v29Ev();
extern void _ZN8S20009C93v30Ev();
extern void _ZN8S20009C93v31Ev();
extern void _ZN8S20009C93v32Ev();
extern void _ZN8S20009C93v33Ev();
extern void _ZN8S20009C93v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C9__A1__8S20009C1[] = {
  ABISELECT(24,16),
  ABISELECT(152,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20009C9[0]),
  (VTBL_ENTRY)&_ZN8S20009C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20009C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v29Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v30Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20009C93v34Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20009C9D1Ev,_ZTv0_n16_N8S20009C9D1Ev)();
extern void ABISELECT(_ZThn152_N8S20009C9D1Ev,_ZThn108_N8S20009C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20009C9D0Ev,_ZTv0_n16_N8S20009C9D0Ev)();
extern void ABISELECT(_ZThn152_N8S20009C9D0Ev,_ZThn108_N8S20009C9D0Ev)() __attribute__((weak));
extern void _ZN8S20009C72v8Ev();
extern void _ZN8S20009C62v9Ev();
extern void _ZN8S20009C63v10Ev();
extern void _ZN8S20009C63v11Ev();
extern void _ZN8S20009C63v12Ev();
extern void _ZN8S20009C63v13Ev();
extern void _ZN8S20009C53v18Ev();
extern void _ZN8S20009C53v19Ev();
extern void _ZN8S20009C53v20Ev();
extern void _ZN8S20009C53v21Ev();
extern void _ZN8S20009C53v22Ev();
extern void _ZN8S20009C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C5__8S20009C9__A1__8S20009C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-108),
  ABISELECT(-128,-92),
  ABISELECT(-152,-108),
  (VTBL_ENTRY)&(_ZTI8S20009C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20009C9D1Ev,_ZTv0_n16_N8S20009C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20009C9D0Ev,_ZTv0_n16_N8S20009C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20009C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20009C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v23Ev,
};
extern void _ZN8S20009C23v14Ev();
extern void _ZN8S20009C23v15Ev();
extern void _ZN8S20009C23v16Ev();
extern void _ZN8S20009C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C2__8S20009C9__A1__8S20009C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20009C9[0]),
  (VTBL_ENTRY)&_ZN8S20009C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v17Ev,
};
extern void _ZN8S20009C5D1Ev();
extern void _ZN8S20009C5D0Ev();
extern void _ZN8S20009C72v8Ev();
extern void _ZN8S20009C62v9Ev();
extern void _ZN8S20009C63v10Ev();
extern void _ZN8S20009C63v11Ev();
extern void _ZN8S20009C63v12Ev();
extern void _ZN8S20009C63v13Ev();
extern void _ZN8S20009C53v18Ev();
extern void _ZN8S20009C53v19Ev();
extern void _ZN8S20009C53v20Ev();
extern void _ZN8S20009C53v21Ev();
extern void _ZN8S20009C53v22Ev();
extern void _ZN8S20009C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C5__8S20009C1[] = {
  ABISELECT(-128,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S20009C5[0]),
  (VTBL_ENTRY)&_ZN8S20009C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20009C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20009C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20009C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20009C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20009C53v23Ev,
};
extern void _ZN8S20009C23v14Ev();
extern void _ZN8S20009C23v15Ev();
extern void _ZN8S20009C23v16Ev();
extern void _ZN8S20009C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20009C2__8S20009C5__8S20009C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(128,92),
  (VTBL_ENTRY)&(_ZTI8S20009C5[0]),
  (VTBL_ENTRY)&_ZN8S20009C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20009C23v17Ev,
};
static  VTT_ENTRY vtt_S20009C1[] = {
  {&(_ZTV8S20009C1[4]),  4,96},
  {&(_tg__ZTV8S20009C3__8S20009C1[4]),  4,10},
  {&(_tg__ZTV8S20009C98S20009C3__8S20009C1[4]),  4,12},
  {&(_tg__ZTV8S20009C5__8S20009C98S20009C3__8S20009C1[16]),  16,30},
  {&(_tg__ZTV8S20009C2__8S20009C98S20009C3__8S20009C1[6]),  6,10},
  {&(_tg__ZTV8S20009C5__8S20009C3__8S20009C1[16]),  16,30},
  {&(_tg__ZTV8S20009C2__8S20009C3__8S20009C1[6]),  6,10},
  {&(_tg__ZTV8S20009C9__8S20009C3__8S20009C1[4]),  4,12},
  {&(_tg__ZTV8S20009C9__A1__8S20009C1[4]),  4,12},
  {&(_tg__ZTV8S20009C5__8S20009C9__A1__8S20009C1[16]),  16,30},
  {&(_tg__ZTV8S20009C2__8S20009C9__A1__8S20009C1[6]),  6,10},
  {&(_ZTV8S20009C1[62]),  62,96},
  {&(_ZTV8S20009C1[82]),  82,96},
  {&(_ZTV8S20009C1[31]),  31,96},
  {&(_ZTV8S20009C1[48]),  48,96},
  {&(_tg__ZTV8S20009C5__8S20009C1[3]),  3,17},
  {&(_tg__ZTV8S20009C2__8S20009C5__8S20009C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20009C1[];
extern  VTBL_ENTRY _ZTV8S20009C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20009C1[];
static VTBL_ENTRY alt_thunk_names82[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20009C3D0Ev,_ZTv0_n16_N8S20009C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S20009C3D0Ev,_ZThn252_N8S20009C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20009C3D1Ev,_ZTv0_n16_N8S20009C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S20009C3D1Ev,_ZThn252_N8S20009C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20009C9D0Ev,_ZTv0_n16_N8S20009C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S20009C9D0Ev,_ZThn108_N8S20009C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20009C9D0Ev,_ZThn128_N8S20009C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20009C9D1Ev,_ZTv0_n16_N8S20009C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S20009C9D1Ev,_ZThn108_N8S20009C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20009C9D1Ev,_ZThn128_N8S20009C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20009C1D0Ev,_ZTv0_n16_N8S20009C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S20009C1D0Ev,_ZThn252_N8S20009C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20009C1D1Ev,_ZTv0_n16_N8S20009C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S20009C1D1Ev,_ZThn252_N8S20009C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20009C1 = {  "S20009C1", // class name
  bases_S20009C1, 11,
  &(vtc_S20009C1[0]), // expected_vtbl_contents
  &(vtt_S20009C1[0]), // expected_vtt_contents
  ABISELECT(416,268), // object size
  NSPAIRA(_ZTI8S20009C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20009C1),96, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20009C1),17, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names82,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20010C2  {
  char s20010c2f0;
  long double s20010c2f1[7];
  virtual void  v14(); // _ZN8S20010C23v14Ev
  virtual void  v15(); // _ZN8S20010C23v15Ev
  virtual void  v16(); // _ZN8S20010C23v16Ev
  virtual void  v17(); // _ZN8S20010C23v17Ev
  ~S20010C2(); // tgen
  S20010C2(); // tgen
};
//SIG(-1 S20010C2) C1{ v1 v2 v3 v4 Fc FD[7]}


void  S20010C2 ::v14(){vfunc_called(this, "_ZN8S20010C23v14Ev");}
void  S20010C2 ::v15(){vfunc_called(this, "_ZN8S20010C23v15Ev");}
void  S20010C2 ::v16(){vfunc_called(this, "_ZN8S20010C23v16Ev");}
void  S20010C2 ::v17(){vfunc_called(this, "_ZN8S20010C23v17Ev");}
S20010C2 ::~S20010C2(){ note_dtor("S20010C2", this);} // tgen
S20010C2 ::S20010C2(){ note_ctor("S20010C2", this);} // tgen

static void Test_S20010C2()
{
  extern Class_Descriptor cd_S20010C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,24)];
    init_test(&cd_S20010C2, buf);
    S20010C2 *dp, &lv = *(dp=new (buf) S20010C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,92), "sizeof(S20010C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20010C2)");
    check_field_offset(lv, s20010c2f0, ABISELECT(8,4), "S20010C2.s20010c2f0");
    check_field_offset(lv, s20010c2f1, ABISELECT(16,8), "S20010C2.s20010c2f1");
    test_class_info(&lv, &cd_S20010C2);
    dp->~S20010C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20010C2(Test_S20010C2, "S20010C2", ABISELECT(128,92));

#else // __cplusplus

extern void _ZN8S20010C2C1Ev();
extern void _ZN8S20010C2D1Ev();
Name_Map name_map_S20010C2[] = {
  NSPAIR(_ZN8S20010C2C1Ev),
  NSPAIR(_ZN8S20010C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20010C2[];
extern void _ZN8S20010C23v14Ev();
extern void _ZN8S20010C23v15Ev();
extern void _ZN8S20010C23v16Ev();
extern void _ZN8S20010C23v17Ev();
static  VTBL_ENTRY vtc_S20010C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20010C2[0]),
  (VTBL_ENTRY)&_ZN8S20010C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v17Ev,
};
extern VTBL_ENTRY _ZTI8S20010C2[];
extern  VTBL_ENTRY _ZTV8S20010C2[];
Class_Descriptor cd_S20010C2 = {  "S20010C2", // class name
  0,0,//no base classes
  &(vtc_S20010C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,92), // object size
  NSPAIRA(_ZTI8S20010C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20010C2),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  S20010C4  {
  __tsi64 s20010c4f0[2];
  virtual void  v5(); // _ZN8S20010C42v5Ev
  virtual void  v6(); // _ZN8S20010C42v6Ev
  virtual void  v7(); // _ZN8S20010C42v7Ev
  ~S20010C4(); // tgen
  S20010C4(); // tgen
};
//SIG(-1 S20010C4) C1{ v1 v2 v3 FL[2]}


void  S20010C4 ::v5(){vfunc_called(this, "_ZN8S20010C42v5Ev");}
void  S20010C4 ::v6(){vfunc_called(this, "_ZN8S20010C42v6Ev");}
void  S20010C4 ::v7(){vfunc_called(this, "_ZN8S20010C42v7Ev");}
S20010C4 ::~S20010C4(){ note_dtor("S20010C4", this);} // tgen
S20010C4 ::S20010C4(){ note_ctor("S20010C4", this);} // tgen

static void Test_S20010C4()
{
  extern Class_Descriptor cd_S20010C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S20010C4, buf);
    S20010C4 *dp, &lv = *(dp=new (buf) S20010C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S20010C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20010C4)");
    check_field_offset(lv, s20010c4f0, ABISELECT(8,4), "S20010C4.s20010c4f0");
    test_class_info(&lv, &cd_S20010C4);
    dp->~S20010C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20010C4(Test_S20010C4, "S20010C4", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN8S20010C4C1Ev();
extern void _ZN8S20010C4D1Ev();
Name_Map name_map_S20010C4[] = {
  NSPAIR(_ZN8S20010C4C1Ev),
  NSPAIR(_ZN8S20010C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20010C4[];
extern void _ZN8S20010C42v5Ev();
extern void _ZN8S20010C42v6Ev();
extern void _ZN8S20010C42v7Ev();
static  VTBL_ENTRY vtc_S20010C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20010C4[0]),
  (VTBL_ENTRY)&_ZN8S20010C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20010C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20010C42v7Ev,
};
extern VTBL_ENTRY _ZTI8S20010C4[];
extern  VTBL_ENTRY _ZTV8S20010C4[];
Class_Descriptor cd_S20010C4 = {  "S20010C4", // class name
  0,0,//no base classes
  &(vtc_S20010C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI8S20010C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20010C4),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  S20010C7  {
  virtual  ~S20010C7(); // _ZN8S20010C7D1Ev
  virtual void  v8(); // _ZN8S20010C72v8Ev
  S20010C7(); // tgen
};
//SIG(-1 S20010C7) C1{ vd v1}


 S20010C7 ::~S20010C7(){ note_dtor("S20010C7", this);}
void  S20010C7 ::v8(){vfunc_called(this, "_ZN8S20010C72v8Ev");}
S20010C7 ::S20010C7(){ note_ctor("S20010C7", this);} // tgen

static void Test_S20010C7()
{
  extern Class_Descriptor cd_S20010C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20010C7, buf);
    S20010C7 *dp, &lv = *(dp=new (buf) S20010C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20010C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20010C7)");
    test_class_info(&lv, &cd_S20010C7);
    dp->~S20010C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20010C7(Test_S20010C7, "S20010C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20010C7C1Ev();
extern void _ZN8S20010C7D1Ev();
Name_Map name_map_S20010C7[] = {
  NSPAIR(_ZN8S20010C7C1Ev),
  NSPAIR(_ZN8S20010C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20010C7[];
extern void _ZN8S20010C7D1Ev();
extern void _ZN8S20010C7D0Ev();
extern void _ZN8S20010C72v8Ev();
static  VTBL_ENTRY vtc_S20010C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20010C7[0]),
  (VTBL_ENTRY)&_ZN8S20010C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20010C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20010C72v8Ev,
};
extern VTBL_ENTRY _ZTI8S20010C7[];
extern  VTBL_ENTRY _ZTV8S20010C7[];
Class_Descriptor cd_S20010C7 = {  "S20010C7", // class name
  0,0,//no base classes
  &(vtc_S20010C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20010C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20010C7),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  S20010C6  : S20010C7 {
  void *s20010c6f0;
  __tsi64 s20010c6f1:7;
  virtual  ~S20010C6(); // _ZN8S20010C6D1Ev
  virtual void  v9(); // _ZN8S20010C62v9Ev
  virtual void  v10(); // _ZN8S20010C63v10Ev
  virtual void  v11(); // _ZN8S20010C63v11Ev
  virtual void  v12(); // _ZN8S20010C63v12Ev
  virtual void  v13(); // _ZN8S20010C63v13Ev
  S20010C6(); // tgen
};
//SIG(-1 S20010C6) C1{ BC2{ vd v6} vd v1 v2 v3 v4 v5 Fp FL:7}


 S20010C6 ::~S20010C6(){ note_dtor("S20010C6", this);}
void  S20010C6 ::v9(){vfunc_called(this, "_ZN8S20010C62v9Ev");}
void  S20010C6 ::v10(){vfunc_called(this, "_ZN8S20010C63v10Ev");}
void  S20010C6 ::v11(){vfunc_called(this, "_ZN8S20010C63v11Ev");}
void  S20010C6 ::v12(){vfunc_called(this, "_ZN8S20010C63v12Ev");}
void  S20010C6 ::v13(){vfunc_called(this, "_ZN8S20010C63v13Ev");}
S20010C6 ::S20010C6(){ note_ctor("S20010C6", this);} // tgen

static void Test_S20010C6()
{
  extern Class_Descriptor cd_S20010C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S20010C6, buf);
    S20010C6 *dp, &lv = *(dp=new (buf) S20010C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20010C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20010C6)");
    check_base_class_offset(lv, (S20010C7*), 0, "S20010C6");
    check_field_offset(lv, s20010c6f0, ABISELECT(8,4), "S20010C6.s20010c6f0");
    set_bf_and_test(lv, s20010c6f1, ABISELECT(16,8), 0, 7, 1, "S20010C6");
    set_bf_and_test(lv, s20010c6f1, ABISELECT(16,8), 0, 7, hide_sll(1LL<<6), "S20010C6");
    test_class_info(&lv, &cd_S20010C6);
    dp->~S20010C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20010C6(Test_S20010C6, "S20010C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20010C6C1Ev();
extern void _ZN8S20010C6D1Ev();
Name_Map name_map_S20010C6[] = {
  NSPAIR(_ZN8S20010C6C1Ev),
  NSPAIR(_ZN8S20010C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20010C7;
extern VTBL_ENTRY _ZTI8S20010C7[];
extern  VTBL_ENTRY _ZTV8S20010C7[];
static Base_Class bases_S20010C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20010C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S20010C6[];
extern void _ZN8S20010C6D1Ev();
extern void _ZN8S20010C6D0Ev();
extern void _ZN8S20010C72v8Ev();
extern void _ZN8S20010C62v9Ev();
extern void _ZN8S20010C63v10Ev();
extern void _ZN8S20010C63v11Ev();
extern void _ZN8S20010C63v12Ev();
extern void _ZN8S20010C63v13Ev();
static  VTBL_ENTRY vtc_S20010C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20010C6[0]),
  (VTBL_ENTRY)&_ZN8S20010C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20010C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20010C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20010C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v13Ev,
};
extern VTBL_ENTRY _ZTI8S20010C6[];
extern  VTBL_ENTRY _ZTV8S20010C6[];
Class_Descriptor cd_S20010C6 = {  "S20010C6", // class name
  bases_S20010C6, 1,
  &(vtc_S20010C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20010C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20010C6),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20010C5  : S20010C6 , virtual S20010C2 {
  int s20010c5f0;
  virtual  ~S20010C5(); // _ZN8S20010C5D2Ev
  virtual void  v18(); // _ZN8S20010C53v18Ev
  virtual void  v19(); // _ZN8S20010C53v19Ev
  virtual void  v20(); // _ZN8S20010C53v20Ev
  virtual void  v21(); // _ZN8S20010C53v21Ev
  virtual void  v22(); // _ZN8S20010C53v22Ev
  virtual void  v23(); // _ZN8S20010C53v23Ev
  S20010C5(); // tgen
};
//SIG(-1 S20010C5) C1{ BC2{ BC3{ vd v7} vd v8 v9 v10 v11 v12 Fp FL:7} VBC4{ v13 v14 v15 v16 Fc FD[7]} vd v1 v2 v3 v4 v5 v6 Fi}


 S20010C5 ::~S20010C5(){ note_dtor("S20010C5", this);}
void  S20010C5 ::v18(){vfunc_called(this, "_ZN8S20010C53v18Ev");}
void  S20010C5 ::v19(){vfunc_called(this, "_ZN8S20010C53v19Ev");}
void  S20010C5 ::v20(){vfunc_called(this, "_ZN8S20010C53v20Ev");}
void  S20010C5 ::v21(){vfunc_called(this, "_ZN8S20010C53v21Ev");}
void  S20010C5 ::v22(){vfunc_called(this, "_ZN8S20010C53v22Ev");}
void  S20010C5 ::v23(){vfunc_called(this, "_ZN8S20010C53v23Ev");}
S20010C5 ::S20010C5(){ note_ctor("S20010C5", this);} // tgen

static void Test_S20010C5()
{
  extern Class_Descriptor cd_S20010C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S20010C5, buf);
    S20010C5 *dp, &lv = *(dp=new (buf) S20010C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S20010C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20010C5)");
    check_base_class_offset(lv, (S20010C7*)(S20010C6*), 0, "S20010C5");
    check_base_class_offset(lv, (S20010C6*), 0, "S20010C5");
    check_base_class_offset(lv, (S20010C2*), ABISELECT(32,16), "S20010C5");
    check_field_offset(lv, s20010c5f0, ABISELECT(20,12), "S20010C5.s20010c5f0");
    test_class_info(&lv, &cd_S20010C5);
    dp->~S20010C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20010C5(Test_S20010C5, "S20010C5", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN8S20010C5C1Ev();
extern void _ZN8S20010C5D2Ev();
Name_Map name_map_S20010C5[] = {
  NSPAIR(_ZN8S20010C5C1Ev),
  NSPAIR(_ZN8S20010C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20010C7;
extern VTBL_ENTRY _ZTI8S20010C7[];
extern  VTBL_ENTRY _ZTV8S20010C7[];
extern Class_Descriptor cd_S20010C6;
extern VTBL_ENTRY _ZTI8S20010C6[];
extern  VTBL_ENTRY _ZTV8S20010C6[];
extern Class_Descriptor cd_S20010C2;
extern VTBL_ENTRY _ZTI8S20010C2[];
extern  VTBL_ENTRY _ZTV8S20010C2[];
static Base_Class bases_S20010C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20010C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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
  0, 0},
  {&cd_S20010C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20010C2,    ABISELECT(32,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20010C5[];
extern void _ZN8S20010C5D1Ev();
extern void _ZN8S20010C5D0Ev();
extern void _ZN8S20010C72v8Ev();
extern void _ZN8S20010C62v9Ev();
extern void _ZN8S20010C63v10Ev();
extern void _ZN8S20010C63v11Ev();
extern void _ZN8S20010C63v12Ev();
extern void _ZN8S20010C63v13Ev();
extern void _ZN8S20010C53v18Ev();
extern void _ZN8S20010C53v19Ev();
extern void _ZN8S20010C53v20Ev();
extern void _ZN8S20010C53v21Ev();
extern void _ZN8S20010C53v22Ev();
extern void _ZN8S20010C53v23Ev();
extern void _ZN8S20010C23v14Ev();
extern void _ZN8S20010C23v15Ev();
extern void _ZN8S20010C23v16Ev();
extern void _ZN8S20010C23v17Ev();
static  VTBL_ENTRY vtc_S20010C5[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20010C5[0]),
  (VTBL_ENTRY)&_ZN8S20010C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20010C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20010C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20010C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20010C5[0]),
  (VTBL_ENTRY)&_ZN8S20010C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v17Ev,
};
extern VTBL_ENTRY _ZTV8S20010C5[];
static  VTT_ENTRY vtt_S20010C5[] = {
  {&(_ZTV8S20010C5[3]),  3,27},
  {&(_ZTV8S20010C5[23]),  23,27},
};
extern VTBL_ENTRY _ZTI8S20010C5[];
extern  VTBL_ENTRY _ZTV8S20010C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20010C5[];
Class_Descriptor cd_S20010C5 = {  "S20010C5", // class name
  bases_S20010C5, 3,
  &(vtc_S20010C5[0]), // expected_vtbl_contents
  &(vtt_S20010C5[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI8S20010C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20010C5),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20010C5),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20010C8  {
  void *s20010c8f0[4];
  virtual void  v24(); // _ZN8S20010C83v24Ev
  virtual void  v25(); // _ZN8S20010C83v25Ev
  virtual void  v26(); // _ZN8S20010C83v26Ev
  virtual void  v27(); // _ZN8S20010C83v27Ev
  virtual void  v28(); // _ZN8S20010C83v28Ev
  ~S20010C8(); // tgen
  S20010C8(); // tgen
};
//SIG(-1 S20010C8) C1{ v1 v2 v3 v4 v5 Fp[4]}


void  S20010C8 ::v24(){vfunc_called(this, "_ZN8S20010C83v24Ev");}
void  S20010C8 ::v25(){vfunc_called(this, "_ZN8S20010C83v25Ev");}
void  S20010C8 ::v26(){vfunc_called(this, "_ZN8S20010C83v26Ev");}
void  S20010C8 ::v27(){vfunc_called(this, "_ZN8S20010C83v27Ev");}
void  S20010C8 ::v28(){vfunc_called(this, "_ZN8S20010C83v28Ev");}
S20010C8 ::~S20010C8(){ note_dtor("S20010C8", this);} // tgen
S20010C8 ::S20010C8(){ note_ctor("S20010C8", this);} // tgen

static void Test_S20010C8()
{
  extern Class_Descriptor cd_S20010C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20010C8, buf);
    S20010C8 *dp, &lv = *(dp=new (buf) S20010C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20010C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20010C8)");
    check_field_offset(lv, s20010c8f0, ABISELECT(8,4), "S20010C8.s20010c8f0");
    test_class_info(&lv, &cd_S20010C8);
    dp->~S20010C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20010C8(Test_S20010C8, "S20010C8", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20010C8C1Ev();
extern void _ZN8S20010C8D1Ev();
Name_Map name_map_S20010C8[] = {
  NSPAIR(_ZN8S20010C8C1Ev),
  NSPAIR(_ZN8S20010C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20010C8[];
extern void _ZN8S20010C83v24Ev();
extern void _ZN8S20010C83v25Ev();
extern void _ZN8S20010C83v26Ev();
extern void _ZN8S20010C83v27Ev();
extern void _ZN8S20010C83v28Ev();
static  VTBL_ENTRY vtc_S20010C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20010C8[0]),
  (VTBL_ENTRY)&_ZN8S20010C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20010C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20010C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20010C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20010C83v28Ev,
};
extern VTBL_ENTRY _ZTI8S20010C8[];
extern  VTBL_ENTRY _ZTV8S20010C8[];
Class_Descriptor cd_S20010C8 = {  "S20010C8", // class name
  0,0,//no base classes
  &(vtc_S20010C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20010C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20010C8),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  S20010C9  : virtual S20010C5 {
  __tsi64 s20010c9f0;
  int s20010c9f1;
  virtual  ~S20010C9(); // _ZN8S20010C9D2Ev
  virtual void  v29(); // _ZN8S20010C93v29Ev
  virtual void  v30(); // _ZN8S20010C93v30Ev
  virtual void  v31(); // _ZN8S20010C93v31Ev
  virtual void  v32(); // _ZN8S20010C93v32Ev
  virtual void  v33(); // _ZN8S20010C93v33Ev
  virtual void  v34(); // _ZN8S20010C93v34Ev
  S20010C9(); // tgen
};
//SIG(-1 S20010C9) C1{ VBC2{ BC3{ BC4{ vd v7} vd v8 v9 v10 v11 v12 Fp FL:7} VBC5{ v13 v14 v15 v16 Fc FD[7]} vd v17 v18 v19 v20 v21 v22 Fi} vd v1 v2 v3 v4 v5 v6 FL Fi}


 S20010C9 ::~S20010C9(){ note_dtor("S20010C9", this);}
void  S20010C9 ::v29(){vfunc_called(this, "_ZN8S20010C93v29Ev");}
void  S20010C9 ::v30(){vfunc_called(this, "_ZN8S20010C93v30Ev");}
void  S20010C9 ::v31(){vfunc_called(this, "_ZN8S20010C93v31Ev");}
void  S20010C9 ::v32(){vfunc_called(this, "_ZN8S20010C93v32Ev");}
void  S20010C9 ::v33(){vfunc_called(this, "_ZN8S20010C93v33Ev");}
void  S20010C9 ::v34(){vfunc_called(this, "_ZN8S20010C93v34Ev");}
S20010C9 ::S20010C9(){ note_ctor("S20010C9", this);} // tgen

static void Test_S20010C9()
{
  extern Class_Descriptor cd_S20010C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,32)];
    init_test(&cd_S20010C9, buf);
    S20010C9 *dp, &lv = *(dp=new (buf) S20010C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,124), "sizeof(S20010C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20010C9)");
    check_base_class_offset(lv, (S20010C7*)(S20010C6*)(S20010C5*), ABISELECT(24,16), "S20010C9");
    check_base_class_offset(lv, (S20010C6*)(S20010C5*), ABISELECT(24,16), "S20010C9");
    check_base_class_offset(lv, (S20010C2*)(S20010C5*), ABISELECT(48,32), "S20010C9");
    check_base_class_offset(lv, (S20010C5*), ABISELECT(24,16), "S20010C9");
    check_field_offset(lv, s20010c9f0, ABISELECT(8,4), "S20010C9.s20010c9f0");
    check_field_offset(lv, s20010c9f1, ABISELECT(16,12), "S20010C9.s20010c9f1");
    test_class_info(&lv, &cd_S20010C9);
    dp->~S20010C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20010C9(Test_S20010C9, "S20010C9", ABISELECT(176,124));

#else // __cplusplus

extern void _ZN8S20010C9C1Ev();
extern void _ZN8S20010C9D2Ev();
Name_Map name_map_S20010C9[] = {
  NSPAIR(_ZN8S20010C9C1Ev),
  NSPAIR(_ZN8S20010C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20010C7;
extern VTBL_ENTRY _ZTI8S20010C7[];
extern  VTBL_ENTRY _ZTV8S20010C7[];
extern Class_Descriptor cd_S20010C6;
extern VTBL_ENTRY _ZTI8S20010C6[];
extern  VTBL_ENTRY _ZTV8S20010C6[];
extern Class_Descriptor cd_S20010C2;
extern VTBL_ENTRY _ZTI8S20010C2[];
extern  VTBL_ENTRY _ZTV8S20010C2[];
extern Class_Descriptor cd_S20010C5;
extern VTBL_ENTRY _ZTI8S20010C5[];
extern  VTBL_ENTRY _ZTV8S20010C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20010C5[];
static Base_Class bases_S20010C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20010C7,    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
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20010C6,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20010C2,    ABISELECT(48,32), //bcp->offset
    42, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20010C5,    ABISELECT(24,16), //bcp->offset
    12, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20010C9[];
extern void _ZN8S20010C9D1Ev();
extern void _ZN8S20010C9D0Ev();
extern void _ZN8S20010C93v29Ev();
extern void _ZN8S20010C93v30Ev();
extern void _ZN8S20010C93v31Ev();
extern void _ZN8S20010C93v32Ev();
extern void _ZN8S20010C93v33Ev();
extern void _ZN8S20010C93v34Ev();
extern void ABISELECT(_ZTv0_n32_N8S20010C9D1Ev,_ZTv0_n16_N8S20010C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S20010C9D1Ev,_ZThn16_N8S20010C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20010C9D0Ev,_ZTv0_n16_N8S20010C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S20010C9D0Ev,_ZThn16_N8S20010C9D0Ev)() __attribute__((weak));
extern void _ZN8S20010C72v8Ev();
extern void _ZN8S20010C62v9Ev();
extern void _ZN8S20010C63v10Ev();
extern void _ZN8S20010C63v11Ev();
extern void _ZN8S20010C63v12Ev();
extern void _ZN8S20010C63v13Ev();
extern void _ZN8S20010C53v18Ev();
extern void _ZN8S20010C53v19Ev();
extern void _ZN8S20010C53v20Ev();
extern void _ZN8S20010C53v21Ev();
extern void _ZN8S20010C53v22Ev();
extern void _ZN8S20010C53v23Ev();
extern void _ZN8S20010C23v14Ev();
extern void _ZN8S20010C23v15Ev();
extern void _ZN8S20010C23v16Ev();
extern void _ZN8S20010C23v17Ev();
static  VTBL_ENTRY vtc_S20010C9[] = {
  ABISELECT(48,32),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20010C9[0]),
  (VTBL_ENTRY)&_ZN8S20010C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20010C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v29Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v30Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v34Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(24,16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20010C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20010C9D1Ev,_ZTv0_n16_N8S20010C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20010C9D0Ev,_ZTv0_n16_N8S20010C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20010C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20010C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20010C9[0]),
  (VTBL_ENTRY)&_ZN8S20010C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v17Ev,
};
extern VTBL_ENTRY _ZTV8S20010C9[];
extern void _ZN8S20010C5D1Ev();
extern void _ZN8S20010C5D0Ev();
extern void _ZN8S20010C72v8Ev();
extern void _ZN8S20010C62v9Ev();
extern void _ZN8S20010C63v10Ev();
extern void _ZN8S20010C63v11Ev();
extern void _ZN8S20010C63v12Ev();
extern void _ZN8S20010C63v13Ev();
extern void _ZN8S20010C53v18Ev();
extern void _ZN8S20010C53v19Ev();
extern void _ZN8S20010C53v20Ev();
extern void _ZN8S20010C53v21Ev();
extern void _ZN8S20010C53v22Ev();
extern void _ZN8S20010C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C5__8S20010C9[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20010C5[0]),
  (VTBL_ENTRY)&_ZN8S20010C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20010C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20010C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20010C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v23Ev,
};
extern void _ZN8S20010C23v14Ev();
extern void _ZN8S20010C23v15Ev();
extern void _ZN8S20010C23v16Ev();
extern void _ZN8S20010C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C2__8S20010C5__8S20010C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20010C5[0]),
  (VTBL_ENTRY)&_ZN8S20010C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v17Ev,
};
static  VTT_ENTRY vtt_S20010C9[] = {
  {&(_ZTV8S20010C9[4]),  4,52},
  {&(_ZTV8S20010C9[28]),  28,52},
  {&(_ZTV8S20010C9[48]),  48,52},
  {&(_tg__ZTV8S20010C5__8S20010C9[3]),  3,17},
  {&(_tg__ZTV8S20010C2__8S20010C5__8S20010C9[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20010C9[];
extern  VTBL_ENTRY _ZTV8S20010C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20010C9[];
static VTBL_ENTRY alt_thunk_names83[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20010C9D0Ev,_ZTv0_n16_N8S20010C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20010C9D0Ev,_ZThn16_N8S20010C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20010C9D1Ev,_ZTv0_n16_N8S20010C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20010C9D1Ev,_ZThn16_N8S20010C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20010C9 = {  "S20010C9", // class name
  bases_S20010C9, 4,
  &(vtc_S20010C9[0]), // expected_vtbl_contents
  &(vtt_S20010C9[0]), // expected_vtt_contents
  ABISELECT(176,124), // object size
  NSPAIRA(_ZTI8S20010C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20010C9),52, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20010C9),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names83,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20010C3  : S20010C4 , virtual S20010C5 , S20010C2 , S20010C8 , S20010C9 {
  virtual void  v35(); // _ZN8S20010C33v35Ev
  ~S20010C3(); // tgen
  S20010C3(); // tgen
};
//SIG(-1 S20010C3) C1{ BC2{ v2 v3 v4 FL[2]} VBC3{ BC4{ BC5{ vd v5} vd v6 v7 v8 v9 v10 Fp FL:7} VBC6{ v11 v12 v13 v14 Fc FD[7]} vd v15 v16 v17 v18 v19 v20 Fi} BC6 BC7{ v21 v22 v23 v24 v25 Fp[4]} BC8{ VBC3 vd v26 v27 v28 v29 v30 v31 FL Fi} v1}


void  S20010C3 ::v35(){vfunc_called(this, "_ZN8S20010C33v35Ev");}
S20010C3 ::~S20010C3(){ note_dtor("S20010C3", this);} // tgen
S20010C3 ::S20010C3(){ note_ctor("S20010C3", this);} // tgen

static void Test_S20010C3()
{
  extern Class_Descriptor cd_S20010C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,65)];
    init_test(&cd_S20010C3, buf);
    S20010C3 *dp, &lv = *(dp=new (buf) S20010C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,256), "sizeof(S20010C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20010C3)");
    check_base_class_offset(lv, (S20010C4*), 0, "S20010C3");
    check_base_class_offset(lv, (S20010C7*)(S20010C6*)(S20010C5*), ABISELECT(224,148), "S20010C3");
    check_base_class_offset(lv, (S20010C6*)(S20010C5*), ABISELECT(224,148), "S20010C3");
    check_base_class_offset(lv, (S20010C2*)(S20010C5*), ABISELECT(256,164), "S20010C3");
    check_base_class_offset(lv, (S20010C5*), ABISELECT(224,148), "S20010C3");
    check_base_class_offset(lv, (S20010C5*)(S20010C9*), ABISELECT(224,148), "S20010C3");
    /*is_ambiguous_... S20010C3::S20010C2 */ AMB_check_base_class_offset(lv, (S20010C2*), ABISELECT(32,20), "S20010C3");
    check_base_class_offset(lv, (S20010C8*), ABISELECT(160,112), "S20010C3");
    check_base_class_offset(lv, (S20010C9*), ABISELECT(200,132), "S20010C3");
    test_class_info(&lv, &cd_S20010C3);
    dp->~S20010C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20010C3(Test_S20010C3, "S20010C3", ABISELECT(384,256));

#else // __cplusplus

extern void _ZN8S20010C3C1Ev();
extern void _ZN8S20010C3D1Ev();
Name_Map name_map_S20010C3[] = {
  NSPAIR(_ZN8S20010C3C1Ev),
  NSPAIR(_ZN8S20010C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20010C4;
extern VTBL_ENTRY _ZTI8S20010C4[];
extern  VTBL_ENTRY _ZTV8S20010C4[];
extern Class_Descriptor cd_S20010C7;
extern VTBL_ENTRY _ZTI8S20010C7[];
extern  VTBL_ENTRY _ZTV8S20010C7[];
extern Class_Descriptor cd_S20010C6;
extern VTBL_ENTRY _ZTI8S20010C6[];
extern  VTBL_ENTRY _ZTV8S20010C6[];
extern Class_Descriptor cd_S20010C2;
extern VTBL_ENTRY _ZTI8S20010C2[];
extern  VTBL_ENTRY _ZTV8S20010C2[];
extern Class_Descriptor cd_S20010C5;
extern VTBL_ENTRY _ZTI8S20010C5[];
extern  VTBL_ENTRY _ZTV8S20010C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20010C5[];
extern Class_Descriptor cd_S20010C2;
extern VTBL_ENTRY _ZTI8S20010C2[];
extern  VTBL_ENTRY _ZTV8S20010C2[];
extern Class_Descriptor cd_S20010C8;
extern VTBL_ENTRY _ZTI8S20010C8[];
extern  VTBL_ENTRY _ZTV8S20010C8[];
extern Class_Descriptor cd_S20010C9;
extern VTBL_ENTRY _ZTI8S20010C9[];
extern  VTBL_ENTRY _ZTV8S20010C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20010C9[];
static Base_Class bases_S20010C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20010C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20010C7,    ABISELECT(224,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20010C6,    ABISELECT(224,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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20010C2,    ABISELECT(256,164), //bcp->offset
    65, //bcp->virtual_function_table_offset
    6, //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_S20010C5,    ABISELECT(224,148), //bcp->offset
    35, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20010C2,    ABISELECT(32,20), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20010C8,    ABISELECT(160,112), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20010C9,    ABISELECT(200,132), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //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 _ZTI8S20010C3[];
extern void _ZN8S20010C42v5Ev();
extern void _ZN8S20010C42v6Ev();
extern void _ZN8S20010C42v7Ev();
extern void _ZN8S20010C33v35Ev();
extern void _ZN8S20010C3D1Ev();
extern void _ZN8S20010C3D0Ev();
extern void _ZN8S20010C23v14Ev();
extern void _ZN8S20010C23v15Ev();
extern void _ZN8S20010C23v16Ev();
extern void _ZN8S20010C23v17Ev();
extern void _ZN8S20010C83v24Ev();
extern void _ZN8S20010C83v25Ev();
extern void _ZN8S20010C83v26Ev();
extern void _ZN8S20010C83v27Ev();
extern void _ZN8S20010C83v28Ev();
extern void ABISELECT(_ZThn200_N8S20010C3D1Ev,_ZThn132_N8S20010C3D1Ev)();
extern void ABISELECT(_ZThn200_N8S20010C3D0Ev,_ZThn132_N8S20010C3D0Ev)();
extern void _ZN8S20010C93v29Ev();
extern void _ZN8S20010C93v30Ev();
extern void _ZN8S20010C93v31Ev();
extern void _ZN8S20010C93v32Ev();
extern void _ZN8S20010C93v33Ev();
extern void _ZN8S20010C93v34Ev();
extern void ABISELECT(_ZTv0_n32_N8S20010C3D1Ev,_ZTv0_n16_N8S20010C3D1Ev)();
extern void ABISELECT(_ZThn224_N8S20010C3D1Ev,_ZThn148_N8S20010C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20010C3D0Ev,_ZTv0_n16_N8S20010C3D0Ev)();
extern void ABISELECT(_ZThn224_N8S20010C3D0Ev,_ZThn148_N8S20010C3D0Ev)() __attribute__((weak));
extern void _ZN8S20010C72v8Ev();
extern void _ZN8S20010C62v9Ev();
extern void _ZN8S20010C63v10Ev();
extern void _ZN8S20010C63v11Ev();
extern void _ZN8S20010C63v12Ev();
extern void _ZN8S20010C63v13Ev();
extern void _ZN8S20010C53v18Ev();
extern void _ZN8S20010C53v19Ev();
extern void _ZN8S20010C53v20Ev();
extern void _ZN8S20010C53v21Ev();
extern void _ZN8S20010C53v22Ev();
extern void _ZN8S20010C53v23Ev();
extern void _ZN8S20010C23v14Ev();
extern void _ZN8S20010C23v15Ev();
extern void _ZN8S20010C23v16Ev();
extern void _ZN8S20010C23v17Ev();
static  VTBL_ENTRY vtc_S20010C3[] = {
  ABISELECT(256,164),
  ABISELECT(224,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20010C3[0]),
  (VTBL_ENTRY)&_ZN8S20010C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20010C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20010C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20010C33v35Ev,
  (VTBL_ENTRY)&_ZN8S20010C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20010C3D0Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20010C3[0]),
  (VTBL_ENTRY)&_ZN8S20010C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v17Ev,
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20010C3[0]),
  (VTBL_ENTRY)&_ZN8S20010C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20010C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20010C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20010C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20010C83v28Ev,
  ABISELECT(56,32),
  ABISELECT(24,16),
  ABISELECT(-200,-132),
  (VTBL_ENTRY)&(_ZTI8S20010C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N8S20010C3D1Ev,_ZThn132_N8S20010C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N8S20010C3D0Ev,_ZThn132_N8S20010C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20010C93v29Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v30Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v34Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-148),
  ABISELECT(32,16),
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI8S20010C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20010C3D1Ev,_ZTv0_n16_N8S20010C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20010C3D0Ev,_ZTv0_n16_N8S20010C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20010C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20010C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI8S20010C3[0]),
  (VTBL_ENTRY)&_ZN8S20010C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v17Ev,
};
extern VTBL_ENTRY _ZTV8S20010C3[];
extern void _ZN8S20010C9D1Ev();
extern void _ZN8S20010C9D0Ev();
extern void _ZN8S20010C93v29Ev();
extern void _ZN8S20010C93v30Ev();
extern void _ZN8S20010C93v31Ev();
extern void _ZN8S20010C93v32Ev();
extern void _ZN8S20010C93v33Ev();
extern void _ZN8S20010C93v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C9__8S20010C3[] = {
  ABISELECT(56,32),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20010C9[0]),
  (VTBL_ENTRY)&_ZN8S20010C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20010C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v29Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v30Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v34Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20010C9D1Ev,_ZTv0_n16_N8S20010C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S20010C9D1Ev,_ZThn16_N8S20010C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20010C9D0Ev,_ZTv0_n16_N8S20010C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S20010C9D0Ev,_ZThn16_N8S20010C9D0Ev)() __attribute__((weak));
extern void _ZN8S20010C72v8Ev();
extern void _ZN8S20010C62v9Ev();
extern void _ZN8S20010C63v10Ev();
extern void _ZN8S20010C63v11Ev();
extern void _ZN8S20010C63v12Ev();
extern void _ZN8S20010C63v13Ev();
extern void _ZN8S20010C53v18Ev();
extern void _ZN8S20010C53v19Ev();
extern void _ZN8S20010C53v20Ev();
extern void _ZN8S20010C53v21Ev();
extern void _ZN8S20010C53v22Ev();
extern void _ZN8S20010C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C5__8S20010C9__8S20010C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(32,16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20010C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20010C9D1Ev,_ZTv0_n16_N8S20010C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20010C9D0Ev,_ZTv0_n16_N8S20010C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20010C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20010C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v23Ev,
};
extern void _ZN8S20010C23v14Ev();
extern void _ZN8S20010C23v15Ev();
extern void _ZN8S20010C23v16Ev();
extern void _ZN8S20010C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C2__8S20010C9__8S20010C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20010C9[0]),
  (VTBL_ENTRY)&_ZN8S20010C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v17Ev,
};
extern void _ZN8S20010C5D1Ev();
extern void _ZN8S20010C5D0Ev();
extern void _ZN8S20010C72v8Ev();
extern void _ZN8S20010C62v9Ev();
extern void _ZN8S20010C63v10Ev();
extern void _ZN8S20010C63v11Ev();
extern void _ZN8S20010C63v12Ev();
extern void _ZN8S20010C63v13Ev();
extern void _ZN8S20010C53v18Ev();
extern void _ZN8S20010C53v19Ev();
extern void _ZN8S20010C53v20Ev();
extern void _ZN8S20010C53v21Ev();
extern void _ZN8S20010C53v22Ev();
extern void _ZN8S20010C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C5__8S20010C3[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20010C5[0]),
  (VTBL_ENTRY)&_ZN8S20010C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20010C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20010C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20010C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v23Ev,
};
extern void _ZN8S20010C23v14Ev();
extern void _ZN8S20010C23v15Ev();
extern void _ZN8S20010C23v16Ev();
extern void _ZN8S20010C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C2__8S20010C5__8S20010C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20010C5[0]),
  (VTBL_ENTRY)&_ZN8S20010C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v17Ev,
};
static  VTT_ENTRY vtt_S20010C3[] = {
  {&(_ZTV8S20010C3[4]),  4,75},
  {&(_tg__ZTV8S20010C9__8S20010C3[4]),  4,12},
  {&(_tg__ZTV8S20010C5__8S20010C9__8S20010C3[16]),  16,30},
  {&(_tg__ZTV8S20010C2__8S20010C9__8S20010C3[6]),  6,10},
  {&(_ZTV8S20010C3[51]),  51,75},
  {&(_ZTV8S20010C3[71]),  71,75},
  {&(_ZTV8S20010C3[27]),  27,75},
  {&(_tg__ZTV8S20010C5__8S20010C3[3]),  3,17},
  {&(_tg__ZTV8S20010C2__8S20010C5__8S20010C3[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20010C3[];
extern  VTBL_ENTRY _ZTV8S20010C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20010C3[];
static VTBL_ENTRY alt_thunk_names84[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20010C9D0Ev,_ZTv0_n16_N8S20010C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20010C9D0Ev,_ZThn16_N8S20010C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20010C9D1Ev,_ZTv0_n16_N8S20010C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20010C9D1Ev,_ZThn16_N8S20010C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20010C3D0Ev,_ZTv0_n16_N8S20010C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20010C3D0Ev,_ZThn148_N8S20010C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20010C3D1Ev,_ZTv0_n16_N8S20010C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20010C3D1Ev,_ZThn148_N8S20010C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20010C3 = {  "S20010C3", // class name
  bases_S20010C3, 8,
  &(vtc_S20010C3[0]), // expected_vtbl_contents
  &(vtt_S20010C3[0]), // expected_vtt_contents
  ABISELECT(384,256), // object size
  NSPAIRA(_ZTI8S20010C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20010C3),75, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20010C3),9, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names84,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20010C1  : virtual S20010C2 , S20010C3 , S20010C7 , S20010C9 {
  virtual void  v1(); // _ZN8S20010C12v1Ev
  virtual void  v2(); // _ZN8S20010C12v2Ev
  virtual void  v3(); // _ZN8S20010C12v3Ev
  virtual void  v4(); // _ZN8S20010C12v4Ev
  ~S20010C1(); // tgen
  S20010C1(); // tgen
};
//SIG(1 S20010C1) C1{ VBC2{ v5 v6 v7 v8 Fc FD[7]} BC3{ BC4{ v9 v10 v11 FL[2]} VBC5{ BC6{ BC7{ vd v12} vd v13 v14 v15 v16 v17 Fp FL:7} VBC2 vd v18 v19 v20 v21 v22 v23 Fi} BC2 BC8{ v24 v25 v26 v27 v28 Fp[4]} BC9{ VBC5 vd v29 v30 v31 v32 v33 v34 FL Fi} v35} BC7 BC9 v1 v2 v3 v4}


void  S20010C1 ::v1(){vfunc_called(this, "_ZN8S20010C12v1Ev");}
void  S20010C1 ::v2(){vfunc_called(this, "_ZN8S20010C12v2Ev");}
void  S20010C1 ::v3(){vfunc_called(this, "_ZN8S20010C12v3Ev");}
void  S20010C1 ::v4(){vfunc_called(this, "_ZN8S20010C12v4Ev");}
S20010C1 ::~S20010C1(){ note_dtor("S20010C1", this);} // tgen
S20010C1 ::S20010C1(){ note_ctor("S20010C1", this);} // tgen

static void Test_S20010C1()
{
  extern Class_Descriptor cd_S20010C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,70)];
    init_test(&cd_S20010C1, buf);
    S20010C1 *dp, &lv = *(dp=new (buf) S20010C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,276), "sizeof(S20010C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20010C1)");
    /*is_ambiguous_... S20010C1::S20010C2 */ AMB_check_base_class_offset(lv, (S20010C2*), ABISELECT(256,168), "S20010C1");
    check_base_class_offset(lv, (S20010C2*)(S20010C5*), ABISELECT(256,168), "S20010C1");
    check_base_class_offset(lv, (S20010C4*)(S20010C3*), 0, "S20010C1");
    check_base_class_offset(lv, (S20010C7*)(S20010C6*)(S20010C5*), ABISELECT(384,260), "S20010C1");
    check_base_class_offset(lv, (S20010C6*)(S20010C5*), ABISELECT(384,260), "S20010C1");
    check_base_class_offset(lv, (S20010C5*)(S20010C3*), ABISELECT(384,260), "S20010C1");
    check_base_class_offset(lv, (S20010C5*)(S20010C9*)(S20010C3*), ABISELECT(384,260), "S20010C1");
    /*is_ambiguous_... S20010C1::S20010C9 */ AMB_check_base_class_offset(lv, (S20010C5*)(S20010C9*), ABISELECT(384,260), "S20010C1");
    /*is_ambiguous_... S20010C3::S20010C2 */ AMB_check_base_class_offset(lv, (S20010C2*)(S20010C3*), ABISELECT(32,20), "S20010C1");
    check_base_class_offset(lv, (S20010C8*)(S20010C3*), ABISELECT(160,112), "S20010C1");
    check_base_class_offset(lv, (S20010C9*)(S20010C3*), ABISELECT(200,132), "S20010C1");
    check_base_class_offset(lv, (S20010C3*), 0, "S20010C1");
    /*is_ambiguous_... S20010C1::S20010C7 */ AMB_check_base_class_offset(lv, (S20010C7*), ABISELECT(224,148), "S20010C1");
    /*is_ambiguous_... S20010C1::S20010C9 */ AMB_check_base_class_offset(lv, (S20010C9*), ABISELECT(232,152), "S20010C1");
    test_class_info(&lv, &cd_S20010C1);
    dp->~S20010C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20010C1(Test_S20010C1, "S20010C1", ABISELECT(416,276));

#else // __cplusplus

extern void _ZN8S20010C1C1Ev();
extern void _ZN8S20010C1D1Ev();
Name_Map name_map_S20010C1[] = {
  NSPAIR(_ZN8S20010C1C1Ev),
  NSPAIR(_ZN8S20010C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20010C2;
extern VTBL_ENTRY _ZTI8S20010C2[];
extern  VTBL_ENTRY _ZTV8S20010C2[];
extern Class_Descriptor cd_S20010C4;
extern VTBL_ENTRY _ZTI8S20010C4[];
extern  VTBL_ENTRY _ZTV8S20010C4[];
extern Class_Descriptor cd_S20010C7;
extern VTBL_ENTRY _ZTI8S20010C7[];
extern  VTBL_ENTRY _ZTV8S20010C7[];
extern Class_Descriptor cd_S20010C6;
extern VTBL_ENTRY _ZTI8S20010C6[];
extern  VTBL_ENTRY _ZTV8S20010C6[];
extern Class_Descriptor cd_S20010C5;
extern VTBL_ENTRY _ZTI8S20010C5[];
extern  VTBL_ENTRY _ZTV8S20010C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20010C5[];
extern Class_Descriptor cd_S20010C2;
extern VTBL_ENTRY _ZTI8S20010C2[];
extern  VTBL_ENTRY _ZTV8S20010C2[];
extern Class_Descriptor cd_S20010C8;
extern VTBL_ENTRY _ZTI8S20010C8[];
extern  VTBL_ENTRY _ZTV8S20010C8[];
extern Class_Descriptor cd_S20010C9;
extern VTBL_ENTRY _ZTI8S20010C9[];
extern  VTBL_ENTRY _ZTV8S20010C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20010C9[];
extern Class_Descriptor cd_S20010C3;
extern VTBL_ENTRY _ZTI8S20010C3[];
extern  VTBL_ENTRY _ZTV8S20010C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20010C3[];
extern Class_Descriptor cd_S20010C7;
extern VTBL_ENTRY _ZTI8S20010C7[];
extern  VTBL_ENTRY _ZTV8S20010C7[];
extern Class_Descriptor cd_S20010C9;
extern VTBL_ENTRY _ZTI8S20010C9[];
extern  VTBL_ENTRY _ZTV8S20010C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20010C9[];
static Base_Class bases_S20010C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20010C2,    ABISELECT(256,168), //bcp->offset
    56, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20010C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20010C7,    ABISELECT(384,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20010C6,    ABISELECT(384,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20010C5,    ABISELECT(384,260), //bcp->offset
    66, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20010C2,    ABISELECT(32,20), //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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20010C8,    ABISELECT(160,112), //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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20010C9,    ABISELECT(200,132), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20010C3,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20010C7,    ABISELECT(224,148), //bcp->offset
    39, //bcp->virtual_function_table_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_S20010C9,    ABISELECT(232,152), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20010C1[];
extern void _ZN8S20010C42v5Ev();
extern void _ZN8S20010C42v6Ev();
extern void _ZN8S20010C42v7Ev();
extern void _ZN8S20010C33v35Ev();
extern void _ZN8S20010C1D1Ev();
extern void _ZN8S20010C1D0Ev();
extern void _ZN8S20010C12v1Ev();
extern void _ZN8S20010C12v2Ev();
extern void _ZN8S20010C12v3Ev();
extern void _ZN8S20010C12v4Ev();
extern void _ZN8S20010C23v14Ev();
extern void _ZN8S20010C23v15Ev();
extern void _ZN8S20010C23v16Ev();
extern void _ZN8S20010C23v17Ev();
extern void _ZN8S20010C83v24Ev();
extern void _ZN8S20010C83v25Ev();
extern void _ZN8S20010C83v26Ev();
extern void _ZN8S20010C83v27Ev();
extern void _ZN8S20010C83v28Ev();
extern void ABISELECT(_ZThn200_N8S20010C1D1Ev,_ZThn132_N8S20010C1D1Ev)();
extern void ABISELECT(_ZThn200_N8S20010C1D0Ev,_ZThn132_N8S20010C1D0Ev)();
extern void _ZN8S20010C93v29Ev();
extern void _ZN8S20010C93v30Ev();
extern void _ZN8S20010C93v31Ev();
extern void _ZN8S20010C93v32Ev();
extern void _ZN8S20010C93v33Ev();
extern void _ZN8S20010C93v34Ev();
extern void ABISELECT(_ZThn224_N8S20010C1D1Ev,_ZThn148_N8S20010C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S20010C1D0Ev,_ZThn148_N8S20010C1D0Ev)();
extern void _ZN8S20010C72v8Ev();
extern void ABISELECT(_ZThn232_N8S20010C1D1Ev,_ZThn152_N8S20010C1D1Ev)();
extern void ABISELECT(_ZThn232_N8S20010C1D0Ev,_ZThn152_N8S20010C1D0Ev)();
extern void _ZN8S20010C93v29Ev();
extern void _ZN8S20010C93v30Ev();
extern void _ZN8S20010C93v31Ev();
extern void _ZN8S20010C93v32Ev();
extern void _ZN8S20010C93v33Ev();
extern void _ZN8S20010C93v34Ev();
extern void _ZN8S20010C23v14Ev();
extern void _ZN8S20010C23v15Ev();
extern void _ZN8S20010C23v16Ev();
extern void _ZN8S20010C23v17Ev();
extern void ABISELECT(_ZTv0_n32_N8S20010C1D1Ev,_ZTv0_n16_N8S20010C1D1Ev)();
extern void ABISELECT(_ZThn384_N8S20010C1D1Ev,_ZThn260_N8S20010C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20010C1D0Ev,_ZTv0_n16_N8S20010C1D0Ev)();
extern void ABISELECT(_ZThn384_N8S20010C1D0Ev,_ZThn260_N8S20010C1D0Ev)() __attribute__((weak));
extern void _ZN8S20010C72v8Ev();
extern void _ZN8S20010C62v9Ev();
extern void _ZN8S20010C63v10Ev();
extern void _ZN8S20010C63v11Ev();
extern void _ZN8S20010C63v12Ev();
extern void _ZN8S20010C63v13Ev();
extern void _ZN8S20010C53v18Ev();
extern void _ZN8S20010C53v19Ev();
extern void _ZN8S20010C53v20Ev();
extern void _ZN8S20010C53v21Ev();
extern void _ZN8S20010C53v22Ev();
extern void _ZN8S20010C53v23Ev();
static  VTBL_ENTRY vtc_S20010C1[] = {
  ABISELECT(256,168),
  ABISELECT(384,260),
  0,
  (VTBL_ENTRY)&(_ZTI8S20010C1[0]),
  (VTBL_ENTRY)&_ZN8S20010C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20010C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20010C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20010C33v35Ev,
  (VTBL_ENTRY)&_ZN8S20010C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20010C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20010C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20010C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20010C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20010C12v4Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20010C1[0]),
  (VTBL_ENTRY)&_ZN8S20010C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v17Ev,
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20010C1[0]),
  (VTBL_ENTRY)&_ZN8S20010C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20010C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20010C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20010C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20010C83v28Ev,
  ABISELECT(56,36),
  ABISELECT(184,128),
  ABISELECT(-200,-132),
  (VTBL_ENTRY)&(_ZTI8S20010C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N8S20010C1D1Ev,_ZThn132_N8S20010C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N8S20010C1D0Ev,_ZThn132_N8S20010C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20010C93v29Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v30Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v34Ev,
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI8S20010C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N8S20010C1D1Ev,_ZThn148_N8S20010C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N8S20010C1D0Ev,_ZThn148_N8S20010C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20010C72v8Ev,
  ABISELECT(24,16),
  ABISELECT(152,108),
  ABISELECT(-232,-152),
  (VTBL_ENTRY)&(_ZTI8S20010C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N8S20010C1D1Ev,_ZThn152_N8S20010C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N8S20010C1D0Ev,_ZThn152_N8S20010C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20010C93v29Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v30Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v34Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-168),
  (VTBL_ENTRY)&(_ZTI8S20010C1[0]),
  (VTBL_ENTRY)&_ZN8S20010C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-260),
  ABISELECT(-128,-92),
  ABISELECT(-384,-260),
  (VTBL_ENTRY)&(_ZTI8S20010C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20010C1D1Ev,_ZTv0_n16_N8S20010C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20010C1D0Ev,_ZTv0_n16_N8S20010C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20010C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20010C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v23Ev,
};
extern VTBL_ENTRY _ZTV8S20010C1[];
extern void _ZN8S20010C42v5Ev();
extern void _ZN8S20010C42v6Ev();
extern void _ZN8S20010C42v7Ev();
extern void _ZN8S20010C33v35Ev();
extern void _ZN8S20010C3D1Ev();
extern void _ZN8S20010C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C3__8S20010C1[] = {
  ABISELECT(256,168),
  ABISELECT(384,260),
  0,
  (VTBL_ENTRY)&(_ZTI8S20010C3[0]),
  (VTBL_ENTRY)&_ZN8S20010C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20010C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20010C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20010C33v35Ev,
  (VTBL_ENTRY)&_ZN8S20010C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20010C3D0Ev,
};
extern void _ZN8S20010C9D1Ev();
extern void _ZN8S20010C9D0Ev();
extern void _ZN8S20010C93v29Ev();
extern void _ZN8S20010C93v30Ev();
extern void _ZN8S20010C93v31Ev();
extern void _ZN8S20010C93v32Ev();
extern void _ZN8S20010C93v33Ev();
extern void _ZN8S20010C93v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C98S20010C3__8S20010C1[] = {
  ABISELECT(56,36),
  ABISELECT(184,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S20010C9[0]),
  (VTBL_ENTRY)&_ZN8S20010C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20010C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v29Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v30Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v34Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20010C9D1Ev,_ZTv0_n16_N8S20010C9D1Ev)();
extern void ABISELECT(_ZThn184_N8S20010C9D1Ev,_ZThn128_N8S20010C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20010C9D0Ev,_ZTv0_n16_N8S20010C9D0Ev)();
extern void ABISELECT(_ZThn184_N8S20010C9D0Ev,_ZThn128_N8S20010C9D0Ev)() __attribute__((weak));
extern void _ZN8S20010C72v8Ev();
extern void _ZN8S20010C62v9Ev();
extern void _ZN8S20010C63v10Ev();
extern void _ZN8S20010C63v11Ev();
extern void _ZN8S20010C63v12Ev();
extern void _ZN8S20010C63v13Ev();
extern void _ZN8S20010C53v18Ev();
extern void _ZN8S20010C53v19Ev();
extern void _ZN8S20010C53v20Ev();
extern void _ZN8S20010C53v21Ev();
extern void _ZN8S20010C53v22Ev();
extern void _ZN8S20010C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C5__8S20010C98S20010C3__8S20010C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-128),
  ABISELECT(-128,-92),
  ABISELECT(-184,-128),
  (VTBL_ENTRY)&(_ZTI8S20010C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20010C9D1Ev,_ZTv0_n16_N8S20010C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20010C9D0Ev,_ZTv0_n16_N8S20010C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20010C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20010C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v23Ev,
};
extern void _ZN8S20010C23v14Ev();
extern void _ZN8S20010C23v15Ev();
extern void _ZN8S20010C23v16Ev();
extern void _ZN8S20010C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C2__8S20010C98S20010C3__8S20010C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20010C9[0]),
  (VTBL_ENTRY)&_ZN8S20010C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v17Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20010C3D1Ev,_ZTv0_n16_N8S20010C3D1Ev)();
extern void ABISELECT(_ZThn384_N8S20010C3D1Ev,_ZThn260_N8S20010C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20010C3D0Ev,_ZTv0_n16_N8S20010C3D0Ev)();
extern void ABISELECT(_ZThn384_N8S20010C3D0Ev,_ZThn260_N8S20010C3D0Ev)() __attribute__((weak));
extern void _ZN8S20010C72v8Ev();
extern void _ZN8S20010C62v9Ev();
extern void _ZN8S20010C63v10Ev();
extern void _ZN8S20010C63v11Ev();
extern void _ZN8S20010C63v12Ev();
extern void _ZN8S20010C63v13Ev();
extern void _ZN8S20010C53v18Ev();
extern void _ZN8S20010C53v19Ev();
extern void _ZN8S20010C53v20Ev();
extern void _ZN8S20010C53v21Ev();
extern void _ZN8S20010C53v22Ev();
extern void _ZN8S20010C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C5__8S20010C3__8S20010C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-260),
  ABISELECT(-128,-92),
  ABISELECT(-384,-260),
  (VTBL_ENTRY)&(_ZTI8S20010C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20010C3D1Ev,_ZTv0_n16_N8S20010C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20010C3D0Ev,_ZTv0_n16_N8S20010C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20010C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20010C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v23Ev,
};
extern void _ZN8S20010C23v14Ev();
extern void _ZN8S20010C23v15Ev();
extern void _ZN8S20010C23v16Ev();
extern void _ZN8S20010C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C2__8S20010C3__8S20010C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-256,-168),
  (VTBL_ENTRY)&(_ZTI8S20010C3[0]),
  (VTBL_ENTRY)&_ZN8S20010C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v17Ev,
};
extern void ABISELECT(_ZThn200_N8S20010C3D1Ev,_ZThn132_N8S20010C3D1Ev)();
extern void ABISELECT(_ZThn200_N8S20010C3D0Ev,_ZThn132_N8S20010C3D0Ev)();
extern void _ZN8S20010C93v29Ev();
extern void _ZN8S20010C93v30Ev();
extern void _ZN8S20010C93v31Ev();
extern void _ZN8S20010C93v32Ev();
extern void _ZN8S20010C93v33Ev();
extern void _ZN8S20010C93v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C9__8S20010C3__8S20010C1[] = {
  ABISELECT(56,36),
  ABISELECT(184,128),
  ABISELECT(-200,-132),
  (VTBL_ENTRY)&(_ZTI8S20010C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N8S20010C3D1Ev,_ZThn132_N8S20010C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N8S20010C3D0Ev,_ZThn132_N8S20010C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20010C93v29Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v30Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v34Ev,
};
extern void _ZN8S20010C9D1Ev();
extern void _ZN8S20010C9D0Ev();
extern void _ZN8S20010C93v29Ev();
extern void _ZN8S20010C93v30Ev();
extern void _ZN8S20010C93v31Ev();
extern void _ZN8S20010C93v32Ev();
extern void _ZN8S20010C93v33Ev();
extern void _ZN8S20010C93v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C9__A1__8S20010C1[] = {
  ABISELECT(24,16),
  ABISELECT(152,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20010C9[0]),
  (VTBL_ENTRY)&_ZN8S20010C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20010C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v29Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v30Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20010C93v34Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20010C9D1Ev,_ZTv0_n16_N8S20010C9D1Ev)();
extern void ABISELECT(_ZThn152_N8S20010C9D1Ev,_ZThn108_N8S20010C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20010C9D0Ev,_ZTv0_n16_N8S20010C9D0Ev)();
extern void ABISELECT(_ZThn152_N8S20010C9D0Ev,_ZThn108_N8S20010C9D0Ev)() __attribute__((weak));
extern void _ZN8S20010C72v8Ev();
extern void _ZN8S20010C62v9Ev();
extern void _ZN8S20010C63v10Ev();
extern void _ZN8S20010C63v11Ev();
extern void _ZN8S20010C63v12Ev();
extern void _ZN8S20010C63v13Ev();
extern void _ZN8S20010C53v18Ev();
extern void _ZN8S20010C53v19Ev();
extern void _ZN8S20010C53v20Ev();
extern void _ZN8S20010C53v21Ev();
extern void _ZN8S20010C53v22Ev();
extern void _ZN8S20010C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C5__8S20010C9__A1__8S20010C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-108),
  ABISELECT(-128,-92),
  ABISELECT(-152,-108),
  (VTBL_ENTRY)&(_ZTI8S20010C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20010C9D1Ev,_ZTv0_n16_N8S20010C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20010C9D0Ev,_ZTv0_n16_N8S20010C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20010C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20010C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v23Ev,
};
extern void _ZN8S20010C23v14Ev();
extern void _ZN8S20010C23v15Ev();
extern void _ZN8S20010C23v16Ev();
extern void _ZN8S20010C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C2__8S20010C9__A1__8S20010C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20010C9[0]),
  (VTBL_ENTRY)&_ZN8S20010C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v17Ev,
};
extern void _ZN8S20010C5D1Ev();
extern void _ZN8S20010C5D0Ev();
extern void _ZN8S20010C72v8Ev();
extern void _ZN8S20010C62v9Ev();
extern void _ZN8S20010C63v10Ev();
extern void _ZN8S20010C63v11Ev();
extern void _ZN8S20010C63v12Ev();
extern void _ZN8S20010C63v13Ev();
extern void _ZN8S20010C53v18Ev();
extern void _ZN8S20010C53v19Ev();
extern void _ZN8S20010C53v20Ev();
extern void _ZN8S20010C53v21Ev();
extern void _ZN8S20010C53v22Ev();
extern void _ZN8S20010C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C5__8S20010C1[] = {
  ABISELECT(-128,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S20010C5[0]),
  (VTBL_ENTRY)&_ZN8S20010C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20010C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20010C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20010C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20010C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20010C53v23Ev,
};
extern void _ZN8S20010C23v14Ev();
extern void _ZN8S20010C23v15Ev();
extern void _ZN8S20010C23v16Ev();
extern void _ZN8S20010C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20010C2__8S20010C5__8S20010C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(128,92),
  (VTBL_ENTRY)&(_ZTI8S20010C5[0]),
  (VTBL_ENTRY)&_ZN8S20010C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20010C23v17Ev,
};
static  VTT_ENTRY vtt_S20010C1[] = {
  {&(_ZTV8S20010C1[4]),  4,96},
  {&(_tg__ZTV8S20010C3__8S20010C1[4]),  4,10},
  {&(_tg__ZTV8S20010C98S20010C3__8S20010C1[4]),  4,12},
  {&(_tg__ZTV8S20010C5__8S20010C98S20010C3__8S20010C1[16]),  16,30},
  {&(_tg__ZTV8S20010C2__8S20010C98S20010C3__8S20010C1[6]),  6,10},
  {&(_tg__ZTV8S20010C5__8S20010C3__8S20010C1[16]),  16,30},
  {&(_tg__ZTV8S20010C2__8S20010C3__8S20010C1[6]),  6,10},
  {&(_tg__ZTV8S20010C9__8S20010C3__8S20010C1[4]),  4,12},
  {&(_tg__ZTV8S20010C9__A1__8S20010C1[4]),  4,12},
  {&(_tg__ZTV8S20010C5__8S20010C9__A1__8S20010C1[16]),  16,30},
  {&(_tg__ZTV8S20010C2__8S20010C9__A1__8S20010C1[6]),  6,10},
  {&(_ZTV8S20010C1[62]),  62,96},
  {&(_ZTV8S20010C1[82]),  82,96},
  {&(_ZTV8S20010C1[31]),  31,96},
  {&(_ZTV8S20010C1[48]),  48,96},
  {&(_tg__ZTV8S20010C5__8S20010C1[3]),  3,17},
  {&(_tg__ZTV8S20010C2__8S20010C5__8S20010C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20010C1[];
extern  VTBL_ENTRY _ZTV8S20010C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20010C1[];
static VTBL_ENTRY alt_thunk_names85[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20010C3D0Ev,_ZTv0_n16_N8S20010C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S20010C3D0Ev,_ZThn260_N8S20010C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20010C3D1Ev,_ZTv0_n16_N8S20010C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S20010C3D1Ev,_ZThn260_N8S20010C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20010C9D0Ev,_ZTv0_n16_N8S20010C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S20010C9D0Ev,_ZThn108_N8S20010C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20010C9D0Ev,_ZThn128_N8S20010C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20010C9D1Ev,_ZTv0_n16_N8S20010C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S20010C9D1Ev,_ZThn108_N8S20010C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20010C9D1Ev,_ZThn128_N8S20010C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20010C1D0Ev,_ZTv0_n16_N8S20010C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S20010C1D0Ev,_ZThn260_N8S20010C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20010C1D1Ev,_ZTv0_n16_N8S20010C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S20010C1D1Ev,_ZThn260_N8S20010C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20010C1 = {  "S20010C1", // class name
  bases_S20010C1, 11,
  &(vtc_S20010C1[0]), // expected_vtbl_contents
  &(vtt_S20010C1[0]), // expected_vtt_contents
  ABISELECT(416,276), // object size
  NSPAIRA(_ZTI8S20010C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20010C1),96, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20010C1),17, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names85,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19057C4  {
  void *s19057c4f0;
  long s19057c4f1[6];
  char s19057c4f2:5;
  virtual void  v4(); // _ZN8S19057C42v4Ev
  virtual void  v5(); // _ZN8S19057C42v5Ev
  virtual void  v6(); // _ZN8S19057C42v6Ev
  virtual void  v7(); // _ZN8S19057C42v7Ev
  ~S19057C4(); // tgen
  S19057C4(); // tgen
};
//SIG(-1 S19057C4) C1{ v1 v2 v3 v4 Fp Fl[6] Fc:5}


void  S19057C4 ::v4(){vfunc_called(this, "_ZN8S19057C42v4Ev");}
void  S19057C4 ::v5(){vfunc_called(this, "_ZN8S19057C42v5Ev");}
void  S19057C4 ::v6(){vfunc_called(this, "_ZN8S19057C42v6Ev");}
void  S19057C4 ::v7(){vfunc_called(this, "_ZN8S19057C42v7Ev");}
S19057C4 ::~S19057C4(){ note_dtor("S19057C4", this);} // tgen
S19057C4 ::S19057C4(){ note_ctor("S19057C4", this);} // tgen

static void Test_S19057C4()
{
  extern Class_Descriptor cd_S19057C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S19057C4, buf);
    S19057C4 *dp, &lv = *(dp=new (buf) S19057C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S19057C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19057C4)");
    check_field_offset(lv, s19057c4f0, ABISELECT(8,4), "S19057C4.s19057c4f0");
    check_field_offset(lv, s19057c4f1, ABISELECT(16,8), "S19057C4.s19057c4f1");
    set_bf_and_test(lv, s19057c4f2, ABISELECT(64,32), 0, 5, 1, "S19057C4");
    set_bf_and_test(lv, s19057c4f2, ABISELECT(64,32), 0, 5, hide_sll(1LL<<4), "S19057C4");
    test_class_info(&lv, &cd_S19057C4);
    dp->~S19057C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19057C4(Test_S19057C4, "S19057C4", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S19057C4C1Ev();
extern void _ZN8S19057C4D1Ev();
Name_Map name_map_S19057C4[] = {
  NSPAIR(_ZN8S19057C4C1Ev),
  NSPAIR(_ZN8S19057C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19057C4[];
extern void _ZN8S19057C42v4Ev();
extern void _ZN8S19057C42v5Ev();
extern void _ZN8S19057C42v6Ev();
extern void _ZN8S19057C42v7Ev();
static  VTBL_ENTRY vtc_S19057C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19057C4[0]),
  (VTBL_ENTRY)&_ZN8S19057C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v7Ev,
};
extern VTBL_ENTRY _ZTI8S19057C4[];
extern  VTBL_ENTRY _ZTV8S19057C4[];
Class_Descriptor cd_S19057C4 = {  "S19057C4", // class name
  0,0,//no base classes
  &(vtc_S19057C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S19057C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19057C4),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  S19057C3  : S19057C4 {
  void *s19057c3f0[11];
  char s19057c3f1[4];
  __tsi64 s19057c3f2;
  virtual void  v8(); // _ZN8S19057C32v8Ev
  virtual void  v9(); // _ZN8S19057C32v9Ev
  virtual void  v10(); // _ZN8S19057C33v10Ev
  virtual void  v11(); // _ZN8S19057C33v11Ev
  ~S19057C3(); // tgen
  S19057C3(); // tgen
};
//SIG(-1 S19057C3) C1{ BC2{ v5 v6 v7 v8 Fp Fl[6] Fc:5} v1 v2 v3 v4 Fp[11] Fc[4] FL}


void  S19057C3 ::v8(){vfunc_called(this, "_ZN8S19057C32v8Ev");}
void  S19057C3 ::v9(){vfunc_called(this, "_ZN8S19057C32v9Ev");}
void  S19057C3 ::v10(){vfunc_called(this, "_ZN8S19057C33v10Ev");}
void  S19057C3 ::v11(){vfunc_called(this, "_ZN8S19057C33v11Ev");}
S19057C3 ::~S19057C3(){ note_dtor("S19057C3", this);} // tgen
S19057C3 ::S19057C3(){ note_ctor("S19057C3", this);} // tgen

static void Test_S19057C3()
{
  extern Class_Descriptor cd_S19057C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,24)];
    init_test(&cd_S19057C3, buf);
    S19057C3 *dp, &lv = *(dp=new (buf) S19057C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,92), "sizeof(S19057C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19057C3)");
    check_base_class_offset(lv, (S19057C4*), 0, "S19057C3");
    check_field_offset(lv, s19057c3f0, ABISELECT(72,36), "S19057C3.s19057c3f0");
    check_field_offset(lv, s19057c3f1, ABISELECT(160,80), "S19057C3.s19057c3f1");
    check_field_offset(lv, s19057c3f2, ABISELECT(168,84), "S19057C3.s19057c3f2");
    test_class_info(&lv, &cd_S19057C3);
    dp->~S19057C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19057C3(Test_S19057C3, "S19057C3", ABISELECT(176,92));

#else // __cplusplus

extern void _ZN8S19057C3C1Ev();
extern void _ZN8S19057C3D1Ev();
Name_Map name_map_S19057C3[] = {
  NSPAIR(_ZN8S19057C3C1Ev),
  NSPAIR(_ZN8S19057C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19057C4;
extern VTBL_ENTRY _ZTI8S19057C4[];
extern  VTBL_ENTRY _ZTV8S19057C4[];
static Base_Class bases_S19057C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19057C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S19057C3[];
extern void _ZN8S19057C42v4Ev();
extern void _ZN8S19057C42v5Ev();
extern void _ZN8S19057C42v6Ev();
extern void _ZN8S19057C42v7Ev();
extern void _ZN8S19057C32v8Ev();
extern void _ZN8S19057C32v9Ev();
extern void _ZN8S19057C33v10Ev();
extern void _ZN8S19057C33v11Ev();
static  VTBL_ENTRY vtc_S19057C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19057C3[0]),
  (VTBL_ENTRY)&_ZN8S19057C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19057C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19057C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19057C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19057C33v11Ev,
};
extern VTBL_ENTRY _ZTI8S19057C3[];
extern  VTBL_ENTRY _ZTV8S19057C3[];
Class_Descriptor cd_S19057C3 = {  "S19057C3", // class name
  bases_S19057C3, 1,
  &(vtc_S19057C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,92), // object size
  NSPAIRA(_ZTI8S19057C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19057C3),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19057C7  {
  int s19057c7f0;
  void *s19057c7f1[2];
  char s19057c7f2[4];
  virtual void  v12(); // _ZN8S19057C73v12Ev
  virtual void  v13(); // _ZN8S19057C73v13Ev
  virtual void  v14(); // _ZN8S19057C73v14Ev
  virtual void  v15(); // _ZN8S19057C73v15Ev
  virtual void  v16(); // _ZN8S19057C73v16Ev
  ~S19057C7(); // tgen
  S19057C7(); // tgen
};
//SIG(-1 S19057C7) C1{ v1 v2 v3 v4 v5 Fi Fp[2] Fc[4]}


void  S19057C7 ::v12(){vfunc_called(this, "_ZN8S19057C73v12Ev");}
void  S19057C7 ::v13(){vfunc_called(this, "_ZN8S19057C73v13Ev");}
void  S19057C7 ::v14(){vfunc_called(this, "_ZN8S19057C73v14Ev");}
void  S19057C7 ::v15(){vfunc_called(this, "_ZN8S19057C73v15Ev");}
void  S19057C7 ::v16(){vfunc_called(this, "_ZN8S19057C73v16Ev");}
S19057C7 ::~S19057C7(){ note_dtor("S19057C7", this);} // tgen
S19057C7 ::S19057C7(){ note_ctor("S19057C7", this);} // tgen

static void Test_S19057C7()
{
  extern Class_Descriptor cd_S19057C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19057C7, buf);
    S19057C7 *dp, &lv = *(dp=new (buf) S19057C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19057C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19057C7)");
    check_field_offset(lv, s19057c7f0, ABISELECT(8,4), "S19057C7.s19057c7f0");
    check_field_offset(lv, s19057c7f1, ABISELECT(16,8), "S19057C7.s19057c7f1");
    check_field_offset(lv, s19057c7f2, ABISELECT(32,16), "S19057C7.s19057c7f2");
    test_class_info(&lv, &cd_S19057C7);
    dp->~S19057C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19057C7(Test_S19057C7, "S19057C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19057C7C1Ev();
extern void _ZN8S19057C7D1Ev();
Name_Map name_map_S19057C7[] = {
  NSPAIR(_ZN8S19057C7C1Ev),
  NSPAIR(_ZN8S19057C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19057C7[];
extern void _ZN8S19057C73v12Ev();
extern void _ZN8S19057C73v13Ev();
extern void _ZN8S19057C73v14Ev();
extern void _ZN8S19057C73v15Ev();
extern void _ZN8S19057C73v16Ev();
static  VTBL_ENTRY vtc_S19057C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19057C7[0]),
  (VTBL_ENTRY)&_ZN8S19057C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v15Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v16Ev,
};
extern VTBL_ENTRY _ZTI8S19057C7[];
extern  VTBL_ENTRY _ZTV8S19057C7[];
Class_Descriptor cd_S19057C7 = {  "S19057C7", // class name
  0,0,//no base classes
  &(vtc_S19057C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19057C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19057C7),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  S19057C6  : S19057C7 , S19057C4 {
  short s19057c6f0;
  void *s19057c6f1;
  virtual void  v17(); // _ZN8S19057C63v17Ev
  virtual void  v18(); // _ZN8S19057C63v18Ev
  virtual void  v19(); // _ZN8S19057C63v19Ev
  virtual void  v20(); // _ZN8S19057C63v20Ev
  virtual void  v21(); // _ZN8S19057C63v21Ev
  ~S19057C6(); // tgen
  S19057C6(); // tgen
};
//SIG(-1 S19057C6) C1{ BC2{ v6 v7 v8 v9 v10 Fi Fp[2] Fc[4]} BC3{ v11 v12 v13 v14 Fp Fl[6] Fc:5} v1 v2 v3 v4 v5 Fs Fp}


void  S19057C6 ::v17(){vfunc_called(this, "_ZN8S19057C63v17Ev");}
void  S19057C6 ::v18(){vfunc_called(this, "_ZN8S19057C63v18Ev");}
void  S19057C6 ::v19(){vfunc_called(this, "_ZN8S19057C63v19Ev");}
void  S19057C6 ::v20(){vfunc_called(this, "_ZN8S19057C63v20Ev");}
void  S19057C6 ::v21(){vfunc_called(this, "_ZN8S19057C63v21Ev");}
S19057C6 ::~S19057C6(){ note_dtor("S19057C6", this);} // tgen
S19057C6 ::S19057C6(){ note_ctor("S19057C6", this);} // tgen

static void Test_S19057C6()
{
  extern Class_Descriptor cd_S19057C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S19057C6, buf);
    S19057C6 *dp, &lv = *(dp=new (buf) S19057C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S19057C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19057C6)");
    check_base_class_offset(lv, (S19057C7*), 0, "S19057C6");
    check_base_class_offset(lv, (S19057C4*), ABISELECT(40,20), "S19057C6");
    check_field_offset(lv, s19057c6f0, ABISELECT(106,54), "S19057C6.s19057c6f0");
    check_field_offset(lv, s19057c6f1, ABISELECT(112,56), "S19057C6.s19057c6f1");
    test_class_info(&lv, &cd_S19057C6);
    dp->~S19057C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19057C6(Test_S19057C6, "S19057C6", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN8S19057C6C1Ev();
extern void _ZN8S19057C6D1Ev();
Name_Map name_map_S19057C6[] = {
  NSPAIR(_ZN8S19057C6C1Ev),
  NSPAIR(_ZN8S19057C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19057C7;
extern VTBL_ENTRY _ZTI8S19057C7[];
extern  VTBL_ENTRY _ZTV8S19057C7[];
extern Class_Descriptor cd_S19057C4;
extern VTBL_ENTRY _ZTI8S19057C4[];
extern  VTBL_ENTRY _ZTV8S19057C4[];
static Base_Class bases_S19057C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19057C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19057C4,    ABISELECT(40,20), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19057C6[];
extern void _ZN8S19057C73v12Ev();
extern void _ZN8S19057C73v13Ev();
extern void _ZN8S19057C73v14Ev();
extern void _ZN8S19057C73v15Ev();
extern void _ZN8S19057C73v16Ev();
extern void _ZN8S19057C63v17Ev();
extern void _ZN8S19057C63v18Ev();
extern void _ZN8S19057C63v19Ev();
extern void _ZN8S19057C63v20Ev();
extern void _ZN8S19057C63v21Ev();
extern void _ZN8S19057C42v4Ev();
extern void _ZN8S19057C42v5Ev();
extern void _ZN8S19057C42v6Ev();
extern void _ZN8S19057C42v7Ev();
static  VTBL_ENTRY vtc_S19057C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19057C6[0]),
  (VTBL_ENTRY)&_ZN8S19057C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v15Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v16Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v19Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v21Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19057C6[0]),
  (VTBL_ENTRY)&_ZN8S19057C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v7Ev,
};
extern VTBL_ENTRY _ZTI8S19057C6[];
extern  VTBL_ENTRY _ZTV8S19057C6[];
Class_Descriptor cd_S19057C6 = {  "S19057C6", // class name
  bases_S19057C6, 2,
  &(vtc_S19057C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI8S19057C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19057C6),18, //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  S19057C5  : virtual S19057C4 , S19057C6 {
  virtual void  v22(); // _ZN8S19057C53v22Ev
  virtual void  v23(); // _ZN8S19057C53v23Ev
  virtual void  v24(); // _ZN8S19057C53v24Ev
  virtual void  v25(); // _ZN8S19057C53v25Ev
  virtual void  v26(); // _ZN8S19057C53v26Ev
  virtual void  v27(); // _ZN8S19057C53v27Ev
  virtual void  v28(); // _ZN8S19057C53v28Ev
  virtual void  v29(); // _ZN8S19057C53v29Ev
  ~S19057C5(); // tgen
  S19057C5(); // tgen
};
//SIG(-1 S19057C5) C1{ VBC2{ v9 v10 v11 v12 Fp Fl[6] Fc:5} BC3{ BC4{ v13 v14 v15 v16 v17 Fi Fp[2] Fc[4]} BC2 v18 v19 v20 v21 v22 Fs Fp} v1 v2 v3 v4 v5 v6 v7 v8}


void  S19057C5 ::v22(){vfunc_called(this, "_ZN8S19057C53v22Ev");}
void  S19057C5 ::v23(){vfunc_called(this, "_ZN8S19057C53v23Ev");}
void  S19057C5 ::v24(){vfunc_called(this, "_ZN8S19057C53v24Ev");}
void  S19057C5 ::v25(){vfunc_called(this, "_ZN8S19057C53v25Ev");}
void  S19057C5 ::v26(){vfunc_called(this, "_ZN8S19057C53v26Ev");}
void  S19057C5 ::v27(){vfunc_called(this, "_ZN8S19057C53v27Ev");}
void  S19057C5 ::v28(){vfunc_called(this, "_ZN8S19057C53v28Ev");}
void  S19057C5 ::v29(){vfunc_called(this, "_ZN8S19057C53v29Ev");}
S19057C5 ::~S19057C5(){ note_dtor("S19057C5", this);} // tgen
S19057C5 ::S19057C5(){ note_ctor("S19057C5", this);} // tgen

static void Test_S19057C5()
{
  extern Class_Descriptor cd_S19057C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[25];
    init_test(&cd_S19057C5, buf);
    S19057C5 *dp, &lv = *(dp=new (buf) S19057C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,96), "sizeof(S19057C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19057C5)");
    /*is_ambiguous_... S19057C5::S19057C4 */ AMB_check_base_class_offset(lv, (S19057C4*), ABISELECT(120,60), "S19057C5");
    check_base_class_offset(lv, (S19057C7*)(S19057C6*), 0, "S19057C5");
    check_base_class_offset(lv, (S19057C4*)(S19057C6*), ABISELECT(40,20), "S19057C5");
    check_base_class_offset(lv, (S19057C6*), 0, "S19057C5");
    test_class_info(&lv, &cd_S19057C5);
    dp->~S19057C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19057C5(Test_S19057C5, "S19057C5", ABISELECT(192,96));

#else // __cplusplus

extern void _ZN8S19057C5C1Ev();
extern void _ZN8S19057C5D1Ev();
Name_Map name_map_S19057C5[] = {
  NSPAIR(_ZN8S19057C5C1Ev),
  NSPAIR(_ZN8S19057C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19057C4;
extern VTBL_ENTRY _ZTI8S19057C4[];
extern  VTBL_ENTRY _ZTV8S19057C4[];
extern Class_Descriptor cd_S19057C7;
extern VTBL_ENTRY _ZTI8S19057C7[];
extern  VTBL_ENTRY _ZTV8S19057C7[];
extern Class_Descriptor cd_S19057C4;
extern VTBL_ENTRY _ZTI8S19057C4[];
extern  VTBL_ENTRY _ZTV8S19057C4[];
extern Class_Descriptor cd_S19057C6;
extern VTBL_ENTRY _ZTI8S19057C6[];
extern  VTBL_ENTRY _ZTV8S19057C6[];
static Base_Class bases_S19057C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19057C4,    ABISELECT(120,60), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19057C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19057C4,    ABISELECT(40,20), //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19057C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19057C5[];
extern void _ZN8S19057C73v12Ev();
extern void _ZN8S19057C73v13Ev();
extern void _ZN8S19057C73v14Ev();
extern void _ZN8S19057C73v15Ev();
extern void _ZN8S19057C73v16Ev();
extern void _ZN8S19057C63v17Ev();
extern void _ZN8S19057C63v18Ev();
extern void _ZN8S19057C63v19Ev();
extern void _ZN8S19057C63v20Ev();
extern void _ZN8S19057C63v21Ev();
extern void _ZN8S19057C53v22Ev();
extern void _ZN8S19057C53v23Ev();
extern void _ZN8S19057C53v24Ev();
extern void _ZN8S19057C53v25Ev();
extern void _ZN8S19057C53v26Ev();
extern void _ZN8S19057C53v27Ev();
extern void _ZN8S19057C53v28Ev();
extern void _ZN8S19057C53v29Ev();
extern void _ZN8S19057C42v4Ev();
extern void _ZN8S19057C42v5Ev();
extern void _ZN8S19057C42v6Ev();
extern void _ZN8S19057C42v7Ev();
extern void _ZN8S19057C42v4Ev();
extern void _ZN8S19057C42v5Ev();
extern void _ZN8S19057C42v6Ev();
extern void _ZN8S19057C42v7Ev();
static  VTBL_ENTRY vtc_S19057C5[] = {
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19057C5[0]),
  (VTBL_ENTRY)&_ZN8S19057C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v15Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v16Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v19Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v23Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v24Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v25Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v26Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v27Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v28Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v29Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19057C5[0]),
  (VTBL_ENTRY)&_ZN8S19057C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v7Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S19057C5[0]),
  (VTBL_ENTRY)&_ZN8S19057C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v7Ev,
};
extern VTBL_ENTRY _ZTV8S19057C5[];
static  VTT_ENTRY vtt_S19057C5[] = {
  {&(_ZTV8S19057C5[3]),  3,37},
  {&(_ZTV8S19057C5[33]),  33,37},
};
extern VTBL_ENTRY _ZTI8S19057C5[];
extern  VTBL_ENTRY _ZTV8S19057C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19057C5[];
Class_Descriptor cd_S19057C5 = {  "S19057C5", // class name
  bases_S19057C5, 4,
  &(vtc_S19057C5[0]), // expected_vtbl_contents
  &(vtt_S19057C5[0]), // expected_vtt_contents
  ABISELECT(192,96), // object size
  NSPAIRA(_ZTI8S19057C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19057C5),37, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19057C5),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19057C2  : S19057C3 , virtual S19057C5 {
  virtual  ~S19057C2(); // _ZN8S19057C2D2Ev
  virtual void  v30(); // _ZN8S19057C23v30Ev
  virtual void  v31(); // _ZN8S19057C23v31Ev
  virtual void  v32(); // _ZN8S19057C23v32Ev
  S19057C2(); // tgen
};
//SIG(-1 S19057C2) C1{ BC2{ BC3{ v4 v5 v6 v7 Fp Fl[6] Fc:5} v8 v9 v10 v11 Fp[11] Fc[4] FL} VBC4{ VBC3 BC5{ BC6{ v12 v13 v14 v15 v16 Fi Fp[2] Fc[4]} BC3 v17 v18 v19 v20 v21 Fs Fp} v22 v23 v24 v25 v26 v27 v28 v29} vd v1 v2 v3}


 S19057C2 ::~S19057C2(){ note_dtor("S19057C2", this);}
void  S19057C2 ::v30(){vfunc_called(this, "_ZN8S19057C23v30Ev");}
void  S19057C2 ::v31(){vfunc_called(this, "_ZN8S19057C23v31Ev");}
void  S19057C2 ::v32(){vfunc_called(this, "_ZN8S19057C23v32Ev");}
S19057C2 ::S19057C2(){ note_ctor("S19057C2", this);} // tgen

static void Test_S19057C2()
{
  extern Class_Descriptor cd_S19057C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,48)];
    init_test(&cd_S19057C2, buf);
    S19057C2 *dp, &lv = *(dp=new (buf) S19057C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,188), "sizeof(S19057C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19057C2)");
    check_base_class_offset(lv, (S19057C4*)(S19057C3*), 0, "S19057C2");
    check_base_class_offset(lv, (S19057C3*), 0, "S19057C2");
    /*is_ambiguous_... S19057C5::S19057C4 */ AMB_check_base_class_offset(lv, (S19057C4*)(S19057C5*), ABISELECT(296,152), "S19057C2");
    check_base_class_offset(lv, (S19057C7*)(S19057C6*)(S19057C5*), ABISELECT(176,92), "S19057C2");
    check_base_class_offset(lv, (S19057C4*)(S19057C6*)(S19057C5*), ABISELECT(216,112), "S19057C2");
    check_base_class_offset(lv, (S19057C6*)(S19057C5*), ABISELECT(176,92), "S19057C2");
    check_base_class_offset(lv, (S19057C5*), ABISELECT(176,92), "S19057C2");
    test_class_info(&lv, &cd_S19057C2);
    dp->~S19057C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19057C2(Test_S19057C2, "S19057C2", ABISELECT(368,188));

#else // __cplusplus

extern void _ZN8S19057C2C1Ev();
extern void _ZN8S19057C2D2Ev();
Name_Map name_map_S19057C2[] = {
  NSPAIR(_ZN8S19057C2C1Ev),
  NSPAIR(_ZN8S19057C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19057C4;
extern VTBL_ENTRY _ZTI8S19057C4[];
extern  VTBL_ENTRY _ZTV8S19057C4[];
extern Class_Descriptor cd_S19057C3;
extern VTBL_ENTRY _ZTI8S19057C3[];
extern  VTBL_ENTRY _ZTV8S19057C3[];
extern Class_Descriptor cd_S19057C4;
extern VTBL_ENTRY _ZTI8S19057C4[];
extern  VTBL_ENTRY _ZTV8S19057C4[];
extern Class_Descriptor cd_S19057C7;
extern VTBL_ENTRY _ZTI8S19057C7[];
extern  VTBL_ENTRY _ZTV8S19057C7[];
extern Class_Descriptor cd_S19057C4;
extern VTBL_ENTRY _ZTI8S19057C4[];
extern  VTBL_ENTRY _ZTV8S19057C4[];
extern Class_Descriptor cd_S19057C6;
extern VTBL_ENTRY _ZTI8S19057C6[];
extern  VTBL_ENTRY _ZTV8S19057C6[];
extern Class_Descriptor cd_S19057C5;
extern VTBL_ENTRY _ZTI8S19057C5[];
extern  VTBL_ENTRY _ZTV8S19057C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19057C5[];
static Base_Class bases_S19057C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19057C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S19057C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19057C4,    ABISELECT(296,152), //bcp->offset
    66, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19057C7,    ABISELECT(176,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19057C4,    ABISELECT(216,112), //bcp->offset
    60, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19057C6,    ABISELECT(176,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19057C5,    ABISELECT(176,92), //bcp->offset
    17, //bcp->virtual_function_table_offset
    25, //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 _ZTI8S19057C2[];
extern void _ZN8S19057C42v4Ev();
extern void _ZN8S19057C42v5Ev();
extern void _ZN8S19057C42v6Ev();
extern void _ZN8S19057C42v7Ev();
extern void _ZN8S19057C32v8Ev();
extern void _ZN8S19057C32v9Ev();
extern void _ZN8S19057C33v10Ev();
extern void _ZN8S19057C33v11Ev();
extern void _ZN8S19057C2D1Ev();
extern void _ZN8S19057C2D0Ev();
extern void _ZN8S19057C23v30Ev();
extern void _ZN8S19057C23v31Ev();
extern void _ZN8S19057C23v32Ev();
extern void _ZN8S19057C73v12Ev();
extern void _ZN8S19057C73v13Ev();
extern void _ZN8S19057C73v14Ev();
extern void _ZN8S19057C73v15Ev();
extern void _ZN8S19057C73v16Ev();
extern void _ZN8S19057C63v17Ev();
extern void _ZN8S19057C63v18Ev();
extern void _ZN8S19057C63v19Ev();
extern void _ZN8S19057C63v20Ev();
extern void _ZN8S19057C63v21Ev();
extern void _ZN8S19057C53v22Ev();
extern void _ZN8S19057C53v23Ev();
extern void _ZN8S19057C53v24Ev();
extern void _ZN8S19057C53v25Ev();
extern void _ZN8S19057C53v26Ev();
extern void _ZN8S19057C53v27Ev();
extern void _ZN8S19057C53v28Ev();
extern void _ZN8S19057C53v29Ev();
extern void _ZN8S19057C42v4Ev();
extern void _ZN8S19057C42v5Ev();
extern void _ZN8S19057C42v6Ev();
extern void _ZN8S19057C42v7Ev();
extern void _ZN8S19057C42v4Ev();
extern void _ZN8S19057C42v5Ev();
extern void _ZN8S19057C42v6Ev();
extern void _ZN8S19057C42v7Ev();
static  VTBL_ENTRY vtc_S19057C2[] = {
  ABISELECT(296,152),
  ABISELECT(176,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19057C2[0]),
  (VTBL_ENTRY)&_ZN8S19057C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19057C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19057C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19057C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19057C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19057C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19057C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19057C23v30Ev,
  (VTBL_ENTRY)&_ZN8S19057C23v31Ev,
  (VTBL_ENTRY)&_ZN8S19057C23v32Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI8S19057C2[0]),
  (VTBL_ENTRY)&_ZN8S19057C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v15Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v16Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v19Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v23Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v24Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v25Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v26Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v27Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v28Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v29Ev,
  ABISELECT(-216,-112),
  (VTBL_ENTRY)&(_ZTI8S19057C2[0]),
  (VTBL_ENTRY)&_ZN8S19057C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v7Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-296,-152),
  (VTBL_ENTRY)&(_ZTI8S19057C2[0]),
  (VTBL_ENTRY)&_ZN8S19057C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v7Ev,
};
extern VTBL_ENTRY _ZTV8S19057C2[];
extern void _ZN8S19057C73v12Ev();
extern void _ZN8S19057C73v13Ev();
extern void _ZN8S19057C73v14Ev();
extern void _ZN8S19057C73v15Ev();
extern void _ZN8S19057C73v16Ev();
extern void _ZN8S19057C63v17Ev();
extern void _ZN8S19057C63v18Ev();
extern void _ZN8S19057C63v19Ev();
extern void _ZN8S19057C63v20Ev();
extern void _ZN8S19057C63v21Ev();
extern void _ZN8S19057C53v22Ev();
extern void _ZN8S19057C53v23Ev();
extern void _ZN8S19057C53v24Ev();
extern void _ZN8S19057C53v25Ev();
extern void _ZN8S19057C53v26Ev();
extern void _ZN8S19057C53v27Ev();
extern void _ZN8S19057C53v28Ev();
extern void _ZN8S19057C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S19057C5__8S19057C2[] = {
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19057C5[0]),
  (VTBL_ENTRY)&_ZN8S19057C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v15Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v16Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v19Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v23Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v24Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v25Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v26Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v27Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v28Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v29Ev,
};
extern void _ZN8S19057C42v4Ev();
extern void _ZN8S19057C42v5Ev();
extern void _ZN8S19057C42v6Ev();
extern void _ZN8S19057C42v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19057C4__8S19057C5__8S19057C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S19057C5[0]),
  (VTBL_ENTRY)&_ZN8S19057C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v7Ev,
};
static  VTT_ENTRY vtt_S19057C2[] = {
  {&(_ZTV8S19057C2[4]),  4,76},
  {&(_ZTV8S19057C2[42]),  42,76},
  {&(_ZTV8S19057C2[72]),  72,76},
  {&(_ZTV8S19057C2[62]),  62,76},
  {&(_tg__ZTV8S19057C5__8S19057C2[3]),  3,21},
  {&(_tg__ZTV8S19057C4__8S19057C5__8S19057C2[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S19057C2[];
extern  VTBL_ENTRY _ZTV8S19057C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19057C2[];
Class_Descriptor cd_S19057C2 = {  "S19057C2", // class name
  bases_S19057C2, 7,
  &(vtc_S19057C2[0]), // expected_vtbl_contents
  &(vtt_S19057C2[0]), // expected_vtt_contents
  ABISELECT(368,188), // object size
  NSPAIRA(_ZTI8S19057C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19057C2),76, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19057C2),6, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19057C8_nt  {
  virtual void  v33(); // _ZN11S19057C8_nt3v33Ev
  virtual void  v34(); // _ZN11S19057C8_nt3v34Ev
  virtual void  v35(); // _ZN11S19057C8_nt3v35Ev
  virtual void  v36(); // _ZN11S19057C8_nt3v36Ev
  virtual void  v37(); // _ZN11S19057C8_nt3v37Ev
  virtual void  v38(); // _ZN11S19057C8_nt3v38Ev
  ~S19057C8_nt(); // tgen
  S19057C8_nt(); // tgen
};
//SIG(-1 S19057C8_nt) C1{ v1 v2 v3 v4 v5 v6}


void  S19057C8_nt ::v33(){vfunc_called(this, "_ZN11S19057C8_nt3v33Ev");}
void  S19057C8_nt ::v34(){vfunc_called(this, "_ZN11S19057C8_nt3v34Ev");}
void  S19057C8_nt ::v35(){vfunc_called(this, "_ZN11S19057C8_nt3v35Ev");}
void  S19057C8_nt ::v36(){vfunc_called(this, "_ZN11S19057C8_nt3v36Ev");}
void  S19057C8_nt ::v37(){vfunc_called(this, "_ZN11S19057C8_nt3v37Ev");}
void  S19057C8_nt ::v38(){vfunc_called(this, "_ZN11S19057C8_nt3v38Ev");}
S19057C8_nt ::~S19057C8_nt(){ note_dtor("S19057C8_nt", this);} // tgen
S19057C8_nt ::S19057C8_nt(){ note_ctor("S19057C8_nt", this);} // tgen

//skip512 S19057C8_nt

#else // __cplusplus

extern void _ZN11S19057C8_ntC1Ev();
extern void _ZN11S19057C8_ntD1Ev();
Name_Map name_map_S19057C8_nt[] = {
  NSPAIR(_ZN11S19057C8_ntC1Ev),
  NSPAIR(_ZN11S19057C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19057C8_nt[];
extern void _ZN11S19057C8_nt3v33Ev();
extern void _ZN11S19057C8_nt3v34Ev();
extern void _ZN11S19057C8_nt3v35Ev();
extern void _ZN11S19057C8_nt3v36Ev();
extern void _ZN11S19057C8_nt3v37Ev();
extern void _ZN11S19057C8_nt3v38Ev();
static  VTBL_ENTRY vtc_S19057C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19057C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S19057C8_nt3v33Ev,
  (VTBL_ENTRY)&_ZN11S19057C8_nt3v34Ev,
  (VTBL_ENTRY)&_ZN11S19057C8_nt3v35Ev,
  (VTBL_ENTRY)&_ZN11S19057C8_nt3v36Ev,
  (VTBL_ENTRY)&_ZN11S19057C8_nt3v37Ev,
  (VTBL_ENTRY)&_ZN11S19057C8_nt3v38Ev,
};
extern VTBL_ENTRY _ZTI11S19057C8_nt[];
VTBL_ENTRY *P__ZTI11S19057C8_nt = _ZTI11S19057C8_nt; 
extern  VTBL_ENTRY _ZTV11S19057C8_nt[];
Class_Descriptor cd_S19057C8_nt = {  "S19057C8_nt", // class name
  0,0,//no base classes
  &(vtc_S19057C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S19057C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S19057C8_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  S19057C1  : virtual S19057C2 , S19057C8_nt {
  virtual void  v1(); // _ZN8S19057C12v1Ev
  virtual void  v2(); // _ZN8S19057C12v2Ev
  virtual void  v3(); // _ZN8S19057C12v3Ev
  ~S19057C1(); // tgen
  S19057C1(); // tgen
};
//SIG(1 S19057C1) C1{ VBC2{ BC3{ BC4{ v4 v5 v6 v7 Fp Fl[6] Fc:5} v8 v9 v10 v11 Fp[11] Fc[4] FL} VBC5{ VBC4 BC6{ BC7{ v12 v13 v14 v15 v16 Fi Fp[2] Fc[4]} BC4 v17 v18 v19 v20 v21 Fs Fp} v22 v23 v24 v25 v26 v27 v28 v29} vd v30 v31 v32} BC8{ v33 v34 v35 v36 v37 v38} v1 v2 v3}


void  S19057C1 ::v1(){vfunc_called(this, "_ZN8S19057C12v1Ev");}
void  S19057C1 ::v2(){vfunc_called(this, "_ZN8S19057C12v2Ev");}
void  S19057C1 ::v3(){vfunc_called(this, "_ZN8S19057C12v3Ev");}
S19057C1 ::~S19057C1(){ note_dtor("S19057C1", this);} // tgen
S19057C1 ::S19057C1(){ note_ctor("S19057C1", this);} // tgen

static void Test_S19057C1()
{
  extern Class_Descriptor cd_S19057C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,49)];
    init_test(&cd_S19057C1, buf);
    S19057C1 *dp, &lv = *(dp=new (buf) S19057C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,192), "sizeof(S19057C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19057C1)");
    check_base_class_offset(lv, (S19057C4*)(S19057C3*)(S19057C2*), ABISELECT(8,4), "S19057C1");
    check_base_class_offset(lv, (S19057C3*)(S19057C2*), ABISELECT(8,4), "S19057C1");
    /*is_ambiguous_... S19057C5::S19057C4 */ AMB_check_base_class_offset(lv, (S19057C4*)(S19057C5*), ABISELECT(304,156), "S19057C1");
    check_base_class_offset(lv, (S19057C7*)(S19057C6*)(S19057C5*), ABISELECT(184,96), "S19057C1");
    check_base_class_offset(lv, (S19057C4*)(S19057C6*)(S19057C5*), ABISELECT(224,116), "S19057C1");
    check_base_class_offset(lv, (S19057C6*)(S19057C5*), ABISELECT(184,96), "S19057C1");
    check_base_class_offset(lv, (S19057C5*)(S19057C2*), ABISELECT(184,96), "S19057C1");
    check_base_class_offset(lv, (S19057C2*), ABISELECT(8,4), "S19057C1");
    check_base_class_offset(lv, (S19057C8_nt*), 0, "S19057C1");
    test_class_info(&lv, &cd_S19057C1);
    dp->~S19057C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19057C1(Test_S19057C1, "S19057C1", ABISELECT(376,192));

#else // __cplusplus

extern void _ZN8S19057C1C1Ev();
extern void _ZN8S19057C1D1Ev();
Name_Map name_map_S19057C1[] = {
  NSPAIR(_ZN8S19057C1C1Ev),
  NSPAIR(_ZN8S19057C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19057C4;
extern VTBL_ENTRY _ZTI8S19057C4[];
extern  VTBL_ENTRY _ZTV8S19057C4[];
extern Class_Descriptor cd_S19057C3;
extern VTBL_ENTRY _ZTI8S19057C3[];
extern  VTBL_ENTRY _ZTV8S19057C3[];
extern Class_Descriptor cd_S19057C4;
extern VTBL_ENTRY _ZTI8S19057C4[];
extern  VTBL_ENTRY _ZTV8S19057C4[];
extern Class_Descriptor cd_S19057C7;
extern VTBL_ENTRY _ZTI8S19057C7[];
extern  VTBL_ENTRY _ZTV8S19057C7[];
extern Class_Descriptor cd_S19057C4;
extern VTBL_ENTRY _ZTI8S19057C4[];
extern  VTBL_ENTRY _ZTV8S19057C4[];
extern Class_Descriptor cd_S19057C6;
extern VTBL_ENTRY _ZTI8S19057C6[];
extern  VTBL_ENTRY _ZTV8S19057C6[];
extern Class_Descriptor cd_S19057C5;
extern VTBL_ENTRY _ZTI8S19057C5[];
extern  VTBL_ENTRY _ZTV8S19057C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19057C5[];
extern Class_Descriptor cd_S19057C2;
extern VTBL_ENTRY _ZTI8S19057C2[];
extern  VTBL_ENTRY _ZTV8S19057C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19057C2[];
extern Class_Descriptor cd_S19057C8_nt;
extern VTBL_ENTRY _ZTI11S19057C8_nt[];
extern  VTBL_ENTRY _ZTV11S19057C8_nt[];
static Base_Class bases_S19057C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19057C4,    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
    6, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19057C3,    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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19057C4,    ABISELECT(304,156), //bcp->offset
    94, //bcp->virtual_function_table_offset
    6, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19057C7,    ABISELECT(184,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19057C4,    ABISELECT(224,116), //bcp->offset
    88, //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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19057C6,    ABISELECT(184,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19057C5,    ABISELECT(184,96), //bcp->offset
    45, //bcp->virtual_function_table_offset
    25, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19057C2,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19057C8_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},
  {0}};
extern VTBL_ENTRY _ZTI8S19057C1[];
extern void _ZN11S19057C8_nt3v33Ev();
extern void _ZN11S19057C8_nt3v34Ev();
extern void _ZN11S19057C8_nt3v35Ev();
extern void _ZN11S19057C8_nt3v36Ev();
extern void _ZN11S19057C8_nt3v37Ev();
extern void _ZN11S19057C8_nt3v38Ev();
extern void _ZN8S19057C12v1Ev();
extern void _ZN8S19057C12v2Ev();
extern void _ZN8S19057C12v3Ev();
extern void _ZN8S19057C1D1Ev();
extern void _ZN8S19057C1D0Ev();
extern void _ZN8S19057C42v4Ev();
extern void _ZN8S19057C42v5Ev();
extern void _ZN8S19057C42v6Ev();
extern void _ZN8S19057C42v7Ev();
extern void _ZN8S19057C32v8Ev();
extern void _ZN8S19057C32v9Ev();
extern void _ZN8S19057C33v10Ev();
extern void _ZN8S19057C33v11Ev();
extern void ABISELECT(_ZTv0_n104_N8S19057C1D1Ev,_ZTv0_n52_N8S19057C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19057C1D1Ev,_ZThn4_N8S19057C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S19057C1D0Ev,_ZTv0_n52_N8S19057C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S19057C1D0Ev,_ZThn4_N8S19057C1D0Ev)() __attribute__((weak));
extern void _ZN8S19057C23v30Ev();
extern void _ZN8S19057C23v31Ev();
extern void _ZN8S19057C23v32Ev();
extern void _ZN8S19057C73v12Ev();
extern void _ZN8S19057C73v13Ev();
extern void _ZN8S19057C73v14Ev();
extern void _ZN8S19057C73v15Ev();
extern void _ZN8S19057C73v16Ev();
extern void _ZN8S19057C63v17Ev();
extern void _ZN8S19057C63v18Ev();
extern void _ZN8S19057C63v19Ev();
extern void _ZN8S19057C63v20Ev();
extern void _ZN8S19057C63v21Ev();
extern void _ZN8S19057C53v22Ev();
extern void _ZN8S19057C53v23Ev();
extern void _ZN8S19057C53v24Ev();
extern void _ZN8S19057C53v25Ev();
extern void _ZN8S19057C53v26Ev();
extern void _ZN8S19057C53v27Ev();
extern void _ZN8S19057C53v28Ev();
extern void _ZN8S19057C53v29Ev();
extern void _ZN8S19057C42v4Ev();
extern void _ZN8S19057C42v5Ev();
extern void _ZN8S19057C42v6Ev();
extern void _ZN8S19057C42v7Ev();
extern void _ZN8S19057C42v4Ev();
extern void _ZN8S19057C42v5Ev();
extern void _ZN8S19057C42v6Ev();
extern void _ZN8S19057C42v7Ev();
static  VTBL_ENTRY vtc_S19057C1[] = {
  ABISELECT(304,156),
  ABISELECT(184,96),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19057C1[0]),
  (VTBL_ENTRY)&_ZN11S19057C8_nt3v33Ev,
  (VTBL_ENTRY)&_ZN11S19057C8_nt3v34Ev,
  (VTBL_ENTRY)&_ZN11S19057C8_nt3v35Ev,
  (VTBL_ENTRY)&_ZN11S19057C8_nt3v36Ev,
  (VTBL_ENTRY)&_ZN11S19057C8_nt3v37Ev,
  (VTBL_ENTRY)&_ZN11S19057C8_nt3v38Ev,
  (VTBL_ENTRY)&_ZN8S19057C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19057C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19057C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19057C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19057C1D0Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(296,152),
  ABISELECT(176,92),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19057C1[0]),
  (VTBL_ENTRY)&_ZN8S19057C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19057C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19057C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19057C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19057C33v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19057C1D1Ev,_ZTv0_n52_N8S19057C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19057C1D0Ev,_ZTv0_n52_N8S19057C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19057C23v30Ev,
  (VTBL_ENTRY)&_ZN8S19057C23v31Ev,
  (VTBL_ENTRY)&_ZN8S19057C23v32Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  ABISELECT(-184,-96),
  (VTBL_ENTRY)&(_ZTI8S19057C1[0]),
  (VTBL_ENTRY)&_ZN8S19057C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v15Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v16Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v19Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v23Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v24Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v25Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v26Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v27Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v28Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v29Ev,
  ABISELECT(-224,-116),
  (VTBL_ENTRY)&(_ZTI8S19057C1[0]),
  (VTBL_ENTRY)&_ZN8S19057C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v7Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-156),
  (VTBL_ENTRY)&(_ZTI8S19057C1[0]),
  (VTBL_ENTRY)&_ZN8S19057C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v7Ev,
};
extern VTBL_ENTRY _ZTV8S19057C1[];
extern void _ZN8S19057C42v4Ev();
extern void _ZN8S19057C42v5Ev();
extern void _ZN8S19057C42v6Ev();
extern void _ZN8S19057C42v7Ev();
extern void _ZN8S19057C32v8Ev();
extern void _ZN8S19057C32v9Ev();
extern void _ZN8S19057C33v10Ev();
extern void _ZN8S19057C33v11Ev();
extern void _ZN8S19057C2D1Ev();
extern void _ZN8S19057C2D0Ev();
extern void _ZN8S19057C23v30Ev();
extern void _ZN8S19057C23v31Ev();
extern void _ZN8S19057C23v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19057C2__8S19057C1[] = {
  ABISELECT(296,152),
  ABISELECT(176,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19057C2[0]),
  (VTBL_ENTRY)&_ZN8S19057C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19057C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19057C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19057C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19057C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19057C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19057C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19057C23v30Ev,
  (VTBL_ENTRY)&_ZN8S19057C23v31Ev,
  (VTBL_ENTRY)&_ZN8S19057C23v32Ev,
};
extern void _ZN8S19057C73v12Ev();
extern void _ZN8S19057C73v13Ev();
extern void _ZN8S19057C73v14Ev();
extern void _ZN8S19057C73v15Ev();
extern void _ZN8S19057C73v16Ev();
extern void _ZN8S19057C63v17Ev();
extern void _ZN8S19057C63v18Ev();
extern void _ZN8S19057C63v19Ev();
extern void _ZN8S19057C63v20Ev();
extern void _ZN8S19057C63v21Ev();
extern void _ZN8S19057C53v22Ev();
extern void _ZN8S19057C53v23Ev();
extern void _ZN8S19057C53v24Ev();
extern void _ZN8S19057C53v25Ev();
extern void _ZN8S19057C53v26Ev();
extern void _ZN8S19057C53v27Ev();
extern void _ZN8S19057C53v28Ev();
extern void _ZN8S19057C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S19057C5__8S19057C2__8S19057C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI8S19057C2[0]),
  (VTBL_ENTRY)&_ZN8S19057C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v15Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v16Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v19Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v23Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v24Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v25Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v26Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v27Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v28Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v29Ev,
};
extern void _ZN8S19057C42v4Ev();
extern void _ZN8S19057C42v5Ev();
extern void _ZN8S19057C42v6Ev();
extern void _ZN8S19057C42v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19057C4__A1__8S19057C2__8S19057C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-296,-152),
  (VTBL_ENTRY)&(_ZTI8S19057C2[0]),
  (VTBL_ENTRY)&_ZN8S19057C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v7Ev,
};
extern void _ZN8S19057C42v4Ev();
extern void _ZN8S19057C42v5Ev();
extern void _ZN8S19057C42v6Ev();
extern void _ZN8S19057C42v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19057C48S19057C68S19057C5__A2__8S19057C2__8S19057C1[] = {
  ABISELECT(-216,-112),
  (VTBL_ENTRY)&(_ZTI8S19057C2[0]),
  (VTBL_ENTRY)&_ZN8S19057C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v7Ev,
};
extern void _ZN8S19057C73v12Ev();
extern void _ZN8S19057C73v13Ev();
extern void _ZN8S19057C73v14Ev();
extern void _ZN8S19057C73v15Ev();
extern void _ZN8S19057C73v16Ev();
extern void _ZN8S19057C63v17Ev();
extern void _ZN8S19057C63v18Ev();
extern void _ZN8S19057C63v19Ev();
extern void _ZN8S19057C63v20Ev();
extern void _ZN8S19057C63v21Ev();
extern void _ZN8S19057C53v22Ev();
extern void _ZN8S19057C53v23Ev();
extern void _ZN8S19057C53v24Ev();
extern void _ZN8S19057C53v25Ev();
extern void _ZN8S19057C53v26Ev();
extern void _ZN8S19057C53v27Ev();
extern void _ZN8S19057C53v28Ev();
extern void _ZN8S19057C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S19057C5__8S19057C1[] = {
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19057C5[0]),
  (VTBL_ENTRY)&_ZN8S19057C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v15Ev,
  (VTBL_ENTRY)&_ZN8S19057C73v16Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v19Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19057C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v23Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v24Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v25Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v26Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v27Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v28Ev,
  (VTBL_ENTRY)&_ZN8S19057C53v29Ev,
};
extern void _ZN8S19057C42v4Ev();
extern void _ZN8S19057C42v5Ev();
extern void _ZN8S19057C42v6Ev();
extern void _ZN8S19057C42v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19057C4__8S19057C5__8S19057C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S19057C5[0]),
  (VTBL_ENTRY)&_ZN8S19057C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19057C42v7Ev,
};
static  VTT_ENTRY vtt_S19057C1[] = {
  {&(_ZTV8S19057C1[5]),  5,104},
  {&(_ZTV8S19057C1[32]),  32,104},
  {&(_ZTV8S19057C1[70]),  70,104},
  {&(_ZTV8S19057C1[100]),  100,104},
  {&(_ZTV8S19057C1[90]),  90,104},
  {&(_tg__ZTV8S19057C2__8S19057C1[4]),  4,17},
  {&(_tg__ZTV8S19057C5__8S19057C2__8S19057C1[25]),  25,43},
  {&(_tg__ZTV8S19057C4__A1__8S19057C2__8S19057C1[6]),  6,10},
  {&(_tg__ZTV8S19057C48S19057C68S19057C5__A2__8S19057C2__8S19057C1[2]),  2,6},
  {&(_tg__ZTV8S19057C5__8S19057C1[3]),  3,21},
  {&(_tg__ZTV8S19057C4__8S19057C5__8S19057C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S19057C1[];
extern  VTBL_ENTRY _ZTV8S19057C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19057C1[];
static VTBL_ENTRY alt_thunk_names86[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19057C1D0Ev,_ZTv0_n52_N8S19057C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19057C1D0Ev,_ZThn4_N8S19057C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19057C1D1Ev,_ZTv0_n52_N8S19057C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19057C1D1Ev,_ZThn4_N8S19057C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19057C1 = {  "S19057C1", // class name
  bases_S19057C1, 9,
  &(vtc_S19057C1[0]), // expected_vtbl_contents
  &(vtt_S19057C1[0]), // expected_vtt_contents
  ABISELECT(376,192), // object size
  NSPAIRA(_ZTI8S19057C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19057C1),104, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19057C1),11, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names86,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13714C2  {
  long s13714c2f0[3];
};
//SIG(-1 S13714C2) C1{ Fl[3]}



static void Test_S13714C2()
{
  {
    init_simple_test("S13714C2");
    S13714C2 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S13714C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13714C2)");
    check_field_offset(lv, s13714c2f0, 0, "S13714C2.s13714c2f0");
  }
}
static Arrange_To_Call_Me vS13714C2(Test_S13714C2, "S13714C2", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13714C3  {
  __tsi64 s13714c3f0[2];
  long s13714c3f1;
  __tsi64 s13714c3f2;
  short s13714c3f3[2];
  char s13714c3f4[2];
  long s13714c3f5[10];
};
//SIG(-1 S13714C3) C1{ FL[2] Fl FL Fs[2] Fc[2] Fl[10]}



static void Test_S13714C3()
{
  {
    init_simple_test("S13714C3");
    S13714C3 lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S13714C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13714C3)");
    check_field_offset(lv, s13714c3f0, 0, "S13714C3.s13714c3f0");
    check_field_offset(lv, s13714c3f1, 16, "S13714C3.s13714c3f1");
    check_field_offset(lv, s13714c3f2, ABISELECT(24,20), "S13714C3.s13714c3f2");
    check_field_offset(lv, s13714c3f3, ABISELECT(32,28), "S13714C3.s13714c3f3");
    check_field_offset(lv, s13714c3f4, ABISELECT(36,32), "S13714C3.s13714c3f4");
    check_field_offset(lv, s13714c3f5, ABISELECT(40,36), "S13714C3.s13714c3f5");
  }
}
static Arrange_To_Call_Me vS13714C3(Test_S13714C3, "S13714C3", ABISELECT(120,76));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13714C5_nt  {
  long s13714c5f0;
};
//SIG(-1 S13714C5_nt) C1{ Fl}



//skip512 S13714C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13714C6  {
  __tsi64 s13714c6f0[2];
  long s13714c6f1;
  __tsi64 s13714c6f2;
  short s13714c6f3;
};
//SIG(-1 S13714C6) C1{ FL[2] Fl FL Fs}



static void Test_S13714C6()
{
  {
    init_simple_test("S13714C6");
    S13714C6 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S13714C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13714C6)");
    check_field_offset(lv, s13714c6f0, 0, "S13714C6.s13714c6f0");
    check_field_offset(lv, s13714c6f1, 16, "S13714C6.s13714c6f1");
    check_field_offset(lv, s13714c6f2, ABISELECT(24,20), "S13714C6.s13714c6f2");
    check_field_offset(lv, s13714c6f3, ABISELECT(32,28), "S13714C6.s13714c6f3");
  }
}
static Arrange_To_Call_Me vS13714C6(Test_S13714C6, "S13714C6", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13714C7  {
  long s13714c7f0;
  __tsi64 s13714c7f1[2];
};
//SIG(-1 S13714C7) C1{ Fl FL[2]}



static void Test_S13714C7()
{
  {
    init_simple_test("S13714C7");
    S13714C7 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S13714C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13714C7)");
    check_field_offset(lv, s13714c7f0, 0, "S13714C7.s13714c7f0");
    check_field_offset(lv, s13714c7f1, ABISELECT(8,4), "S13714C7.s13714c7f1");
  }
}
static Arrange_To_Call_Me vS13714C7(Test_S13714C7, "S13714C7", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13714C8_nt  {
  short s13714c8f0[4];
};
//SIG(-1 S13714C8_nt) C1{ Fs[4]}



//skip512 S13714C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13714C9_nt  {
  char s13714c9f0[2];
};
//SIG(-1 S13714C9_nt) C1{ Fc[2]}



//skip512 S13714C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13714C11  {
  long s13714c11f0;
};
//SIG(-1 S13714C11) C1{ Fl}



static void Test_S13714C11()
{
  {
    init_simple_test("S13714C11");
    S13714C11 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S13714C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13714C11)");
    check_field_offset(lv, s13714c11f0, 0, "S13714C11.s13714c11f0");
  }
}
static Arrange_To_Call_Me vS13714C11(Test_S13714C11, "S13714C11", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13714C13  {
  long s13714c13f0;
};
//SIG(-1 S13714C13) C1{ Fl}



static void Test_S13714C13()
{
  {
    init_simple_test("S13714C13");
    S13714C13 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S13714C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13714C13)");
    check_field_offset(lv, s13714c13f0, 0, "S13714C13.s13714c13f0");
  }
}
static Arrange_To_Call_Me vS13714C13(Test_S13714C13, "S13714C13", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13714C14_nt  {
  __tsi64 s13714c14f0;
};
//SIG(-1 S13714C14_nt) C1{ FL}



//skip512 S13714C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13714C15  {
  long s13714c15f0[5];
};
//SIG(-1 S13714C15) C1{ Fl[5]}



static void Test_S13714C15()
{
  {
    init_simple_test("S13714C15");
    S13714C15 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S13714C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13714C15)");
    check_field_offset(lv, s13714c15f0, 0, "S13714C15.s13714c15f0");
  }
}
static Arrange_To_Call_Me vS13714C15(Test_S13714C15, "S13714C15", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13714C17  {
  long s13714c17f0;
};
//SIG(-1 S13714C17) C1{ Fl}



static void Test_S13714C17()
{
  {
    init_simple_test("S13714C17");
    S13714C17 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S13714C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13714C17)");
    check_field_offset(lv, s13714c17f0, 0, "S13714C17.s13714c17f0");
  }
}
static Arrange_To_Call_Me vS13714C17(Test_S13714C17, "S13714C17", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13714C18_nt  {
  __tsi64 s13714c18f0[4];
};
//SIG(-1 S13714C18_nt) C1{ FL[4]}



//skip512 S13714C18_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13714C1  {
  long s13714c1f0;
  ::S13714C2 s13714c1f1;
  ::S13714C3 s13714c1f2;
  ::S4304C10_nt s13714c1f3;
  ::S13714C5_nt s13714c1f4;
  ::S13714C6 s13714c1f5;
  ::S13714C7 s13714c1f6;
  ::S13714C8_nt s13714c1f7;
  ::S13714C9_nt s13714c1f8;
  ::S13714C5_nt s13714c1f9;
  ::S13714C11 s13714c1f10;
  ::S13714C11 s13714c1f11;
  ::S13714C13 s13714c1f12;
  ::S13714C14_nt s13714c1f13;
  ::S13714C15 s13714c1f14;
  ::S13714C13 s13714c1f15;
  ::S13714C17 s13714c1f16;
  ::S13714C18_nt s13714c1f17;
};
//SIG(1 S13714C1) C1{ Fl FC2{ Fl[3]} FC3{ FL[2] Fl FL Fs[2] Fc[2] Fl[10]} FC4{ Fl FL[2] Fl FL Fs[2] Fc[2] Fl[9] Fs[4]} FC5{ Fl} FC6{ FL[2] Fl FL Fs} FC7{ Fl FL[2]} FC8{ Fs[4]} FC9{ Fc[2]} FC5 FC10{ Fl} FC10 FC11{ Fl} FC12{ FL} FC13{ Fl[5]} FC11 FC14{ Fl} FC15{ FL[4]}}



static void Test_S13714C1()
{
  {
    init_simple_test("S13714C1");
    S13714C1 lv;
    check2(sizeof(lv), ABISELECT(496,328), "sizeof(S13714C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13714C1)");
    check_field_offset(lv, s13714c1f0, 0, "S13714C1.s13714c1f0");
    check_field_offset(lv, s13714c1f1, ABISELECT(8,4), "S13714C1.s13714c1f1");
    check_field_offset(lv, s13714c1f2, ABISELECT(32,16), "S13714C1.s13714c1f2");
    check_field_offset(lv, s13714c1f3, ABISELECT(152,92), "S13714C1.s13714c1f3");
    check_field_offset(lv, s13714c1f4, ABISELECT(280,176), "S13714C1.s13714c1f4");
    check_field_offset(lv, s13714c1f5, ABISELECT(288,180), "S13714C1.s13714c1f5");
    check_field_offset(lv, s13714c1f6, ABISELECT(328,212), "S13714C1.s13714c1f6");
    check_field_offset(lv, s13714c1f7, ABISELECT(352,232), "S13714C1.s13714c1f7");
    check_field_offset(lv, s13714c1f8, ABISELECT(360,240), "S13714C1.s13714c1f8");
    check_field_offset(lv, s13714c1f9, ABISELECT(368,244), "S13714C1.s13714c1f9");
    check_field_offset(lv, s13714c1f10, ABISELECT(376,248), "S13714C1.s13714c1f10");
    check_field_offset(lv, s13714c1f11, ABISELECT(384,252), "S13714C1.s13714c1f11");
    check_field_offset(lv, s13714c1f12, ABISELECT(392,256), "S13714C1.s13714c1f12");
    check_field_offset(lv, s13714c1f13, ABISELECT(400,260), "S13714C1.s13714c1f13");
    check_field_offset(lv, s13714c1f14, ABISELECT(408,268), "S13714C1.s13714c1f14");
    check_field_offset(lv, s13714c1f15, ABISELECT(448,288), "S13714C1.s13714c1f15");
    check_field_offset(lv, s13714c1f16, ABISELECT(456,292), "S13714C1.s13714c1f16");
    check_field_offset(lv, s13714c1f17, ABISELECT(464,296), "S13714C1.s13714c1f17");
  }
}
static Arrange_To_Call_Me vS13714C1(Test_S13714C1, "S13714C1", ABISELECT(496,328));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7707C6  {
  int s7707c6f0[6];
  virtual void  v27(); // _ZN7S7707C63v27Ev
  ~S7707C6(); // tgen
  S7707C6(); // tgen
};
//SIG(-1 S7707C6) C1{ v1 Fi[6]}


void  S7707C6 ::v27(){vfunc_called(this, "_ZN7S7707C63v27Ev");}
S7707C6 ::~S7707C6(){ note_dtor("S7707C6", this);} // tgen
S7707C6 ::S7707C6(){ note_ctor("S7707C6", this);} // tgen

static void Test_S7707C6()
{
  extern Class_Descriptor cd_S7707C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S7707C6, buf);
    S7707C6 *dp, &lv = *(dp=new (buf) S7707C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S7707C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7707C6)");
    check_field_offset(lv, s7707c6f0, ABISELECT(8,4), "S7707C6.s7707c6f0");
    test_class_info(&lv, &cd_S7707C6);
    dp->~S7707C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7707C6(Test_S7707C6, "S7707C6", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN7S7707C6C1Ev();
extern void _ZN7S7707C6D1Ev();
Name_Map name_map_S7707C6[] = {
  NSPAIR(_ZN7S7707C6C1Ev),
  NSPAIR(_ZN7S7707C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7707C6[];
extern void _ZN7S7707C63v27Ev();
static  VTBL_ENTRY vtc_S7707C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7707C6[0]),
  (VTBL_ENTRY)&_ZN7S7707C63v27Ev,
};
extern VTBL_ENTRY _ZTI7S7707C6[];
extern  VTBL_ENTRY _ZTV7S7707C6[];
Class_Descriptor cd_S7707C6 = {  "S7707C6", // class name
  0,0,//no base classes
  &(vtc_S7707C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI7S7707C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7707C6),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  S7707C5  {
  int s7707c5f0;
  ::S7707C6 s7707c5f1;
  int s7707c5f2;
  virtual  ~S7707C5(); // _ZN7S7707C5D1Ev
  virtual void  v5(); // _ZN7S7707C52v5Ev
  virtual void  v6(); // _ZN7S7707C52v6Ev
  virtual void  v7(); // _ZN7S7707C52v7Ev
  virtual void  v8(); // _ZN7S7707C52v8Ev
  virtual void  v9(); // _ZN7S7707C52v9Ev
  virtual void  v10(); // _ZN7S7707C53v10Ev
  virtual void  v11(); // _ZN7S7707C53v11Ev
  S7707C5(); // tgen
};
//SIG(-1 S7707C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 Fi FC2{ v8 Fi[6]} Fi}


 S7707C5 ::~S7707C5(){ note_dtor("S7707C5", this);}
void  S7707C5 ::v5(){vfunc_called(this, "_ZN7S7707C52v5Ev");}
void  S7707C5 ::v6(){vfunc_called(this, "_ZN7S7707C52v6Ev");}
void  S7707C5 ::v7(){vfunc_called(this, "_ZN7S7707C52v7Ev");}
void  S7707C5 ::v8(){vfunc_called(this, "_ZN7S7707C52v8Ev");}
void  S7707C5 ::v9(){vfunc_called(this, "_ZN7S7707C52v9Ev");}
void  S7707C5 ::v10(){vfunc_called(this, "_ZN7S7707C53v10Ev");}
void  S7707C5 ::v11(){vfunc_called(this, "_ZN7S7707C53v11Ev");}
S7707C5 ::S7707C5(){ note_ctor("S7707C5", this);} // tgen

static void Test_S7707C5()
{
  extern Class_Descriptor cd_S7707C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S7707C5, buf);
    S7707C5 *dp, &lv = *(dp=new (buf) S7707C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S7707C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7707C5)");
    check_field_offset(lv, s7707c5f0, ABISELECT(8,4), "S7707C5.s7707c5f0");
    check_field_offset(lv, s7707c5f1, ABISELECT(16,8), "S7707C5.s7707c5f1");
    check_field_offset(lv, s7707c5f2, ABISELECT(48,36), "S7707C5.s7707c5f2");
    test_class_info(&lv, &cd_S7707C5);
    dp->~S7707C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7707C5(Test_S7707C5, "S7707C5", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S7707C5C1Ev();
extern void _ZN7S7707C5D1Ev();
Name_Map name_map_S7707C5[] = {
  NSPAIR(_ZN7S7707C5C1Ev),
  NSPAIR(_ZN7S7707C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7707C5[];
extern void _ZN7S7707C5D1Ev();
extern void _ZN7S7707C5D0Ev();
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
static  VTBL_ENTRY vtc_S7707C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7707C5[0]),
  (VTBL_ENTRY)&_ZN7S7707C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7707C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
};
extern VTBL_ENTRY _ZTI7S7707C5[];
extern  VTBL_ENTRY _ZTV7S7707C5[];
Class_Descriptor cd_S7707C5 = {  "S7707C5", // class name
  0,0,//no base classes
  &(vtc_S7707C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S7707C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7707C5),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7707C7  : S7707C5 {
  virtual  ~S7707C7(); // _ZN7S7707C7D1Ev
  virtual void  v12(); // _ZN7S7707C73v12Ev
  S7707C7(); // tgen
};
//SIG(-1 S7707C7) C1{ BC2{ vd v2 v3 v4 v5 v6 v7 v8 Fi FC3{ v9 Fi[6]} Fi} vd v1}


 S7707C7 ::~S7707C7(){ note_dtor("S7707C7", this);}
void  S7707C7 ::v12(){vfunc_called(this, "_ZN7S7707C73v12Ev");}
S7707C7 ::S7707C7(){ note_ctor("S7707C7", this);} // tgen

static void Test_S7707C7()
{
  extern Class_Descriptor cd_S7707C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S7707C7, buf);
    S7707C7 *dp, &lv = *(dp=new (buf) S7707C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S7707C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7707C7)");
    check_base_class_offset(lv, (S7707C5*), 0, "S7707C7");
    test_class_info(&lv, &cd_S7707C7);
    dp->~S7707C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7707C7(Test_S7707C7, "S7707C7", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S7707C7C1Ev();
extern void _ZN7S7707C7D1Ev();
Name_Map name_map_S7707C7[] = {
  NSPAIR(_ZN7S7707C7C1Ev),
  NSPAIR(_ZN7S7707C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7707C5;
extern VTBL_ENTRY _ZTI7S7707C5[];
extern  VTBL_ENTRY _ZTV7S7707C5[];
static Base_Class bases_S7707C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7707C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S7707C7[];
extern void _ZN7S7707C7D1Ev();
extern void _ZN7S7707C7D0Ev();
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C73v12Ev();
static  VTBL_ENTRY vtc_S7707C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7707C7[0]),
  (VTBL_ENTRY)&_ZN7S7707C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7707C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C73v12Ev,
};
extern VTBL_ENTRY _ZTI7S7707C7[];
extern  VTBL_ENTRY _ZTV7S7707C7[];
Class_Descriptor cd_S7707C7 = {  "S7707C7", // class name
  bases_S7707C7, 1,
  &(vtc_S7707C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S7707C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7707C7),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7707C4  : S7707C5 , virtual S7707C7 {
  int s7707c4f0:10;
  ::S7707C6 s7707c4f1;
  void *s7707c4f2;
  virtual  ~S7707C4(); // _ZN7S7707C4D2Ev
  virtual void  v13(); // _ZN7S7707C43v13Ev
  virtual void  v14(); // _ZN7S7707C43v14Ev
  virtual void  v15(); // _ZN7S7707C43v15Ev
  virtual void  v16(); // _ZN7S7707C43v16Ev
  virtual void  v17(); // _ZN7S7707C43v17Ev
  virtual void  v18(); // _ZN7S7707C43v18Ev
  virtual void  v19(); // _ZN7S7707C43v19Ev
  S7707C4(); // tgen
};
//SIG(-1 S7707C4) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 Fi FC3{ v16 Fi[6]} Fi} VBC4{ BC2 vd v15} vd v1 v2 v3 v4 v5 v6 v7 Fi:10 FC3 Fp}


 S7707C4 ::~S7707C4(){ note_dtor("S7707C4", this);}
void  S7707C4 ::v13(){vfunc_called(this, "_ZN7S7707C43v13Ev");}
void  S7707C4 ::v14(){vfunc_called(this, "_ZN7S7707C43v14Ev");}
void  S7707C4 ::v15(){vfunc_called(this, "_ZN7S7707C43v15Ev");}
void  S7707C4 ::v16(){vfunc_called(this, "_ZN7S7707C43v16Ev");}
void  S7707C4 ::v17(){vfunc_called(this, "_ZN7S7707C43v17Ev");}
void  S7707C4 ::v18(){vfunc_called(this, "_ZN7S7707C43v18Ev");}
void  S7707C4 ::v19(){vfunc_called(this, "_ZN7S7707C43v19Ev");}
S7707C4 ::S7707C4(){ note_ctor("S7707C4", this);} // tgen

static void Test_S7707C4()
{
  extern Class_Descriptor cd_S7707C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,30)];
    init_test(&cd_S7707C4, buf);
    S7707C4 *dp, &lv = *(dp=new (buf) S7707C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,116), "sizeof(S7707C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7707C4)");
    /*is_ambiguous_... S7707C4::S7707C5 */ AMB_check_base_class_offset(lv, (S7707C5*), 0, "S7707C4");
    check_base_class_offset(lv, (S7707C5*)(S7707C7*), ABISELECT(96,76), "S7707C4");
    check_base_class_offset(lv, (S7707C7*), ABISELECT(96,76), "S7707C4");
    set_bf_and_test(lv, s7707c4f0, ABISELECT(52,40), 0, 10, 1, "S7707C4");
    set_bf_and_test(lv, s7707c4f0, ABISELECT(52,40), 0, 10, hide_sll(1LL<<9), "S7707C4");
    check_field_offset(lv, s7707c4f1, ABISELECT(56,44), "S7707C4.s7707c4f1");
    check_field_offset(lv, s7707c4f2, ABISELECT(88,72), "S7707C4.s7707c4f2");
    test_class_info(&lv, &cd_S7707C4);
    dp->~S7707C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7707C4(Test_S7707C4, "S7707C4", ABISELECT(152,116));

#else // __cplusplus

extern void _ZN7S7707C4C1Ev();
extern void _ZN7S7707C4D2Ev();
Name_Map name_map_S7707C4[] = {
  NSPAIR(_ZN7S7707C4C1Ev),
  NSPAIR(_ZN7S7707C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7707C5;
extern VTBL_ENTRY _ZTI7S7707C5[];
extern  VTBL_ENTRY _ZTV7S7707C5[];
extern Class_Descriptor cd_S7707C5;
extern VTBL_ENTRY _ZTI7S7707C5[];
extern  VTBL_ENTRY _ZTV7S7707C5[];
extern Class_Descriptor cd_S7707C7;
extern VTBL_ENTRY _ZTI7S7707C7[];
extern  VTBL_ENTRY _ZTV7S7707C7[];
static Base_Class bases_S7707C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7707C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7707C5,    ABISELECT(96,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
    2, //immediately_derived
  0, 0},
  {&cd_S7707C7,    ABISELECT(96,76), //bcp->offset
    19, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S7707C4[];
extern void _ZN7S7707C4D1Ev();
extern void _ZN7S7707C4D0Ev();
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C43v13Ev();
extern void _ZN7S7707C43v14Ev();
extern void _ZN7S7707C43v15Ev();
extern void _ZN7S7707C43v16Ev();
extern void _ZN7S7707C43v17Ev();
extern void _ZN7S7707C43v18Ev();
extern void _ZN7S7707C43v19Ev();
extern void ABISELECT(_ZTv0_n24_N7S7707C4D1Ev,_ZTv0_n12_N7S7707C4D1Ev)();
extern void ABISELECT(_ZThn96_N7S7707C4D1Ev,_ZThn76_N7S7707C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7707C4D0Ev,_ZTv0_n12_N7S7707C4D0Ev)();
extern void ABISELECT(_ZThn96_N7S7707C4D0Ev,_ZThn76_N7S7707C4D0Ev)() __attribute__((weak));
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C73v12Ev();
static  VTBL_ENTRY vtc_S7707C4[] = {
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7707C4[0]),
  (VTBL_ENTRY)&_ZN7S7707C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7707C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-76),
  ABISELECT(-96,-76),
  (VTBL_ENTRY)&(_ZTI7S7707C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C4D1Ev,_ZTv0_n12_N7S7707C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C4D0Ev,_ZTv0_n12_N7S7707C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C73v12Ev,
};
extern VTBL_ENTRY _ZTV7S7707C4[];
static  VTT_ENTRY vtt_S7707C4[] = {
  {&(_ZTV7S7707C4[3]),  3,40},
  {&(_ZTV7S7707C4[30]),  30,40},
};
extern VTBL_ENTRY _ZTI7S7707C4[];
extern  VTBL_ENTRY _ZTV7S7707C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7707C4[];
static VTBL_ENTRY alt_thunk_names87[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C4D0Ev,_ZTv0_n12_N7S7707C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7707C4D0Ev,_ZThn76_N7S7707C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C4D1Ev,_ZTv0_n12_N7S7707C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7707C4D1Ev,_ZThn76_N7S7707C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7707C4 = {  "S7707C4", // class name
  bases_S7707C4, 3,
  &(vtc_S7707C4[0]), // expected_vtbl_contents
  &(vtt_S7707C4[0]), // expected_vtt_contents
  ABISELECT(152,116), // object size
  NSPAIRA(_ZTI7S7707C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7707C4),40, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7707C4),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names87,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7707C3  : virtual S7707C4 {
  virtual  ~S7707C3(); // _ZN7S7707C3D2Ev
  virtual void  v20(); // _ZN7S7707C33v20Ev
  virtual void  v21(); // _ZN7S7707C33v21Ev
  virtual void  v22(); // _ZN7S7707C33v22Ev
  virtual void  v23(); // _ZN7S7707C33v23Ev
  virtual void  v24(); // _ZN7S7707C33v24Ev
  virtual void  v25(); // _ZN7S7707C33v25Ev
  virtual void  v26(); // _ZN7S7707C33v26Ev
  S7707C3(); // tgen
};
//SIG(-1 S7707C3) C1{ VBC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 Fi FC4{ v23 Fi[6]} Fi} VBC5{ BC3 vd v15} vd v16 v17 v18 v19 v20 v21 v22 Fi:10 FC4 Fp} vd v1 v2 v3 v4 v5 v6 v7}


 S7707C3 ::~S7707C3(){ note_dtor("S7707C3", this);}
void  S7707C3 ::v20(){vfunc_called(this, "_ZN7S7707C33v20Ev");}
void  S7707C3 ::v21(){vfunc_called(this, "_ZN7S7707C33v21Ev");}
void  S7707C3 ::v22(){vfunc_called(this, "_ZN7S7707C33v22Ev");}
void  S7707C3 ::v23(){vfunc_called(this, "_ZN7S7707C33v23Ev");}
void  S7707C3 ::v24(){vfunc_called(this, "_ZN7S7707C33v24Ev");}
void  S7707C3 ::v25(){vfunc_called(this, "_ZN7S7707C33v25Ev");}
void  S7707C3 ::v26(){vfunc_called(this, "_ZN7S7707C33v26Ev");}
S7707C3 ::S7707C3(){ note_ctor("S7707C3", this);} // tgen

static void Test_S7707C3()
{
  extern Class_Descriptor cd_S7707C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,31)];
    init_test(&cd_S7707C3, buf);
    S7707C3 *dp, &lv = *(dp=new (buf) S7707C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,120), "sizeof(S7707C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7707C3)");
    /*is_ambiguous_... S7707C4::S7707C5 */ AMB_check_base_class_offset(lv, (S7707C5*)(S7707C4*), ABISELECT(8,4), "S7707C3");
    check_base_class_offset(lv, (S7707C5*)(S7707C7*), ABISELECT(104,80), "S7707C3");
    check_base_class_offset(lv, (S7707C7*)(S7707C4*), ABISELECT(104,80), "S7707C3");
    check_base_class_offset(lv, (S7707C4*), ABISELECT(8,4), "S7707C3");
    test_class_info(&lv, &cd_S7707C3);
    dp->~S7707C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7707C3(Test_S7707C3, "S7707C3", ABISELECT(160,120));

#else // __cplusplus

extern void _ZN7S7707C3C1Ev();
extern void _ZN7S7707C3D2Ev();
Name_Map name_map_S7707C3[] = {
  NSPAIR(_ZN7S7707C3C1Ev),
  NSPAIR(_ZN7S7707C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7707C5;
extern VTBL_ENTRY _ZTI7S7707C5[];
extern  VTBL_ENTRY _ZTV7S7707C5[];
extern Class_Descriptor cd_S7707C5;
extern VTBL_ENTRY _ZTI7S7707C5[];
extern  VTBL_ENTRY _ZTV7S7707C5[];
extern Class_Descriptor cd_S7707C7;
extern VTBL_ENTRY _ZTI7S7707C7[];
extern  VTBL_ENTRY _ZTV7S7707C7[];
extern Class_Descriptor cd_S7707C4;
extern VTBL_ENTRY _ZTI7S7707C4[];
extern  VTBL_ENTRY _ZTV7S7707C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7707C4[];
static Base_Class bases_S7707C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7707C5,    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
    3, //immediately_derived
  0, 0},
  {&cd_S7707C5,    ABISELECT(104,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
    2, //immediately_derived
  0, 0},
  {&cd_S7707C7,    ABISELECT(104,80), //bcp->offset
    47, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7707C4,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7707C3[];
extern void _ZN7S7707C3D1Ev();
extern void _ZN7S7707C3D0Ev();
extern void _ZN7S7707C33v20Ev();
extern void _ZN7S7707C33v21Ev();
extern void _ZN7S7707C33v22Ev();
extern void _ZN7S7707C33v23Ev();
extern void _ZN7S7707C33v24Ev();
extern void _ZN7S7707C33v25Ev();
extern void _ZN7S7707C33v26Ev();
extern void ABISELECT(_ZTv0_n32_N7S7707C3D1Ev,_ZTv0_n16_N7S7707C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S7707C3D1Ev,_ZThn4_N7S7707C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7707C3D0Ev,_ZTv0_n16_N7S7707C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S7707C3D0Ev,_ZThn4_N7S7707C3D0Ev)() __attribute__((weak));
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C43v13Ev();
extern void _ZN7S7707C43v14Ev();
extern void _ZN7S7707C43v15Ev();
extern void _ZN7S7707C43v16Ev();
extern void _ZN7S7707C43v17Ev();
extern void _ZN7S7707C43v18Ev();
extern void _ZN7S7707C43v19Ev();
extern void ABISELECT(_ZTv0_n24_N7S7707C3D1Ev,_ZTv0_n12_N7S7707C3D1Ev)();
extern void ABISELECT(_ZThn104_N7S7707C3D1Ev,_ZThn80_N7S7707C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7707C3D0Ev,_ZTv0_n12_N7S7707C3D0Ev)();
extern void ABISELECT(_ZThn104_N7S7707C3D0Ev,_ZThn80_N7S7707C3D0Ev)() __attribute__((weak));
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C73v12Ev();
static  VTBL_ENTRY vtc_S7707C3[] = {
  ABISELECT(104,80),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7707C3[0]),
  (VTBL_ENTRY)&_ZN7S7707C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7707C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v26Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(96,76),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7707C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7707C3D1Ev,_ZTv0_n16_N7S7707C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7707C3D0Ev,_ZTv0_n16_N7S7707C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-80),
  ABISELECT(-104,-80),
  (VTBL_ENTRY)&(_ZTI7S7707C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C3D1Ev,_ZTv0_n12_N7S7707C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C3D0Ev,_ZTv0_n12_N7S7707C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C73v12Ev,
};
extern VTBL_ENTRY _ZTV7S7707C3[];
extern void _ZN7S7707C4D1Ev();
extern void _ZN7S7707C4D0Ev();
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C43v13Ev();
extern void _ZN7S7707C43v14Ev();
extern void _ZN7S7707C43v15Ev();
extern void _ZN7S7707C43v16Ev();
extern void _ZN7S7707C43v17Ev();
extern void _ZN7S7707C43v18Ev();
extern void _ZN7S7707C43v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C4__7S7707C3[] = {
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7707C4[0]),
  (VTBL_ENTRY)&_ZN7S7707C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7707C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v19Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7707C4D1Ev,_ZTv0_n12_N7S7707C4D1Ev)();
extern void ABISELECT(_ZThn96_N7S7707C4D1Ev,_ZThn76_N7S7707C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7707C4D0Ev,_ZTv0_n12_N7S7707C4D0Ev)();
extern void ABISELECT(_ZThn96_N7S7707C4D0Ev,_ZThn76_N7S7707C4D0Ev)() __attribute__((weak));
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C73v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C7__7S7707C4__7S7707C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-76),
  ABISELECT(-96,-76),
  (VTBL_ENTRY)&(_ZTI7S7707C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C4D1Ev,_ZTv0_n12_N7S7707C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C4D0Ev,_ZTv0_n12_N7S7707C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C73v12Ev,
};
static  VTT_ENTRY vtt_S7707C3[] = {
  {&(_ZTV7S7707C3[4]),  4,68},
  {&(_ZTV7S7707C3[31]),  31,68},
  {&(_ZTV7S7707C3[58]),  58,68},
  {&(_tg__ZTV7S7707C4__7S7707C3[3]),  3,19},
  {&(_tg__ZTV7S7707C7__7S7707C4__7S7707C3[11]),  11,21},
};
extern VTBL_ENTRY _ZTI7S7707C3[];
extern  VTBL_ENTRY _ZTV7S7707C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7707C3[];
static VTBL_ENTRY alt_thunk_names88[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C4D0Ev,_ZTv0_n12_N7S7707C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7707C4D0Ev,_ZThn76_N7S7707C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C4D1Ev,_ZTv0_n12_N7S7707C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7707C4D1Ev,_ZThn76_N7S7707C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C3D0Ev,_ZTv0_n12_N7S7707C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7707C3D0Ev,_ZThn80_N7S7707C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C3D1Ev,_ZTv0_n12_N7S7707C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7707C3D1Ev,_ZThn80_N7S7707C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7707C3D0Ev,_ZTv0_n16_N7S7707C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7707C3D0Ev,_ZThn4_N7S7707C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7707C3D1Ev,_ZTv0_n16_N7S7707C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7707C3D1Ev,_ZThn4_N7S7707C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7707C3 = {  "S7707C3", // class name
  bases_S7707C3, 4,
  &(vtc_S7707C3[0]), // expected_vtbl_contents
  &(vtt_S7707C3[0]), // expected_vtt_contents
  ABISELECT(160,120), // object size
  NSPAIRA(_ZTI7S7707C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7707C3),68, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7707C3),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names88,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7707C8  : virtual S7707C6 {
  virtual void  v28(); // _ZN7S7707C83v28Ev
  virtual void  v29(); // _ZN7S7707C83v29Ev
  virtual void  v30(); // _ZN7S7707C83v30Ev
  virtual void  v31(); // _ZN7S7707C83v31Ev
  ~S7707C8(); // tgen
  S7707C8(); // tgen
};
//SIG(-1 S7707C8) C1{ VBC2{ v5 Fi[6]} v1 v2 v3 v4}


void  S7707C8 ::v28(){vfunc_called(this, "_ZN7S7707C83v28Ev");}
void  S7707C8 ::v29(){vfunc_called(this, "_ZN7S7707C83v29Ev");}
void  S7707C8 ::v30(){vfunc_called(this, "_ZN7S7707C83v30Ev");}
void  S7707C8 ::v31(){vfunc_called(this, "_ZN7S7707C83v31Ev");}
S7707C8 ::~S7707C8(){ note_dtor("S7707C8", this);} // tgen
S7707C8 ::S7707C8(){ note_ctor("S7707C8", this);} // tgen

static void Test_S7707C8()
{
  extern Class_Descriptor cd_S7707C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S7707C8, buf);
    S7707C8 *dp, &lv = *(dp=new (buf) S7707C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S7707C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7707C8)");
    check_base_class_offset(lv, (S7707C6*), ABISELECT(8,4), "S7707C8");
    test_class_info(&lv, &cd_S7707C8);
    dp->~S7707C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7707C8(Test_S7707C8, "S7707C8", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN7S7707C8C1Ev();
extern void _ZN7S7707C8D1Ev();
Name_Map name_map_S7707C8[] = {
  NSPAIR(_ZN7S7707C8C1Ev),
  NSPAIR(_ZN7S7707C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7707C6;
extern VTBL_ENTRY _ZTI7S7707C6[];
extern  VTBL_ENTRY _ZTV7S7707C6[];
static Base_Class bases_S7707C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7707C6,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7707C8[];
extern void _ZN7S7707C83v28Ev();
extern void _ZN7S7707C83v29Ev();
extern void _ZN7S7707C83v30Ev();
extern void _ZN7S7707C83v31Ev();
extern void _ZN7S7707C63v27Ev();
static  VTBL_ENTRY vtc_S7707C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7707C8[0]),
  (VTBL_ENTRY)&_ZN7S7707C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7707C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7707C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7707C83v31Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7707C8[0]),
  (VTBL_ENTRY)&_ZN7S7707C63v27Ev,
};
extern VTBL_ENTRY _ZTV7S7707C8[];
static  VTT_ENTRY vtt_S7707C8[] = {
  {&(_ZTV7S7707C8[3]),  3,11},
  {&(_ZTV7S7707C8[10]),  10,11},
};
extern VTBL_ENTRY _ZTI7S7707C8[];
extern  VTBL_ENTRY _ZTV7S7707C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7707C8[];
Class_Descriptor cd_S7707C8 = {  "S7707C8", // class name
  bases_S7707C8, 1,
  &(vtc_S7707C8[0]), // expected_vtbl_contents
  &(vtt_S7707C8[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI7S7707C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7707C8),11, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7707C8),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  S7707C2  : virtual S7707C3 , virtual S7707C8 {
  virtual  ~S7707C2(); // _ZN7S7707C2D2Ev
  virtual void  v32(); // _ZN7S7707C23v32Ev
  virtual void  v33(); // _ZN7S7707C23v33Ev
  virtual void  v34(); // _ZN7S7707C23v34Ev
  S7707C2(); // tgen
};
//SIG(-1 S7707C2) C1{ VBC2{ VBC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 Fi FC5{ v26 Fi[6]} Fi} VBC6{ BC4 vd v11} vd v12 v13 v14 v15 v16 v17 v18 Fi:10 FC5 Fp} vd v19 v20 v21 v22 v23 v24 v25} VBC7{ VBC5 v27 v28 v29 v30} vd v1 v2 v3}


 S7707C2 ::~S7707C2(){ note_dtor("S7707C2", this);}
void  S7707C2 ::v32(){vfunc_called(this, "_ZN7S7707C23v32Ev");}
void  S7707C2 ::v33(){vfunc_called(this, "_ZN7S7707C23v33Ev");}
void  S7707C2 ::v34(){vfunc_called(this, "_ZN7S7707C23v34Ev");}
S7707C2 ::S7707C2(){ note_ctor("S7707C2", this);} // tgen

static void Test_S7707C2()
{
  extern Class_Descriptor cd_S7707C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,39)];
    init_test(&cd_S7707C2, buf);
    S7707C2 *dp, &lv = *(dp=new (buf) S7707C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,152), "sizeof(S7707C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7707C2)");
    /*is_ambiguous_... S7707C4::S7707C5 */ AMB_check_base_class_offset(lv, (S7707C5*)(S7707C4*), ABISELECT(8,4), "S7707C2");
    check_base_class_offset(lv, (S7707C5*)(S7707C7*), ABISELECT(104,80), "S7707C2");
    check_base_class_offset(lv, (S7707C7*)(S7707C4*), ABISELECT(104,80), "S7707C2");
    check_base_class_offset(lv, (S7707C4*)(S7707C3*), ABISELECT(8,4), "S7707C2");
    check_base_class_offset(lv, (S7707C3*), 0, "S7707C2");
    check_base_class_offset(lv, (S7707C6*)(S7707C8*), ABISELECT(168,124), "S7707C2");
    check_base_class_offset(lv, (S7707C8*), ABISELECT(160,120), "S7707C2");
    test_class_info(&lv, &cd_S7707C2);
    dp->~S7707C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7707C2(Test_S7707C2, "S7707C2", ABISELECT(200,152));

#else // __cplusplus

extern void _ZN7S7707C2C1Ev();
extern void _ZN7S7707C2D2Ev();
Name_Map name_map_S7707C2[] = {
  NSPAIR(_ZN7S7707C2C1Ev),
  NSPAIR(_ZN7S7707C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7707C5;
extern VTBL_ENTRY _ZTI7S7707C5[];
extern  VTBL_ENTRY _ZTV7S7707C5[];
extern Class_Descriptor cd_S7707C5;
extern VTBL_ENTRY _ZTI7S7707C5[];
extern  VTBL_ENTRY _ZTV7S7707C5[];
extern Class_Descriptor cd_S7707C7;
extern VTBL_ENTRY _ZTI7S7707C7[];
extern  VTBL_ENTRY _ZTV7S7707C7[];
extern Class_Descriptor cd_S7707C4;
extern VTBL_ENTRY _ZTI7S7707C4[];
extern  VTBL_ENTRY _ZTV7S7707C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7707C4[];
extern Class_Descriptor cd_S7707C3;
extern VTBL_ENTRY _ZTI7S7707C3[];
extern  VTBL_ENTRY _ZTV7S7707C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7707C3[];
extern Class_Descriptor cd_S7707C6;
extern VTBL_ENTRY _ZTI7S7707C6[];
extern  VTBL_ENTRY _ZTV7S7707C6[];
extern Class_Descriptor cd_S7707C8;
extern VTBL_ENTRY _ZTI7S7707C8[];
extern  VTBL_ENTRY _ZTV7S7707C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7707C8[];
static Base_Class bases_S7707C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7707C5,    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
    3, //immediately_derived
  0, 0},
  {&cd_S7707C5,    ABISELECT(104,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
    2, //immediately_derived
  0, 0},
  {&cd_S7707C7,    ABISELECT(104,80), //bcp->offset
    61, //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
    3, //immediately_derived
  0, 1},
  {&cd_S7707C4,    ABISELECT(8,4), //bcp->offset
    27, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7707C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7707C6,    ABISELECT(168,124), //bcp->offset
    93, //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
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7707C8,    ABISELECT(160,120), //bcp->offset
    82, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7707C2[];
extern void _ZN7S7707C2D1Ev();
extern void _ZN7S7707C2D0Ev();
extern void _ZN7S7707C33v20Ev();
extern void _ZN7S7707C33v21Ev();
extern void _ZN7S7707C33v22Ev();
extern void _ZN7S7707C33v23Ev();
extern void _ZN7S7707C33v24Ev();
extern void _ZN7S7707C33v25Ev();
extern void _ZN7S7707C33v26Ev();
extern void _ZN7S7707C23v32Ev();
extern void _ZN7S7707C23v33Ev();
extern void _ZN7S7707C23v34Ev();
extern void ABISELECT(_ZTv0_n32_N7S7707C2D1Ev,_ZTv0_n16_N7S7707C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7707C2D1Ev,_ZThn4_N7S7707C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7707C2D0Ev,_ZTv0_n16_N7S7707C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S7707C2D0Ev,_ZThn4_N7S7707C2D0Ev)() __attribute__((weak));
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C43v13Ev();
extern void _ZN7S7707C43v14Ev();
extern void _ZN7S7707C43v15Ev();
extern void _ZN7S7707C43v16Ev();
extern void _ZN7S7707C43v17Ev();
extern void _ZN7S7707C43v18Ev();
extern void _ZN7S7707C43v19Ev();
extern void ABISELECT(_ZTv0_n24_N7S7707C2D1Ev,_ZTv0_n12_N7S7707C2D1Ev)();
extern void ABISELECT(_ZThn104_N7S7707C2D1Ev,_ZThn80_N7S7707C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7707C2D0Ev,_ZTv0_n12_N7S7707C2D0Ev)();
extern void ABISELECT(_ZThn104_N7S7707C2D0Ev,_ZThn80_N7S7707C2D0Ev)() __attribute__((weak));
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C73v12Ev();
extern void _ZN7S7707C83v28Ev();
extern void _ZN7S7707C83v29Ev();
extern void _ZN7S7707C83v30Ev();
extern void _ZN7S7707C83v31Ev();
extern void _ZN7S7707C63v27Ev();
static  VTBL_ENTRY vtc_S7707C2[] = {
  ABISELECT(168,124),
  ABISELECT(160,120),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,80),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7707C2[0]),
  (VTBL_ENTRY)&_ZN7S7707C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7707C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7707C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7707C23v33Ev,
  (VTBL_ENTRY)&_ZN7S7707C23v34Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(96,76),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7707C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7707C2D1Ev,_ZTv0_n16_N7S7707C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7707C2D0Ev,_ZTv0_n16_N7S7707C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-80),
  ABISELECT(-104,-80),
  (VTBL_ENTRY)&(_ZTI7S7707C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C2D1Ev,_ZTv0_n12_N7S7707C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C2D0Ev,_ZTv0_n12_N7S7707C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C73v12Ev,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-160,-120),
  (VTBL_ENTRY)&(_ZTI7S7707C2[0]),
  (VTBL_ENTRY)&_ZN7S7707C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7707C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7707C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7707C83v31Ev,
  0,
  ABISELECT(-168,-124),
  (VTBL_ENTRY)&(_ZTI7S7707C2[0]),
  (VTBL_ENTRY)&_ZN7S7707C63v27Ev,
};
extern VTBL_ENTRY _ZTV7S7707C2[];
extern void _ZN7S7707C3D1Ev();
extern void _ZN7S7707C3D0Ev();
extern void _ZN7S7707C33v20Ev();
extern void _ZN7S7707C33v21Ev();
extern void _ZN7S7707C33v22Ev();
extern void _ZN7S7707C33v23Ev();
extern void _ZN7S7707C33v24Ev();
extern void _ZN7S7707C33v25Ev();
extern void _ZN7S7707C33v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C3__7S7707C2[] = {
  ABISELECT(104,80),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7707C3[0]),
  (VTBL_ENTRY)&_ZN7S7707C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7707C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v26Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7707C3D1Ev,_ZTv0_n16_N7S7707C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S7707C3D1Ev,_ZThn4_N7S7707C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7707C3D0Ev,_ZTv0_n16_N7S7707C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S7707C3D0Ev,_ZThn4_N7S7707C3D0Ev)() __attribute__((weak));
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C43v13Ev();
extern void _ZN7S7707C43v14Ev();
extern void _ZN7S7707C43v15Ev();
extern void _ZN7S7707C43v16Ev();
extern void _ZN7S7707C43v17Ev();
extern void _ZN7S7707C43v18Ev();
extern void _ZN7S7707C43v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C4__7S7707C3__7S7707C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(96,76),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7707C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7707C3D1Ev,_ZTv0_n16_N7S7707C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7707C3D0Ev,_ZTv0_n16_N7S7707C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v19Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7707C3D1Ev,_ZTv0_n12_N7S7707C3D1Ev)();
extern void ABISELECT(_ZThn104_N7S7707C3D1Ev,_ZThn80_N7S7707C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7707C3D0Ev,_ZTv0_n12_N7S7707C3D0Ev)();
extern void ABISELECT(_ZThn104_N7S7707C3D0Ev,_ZThn80_N7S7707C3D0Ev)() __attribute__((weak));
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C73v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C7__7S7707C3__7S7707C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-80),
  ABISELECT(-104,-80),
  (VTBL_ENTRY)&(_ZTI7S7707C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C3D1Ev,_ZTv0_n12_N7S7707C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C3D0Ev,_ZTv0_n12_N7S7707C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C73v12Ev,
};
extern void _ZN7S7707C4D1Ev();
extern void _ZN7S7707C4D0Ev();
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C43v13Ev();
extern void _ZN7S7707C43v14Ev();
extern void _ZN7S7707C43v15Ev();
extern void _ZN7S7707C43v16Ev();
extern void _ZN7S7707C43v17Ev();
extern void _ZN7S7707C43v18Ev();
extern void _ZN7S7707C43v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C4__7S7707C2[] = {
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7707C4[0]),
  (VTBL_ENTRY)&_ZN7S7707C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7707C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v19Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7707C4D1Ev,_ZTv0_n12_N7S7707C4D1Ev)();
extern void ABISELECT(_ZThn96_N7S7707C4D1Ev,_ZThn76_N7S7707C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7707C4D0Ev,_ZTv0_n12_N7S7707C4D0Ev)();
extern void ABISELECT(_ZThn96_N7S7707C4D0Ev,_ZThn76_N7S7707C4D0Ev)() __attribute__((weak));
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C73v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C7__7S7707C4__7S7707C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-76),
  ABISELECT(-96,-76),
  (VTBL_ENTRY)&(_ZTI7S7707C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C4D1Ev,_ZTv0_n12_N7S7707C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C4D0Ev,_ZTv0_n12_N7S7707C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C73v12Ev,
};
extern void _ZN7S7707C83v28Ev();
extern void _ZN7S7707C83v29Ev();
extern void _ZN7S7707C83v30Ev();
extern void _ZN7S7707C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C8__7S7707C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7707C8[0]),
  (VTBL_ENTRY)&_ZN7S7707C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7707C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7707C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7707C83v31Ev,
};
extern void _ZN7S7707C63v27Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C6__7S7707C8__7S7707C2[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7707C8[0]),
  (VTBL_ENTRY)&_ZN7S7707C63v27Ev,
};
static  VTT_ENTRY vtt_S7707C2[] = {
  {&(_ZTV7S7707C2[15]),  15,97},
  {&(_ZTV7S7707C2[15]),  15,97},
  {&(_ZTV7S7707C2[45]),  45,97},
  {&(_ZTV7S7707C2[72]),  72,97},
  {&(_ZTV7S7707C2[89]),  89,97},
  {&(_ZTV7S7707C2[96]),  96,97},
  {&(_tg__ZTV7S7707C3__7S7707C2[4]),  4,13},
  {&(_tg__ZTV7S7707C4__7S7707C3__7S7707C2[18]),  18,34},
  {&(_tg__ZTV7S7707C7__7S7707C3__7S7707C2[11]),  11,21},
  {&(_tg__ZTV7S7707C4__7S7707C2[3]),  3,19},
  {&(_tg__ZTV7S7707C7__7S7707C4__7S7707C2[11]),  11,21},
  {&(_tg__ZTV7S7707C8__7S7707C2[3]),  3,7},
  {&(_tg__ZTV7S7707C6__7S7707C8__7S7707C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7707C2[];
extern  VTBL_ENTRY _ZTV7S7707C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7707C2[];
static VTBL_ENTRY alt_thunk_names89[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C4D0Ev,_ZTv0_n12_N7S7707C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7707C4D0Ev,_ZThn76_N7S7707C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C4D1Ev,_ZTv0_n12_N7S7707C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7707C4D1Ev,_ZThn76_N7S7707C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C3D0Ev,_ZTv0_n12_N7S7707C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7707C3D0Ev,_ZThn80_N7S7707C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C3D1Ev,_ZTv0_n12_N7S7707C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7707C3D1Ev,_ZThn80_N7S7707C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7707C3D0Ev,_ZTv0_n16_N7S7707C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7707C3D0Ev,_ZThn4_N7S7707C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7707C3D1Ev,_ZTv0_n16_N7S7707C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7707C3D1Ev,_ZThn4_N7S7707C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C2D0Ev,_ZTv0_n12_N7S7707C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7707C2D0Ev,_ZThn80_N7S7707C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C2D1Ev,_ZTv0_n12_N7S7707C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7707C2D1Ev,_ZThn80_N7S7707C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7707C2D0Ev,_ZTv0_n16_N7S7707C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7707C2D0Ev,_ZThn4_N7S7707C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7707C2D1Ev,_ZTv0_n16_N7S7707C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7707C2D1Ev,_ZThn4_N7S7707C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7707C2 = {  "S7707C2", // class name
  bases_S7707C2, 7,
  &(vtc_S7707C2[0]), // expected_vtbl_contents
  &(vtt_S7707C2[0]), // expected_vtt_contents
  ABISELECT(200,152), // object size
  NSPAIRA(_ZTI7S7707C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7707C2),97, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7707C2),13, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names89,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7707C1  : S7707C2 {
  void *s7707c1f0;
  virtual  ~S7707C1(); // _ZN7S7707C1D2Ev
  virtual void  v1(); // _ZN7S7707C12v1Ev
  virtual void  v2(); // _ZN7S7707C12v2Ev
  virtual void  v3(); // _ZN7S7707C12v3Ev
  virtual void  v4(); // _ZN7S7707C12v4Ev
  S7707C1(); // tgen
};
//SIG(1 S7707C1) C1{ BC2{ VBC3{ VBC4{ BC5{ vd v5 v6 v7 v8 v9 v10 v11 Fi FC6{ v27 Fi[6]} Fi} VBC7{ BC5 vd v12} vd v13 v14 v15 v16 v17 v18 v19 Fi:10 FC6 Fp} vd v20 v21 v22 v23 v24 v25 v26} VBC8{ VBC6 v28 v29 v30 v31} vd v32 v33 v34} vd v1 v2 v3 v4 Fp}


 S7707C1 ::~S7707C1(){ note_dtor("S7707C1", this);}
void  S7707C1 ::v1(){vfunc_called(this, "_ZN7S7707C12v1Ev");}
void  S7707C1 ::v2(){vfunc_called(this, "_ZN7S7707C12v2Ev");}
void  S7707C1 ::v3(){vfunc_called(this, "_ZN7S7707C12v3Ev");}
void  S7707C1 ::v4(){vfunc_called(this, "_ZN7S7707C12v4Ev");}
S7707C1 ::S7707C1(){ note_ctor("S7707C1", this);} // tgen

static void Test_S7707C1()
{
  extern Class_Descriptor cd_S7707C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,40)];
    init_test(&cd_S7707C1, buf);
    S7707C1 *dp, &lv = *(dp=new (buf) S7707C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,156), "sizeof(S7707C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7707C1)");
    /*is_ambiguous_... S7707C4::S7707C5 */ AMB_check_base_class_offset(lv, (S7707C5*)(S7707C4*), ABISELECT(16,8), "S7707C1");
    check_base_class_offset(lv, (S7707C5*)(S7707C7*), ABISELECT(112,84), "S7707C1");
    check_base_class_offset(lv, (S7707C7*)(S7707C4*), ABISELECT(112,84), "S7707C1");
    check_base_class_offset(lv, (S7707C4*)(S7707C3*), ABISELECT(16,8), "S7707C1");
    check_base_class_offset(lv, (S7707C3*)(S7707C2*), 0, "S7707C1");
    check_base_class_offset(lv, (S7707C6*)(S7707C8*), ABISELECT(176,128), "S7707C1");
    check_base_class_offset(lv, (S7707C8*)(S7707C2*), ABISELECT(168,124), "S7707C1");
    check_base_class_offset(lv, (S7707C2*), 0, "S7707C1");
    check_field_offset(lv, s7707c1f0, ABISELECT(8,4), "S7707C1.s7707c1f0");
    test_class_info(&lv, &cd_S7707C1);
    dp->~S7707C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7707C1(Test_S7707C1, "S7707C1", ABISELECT(208,156));

#else // __cplusplus

extern void _ZN7S7707C1C1Ev();
extern void _ZN7S7707C1D2Ev();
Name_Map name_map_S7707C1[] = {
  NSPAIR(_ZN7S7707C1C1Ev),
  NSPAIR(_ZN7S7707C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7707C5;
extern VTBL_ENTRY _ZTI7S7707C5[];
extern  VTBL_ENTRY _ZTV7S7707C5[];
extern Class_Descriptor cd_S7707C5;
extern VTBL_ENTRY _ZTI7S7707C5[];
extern  VTBL_ENTRY _ZTV7S7707C5[];
extern Class_Descriptor cd_S7707C7;
extern VTBL_ENTRY _ZTI7S7707C7[];
extern  VTBL_ENTRY _ZTV7S7707C7[];
extern Class_Descriptor cd_S7707C4;
extern VTBL_ENTRY _ZTI7S7707C4[];
extern  VTBL_ENTRY _ZTV7S7707C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7707C4[];
extern Class_Descriptor cd_S7707C3;
extern VTBL_ENTRY _ZTI7S7707C3[];
extern  VTBL_ENTRY _ZTV7S7707C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7707C3[];
extern Class_Descriptor cd_S7707C6;
extern VTBL_ENTRY _ZTI7S7707C6[];
extern  VTBL_ENTRY _ZTV7S7707C6[];
extern Class_Descriptor cd_S7707C8;
extern VTBL_ENTRY _ZTI7S7707C8[];
extern  VTBL_ENTRY _ZTV7S7707C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7707C8[];
extern Class_Descriptor cd_S7707C2;
extern VTBL_ENTRY _ZTI7S7707C2[];
extern  VTBL_ENTRY _ZTV7S7707C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7707C2[];
static Base_Class bases_S7707C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7707C5,    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
    3, //immediately_derived
  0, 0},
  {&cd_S7707C5,    ABISELECT(112,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
    2, //immediately_derived
  0, 0},
  {&cd_S7707C7,    ABISELECT(112,84), //bcp->offset
    65, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7707C4,    ABISELECT(16,8), //bcp->offset
    31, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7707C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7707C6,    ABISELECT(176,128), //bcp->offset
    97, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7707C8,    ABISELECT(168,124), //bcp->offset
    86, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7707C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //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 _ZTI7S7707C1[];
extern void _ZN7S7707C1D1Ev();
extern void _ZN7S7707C1D0Ev();
extern void _ZN7S7707C33v20Ev();
extern void _ZN7S7707C33v21Ev();
extern void _ZN7S7707C33v22Ev();
extern void _ZN7S7707C33v23Ev();
extern void _ZN7S7707C33v24Ev();
extern void _ZN7S7707C33v25Ev();
extern void _ZN7S7707C33v26Ev();
extern void _ZN7S7707C23v32Ev();
extern void _ZN7S7707C23v33Ev();
extern void _ZN7S7707C23v34Ev();
extern void _ZN7S7707C12v1Ev();
extern void _ZN7S7707C12v2Ev();
extern void _ZN7S7707C12v3Ev();
extern void _ZN7S7707C12v4Ev();
extern void ABISELECT(_ZTv0_n32_N7S7707C1D1Ev,_ZTv0_n16_N7S7707C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S7707C1D1Ev,_ZThn8_N7S7707C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7707C1D0Ev,_ZTv0_n16_N7S7707C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S7707C1D0Ev,_ZThn8_N7S7707C1D0Ev)() __attribute__((weak));
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C43v13Ev();
extern void _ZN7S7707C43v14Ev();
extern void _ZN7S7707C43v15Ev();
extern void _ZN7S7707C43v16Ev();
extern void _ZN7S7707C43v17Ev();
extern void _ZN7S7707C43v18Ev();
extern void _ZN7S7707C43v19Ev();
extern void ABISELECT(_ZTv0_n24_N7S7707C1D1Ev,_ZTv0_n12_N7S7707C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S7707C1D1Ev,_ZThn84_N7S7707C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7707C1D0Ev,_ZTv0_n12_N7S7707C1D0Ev)();
extern void ABISELECT(_ZThn112_N7S7707C1D0Ev,_ZThn84_N7S7707C1D0Ev)() __attribute__((weak));
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C73v12Ev();
extern void _ZN7S7707C83v28Ev();
extern void _ZN7S7707C83v29Ev();
extern void _ZN7S7707C83v30Ev();
extern void _ZN7S7707C83v31Ev();
extern void _ZN7S7707C63v27Ev();
static  VTBL_ENTRY vtc_S7707C1[] = {
  ABISELECT(176,128),
  ABISELECT(168,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(112,84),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7707C1[0]),
  (VTBL_ENTRY)&_ZN7S7707C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7707C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7707C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7707C23v33Ev,
  (VTBL_ENTRY)&_ZN7S7707C23v34Ev,
  (VTBL_ENTRY)&_ZN7S7707C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7707C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7707C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7707C12v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(96,76),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7707C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7707C1D1Ev,_ZTv0_n16_N7S7707C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7707C1D0Ev,_ZTv0_n16_N7S7707C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S7707C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C1D1Ev,_ZTv0_n12_N7S7707C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C1D0Ev,_ZTv0_n12_N7S7707C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C73v12Ev,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-168,-124),
  (VTBL_ENTRY)&(_ZTI7S7707C1[0]),
  (VTBL_ENTRY)&_ZN7S7707C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7707C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7707C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7707C83v31Ev,
  0,
  ABISELECT(-176,-128),
  (VTBL_ENTRY)&(_ZTI7S7707C1[0]),
  (VTBL_ENTRY)&_ZN7S7707C63v27Ev,
};
extern VTBL_ENTRY _ZTV7S7707C1[];
extern void _ZN7S7707C2D1Ev();
extern void _ZN7S7707C2D0Ev();
extern void _ZN7S7707C33v20Ev();
extern void _ZN7S7707C33v21Ev();
extern void _ZN7S7707C33v22Ev();
extern void _ZN7S7707C33v23Ev();
extern void _ZN7S7707C33v24Ev();
extern void _ZN7S7707C33v25Ev();
extern void _ZN7S7707C33v26Ev();
extern void _ZN7S7707C23v32Ev();
extern void _ZN7S7707C23v33Ev();
extern void _ZN7S7707C23v34Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C2__7S7707C1[] = {
  ABISELECT(176,128),
  ABISELECT(168,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(112,84),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7707C2[0]),
  (VTBL_ENTRY)&_ZN7S7707C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7707C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7707C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7707C23v33Ev,
  (VTBL_ENTRY)&_ZN7S7707C23v34Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7707C2D1Ev,_ZTv0_n16_N7S7707C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7707C2D1Ev,_ZThn8_N7S7707C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7707C2D0Ev,_ZTv0_n16_N7S7707C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7707C2D0Ev,_ZThn8_N7S7707C2D0Ev)() __attribute__((weak));
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C43v13Ev();
extern void _ZN7S7707C43v14Ev();
extern void _ZN7S7707C43v15Ev();
extern void _ZN7S7707C43v16Ev();
extern void _ZN7S7707C43v17Ev();
extern void _ZN7S7707C43v18Ev();
extern void _ZN7S7707C43v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C4__7S7707C2__7S7707C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(96,76),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7707C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7707C2D1Ev,_ZTv0_n16_N7S7707C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7707C2D0Ev,_ZTv0_n16_N7S7707C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v19Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7707C2D1Ev,_ZTv0_n12_N7S7707C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S7707C2D1Ev,_ZThn84_N7S7707C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7707C2D0Ev,_ZTv0_n12_N7S7707C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S7707C2D0Ev,_ZThn84_N7S7707C2D0Ev)() __attribute__((weak));
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C73v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C7__7S7707C2__7S7707C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S7707C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C2D1Ev,_ZTv0_n12_N7S7707C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C2D0Ev,_ZTv0_n12_N7S7707C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C73v12Ev,
};
extern void _ZN7S7707C83v28Ev();
extern void _ZN7S7707C83v29Ev();
extern void _ZN7S7707C83v30Ev();
extern void _ZN7S7707C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C8__7S7707C2__7S7707C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-168,-124),
  (VTBL_ENTRY)&(_ZTI7S7707C2[0]),
  (VTBL_ENTRY)&_ZN7S7707C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7707C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7707C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7707C83v31Ev,
};
extern void _ZN7S7707C63v27Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C6__7S7707C2__7S7707C1[] = {
  0,
  ABISELECT(-176,-128),
  (VTBL_ENTRY)&(_ZTI7S7707C2[0]),
  (VTBL_ENTRY)&_ZN7S7707C63v27Ev,
};
extern void _ZN7S7707C3D1Ev();
extern void _ZN7S7707C3D0Ev();
extern void _ZN7S7707C33v20Ev();
extern void _ZN7S7707C33v21Ev();
extern void _ZN7S7707C33v22Ev();
extern void _ZN7S7707C33v23Ev();
extern void _ZN7S7707C33v24Ev();
extern void _ZN7S7707C33v25Ev();
extern void _ZN7S7707C33v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C3__7S7707C1[] = {
  ABISELECT(112,84),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7707C3[0]),
  (VTBL_ENTRY)&_ZN7S7707C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7707C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7707C33v26Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7707C3D1Ev,_ZTv0_n16_N7S7707C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7707C3D1Ev,_ZThn8_N7S7707C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7707C3D0Ev,_ZTv0_n16_N7S7707C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S7707C3D0Ev,_ZThn8_N7S7707C3D0Ev)() __attribute__((weak));
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C43v13Ev();
extern void _ZN7S7707C43v14Ev();
extern void _ZN7S7707C43v15Ev();
extern void _ZN7S7707C43v16Ev();
extern void _ZN7S7707C43v17Ev();
extern void _ZN7S7707C43v18Ev();
extern void _ZN7S7707C43v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C4__7S7707C3__7S7707C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(96,76),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7707C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7707C3D1Ev,_ZTv0_n16_N7S7707C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7707C3D0Ev,_ZTv0_n16_N7S7707C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v19Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7707C3D1Ev,_ZTv0_n12_N7S7707C3D1Ev)();
extern void ABISELECT(_ZThn112_N7S7707C3D1Ev,_ZThn84_N7S7707C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7707C3D0Ev,_ZTv0_n12_N7S7707C3D0Ev)();
extern void ABISELECT(_ZThn112_N7S7707C3D0Ev,_ZThn84_N7S7707C3D0Ev)() __attribute__((weak));
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C73v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C7__7S7707C3__7S7707C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S7707C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C3D1Ev,_ZTv0_n12_N7S7707C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C3D0Ev,_ZTv0_n12_N7S7707C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C73v12Ev,
};
extern void _ZN7S7707C4D1Ev();
extern void _ZN7S7707C4D0Ev();
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C43v13Ev();
extern void _ZN7S7707C43v14Ev();
extern void _ZN7S7707C43v15Ev();
extern void _ZN7S7707C43v16Ev();
extern void _ZN7S7707C43v17Ev();
extern void _ZN7S7707C43v18Ev();
extern void _ZN7S7707C43v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C4__7S7707C1[] = {
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7707C4[0]),
  (VTBL_ENTRY)&_ZN7S7707C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7707C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7707C43v19Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7707C4D1Ev,_ZTv0_n12_N7S7707C4D1Ev)();
extern void ABISELECT(_ZThn96_N7S7707C4D1Ev,_ZThn76_N7S7707C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7707C4D0Ev,_ZTv0_n12_N7S7707C4D0Ev)();
extern void ABISELECT(_ZThn96_N7S7707C4D0Ev,_ZThn76_N7S7707C4D0Ev)() __attribute__((weak));
extern void _ZN7S7707C52v5Ev();
extern void _ZN7S7707C52v6Ev();
extern void _ZN7S7707C52v7Ev();
extern void _ZN7S7707C52v8Ev();
extern void _ZN7S7707C52v9Ev();
extern void _ZN7S7707C53v10Ev();
extern void _ZN7S7707C53v11Ev();
extern void _ZN7S7707C73v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C7__7S7707C4__7S7707C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-76),
  ABISELECT(-96,-76),
  (VTBL_ENTRY)&(_ZTI7S7707C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C4D1Ev,_ZTv0_n12_N7S7707C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7707C4D0Ev,_ZTv0_n12_N7S7707C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7707C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7707C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7707C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7707C73v12Ev,
};
extern void _ZN7S7707C83v28Ev();
extern void _ZN7S7707C83v29Ev();
extern void _ZN7S7707C83v30Ev();
extern void _ZN7S7707C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C8__7S7707C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7707C8[0]),
  (VTBL_ENTRY)&_ZN7S7707C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7707C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7707C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7707C83v31Ev,
};
extern void _ZN7S7707C63v27Ev();
static  VTBL_ENTRY _tg__ZTV7S7707C6__7S7707C8__7S7707C1[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7707C8[0]),
  (VTBL_ENTRY)&_ZN7S7707C63v27Ev,
};
static  VTT_ENTRY vtt_S7707C1[] = {
  {&(_ZTV7S7707C1[15]),  15,101},
  {&(_tg__ZTV7S7707C2__7S7707C1[15]),  15,27},
  {&(_tg__ZTV7S7707C2__7S7707C1[15]),  15,27},
  {&(_tg__ZTV7S7707C4__7S7707C2__7S7707C1[18]),  18,34},
  {&(_tg__ZTV7S7707C7__7S7707C2__7S7707C1[11]),  11,21},
  {&(_tg__ZTV7S7707C8__7S7707C2__7S7707C1[7]),  7,11},
  {&(_tg__ZTV7S7707C6__7S7707C2__7S7707C1[3]),  3,4},
  {&(_ZTV7S7707C1[15]),  15,101},
  {&(_ZTV7S7707C1[49]),  49,101},
  {&(_ZTV7S7707C1[76]),  76,101},
  {&(_ZTV7S7707C1[93]),  93,101},
  {&(_ZTV7S7707C1[100]),  100,101},
  {&(_tg__ZTV7S7707C3__7S7707C1[4]),  4,13},
  {&(_tg__ZTV7S7707C4__7S7707C3__7S7707C1[18]),  18,34},
  {&(_tg__ZTV7S7707C7__7S7707C3__7S7707C1[11]),  11,21},
  {&(_tg__ZTV7S7707C4__7S7707C1[3]),  3,19},
  {&(_tg__ZTV7S7707C7__7S7707C4__7S7707C1[11]),  11,21},
  {&(_tg__ZTV7S7707C8__7S7707C1[3]),  3,7},
  {&(_tg__ZTV7S7707C6__7S7707C8__7S7707C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7707C1[];
extern  VTBL_ENTRY _ZTV7S7707C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7707C1[];
static VTBL_ENTRY alt_thunk_names90[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C4D0Ev,_ZTv0_n12_N7S7707C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7707C4D0Ev,_ZThn76_N7S7707C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C4D1Ev,_ZTv0_n12_N7S7707C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7707C4D1Ev,_ZThn76_N7S7707C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C3D0Ev,_ZTv0_n12_N7S7707C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7707C3D0Ev,_ZThn84_N7S7707C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C3D1Ev,_ZTv0_n12_N7S7707C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7707C3D1Ev,_ZThn84_N7S7707C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7707C3D0Ev,_ZTv0_n16_N7S7707C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7707C3D0Ev,_ZThn8_N7S7707C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7707C3D1Ev,_ZTv0_n16_N7S7707C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7707C3D1Ev,_ZThn8_N7S7707C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C2D0Ev,_ZTv0_n12_N7S7707C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7707C2D0Ev,_ZThn84_N7S7707C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C2D1Ev,_ZTv0_n12_N7S7707C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7707C2D1Ev,_ZThn84_N7S7707C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7707C2D0Ev,_ZTv0_n16_N7S7707C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7707C2D0Ev,_ZThn8_N7S7707C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7707C2D1Ev,_ZTv0_n16_N7S7707C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7707C2D1Ev,_ZThn8_N7S7707C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C1D0Ev,_ZTv0_n12_N7S7707C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7707C1D0Ev,_ZThn84_N7S7707C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7707C1D1Ev,_ZTv0_n12_N7S7707C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7707C1D1Ev,_ZThn84_N7S7707C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7707C1D0Ev,_ZTv0_n16_N7S7707C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7707C1D0Ev,_ZThn8_N7S7707C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7707C1D1Ev,_ZTv0_n16_N7S7707C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7707C1D1Ev,_ZThn8_N7S7707C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7707C1 = {  "S7707C1", // class name
  bases_S7707C1, 8,
  &(vtc_S7707C1[0]), // expected_vtbl_contents
  &(vtt_S7707C1[0]), // expected_vtt_contents
  ABISELECT(208,156), // object size
  NSPAIRA(_ZTI7S7707C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7707C1),101, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7707C1),19, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names90,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2834C7  : S3600C29_nt , virtual S3600C19 {
  ::S19426C9_nt s2834c7f0;
  ~S2834C7(); // tgen
  S2834C7(); // tgen
};
//SIG(-1 S2834C7) C1{ BC2{ m Fp} VBC3{ m} FU4{ m}}


S2834C7 ::~S2834C7(){ note_dtor("S2834C7", this);} // tgen
S2834C7 ::S2834C7(){ note_ctor("S2834C7", this);} // tgen

static void Test_S2834C7()
{
  extern Class_Descriptor cd_S2834C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S2834C7, buf);
    S2834C7 *dp, &lv = *(dp=new (buf) S2834C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S2834C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2834C7)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S2834C7");
    check_base_class_offset(lv, (S3600C19*), 0, "S2834C7");
    check_field_offset(lv, s2834c7f0, ABISELECT(16,8), "S2834C7.s2834c7f0");
    test_class_info(&lv, &cd_S2834C7);
    dp->~S2834C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2834C7(Test_S2834C7, "S2834C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S2834C7C1Ev();
extern void _ZN7S2834C7D1Ev();
Name_Map name_map_S2834C7[] = {
  NSPAIR(_ZN7S2834C7C1Ev),
  NSPAIR(_ZN7S2834C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S2834C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2834C7[];
static  VTBL_ENTRY vtc_S2834C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C7[0]),
};
extern VTBL_ENTRY _ZTV7S2834C7[];
static  VTT_ENTRY vtt_S2834C7[] = {
  {&(_ZTV7S2834C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2834C7[];
extern  VTBL_ENTRY _ZTV7S2834C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C7[];
Class_Descriptor cd_S2834C7 = {  "S2834C7", // class name
  bases_S2834C7, 2,
  &(vtc_S2834C7[0]), // expected_vtbl_contents
  &(vtt_S2834C7[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S2834C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2834C7),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2834C7),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  S2834C6  : virtual S3600C19 , virtual S2834C7 {
  int s2834c6f0;
  ~S2834C6(); // tgen
  S2834C6(); // tgen
};
//SIG(-1 S2834C6) C1{ VBC2{ m} VBC3{ BC4{ m Fp} VBC2 FU5{ m}} Fi}


S2834C6 ::~S2834C6(){ note_dtor("S2834C6", this);} // tgen
S2834C6 ::S2834C6(){ note_ctor("S2834C6", this);} // tgen

static void Test_S2834C6()
{
  extern Class_Descriptor cd_S2834C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S2834C6, buf);
    S2834C6 *dp, &lv = *(dp=new (buf) S2834C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S2834C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2834C6)");
    check_base_class_offset(lv, (S3600C19*), 0, "S2834C6");
    check_base_class_offset(lv, (S3600C19*)(S2834C7*), 0, "S2834C6");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C7*), ABISELECT(24,12), "S2834C6");
    check_base_class_offset(lv, (S2834C7*), ABISELECT(16,8), "S2834C6");
    check_field_offset(lv, s2834c6f0, ABISELECT(8,4), "S2834C6.s2834c6f0");
    test_class_info(&lv, &cd_S2834C6);
    dp->~S2834C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2834C6(Test_S2834C6, "S2834C6", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S2834C6C1Ev();
extern void _ZN7S2834C6D1Ev();
Name_Map name_map_S2834C6[] = {
  NSPAIR(_ZN7S2834C6C1Ev),
  NSPAIR(_ZN7S2834C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C7;
extern VTBL_ENTRY _ZTI7S2834C7[];
extern  VTBL_ENTRY _ZTV7S2834C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C7[];
static Base_Class bases_S2834C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2834C7,    ABISELECT(16,8), //bcp->offset
    4, //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 _ZTI7S2834C6[];
static  VTBL_ENTRY vtc_S2834C6[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C6[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2834C6[0]),
};
extern VTBL_ENTRY _ZTV7S2834C6[];
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C6[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C7[0]),
};
static  VTT_ENTRY vtt_S2834C6[] = {
  {&(_ZTV7S2834C6[4]),  4,7},
  {&(_ZTV7S2834C6[7]),  7,7},
  {&(_tg__ZTV7S2834C7__7S2834C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2834C6[];
extern  VTBL_ENTRY _ZTV7S2834C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C6[];
Class_Descriptor cd_S2834C6 = {  "S2834C6", // class name
  bases_S2834C6, 3,
  &(vtc_S2834C6[0]), // expected_vtbl_contents
  &(vtt_S2834C6[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S2834C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2834C6),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2834C6),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  S2834C10  : virtual S3600C29_nt , S3600C19 {
  ~S2834C10(); // tgen
  S2834C10(); // tgen
};
//SIG(-1 S2834C10) C1{ VBC2{ m Fp} BC3{ m}}


S2834C10 ::~S2834C10(){ note_dtor("S2834C10", this);} // tgen
S2834C10 ::S2834C10(){ note_ctor("S2834C10", this);} // tgen

static void Test_S2834C10()
{
  extern Class_Descriptor cd_S2834C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2834C10, buf);
    S2834C10 *dp, &lv = *(dp=new (buf) S2834C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2834C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2834C10)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S2834C10");
    check_base_class_offset(lv, (S3600C19*), 0, "S2834C10");
    test_class_info(&lv, &cd_S2834C10);
    dp->~S2834C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2834C10(Test_S2834C10, "S2834C10", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S2834C10C1Ev();
extern void _ZN8S2834C10D1Ev();
Name_Map name_map_S2834C10[] = {
  NSPAIR(_ZN8S2834C10C1Ev),
  NSPAIR(_ZN8S2834C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S2834C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S2834C10[];
static  VTBL_ENTRY vtc_S2834C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C10[0]),
};
extern VTBL_ENTRY _ZTV8S2834C10[];
static  VTT_ENTRY vtt_S2834C10[] = {
  {&(_ZTV8S2834C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2834C10[];
extern  VTBL_ENTRY _ZTV8S2834C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C10[];
Class_Descriptor cd_S2834C10 = {  "S2834C10", // class name
  bases_S2834C10, 2,
  &(vtc_S2834C10[0]), // expected_vtbl_contents
  &(vtt_S2834C10[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S2834C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2834C10),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2834C10),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  S2834C5  : S2834C6 , S2834C10 {
  ::S3600C19 s2834c5f0;
  ~S2834C5(); // tgen
  S2834C5(); // tgen
};
//SIG(-1 S2834C5) C1{ BC2{ VBC3{ m} VBC4{ BC5{ m Fp} VBC3 FU6{ m}} Fi} BC7{ VBC5 BC3} FC3}


S2834C5 ::~S2834C5(){ note_dtor("S2834C5", this);} // tgen
S2834C5 ::S2834C5(){ note_ctor("S2834C5", this);} // tgen

static void Test_S2834C5()
{
  extern Class_Descriptor cd_S2834C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S2834C5, buf);
    S2834C5 *dp, &lv = *(dp=new (buf) S2834C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S2834C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2834C5)");
    check_base_class_offset(lv, (S3600C19*)(S2834C6*), 0, "S2834C5");
    check_base_class_offset(lv, (S3600C19*)(S2834C7*), 0, "S2834C5");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C7*), ABISELECT(40,20), "S2834C5");
    check_base_class_offset(lv, (S2834C7*)(S2834C6*), ABISELECT(32,16), "S2834C5");
    check_base_class_offset(lv, (S2834C6*), 0, "S2834C5");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C10*), ABISELECT(56,28), "S2834C5");
    check_base_class_offset(lv, (S3600C19*)(S2834C10*), ABISELECT(16,8), "S2834C5");
    check_base_class_offset(lv, (S2834C10*), ABISELECT(16,8), "S2834C5");
    check_field_offset(lv, s2834c5f0, ABISELECT(24,12), "S2834C5.s2834c5f0");
    test_class_info(&lv, &cd_S2834C5);
    dp->~S2834C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2834C5(Test_S2834C5, "S2834C5", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S2834C5C1Ev();
extern void _ZN7S2834C5D1Ev();
Name_Map name_map_S2834C5[] = {
  NSPAIR(_ZN7S2834C5C1Ev),
  NSPAIR(_ZN7S2834C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C7;
extern VTBL_ENTRY _ZTI7S2834C7[];
extern  VTBL_ENTRY _ZTV7S2834C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C7[];
extern Class_Descriptor cd_S2834C6;
extern VTBL_ENTRY _ZTI7S2834C6[];
extern  VTBL_ENTRY _ZTV7S2834C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2834C10;
extern VTBL_ENTRY _ZTI8S2834C10[];
extern  VTBL_ENTRY _ZTV8S2834C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C10[];
static Base_Class bases_S2834C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2834C7,    ABISELECT(32,16), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2834C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C29_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S2834C10,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI7S2834C5[];
static  VTBL_ENTRY vtc_S2834C5[] = {
  ABISELECT(56,28),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C5[0]),
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2834C5[0]),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2834C5[0]),
};
extern VTBL_ENTRY _ZTV7S2834C5[];
static  VTBL_ENTRY _tg__ZTV7S2834C6__7S2834C5[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C6__7S2834C5[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2834C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C10__7S2834C5[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C5[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C7[0]),
};
static  VTT_ENTRY vtt_S2834C5[] = {
  {&(_ZTV7S2834C5[5]),  5,11},
  {&(_tg__ZTV7S2834C6__7S2834C5[4]),  4,4},
  {&(_tg__ZTV7S2834C7__7S2834C6__7S2834C5[3]),  3,3},
  {&(_tg__ZTV8S2834C10__7S2834C5[3]),  3,3},
  {&(_ZTV7S2834C5[11]),  11,11},
  {&(_ZTV7S2834C5[8]),  8,11},
  {&(_tg__ZTV7S2834C7__7S2834C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2834C5[];
extern  VTBL_ENTRY _ZTV7S2834C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C5[];
Class_Descriptor cd_S2834C5 = {  "S2834C5", // class name
  bases_S2834C5, 7,
  &(vtc_S2834C5[0]), // expected_vtbl_contents
  &(vtt_S2834C5[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S2834C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2834C5),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2834C5),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  S2834C12_nt  : S3600C19 , S3600C29_nt {
};
//SIG(-1 S2834C12_nt) C1{ BC2{ m} BC3{ m Fp}}



//skip512 S2834C12_nt

#else // __cplusplus

extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S2834C12_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3600C29_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 _ZTI11S2834C12_nt[];
VTBL_ENTRY *P__ZTI11S2834C12_nt = _ZTI11S2834C12_nt; 
Class_Descriptor cd_S2834C12_nt = {  "S2834C12_nt", // class name
  bases_S2834C12_nt, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S2834C12_nt),ABISELECT(56,32), //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  S2834C11  : virtual S2834C12_nt , virtual S2834C10 , S3600C29_nt {
  __tsi64 s2834c11f0[8];
  ~S2834C11(); // tgen
  S2834C11(); // tgen
};
//SIG(-1 S2834C11) C1{ VBC2{ BC3{ m} BC4{ m Fp}} VBC5{ VBC4 BC3} BC4 FL[8]}


S2834C11 ::~S2834C11(){ note_dtor("S2834C11", this);} // tgen
S2834C11 ::S2834C11(){ note_ctor("S2834C11", this);} // tgen

static void Test_S2834C11()
{
  extern Class_Descriptor cd_S2834C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,21)];
    init_test(&cd_S2834C11, buf);
    S2834C11 *dp, &lv = *(dp=new (buf) S2834C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,80), "sizeof(S2834C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2834C11)");
    check_base_class_offset(lv, (S3600C19*)(S2834C12_nt*), ABISELECT(80,72), "S2834C11");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C12_nt*), ABISELECT(80,72), "S2834C11");
    check_base_class_offset(lv, (S2834C12_nt*), ABISELECT(80,72), "S2834C11");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C10*), ABISELECT(88,76), "S2834C11");
    check_base_class_offset(lv, (S3600C19*)(S2834C10*), 0, "S2834C11");
    check_base_class_offset(lv, (S2834C10*), 0, "S2834C11");
    /*is_ambiguous_... S2834C11::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S2834C11");
    check_field_offset(lv, s2834c11f0, ABISELECT(16,8), "S2834C11.s2834c11f0");
    test_class_info(&lv, &cd_S2834C11);
    dp->~S2834C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2834C11(Test_S2834C11, "S2834C11", ABISELECT(96,80));

#else // __cplusplus

extern void _ZN8S2834C11C1Ev();
extern void _ZN8S2834C11D1Ev();
Name_Map name_map_S2834C11[] = {
  NSPAIR(_ZN8S2834C11C1Ev),
  NSPAIR(_ZN8S2834C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C12_nt;
extern VTBL_ENTRY _ZTI11S2834C12_nt[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2834C10;
extern VTBL_ENTRY _ZTI8S2834C10[];
extern  VTBL_ENTRY _ZTV8S2834C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S2834C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S2834C12_nt,    ABISELECT(80,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_S3600C29_nt,    ABISELECT(88,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2834C10,    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},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2834C11[];
static  VTBL_ENTRY vtc_S2834C11[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C11[0]),
};
extern VTBL_ENTRY _ZTV8S2834C11[];
static  VTBL_ENTRY _tg__ZTV8S2834C10__8S2834C11[] = {
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C10[0]),
};
static  VTT_ENTRY vtt_S2834C11[] = {
  {&(_ZTV8S2834C11[5]),  5,5},
  {&(_ZTV8S2834C11[5]),  5,5},
  {&(_tg__ZTV8S2834C10__8S2834C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2834C11[];
extern  VTBL_ENTRY _ZTV8S2834C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C11[];
Class_Descriptor cd_S2834C11 = {  "S2834C11", // class name
  bases_S2834C11, 7,
  &(vtc_S2834C11[0]), // expected_vtbl_contents
  &(vtt_S2834C11[0]), // expected_vtt_contents
  ABISELECT(96,80), // object size
  NSPAIRA(_ZTI8S2834C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2834C11),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2834C11),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  S2834C4  : virtual S3600C19 , S2834C5 , S2834C10 , virtual S2834C11 {
  virtual  ~S2834C4(); // _ZN7S2834C4D2Ev
  S2834C4(); // tgen
};
//SIG(-1 S2834C4) C1{ VBC2{ m} BC3{ BC4{ VBC2 VBC5{ BC6{ m Fp} VBC2 FU7{ m}} Fi} BC8{ VBC6 BC2} FC2} BC8 VBC9{ VBC10{ BC2 BC6} VBC8 BC6 FL[8]} vd}


 S2834C4 ::~S2834C4(){ note_dtor("S2834C4", this);}
S2834C4 ::S2834C4(){ note_ctor("S2834C4", this);} // tgen

static void Test_S2834C4()
{
  extern Class_Descriptor cd_S2834C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S2834C4, buf);
    S2834C4 *dp, &lv = *(dp=new (buf) S2834C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S2834C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2834C4)");
    /*is_ambiguous_... S2834C4::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), 0, "S2834C4");
    check_base_class_offset(lv, (S3600C19*)(S2834C6*)(S2834C5*), 0, "S2834C4");
    check_base_class_offset(lv, (S3600C19*)(S2834C7*), 0, "S2834C4");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C7*), ABISELECT(48,24), "S2834C4");
    check_base_class_offset(lv, (S2834C7*)(S2834C6*)(S2834C5*), ABISELECT(40,20), "S2834C4");
    check_base_class_offset(lv, (S2834C6*)(S2834C5*), 0, "S2834C4");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C10*)(S2834C5*), ABISELECT(64,32), "S2834C4");
    /*is_ambiguous_... S2834C4::S2834C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2834C10*), ABISELECT(64,32), "S2834C4");
    /*is_ambiguous_... S2834C4::S2834C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2834C10*), ABISELECT(64,32), "S2834C4");
    check_base_class_offset(lv, (S3600C19*)(S2834C10*)(S2834C5*), ABISELECT(16,8), "S2834C4");
    check_base_class_offset(lv, (S2834C10*)(S2834C5*), ABISELECT(16,8), "S2834C4");
    check_base_class_offset(lv, (S2834C5*), 0, "S2834C4");
    /*is_ambiguous_... S2834C4::S2834C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2834C10*), ABISELECT(32,16), "S2834C4");
    /*is_ambiguous_... S2834C4::S2834C10 */ AMB_check_base_class_offset(lv, (S2834C10*), ABISELECT(32,16), "S2834C4");
    check_base_class_offset(lv, (S3600C19*)(S2834C12_nt*), ABISELECT(152,108), "S2834C4");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C12_nt*), ABISELECT(152,108), "S2834C4");
    check_base_class_offset(lv, (S2834C12_nt*)(S2834C11*), ABISELECT(152,108), "S2834C4");
    /*is_ambiguous_... S2834C4::S2834C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2834C10*), ABISELECT(72,36), "S2834C4");
    check_base_class_offset(lv, (S2834C10*)(S2834C11*), ABISELECT(72,36), "S2834C4");
    /*is_ambiguous_... S2834C11::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2834C11*), ABISELECT(80,40), "S2834C4");
    check_base_class_offset(lv, (S2834C11*), ABISELECT(72,36), "S2834C4");
    test_class_info(&lv, &cd_S2834C4);
    dp->~S2834C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2834C4(Test_S2834C4, "S2834C4", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN7S2834C4C1Ev();
extern void _ZN7S2834C4D2Ev();
Name_Map name_map_S2834C4[] = {
  NSPAIR(_ZN7S2834C4C1Ev),
  NSPAIR(_ZN7S2834C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C7;
extern VTBL_ENTRY _ZTI7S2834C7[];
extern  VTBL_ENTRY _ZTV7S2834C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C7[];
extern Class_Descriptor cd_S2834C6;
extern VTBL_ENTRY _ZTI7S2834C6[];
extern  VTBL_ENTRY _ZTV7S2834C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2834C10;
extern VTBL_ENTRY _ZTI8S2834C10[];
extern  VTBL_ENTRY _ZTV8S2834C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C10[];
extern Class_Descriptor cd_S2834C5;
extern VTBL_ENTRY _ZTI7S2834C5[];
extern  VTBL_ENTRY _ZTV7S2834C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C5[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2834C10;
extern VTBL_ENTRY _ZTI8S2834C10[];
extern  VTBL_ENTRY _ZTV8S2834C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C12_nt;
extern VTBL_ENTRY _ZTI11S2834C12_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2834C10;
extern VTBL_ENTRY _ZTI8S2834C10[];
extern  VTBL_ENTRY _ZTV8S2834C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C11;
extern VTBL_ENTRY _ZTI8S2834C11[];
extern  VTBL_ENTRY _ZTV8S2834C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C11[];
static Base_Class bases_S2834C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2834C7,    ABISELECT(40,20), //bcp->offset
    16, //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
    3, //immediately_derived
  0, 1},
  {&cd_S2834C6,    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
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S2834C10,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2834C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2834C10,    ABISELECT(32,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2834C12_nt,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2834C10,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2834C11,    ABISELECT(72,36), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2834C4[];
extern void _ZN7S2834C4D1Ev();
extern void _ZN7S2834C4D0Ev();
static  VTBL_ENTRY vtc_S2834C4[] = {
  ABISELECT(72,36),
  ABISELECT(152,108),
  ABISELECT(72,36),
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C4[0]),
  (VTBL_ENTRY)&_ZN7S2834C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2834C4D0Ev,
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2834C4[0]),
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2834C4[0]),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S2834C4[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S2834C4[0]),
};
extern VTBL_ENTRY _ZTV7S2834C4[];
static  VTBL_ENTRY _tg__ZTV7S2834C5__7S2834C4[] = {
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C67S2834C5__7S2834C4[] = {
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C67S2834C5__7S2834C4[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S2834C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C107S2834C5__7S2834C4[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C5__7S2834C4[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S2834C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C10__7S2834C5__7S2834C4[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2834C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C10__A__7S2834C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C4[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C11__7S2834C4[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C10__A2__7S2834C4[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C10[0]),
};
static  VTT_ENTRY vtt_S2834C4[] = {
  {&(_ZTV7S2834C4[8]),  8,24},
  {&(_tg__ZTV7S2834C5__7S2834C4[5]),  5,5},
  {&(_tg__ZTV7S2834C67S2834C5__7S2834C4[4]),  4,4},
  {&(_tg__ZTV7S2834C7__7S2834C67S2834C5__7S2834C4[3]),  3,3},
  {&(_tg__ZTV8S2834C107S2834C5__7S2834C4[3]),  3,3},
  {&(_tg__ZTV7S2834C7__7S2834C5__7S2834C4[3]),  3,3},
  {&(_tg__ZTV8S2834C10__7S2834C5__7S2834C4[3]),  3,3},
  {&(_tg__ZTV8S2834C10__A__7S2834C4[3]),  3,3},
  {&(_ZTV7S2834C4[19]),  19,24},
  {&(_ZTV7S2834C4[13]),  13,24},
  {&(_ZTV7S2834C4[16]),  16,24},
  {&(_ZTV7S2834C4[24]),  24,24},
  {&(_ZTV7S2834C4[24]),  24,24},
  {&(_tg__ZTV7S2834C7__7S2834C4[3]),  3,3},
  {&(_tg__ZTV8S2834C11__7S2834C4[5]),  5,5},
  {&(_tg__ZTV8S2834C11__7S2834C4[5]),  5,5},
  {&(_tg__ZTV8S2834C10__A2__7S2834C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2834C4[];
extern  VTBL_ENTRY _ZTV7S2834C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C4[];
Class_Descriptor cd_S2834C4 = {  "S2834C4", // class name
  bases_S2834C4, 17,
  &(vtc_S2834C4[0]), // expected_vtbl_contents
  &(vtt_S2834C4[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI7S2834C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2834C4),24, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2834C4),17, //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  S2834C13_nt  : virtual S3600C29_nt {
  virtual  ~S2834C13_nt(); // _ZN11S2834C13_ntD2Ev
  S2834C13_nt(); // tgen
};
//SIG(-1 S2834C13_nt) C1{ VBC2{ m Fp} vd}


 S2834C13_nt ::~S2834C13_nt(){ note_dtor("S2834C13_nt", this);}
S2834C13_nt ::S2834C13_nt(){ note_ctor("S2834C13_nt", this);} // tgen

//skip512 S2834C13_nt

#else // __cplusplus

extern void _ZN11S2834C13_ntC1Ev();
extern void _ZN11S2834C13_ntD2Ev();
Name_Map name_map_S2834C13_nt[] = {
  NSPAIR(_ZN11S2834C13_ntC1Ev),
  NSPAIR(_ZN11S2834C13_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S2834C13_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S2834C13_nt[];
extern void _ZN11S2834C13_ntD1Ev();
extern void _ZN11S2834C13_ntD0Ev();
static  VTBL_ENTRY vtc_S2834C13_nt[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI11S2834C13_nt[0]),
  (VTBL_ENTRY)&_ZN11S2834C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2834C13_ntD0Ev,
};
extern VTBL_ENTRY _ZTV11S2834C13_nt[];
static  VTT_ENTRY vtt_S2834C13_nt[] = {
  {&(_ZTV11S2834C13_nt[3]),  3,5},
};
extern VTBL_ENTRY _ZTI11S2834C13_nt[];
VTBL_ENTRY *P__ZTI11S2834C13_nt = _ZTI11S2834C13_nt; 
extern  VTBL_ENTRY _ZTV11S2834C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2834C13_nt[];
Class_Descriptor cd_S2834C13_nt = {  "S2834C13_nt", // class name
  bases_S2834C13_nt, 1,
  &(vtc_S2834C13_nt[0]), // expected_vtbl_contents
  &(vtt_S2834C13_nt[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S2834C13_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV11S2834C13_nt),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S2834C13_nt),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2834C2  : S3600C19 , S2834C4 , S2834C13_nt {
  virtual  ~S2834C2(); // _ZN7S2834C2D2Ev
  S2834C2(); // tgen
};
//SIG(-1 S2834C2) C1{ BC2{ m} BC3{ VBC2 BC4{ BC5{ VBC2 VBC6{ BC7{ m Fp} VBC2 FU8{ m}} Fi} BC9{ VBC7 BC2} FC2} BC9 VBC10{ VBC11{ BC2 BC7} VBC9 BC7 FL[8]} vd} BC12{ VBC7 vd} vd}


 S2834C2 ::~S2834C2(){ note_dtor("S2834C2", this);}
S2834C2 ::S2834C2(){ note_ctor("S2834C2", this);} // tgen

static void Test_S2834C2()
{
  extern Class_Descriptor cd_S2834C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,30)];
    init_test(&cd_S2834C2, buf);
    S2834C2 *dp, &lv = *(dp=new (buf) S2834C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,116), "sizeof(S2834C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2834C2)");
    /*is_ambiguous_... S2834C2::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), 0, "S2834C2");
    /*is_ambiguous_... S2834C4::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2834C4*), ABISELECT(48,24), "S2834C2");
    check_base_class_offset(lv, (S3600C19*)(S2834C6*)(S2834C5*)(S2834C4*), ABISELECT(48,24), "S2834C2");
    check_base_class_offset(lv, (S3600C19*)(S2834C7*), ABISELECT(48,24), "S2834C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C7*), ABISELECT(56,28), "S2834C2");
    check_base_class_offset(lv, (S2834C7*)(S2834C6*)(S2834C5*)(S2834C4*), ABISELECT(48,24), "S2834C2");
    check_base_class_offset(lv, (S2834C6*)(S2834C5*)(S2834C4*), 0, "S2834C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C10*)(S2834C5*)(S2834C4*), ABISELECT(72,36), "S2834C2");
    /*is_ambiguous_... S2834C4::S2834C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2834C10*)(S2834C4*), ABISELECT(72,36), "S2834C2");
    /*is_ambiguous_... S2834C2::S2834C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2834C10*), ABISELECT(72,36), "S2834C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C13_nt*), ABISELECT(72,36), "S2834C2");
    check_base_class_offset(lv, (S3600C19*)(S2834C10*)(S2834C5*)(S2834C4*), ABISELECT(16,8), "S2834C2");
    check_base_class_offset(lv, (S2834C10*)(S2834C5*)(S2834C4*), ABISELECT(16,8), "S2834C2");
    check_base_class_offset(lv, (S2834C5*)(S2834C4*), 0, "S2834C2");
    /*is_ambiguous_... S2834C4::S2834C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2834C10*)(S2834C4*), ABISELECT(32,16), "S2834C2");
    /*is_ambiguous_... S2834C4::S2834C10 */ AMB_check_base_class_offset(lv, (S2834C10*)(S2834C4*), ABISELECT(32,16), "S2834C2");
    check_base_class_offset(lv, (S3600C19*)(S2834C12_nt*), ABISELECT(160,112), "S2834C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C12_nt*), ABISELECT(160,112), "S2834C2");
    check_base_class_offset(lv, (S2834C12_nt*)(S2834C11*), ABISELECT(160,112), "S2834C2");
    /*is_ambiguous_... S2834C2::S2834C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2834C10*), ABISELECT(80,40), "S2834C2");
    check_base_class_offset(lv, (S2834C10*)(S2834C11*), ABISELECT(80,40), "S2834C2");
    /*is_ambiguous_... S2834C11::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2834C11*), ABISELECT(88,44), "S2834C2");
    check_base_class_offset(lv, (S2834C11*)(S2834C4*), ABISELECT(80,40), "S2834C2");
    check_base_class_offset(lv, (S2834C4*), 0, "S2834C2");
    check_base_class_offset(lv, (S2834C13_nt*), ABISELECT(40,20), "S2834C2");
    test_class_info(&lv, &cd_S2834C2);
    dp->~S2834C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2834C2(Test_S2834C2, "S2834C2", ABISELECT(168,116));

#else // __cplusplus

extern void _ZN7S2834C2C1Ev();
extern void _ZN7S2834C2D2Ev();
Name_Map name_map_S2834C2[] = {
  NSPAIR(_ZN7S2834C2C1Ev),
  NSPAIR(_ZN7S2834C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C7;
extern VTBL_ENTRY _ZTI7S2834C7[];
extern  VTBL_ENTRY _ZTV7S2834C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C7[];
extern Class_Descriptor cd_S2834C6;
extern VTBL_ENTRY _ZTI7S2834C6[];
extern  VTBL_ENTRY _ZTV7S2834C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2834C10;
extern VTBL_ENTRY _ZTI8S2834C10[];
extern  VTBL_ENTRY _ZTV8S2834C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C10[];
extern Class_Descriptor cd_S2834C5;
extern VTBL_ENTRY _ZTI7S2834C5[];
extern  VTBL_ENTRY _ZTV7S2834C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C5[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2834C10;
extern VTBL_ENTRY _ZTI8S2834C10[];
extern  VTBL_ENTRY _ZTV8S2834C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C12_nt;
extern VTBL_ENTRY _ZTI11S2834C12_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2834C10;
extern VTBL_ENTRY _ZTI8S2834C10[];
extern  VTBL_ENTRY _ZTV8S2834C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C11;
extern VTBL_ENTRY _ZTI8S2834C11[];
extern  VTBL_ENTRY _ZTV8S2834C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C11[];
extern Class_Descriptor cd_S2834C4;
extern VTBL_ENTRY _ZTI7S2834C4[];
extern  VTBL_ENTRY _ZTV7S2834C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C4[];
extern Class_Descriptor cd_S2834C13_nt;
extern VTBL_ENTRY _ZTI11S2834C13_nt[];
extern  VTBL_ENTRY _ZTV11S2834C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2834C13_nt[];
static Base_Class bases_S2834C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3600C19,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2834C7,    ABISELECT(48,24), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2834C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S2834C10,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2834C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2834C10,    ABISELECT(32,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(160,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
    13, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(160,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
    13, //immediately_derived
  0, 0},
  {&cd_S2834C12_nt,    ABISELECT(160,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
    17, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2834C10,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2834C11,    ABISELECT(80,40), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S2834C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2834C13_nt,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2834C2[];
extern void _ZN7S2834C2D1Ev();
extern void _ZN7S2834C2D0Ev();
extern void ABISELECT(_ZThn40_N7S2834C2D1Ev,_ZThn20_N7S2834C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2834C2D0Ev,_ZThn20_N7S2834C2D0Ev)();
static  VTBL_ENTRY vtc_S2834C2[] = {
  ABISELECT(80,40),
  ABISELECT(160,112),
  ABISELECT(80,40),
  ABISELECT(72,36),
  ABISELECT(48,24),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C2[0]),
  (VTBL_ENTRY)&_ZN7S2834C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2834C2D0Ev,
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2834C2[0]),
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2834C2[0]),
  ABISELECT(32,16),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S2834C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2834C2D1Ev,_ZThn20_N7S2834C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2834C2D0Ev,_ZThn20_N7S2834C2D0Ev),
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S2834C2[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S2834C2[0]),
};
extern VTBL_ENTRY _ZTV7S2834C2[];
extern void _ZN7S2834C4D1Ev();
extern void _ZN7S2834C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2834C4__7S2834C2[] = {
  ABISELECT(80,40),
  ABISELECT(160,112),
  ABISELECT(80,40),
  ABISELECT(72,36),
  ABISELECT(48,24),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C4[0]),
  (VTBL_ENTRY)&_ZN7S2834C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2834C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2834C57S2834C4__7S2834C2[] = {
  ABISELECT(72,36),
  ABISELECT(48,24),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C67S2834C57S2834C4__7S2834C2[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C67S2834C57S2834C4__7S2834C2[] = {
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S2834C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C107S2834C57S2834C4__7S2834C2[] = {
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C57S2834C4__7S2834C2[] = {
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S2834C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C10__7S2834C57S2834C4__7S2834C2[] = {
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2834C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C107S2834C4__A1__7S2834C2[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C4__7S2834C2[] = {
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S2834C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C107S2834C5__7S2834C4__7S2834C2[] = {
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2834C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C10__A__7S2834C4__7S2834C2[] = {
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2834C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C11__7S2834C4__7S2834C2[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S2834C4[0]),
};
extern void _ZN11S2834C13_ntD1Ev();
extern void _ZN11S2834C13_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S2834C13_nt__7S2834C2[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI11S2834C13_nt[0]),
  (VTBL_ENTRY)&_ZN11S2834C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2834C13_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C11__7S2834C2[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C10__A2__7S2834C2[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C10[0]),
};
static  VTT_ENTRY vtt_S2834C2[] = {
  {&(_ZTV7S2834C2[8]),  8,29},
  {&(_tg__ZTV7S2834C4__7S2834C2[8]),  8,10},
  {&(_tg__ZTV7S2834C57S2834C4__7S2834C2[5]),  5,5},
  {&(_tg__ZTV7S2834C67S2834C57S2834C4__7S2834C2[4]),  4,4},
  {&(_tg__ZTV7S2834C7__7S2834C67S2834C57S2834C4__7S2834C2[3]),  3,3},
  {&(_tg__ZTV8S2834C107S2834C57S2834C4__7S2834C2[3]),  3,3},
  {&(_tg__ZTV7S2834C7__7S2834C57S2834C4__7S2834C2[3]),  3,3},
  {&(_tg__ZTV8S2834C10__7S2834C57S2834C4__7S2834C2[3]),  3,3},
  {&(_tg__ZTV8S2834C107S2834C4__A1__7S2834C2[3]),  3,3},
  {&(_tg__ZTV7S2834C7__7S2834C4__7S2834C2[3]),  3,3},
  {&(_tg__ZTV8S2834C107S2834C5__7S2834C4__7S2834C2[3]),  3,3},
  {&(_tg__ZTV8S2834C10__A__7S2834C4__7S2834C2[3]),  3,3},
  {&(_tg__ZTV8S2834C11__7S2834C4__7S2834C2[5]),  5,5},
  {&(_tg__ZTV8S2834C11__7S2834C4__7S2834C2[5]),  5,5},
  {&(_tg__ZTV11S2834C13_nt__7S2834C2[3]),  3,5},
  {&(_ZTV7S2834C2[24]),  24,29},
  {&(_ZTV7S2834C2[13]),  13,29},
  {&(_ZTV7S2834C2[16]),  16,29},
  {&(_ZTV7S2834C2[29]),  29,29},
  {&(_ZTV7S2834C2[29]),  29,29},
  {&(_ZTV7S2834C2[19]),  19,29},
  {&(_tg__ZTV7S2834C7__7S2834C2[3]),  3,3},
  {&(_tg__ZTV8S2834C11__7S2834C2[5]),  5,5},
  {&(_tg__ZTV8S2834C11__7S2834C2[5]),  5,5},
  {&(_tg__ZTV8S2834C10__A2__7S2834C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2834C2[];
extern  VTBL_ENTRY _ZTV7S2834C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C2[];
Class_Descriptor cd_S2834C2 = {  "S2834C2", // class name
  bases_S2834C2, 20,
  &(vtc_S2834C2[0]), // expected_vtbl_contents
  &(vtt_S2834C2[0]), // expected_vtt_contents
  ABISELECT(168,116), // object size
  NSPAIRA(_ZTI7S2834C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2834C2),29, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2834C2),25, //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  S2834C15  {
  virtual void  v1(); // _ZN8S2834C152v1Ev
  ~S2834C15(); // tgen
  S2834C15(); // tgen
};
//SIG(-1 S2834C15) C1{ v1}


void  S2834C15 ::v1(){vfunc_called(this, "_ZN8S2834C152v1Ev");}
S2834C15 ::~S2834C15(){ note_dtor("S2834C15", this);} // tgen
S2834C15 ::S2834C15(){ note_ctor("S2834C15", this);} // tgen

static void Test_S2834C15()
{
  extern Class_Descriptor cd_S2834C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2834C15, buf);
    S2834C15 *dp, &lv = *(dp=new (buf) S2834C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2834C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2834C15)");
    test_class_info(&lv, &cd_S2834C15);
    dp->~S2834C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2834C15(Test_S2834C15, "S2834C15", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S2834C15C1Ev();
extern void _ZN8S2834C15D1Ev();
Name_Map name_map_S2834C15[] = {
  NSPAIR(_ZN8S2834C15C1Ev),
  NSPAIR(_ZN8S2834C15D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2834C15[];
extern void _ZN8S2834C152v1Ev();
static  VTBL_ENTRY vtc_S2834C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C15[0]),
  (VTBL_ENTRY)&_ZN8S2834C152v1Ev,
};
extern VTBL_ENTRY _ZTI8S2834C15[];
extern  VTBL_ENTRY _ZTV8S2834C15[];
Class_Descriptor cd_S2834C15 = {  "S2834C15", // class name
  0,0,//no base classes
  &(vtc_S2834C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2834C15),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2834C15),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  S2834C14  : virtual S2834C5 , virtual S2834C15 , virtual S2834C11 {
  ~S2834C14(); // tgen
  S2834C14(); // tgen
};
//SIG(-1 S2834C14) C1{ VBC2{ BC3{ VBC4{ m} VBC5{ BC6{ m Fp} VBC4 FU7{ m}} Fi} BC8{ VBC6 BC4} FC4} VBC9{ v1} VBC10{ VBC11{ BC4 BC6} VBC8 BC6 FL[8]}}


S2834C14 ::~S2834C14(){ note_dtor("S2834C14", this);} // tgen
S2834C14 ::S2834C14(){ note_ctor("S2834C14", this);} // tgen

static void Test_S2834C14()
{
  extern Class_Descriptor cd_S2834C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S2834C14, buf);
    S2834C14 *dp, &lv = *(dp=new (buf) S2834C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S2834C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2834C14)");
    check_base_class_offset(lv, (S3600C19*)(S2834C6*)(S2834C5*), 0, "S2834C14");
    check_base_class_offset(lv, (S3600C19*)(S2834C7*), 0, "S2834C14");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C7*), ABISELECT(48,24), "S2834C14");
    check_base_class_offset(lv, (S2834C7*)(S2834C6*)(S2834C5*), ABISELECT(40,20), "S2834C14");
    check_base_class_offset(lv, (S2834C6*)(S2834C5*), ABISELECT(8,4), "S2834C14");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C10*)(S2834C5*), ABISELECT(64,32), "S2834C14");
    /*is_ambiguous_... S2834C14::S2834C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2834C10*), ABISELECT(64,32), "S2834C14");
    check_base_class_offset(lv, (S3600C19*)(S2834C10*)(S2834C5*), ABISELECT(24,12), "S2834C14");
    check_base_class_offset(lv, (S2834C10*)(S2834C5*), ABISELECT(24,12), "S2834C14");
    check_base_class_offset(lv, (S2834C5*), ABISELECT(8,4), "S2834C14");
    check_base_class_offset(lv, (S2834C15*), 0, "S2834C14");
    check_base_class_offset(lv, (S3600C19*)(S2834C12_nt*), ABISELECT(152,108), "S2834C14");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C12_nt*), ABISELECT(152,108), "S2834C14");
    check_base_class_offset(lv, (S2834C12_nt*)(S2834C11*), ABISELECT(152,108), "S2834C14");
    /*is_ambiguous_... S2834C14::S2834C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2834C10*), ABISELECT(72,36), "S2834C14");
    check_base_class_offset(lv, (S2834C10*)(S2834C11*), ABISELECT(72,36), "S2834C14");
    /*is_ambiguous_... S2834C11::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2834C11*), ABISELECT(80,40), "S2834C14");
    check_base_class_offset(lv, (S2834C11*), ABISELECT(72,36), "S2834C14");
    test_class_info(&lv, &cd_S2834C14);
    dp->~S2834C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2834C14(Test_S2834C14, "S2834C14", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN8S2834C14C1Ev();
extern void _ZN8S2834C14D1Ev();
Name_Map name_map_S2834C14[] = {
  NSPAIR(_ZN8S2834C14C1Ev),
  NSPAIR(_ZN8S2834C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C7;
extern VTBL_ENTRY _ZTI7S2834C7[];
extern  VTBL_ENTRY _ZTV7S2834C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C7[];
extern Class_Descriptor cd_S2834C6;
extern VTBL_ENTRY _ZTI7S2834C6[];
extern  VTBL_ENTRY _ZTV7S2834C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2834C10;
extern VTBL_ENTRY _ZTI8S2834C10[];
extern  VTBL_ENTRY _ZTV8S2834C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C10[];
extern Class_Descriptor cd_S2834C5;
extern VTBL_ENTRY _ZTI7S2834C5[];
extern  VTBL_ENTRY _ZTV7S2834C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C5[];
extern Class_Descriptor cd_S2834C15;
extern VTBL_ENTRY _ZTI8S2834C15[];
extern  VTBL_ENTRY _ZTV8S2834C15[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C12_nt;
extern VTBL_ENTRY _ZTI11S2834C12_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2834C10;
extern VTBL_ENTRY _ZTI8S2834C10[];
extern  VTBL_ENTRY _ZTV8S2834C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C11;
extern VTBL_ENTRY _ZTI8S2834C11[];
extern  VTBL_ENTRY _ZTV8S2834C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C11[];
static Base_Class bases_S2834C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2834C7,    ABISELECT(40,20), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2834C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S2834C10,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //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
    7, //immediately_derived
  0, 0},
  {&cd_S2834C5,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2834C15,    0, //bcp->offset
    -1, //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
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2834C12_nt,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2834C10,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    15, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2834C11,    ABISELECT(72,36), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2834C14[];
extern void _ZN8S2834C152v1Ev();
static  VTBL_ENTRY vtc_S2834C14[] = {
  ABISELECT(72,36),
  ABISELECT(152,108),
  ABISELECT(72,36),
  0,
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C14[0]),
  (VTBL_ENTRY)&_ZN8S2834C152v1Ev,
  ABISELECT(56,28),
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S2834C14[0]),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2834C14[0]),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2834C14[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S2834C14[0]),
};
extern VTBL_ENTRY _ZTV8S2834C14[];
static  VTBL_ENTRY _tg__ZTV7S2834C5__8S2834C14[] = {
  ABISELECT(56,28),
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C67S2834C5__8S2834C14[] = {
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C67S2834C5__8S2834C14[] = {
  ABISELECT(-40,-20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2834C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C107S2834C5__8S2834C14[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C5__8S2834C14[] = {
  ABISELECT(-40,-20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2834C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C10__7S2834C5__8S2834C14[] = {
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2834C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__8S2834C14[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C11__8S2834C14[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C10__A1__8S2834C14[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C10[0]),
};
static  VTT_ENTRY vtt_S2834C14[] = {
  {&(_ZTV8S2834C14[11]),  11,28},
  {&(_ZTV8S2834C14[17]),  17,28},
  {&(_ZTV8S2834C14[23]),  23,28},
  {&(_ZTV8S2834C14[20]),  20,28},
  {&(_ZTV8S2834C14[11]),  11,28},
  {&(_ZTV8S2834C14[28]),  28,28},
  {&(_ZTV8S2834C14[28]),  28,28},
  {&(_tg__ZTV7S2834C5__8S2834C14[5]),  5,5},
  {&(_tg__ZTV7S2834C67S2834C5__8S2834C14[4]),  4,4},
  {&(_tg__ZTV7S2834C7__7S2834C67S2834C5__8S2834C14[3]),  3,3},
  {&(_tg__ZTV8S2834C107S2834C5__8S2834C14[3]),  3,3},
  {&(_tg__ZTV7S2834C7__7S2834C5__8S2834C14[3]),  3,3},
  {&(_tg__ZTV8S2834C10__7S2834C5__8S2834C14[3]),  3,3},
  {&(_tg__ZTV7S2834C7__8S2834C14[3]),  3,3},
  {&(_tg__ZTV8S2834C11__8S2834C14[5]),  5,5},
  {&(_tg__ZTV8S2834C11__8S2834C14[5]),  5,5},
  {&(_tg__ZTV8S2834C10__A1__8S2834C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2834C14[];
extern  VTBL_ENTRY _ZTV8S2834C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C14[];
Class_Descriptor cd_S2834C14 = {  "S2834C14", // class name
  bases_S2834C14, 16,
  &(vtc_S2834C14[0]), // expected_vtbl_contents
  &(vtt_S2834C14[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S2834C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2834C14),28, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2834C14),17, //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  S2834C17  : virtual S2834C11 {
  short s2834c17f0;
  virtual  ~S2834C17(); // _ZN8S2834C17D2Ev
  S2834C17(); // tgen
};
//SIG(-1 S2834C17) C1{ VBC2{ VBC3{ BC4{ m} BC5{ m Fp}} VBC6{ VBC5 BC4} BC5 FL[8]} vd Fs}


 S2834C17 ::~S2834C17(){ note_dtor("S2834C17", this);}
S2834C17 ::S2834C17(){ note_ctor("S2834C17", this);} // tgen

static void Test_S2834C17()
{
  extern Class_Descriptor cd_S2834C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,23)];
    init_test(&cd_S2834C17, buf);
    S2834C17 *dp, &lv = *(dp=new (buf) S2834C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,88), "sizeof(S2834C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2834C17)");
    check_base_class_offset(lv, (S3600C19*)(S2834C12_nt*), ABISELECT(96,80), "S2834C17");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C12_nt*), ABISELECT(96,80), "S2834C17");
    check_base_class_offset(lv, (S2834C12_nt*)(S2834C11*), ABISELECT(96,80), "S2834C17");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C10*), ABISELECT(104,84), "S2834C17");
    check_base_class_offset(lv, (S3600C19*)(S2834C10*), 0, "S2834C17");
    check_base_class_offset(lv, (S2834C10*)(S2834C11*), 0, "S2834C17");
    /*is_ambiguous_... S2834C11::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2834C11*), ABISELECT(24,12), "S2834C17");
    check_base_class_offset(lv, (S2834C11*), ABISELECT(16,8), "S2834C17");
    check_field_offset(lv, s2834c17f0, ABISELECT(8,4), "S2834C17.s2834c17f0");
    test_class_info(&lv, &cd_S2834C17);
    dp->~S2834C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2834C17(Test_S2834C17, "S2834C17", ABISELECT(112,88));

#else // __cplusplus

extern void _ZN8S2834C17C1Ev();
extern void _ZN8S2834C17D2Ev();
Name_Map name_map_S2834C17[] = {
  NSPAIR(_ZN8S2834C17C1Ev),
  NSPAIR(_ZN8S2834C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C12_nt;
extern VTBL_ENTRY _ZTI11S2834C12_nt[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2834C10;
extern VTBL_ENTRY _ZTI8S2834C10[];
extern  VTBL_ENTRY _ZTV8S2834C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C11;
extern VTBL_ENTRY _ZTI8S2834C11[];
extern  VTBL_ENTRY _ZTV8S2834C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C11[];
static Base_Class bases_S2834C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(96,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
    2, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(96,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
    2, //immediately_derived
  0, 0},
  {&cd_S2834C12_nt,    ABISELECT(96,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
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(104,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2834C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2834C11,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2834C17[];
extern void _ZN8S2834C17D1Ev();
extern void _ZN8S2834C17D0Ev();
static  VTBL_ENTRY vtc_S2834C17[] = {
  0,
  ABISELECT(96,80),
  ABISELECT(16,8),
  ABISELECT(104,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C17[0]),
  (VTBL_ENTRY)&_ZN8S2834C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2834C17D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2834C17[0]),
};
extern VTBL_ENTRY _ZTV8S2834C17[];
static  VTBL_ENTRY _tg__ZTV8S2834C11__8S2834C17[] = {
  ABISELECT(-16,-8),
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C10__8S2834C11__8S2834C17[] = {
  ABISELECT(104,84),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S2834C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C10__8S2834C17[] = {
  ABISELECT(104,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C10[0]),
};
static  VTT_ENTRY vtt_S2834C17[] = {
  {&(_ZTV8S2834C17[6]),  6,13},
  {&(_ZTV8S2834C17[13]),  13,13},
  {&(_ZTV8S2834C17[6]),  6,13},
  {&(_tg__ZTV8S2834C11__8S2834C17[5]),  5,5},
  {&(_tg__ZTV8S2834C10__8S2834C11__8S2834C17[3]),  3,3},
  {&(_tg__ZTV8S2834C10__8S2834C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2834C17[];
extern  VTBL_ENTRY _ZTV8S2834C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C17[];
Class_Descriptor cd_S2834C17 = {  "S2834C17", // class name
  bases_S2834C17, 8,
  &(vtc_S2834C17[0]), // expected_vtbl_contents
  &(vtt_S2834C17[0]), // expected_vtt_contents
  ABISELECT(112,88), // object size
  NSPAIRA(_ZTI8S2834C17),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S2834C17),13, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2834C17),6, //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  S2834C16  : S2834C17 , virtual S3600C6_nt {
  char s2834c16f0[9];
  virtual  ~S2834C16(); // _ZN8S2834C16D2Ev
  virtual void  v2(); // _ZN8S2834C162v2Ev
  S2834C16(); // tgen
};
//SIG(-1 S2834C16) C1{ BC2{ VBC3{ VBC4{ BC5{ m} BC6{ m Fp}} VBC7{ VBC6 BC5} BC6 FL[8]} vd Fs} VBC8{ m} vd v1 Fc[9]}


 S2834C16 ::~S2834C16(){ note_dtor("S2834C16", this);}
void  S2834C16 ::v2(){vfunc_called(this, "_ZN8S2834C162v2Ev");}
S2834C16 ::S2834C16(){ note_ctor("S2834C16", this);} // tgen

static void Test_S2834C16()
{
  extern Class_Descriptor cd_S2834C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,25)];
    init_test(&cd_S2834C16, buf);
    S2834C16 *dp, &lv = *(dp=new (buf) S2834C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,96), "sizeof(S2834C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2834C16)");
    check_base_class_offset(lv, (S3600C19*)(S2834C12_nt*), ABISELECT(104,88), "S2834C16");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C12_nt*), ABISELECT(104,88), "S2834C16");
    check_base_class_offset(lv, (S2834C12_nt*)(S2834C11*), ABISELECT(104,88), "S2834C16");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C10*), ABISELECT(112,92), "S2834C16");
    check_base_class_offset(lv, (S3600C19*)(S2834C10*), 0, "S2834C16");
    check_base_class_offset(lv, (S2834C10*)(S2834C11*), 0, "S2834C16");
    /*is_ambiguous_... S2834C11::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2834C11*), ABISELECT(32,20), "S2834C16");
    check_base_class_offset(lv, (S2834C11*)(S2834C17*), ABISELECT(24,16), "S2834C16");
    check_base_class_offset(lv, (S2834C17*), 0, "S2834C16");
    check_base_class_offset(lv, (S3600C6_nt*), 0, "S2834C16");
    check_field_offset(lv, s2834c16f0, ABISELECT(10,6), "S2834C16.s2834c16f0");
    test_class_info(&lv, &cd_S2834C16);
    dp->~S2834C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2834C16(Test_S2834C16, "S2834C16", ABISELECT(120,96));

#else // __cplusplus

extern void _ZN8S2834C16C1Ev();
extern void _ZN8S2834C16D2Ev();
Name_Map name_map_S2834C16[] = {
  NSPAIR(_ZN8S2834C16C1Ev),
  NSPAIR(_ZN8S2834C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C12_nt;
extern VTBL_ENTRY _ZTI11S2834C12_nt[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2834C10;
extern VTBL_ENTRY _ZTI8S2834C10[];
extern  VTBL_ENTRY _ZTV8S2834C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C11;
extern VTBL_ENTRY _ZTI8S2834C11[];
extern  VTBL_ENTRY _ZTV8S2834C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C11[];
extern Class_Descriptor cd_S2834C17;
extern VTBL_ENTRY _ZTI8S2834C17[];
extern  VTBL_ENTRY _ZTV8S2834C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C17[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
static Base_Class bases_S2834C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(104,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_S3600C29_nt,    ABISELECT(104,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_S2834C12_nt,    ABISELECT(104,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
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(112,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2834C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    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
    7, //immediately_derived
  0, 0},
  {&cd_S2834C11,    ABISELECT(24,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2834C17,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C6_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2834C16[];
extern void _ZN8S2834C16D1Ev();
extern void _ZN8S2834C16D0Ev();
extern void _ZN8S2834C162v2Ev();
static  VTBL_ENTRY vtc_S2834C16[] = {
  0,
  0,
  ABISELECT(104,88),
  ABISELECT(24,16),
  ABISELECT(112,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C16[0]),
  (VTBL_ENTRY)&_ZN8S2834C16D1Ev,
  (VTBL_ENTRY)&_ZN8S2834C16D0Ev,
  (VTBL_ENTRY)&_ZN8S2834C162v2Ev,
  ABISELECT(-24,-16),
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S2834C16[0]),
};
extern VTBL_ENTRY _ZTV8S2834C16[];
extern void _ZN8S2834C17D1Ev();
extern void _ZN8S2834C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2834C17__8S2834C16[] = {
  0,
  ABISELECT(104,88),
  ABISELECT(24,16),
  ABISELECT(112,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C17[0]),
  (VTBL_ENTRY)&_ZN8S2834C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2834C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S2834C11__8S2834C17__8S2834C16[] = {
  ABISELECT(-24,-16),
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S2834C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C11__8S2834C16[] = {
  ABISELECT(-24,-16),
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C10__8S2834C11__8S2834C16[] = {
  ABISELECT(112,92),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S2834C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C10__8S2834C16[] = {
  ABISELECT(112,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C10[0]),
};
static  VTT_ENTRY vtt_S2834C16[] = {
  {&(_ZTV8S2834C16[7]),  7,15},
  {&(_tg__ZTV8S2834C17__8S2834C16[6]),  6,8},
  {&(_tg__ZTV8S2834C11__8S2834C17__8S2834C16[5]),  5,5},
  {&(_tg__ZTV8S2834C17__8S2834C16[6]),  6,8},
  {&(_ZTV8S2834C16[15]),  15,15},
  {&(_ZTV8S2834C16[7]),  7,15},
  {&(_tg__ZTV8S2834C11__8S2834C16[5]),  5,5},
  {&(_tg__ZTV8S2834C10__8S2834C11__8S2834C16[3]),  3,3},
  {&(_tg__ZTV8S2834C10__8S2834C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2834C16[];
extern  VTBL_ENTRY _ZTV8S2834C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C16[];
Class_Descriptor cd_S2834C16 = {  "S2834C16", // class name
  bases_S2834C16, 10,
  &(vtc_S2834C16[0]), // expected_vtbl_contents
  &(vtt_S2834C16[0]), // expected_vtt_contents
  ABISELECT(120,96), // object size
  NSPAIRA(_ZTI8S2834C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2834C16),15, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2834C16),9, //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  S2834C1  : S2834C2 , virtual S2834C14 , S2834C16 {
  virtual  ~S2834C1(); // _ZN7S2834C1D2Ev
  S2834C1(); // tgen
};
//SIG(1 S2834C1) C1{ BC2{ BC3{ m} BC4{ VBC3 BC5{ BC6{ VBC3 VBC7{ BC8{ m Fp} VBC3 FU9{ m}} Fi} BC10{ VBC8 BC3} FC3} BC10 VBC11{ VBC12{ BC3 BC8} VBC10 BC8 FL[8]} vd} BC13{ VBC8 vd} vd} VBC14{ VBC5 VBC15{ v1} VBC11} BC16{ BC17{ VBC11 vd Fs} VBC18{ m} vd v2 Fc[9]} vd}


 S2834C1 ::~S2834C1(){ note_dtor("S2834C1", this);}
S2834C1 ::S2834C1(){ note_ctor("S2834C1", this);} // tgen

static void Test_S2834C1()
{
  extern Class_Descriptor cd_S2834C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,39)];
    init_test(&cd_S2834C1, buf);
    S2834C1 *dp, &lv = *(dp=new (buf) S2834C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,152), "sizeof(S2834C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2834C1)");
    /*is_ambiguous_... S2834C2::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2834C2*), 0, "S2834C1");
    /*is_ambiguous_... S2834C4::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2834C4*)(S2834C2*), ABISELECT(67,39), "S2834C1");
    check_base_class_offset(lv, (S3600C19*)(S2834C6*)(S2834C5*)(S2834C4*)(S2834C2*), ABISELECT(67,39), "S2834C1");
    check_base_class_offset(lv, (S3600C19*)(S2834C7*), ABISELECT(67,39), "S2834C1");
    /*is_ambiguous_... S2834C1::S2834C5 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2834C6*)(S2834C5*), ABISELECT(67,39), "S2834C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C7*), ABISELECT(80,44), "S2834C1");
    check_base_class_offset(lv, (S2834C7*)(S2834C6*)(S2834C5*)(S2834C4*)(S2834C2*), ABISELECT(72,40), "S2834C1");
    /*is_ambiguous_... S2834C1::S2834C5 */ AMB_check_base_class_offset(lv, (S2834C7*)(S2834C6*)(S2834C5*), ABISELECT(72,40), "S2834C1");
    check_base_class_offset(lv, (S2834C6*)(S2834C5*)(S2834C4*)(S2834C2*), 0, "S2834C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C10*)(S2834C5*)(S2834C4*)(S2834C2*), ABISELECT(96,52), "S2834C1");
    /*is_ambiguous_... S2834C4::S2834C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2834C10*)(S2834C4*)(S2834C2*), ABISELECT(96,52), "S2834C1");
    /*is_ambiguous_... S2834C1::S2834C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2834C10*), ABISELECT(96,52), "S2834C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C13_nt*)(S2834C2*), ABISELECT(96,52), "S2834C1");
    /*is_ambiguous_... S2834C1::S2834C5 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2834C10*)(S2834C5*), ABISELECT(96,52), "S2834C1");
    check_base_class_offset(lv, (S3600C19*)(S2834C10*)(S2834C5*)(S2834C4*)(S2834C2*), ABISELECT(16,8), "S2834C1");
    check_base_class_offset(lv, (S2834C10*)(S2834C5*)(S2834C4*)(S2834C2*), ABISELECT(16,8), "S2834C1");
    check_base_class_offset(lv, (S2834C5*)(S2834C4*)(S2834C2*), 0, "S2834C1");
    /*is_ambiguous_... S2834C4::S2834C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2834C10*)(S2834C4*)(S2834C2*), ABISELECT(32,16), "S2834C1");
    /*is_ambiguous_... S2834C4::S2834C10 */ AMB_check_base_class_offset(lv, (S2834C10*)(S2834C4*)(S2834C2*), ABISELECT(32,16), "S2834C1");
    check_base_class_offset(lv, (S3600C19*)(S2834C12_nt*), ABISELECT(184,128), "S2834C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S2834C12_nt*), ABISELECT(184,128), "S2834C1");
    check_base_class_offset(lv, (S2834C12_nt*)(S2834C11*), ABISELECT(184,128), "S2834C1");
    /*is_ambiguous_... S2834C1::S2834C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2834C10*), ABISELECT(104,56), "S2834C1");
    check_base_class_offset(lv, (S2834C10*)(S2834C11*), ABISELECT(104,56), "S2834C1");
    /*is_ambiguous_... S2834C11::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2834C11*), ABISELECT(112,60), "S2834C1");
    check_base_class_offset(lv, (S2834C11*)(S2834C4*)(S2834C2*), ABISELECT(104,56), "S2834C1");
    check_base_class_offset(lv, (S2834C11*)(S2834C14*), ABISELECT(104,56), "S2834C1");
    check_base_class_offset(lv, (S2834C11*)(S2834C17*)(S2834C16*), ABISELECT(104,56), "S2834C1");
    check_base_class_offset(lv, (S2834C4*)(S2834C2*), 0, "S2834C1");
    check_base_class_offset(lv, (S2834C13_nt*)(S2834C2*), ABISELECT(40,20), "S2834C1");
    check_base_class_offset(lv, (S2834C2*), 0, "S2834C1");
    /*is_ambiguous_... S2834C1::S2834C5 */ AMB_check_base_class_offset(lv, (S2834C6*)(S2834C5*), ABISELECT(200,136), "S2834C1");
    /*is_ambiguous_... S2834C1::S2834C5 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2834C10*)(S2834C5*), ABISELECT(216,144), "S2834C1");
    /*is_ambiguous_... S2834C1::S2834C5 */ AMB_check_base_class_offset(lv, (S2834C10*)(S2834C5*), ABISELECT(216,144), "S2834C1");
    check_base_class_offset(lv, (S2834C5*)(S2834C14*), ABISELECT(200,136), "S2834C1");
    check_base_class_offset(lv, (S2834C15*)(S2834C14*), ABISELECT(192,132), "S2834C1");
    check_base_class_offset(lv, (S2834C14*), ABISELECT(192,132), "S2834C1");
    check_base_class_offset(lv, (S2834C17*)(S2834C16*), ABISELECT(48,24), "S2834C1");
    check_base_class_offset(lv, (S3600C6_nt*)(S2834C16*), 0, "S2834C1");
    check_base_class_offset(lv, (S2834C16*), ABISELECT(48,24), "S2834C1");
    test_class_info(&lv, &cd_S2834C1);
    dp->~S2834C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2834C1(Test_S2834C1, "S2834C1", ABISELECT(232,152));

#else // __cplusplus

extern void _ZN7S2834C1C1Ev();
extern void _ZN7S2834C1D2Ev();
Name_Map name_map_S2834C1[] = {
  NSPAIR(_ZN7S2834C1C1Ev),
  NSPAIR(_ZN7S2834C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C7;
extern VTBL_ENTRY _ZTI7S2834C7[];
extern  VTBL_ENTRY _ZTV7S2834C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C7[];
extern Class_Descriptor cd_S2834C6;
extern VTBL_ENTRY _ZTI7S2834C6[];
extern  VTBL_ENTRY _ZTV7S2834C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2834C10;
extern VTBL_ENTRY _ZTI8S2834C10[];
extern  VTBL_ENTRY _ZTV8S2834C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C10[];
extern Class_Descriptor cd_S2834C5;
extern VTBL_ENTRY _ZTI7S2834C5[];
extern  VTBL_ENTRY _ZTV7S2834C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C5[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2834C10;
extern VTBL_ENTRY _ZTI8S2834C10[];
extern  VTBL_ENTRY _ZTV8S2834C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C12_nt;
extern VTBL_ENTRY _ZTI11S2834C12_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2834C10;
extern VTBL_ENTRY _ZTI8S2834C10[];
extern  VTBL_ENTRY _ZTV8S2834C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2834C11;
extern VTBL_ENTRY _ZTI8S2834C11[];
extern  VTBL_ENTRY _ZTV8S2834C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C11[];
extern Class_Descriptor cd_S2834C4;
extern VTBL_ENTRY _ZTI7S2834C4[];
extern  VTBL_ENTRY _ZTV7S2834C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C4[];
extern Class_Descriptor cd_S2834C13_nt;
extern VTBL_ENTRY _ZTI11S2834C13_nt[];
extern  VTBL_ENTRY _ZTV11S2834C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2834C13_nt[];
extern Class_Descriptor cd_S2834C2;
extern VTBL_ENTRY _ZTI7S2834C2[];
extern  VTBL_ENTRY _ZTV7S2834C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C2[];
extern Class_Descriptor cd_S2834C6;
extern VTBL_ENTRY _ZTI7S2834C6[];
extern  VTBL_ENTRY _ZTV7S2834C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C6[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2834C10;
extern VTBL_ENTRY _ZTI8S2834C10[];
extern  VTBL_ENTRY _ZTV8S2834C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C10[];
extern Class_Descriptor cd_S2834C5;
extern VTBL_ENTRY _ZTI7S2834C5[];
extern  VTBL_ENTRY _ZTV7S2834C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C5[];
extern Class_Descriptor cd_S2834C15;
extern VTBL_ENTRY _ZTI8S2834C15[];
extern  VTBL_ENTRY _ZTV8S2834C15[];
extern Class_Descriptor cd_S2834C14;
extern VTBL_ENTRY _ZTI8S2834C14[];
extern  VTBL_ENTRY _ZTV8S2834C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C14[];
extern Class_Descriptor cd_S2834C17;
extern VTBL_ENTRY _ZTI8S2834C17[];
extern  VTBL_ENTRY _ZTV8S2834C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C17[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
extern Class_Descriptor cd_S2834C16;
extern VTBL_ENTRY _ZTI8S2834C16[];
extern  VTBL_ENTRY _ZTV8S2834C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2834C16[];
static Base_Class bases_S2834C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C19,    ABISELECT(67,39), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    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
    3, //immediately_derived
  0, 0},
  {&cd_S2834C7,    ABISELECT(72,40), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2834C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    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, 1},
  {&cd_S3600C19,    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_S2834C10,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2834C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2834C10,    ABISELECT(32,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(184,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
    13, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(184,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
    13, //immediately_derived
  0, 0},
  {&cd_S2834C12_nt,    ABISELECT(184,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
    17, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2834C10,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    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
    17, //immediately_derived
  0, 0},
  {&cd_S2834C11,    ABISELECT(104,56), //bcp->offset
    38, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S2834C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2834C13_nt,    ABISELECT(40,20), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2834C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2834C6,    ABISELECT(200,136), //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
    4, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(216,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
    23, //immediately_derived
  0, 0},
  {&cd_S2834C10,    ABISELECT(216,144), //bcp->offset
    60, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2834C5,    ABISELECT(200,136), //bcp->offset
    55, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2834C15,    ABISELECT(192,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2834C14,    ABISELECT(192,132), //bcp->offset
    43, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2834C17,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S3600C6_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
    29, //immediately_derived
  0, 1},
  {&cd_S2834C16,    ABISELECT(48,24), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2834C1[];
extern void _ZN7S2834C1D1Ev();
extern void _ZN7S2834C1D0Ev();
extern void ABISELECT(_ZThn40_N7S2834C1D1Ev,_ZThn20_N7S2834C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2834C1D0Ev,_ZThn20_N7S2834C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S2834C1D1Ev,_ZThn24_N7S2834C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S2834C1D0Ev,_ZThn24_N7S2834C1D0Ev)();
extern void _ZN8S2834C162v2Ev();
extern void _ZN8S2834C152v1Ev();
static  VTBL_ENTRY vtc_S2834C1[] = {
  0,
  ABISELECT(192,132),
  ABISELECT(200,136),
  ABISELECT(192,132),
  ABISELECT(104,56),
  ABISELECT(184,128),
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(72,40),
  ABISELECT(67,39),
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C1[0]),
  (VTBL_ENTRY)&_ZN7S2834C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2834C1D0Ev,
  ABISELECT(80,44),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2834C1[0]),
  ABISELECT(64,36),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2834C1[0]),
  ABISELECT(56,32),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S2834C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2834C1D1Ev,_ZThn20_N7S2834C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2834C1D0Ev,_ZThn20_N7S2834C1D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(56,32),
  ABISELECT(136,104),
  ABISELECT(56,32),
  ABISELECT(48,28),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S2834C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S2834C1D1Ev,_ZThn24_N7S2834C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S2834C1D0Ev,_ZThn24_N7S2834C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2834C162v2Ev,
  ABISELECT(-5,-1),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2834C1[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S2834C1[0]),
  ABISELECT(-88,-76),
  ABISELECT(-8,-4),
  ABISELECT(-88,-76),
  0,
  ABISELECT(-96,-80),
  ABISELECT(-120,-92),
  ABISELECT(-125,-93),
  ABISELECT(8,4),
  0,
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI7S2834C1[0]),
  (VTBL_ENTRY)&_ZN8S2834C152v1Ev,
  ABISELECT(-104,-84),
  ABISELECT(-128,-96),
  ABISELECT(-133,-97),
  ABISELECT(-200,-136),
  (VTBL_ENTRY)&(_ZTI7S2834C1[0]),
  ABISELECT(-120,-92),
  ABISELECT(-216,-144),
  (VTBL_ENTRY)&(_ZTI7S2834C1[0]),
};
extern VTBL_ENTRY _ZTV7S2834C1[];
extern void _ZN7S2834C2D1Ev();
extern void _ZN7S2834C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2834C2__7S2834C1[] = {
  ABISELECT(104,56),
  ABISELECT(184,128),
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(72,40),
  ABISELECT(67,39),
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C2[0]),
  (VTBL_ENTRY)&_ZN7S2834C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2834C2D0Ev,
};
extern void _ZN7S2834C4D1Ev();
extern void _ZN7S2834C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2834C47S2834C2__7S2834C1[] = {
  ABISELECT(104,56),
  ABISELECT(184,128),
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(72,40),
  ABISELECT(67,39),
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C4[0]),
  (VTBL_ENTRY)&_ZN7S2834C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2834C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2834C57S2834C47S2834C2__7S2834C1[] = {
  ABISELECT(96,52),
  ABISELECT(72,40),
  ABISELECT(67,39),
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C67S2834C57S2834C47S2834C2__7S2834C1[] = {
  ABISELECT(72,40),
  ABISELECT(67,39),
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C67S2834C57S2834C47S2834C2__7S2834C1[] = {
  ABISELECT(-5,-1),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2834C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C107S2834C57S2834C47S2834C2__7S2834C1[] = {
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C57S2834C47S2834C2__7S2834C1[] = {
  ABISELECT(-5,-1),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2834C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C10__7S2834C57S2834C47S2834C2__7S2834C1[] = {
  ABISELECT(80,44),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2834C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C107S2834C47S2834C2__A1__7S2834C1[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C47S2834C2__7S2834C1[] = {
  ABISELECT(-5,-1),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2834C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C107S2834C5__7S2834C47S2834C2__7S2834C1[] = {
  ABISELECT(80,44),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2834C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C10__A__7S2834C47S2834C2__7S2834C1[] = {
  ABISELECT(64,36),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2834C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C11__7S2834C47S2834C2__7S2834C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S2834C4[0]),
};
extern void _ZN11S2834C13_ntD1Ev();
extern void _ZN11S2834C13_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S2834C13_nt7S2834C2__7S2834C1[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI11S2834C13_nt[0]),
  (VTBL_ENTRY)&_ZN11S2834C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2834C13_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C2__7S2834C1[] = {
  ABISELECT(-5,-1),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2834C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C107S2834C57S2834C4__7S2834C2__7S2834C1[] = {
  ABISELECT(80,44),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2834C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C107S2834C4__A1__7S2834C2__7S2834C1[] = {
  ABISELECT(64,36),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2834C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C11__7S2834C2__7S2834C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S2834C2[0]),
};
extern void ABISELECT(_ZThn40_N7S2834C2D1Ev,_ZThn20_N7S2834C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2834C2D0Ev,_ZThn20_N7S2834C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2834C13_nt__7S2834C2__7S2834C1[] = {
  ABISELECT(56,32),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S2834C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2834C2D1Ev,_ZThn20_N7S2834C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2834C2D0Ev,_ZThn20_N7S2834C2D0Ev),
};
extern void _ZN8S2834C16D1Ev();
extern void _ZN8S2834C16D0Ev();
extern void _ZN8S2834C162v2Ev();
static  VTBL_ENTRY _tg__ZTV8S2834C16__7S2834C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(56,32),
  ABISELECT(136,104),
  ABISELECT(56,32),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C16[0]),
  (VTBL_ENTRY)&_ZN8S2834C16D1Ev,
  (VTBL_ENTRY)&_ZN8S2834C16D0Ev,
  (VTBL_ENTRY)&_ZN8S2834C162v2Ev,
};
extern void _ZN8S2834C17D1Ev();
extern void _ZN8S2834C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2834C178S2834C16__7S2834C1[] = {
  ABISELECT(56,32),
  ABISELECT(136,104),
  ABISELECT(56,32),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C17[0]),
  (VTBL_ENTRY)&_ZN8S2834C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2834C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S2834C11__8S2834C178S2834C16__7S2834C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S2834C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C11__8S2834C16__7S2834C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S2834C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C1[] = {
  ABISELECT(-5,-1),
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C11__7S2834C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C10__A2__7S2834C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C10[0]),
};
extern void _ZN8S2834C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2834C14__7S2834C1[] = {
  ABISELECT(-88,-76),
  ABISELECT(-8,-4),
  ABISELECT(-88,-76),
  0,
  ABISELECT(-96,-80),
  ABISELECT(-120,-92),
  ABISELECT(-125,-93),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C14[0]),
  (VTBL_ENTRY)&_ZN8S2834C152v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2834C5__8S2834C14__7S2834C1[] = {
  ABISELECT(-104,-84),
  ABISELECT(-128,-96),
  ABISELECT(-133,-97),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S2834C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__8S2834C14__7S2834C1[] = {
  ABISELECT(-5,-1),
  ABISELECT(120,92),
  (VTBL_ENTRY)&(_ZTI8S2834C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C107S2834C5__8S2834C14__7S2834C1[] = {
  ABISELECT(-120,-92),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2834C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C11__8S2834C14__7S2834C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(88,76),
  (VTBL_ENTRY)&(_ZTI8S2834C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C5__A1__7S2834C1[] = {
  ABISELECT(-104,-84),
  ABISELECT(-128,-96),
  ABISELECT(-133,-97),
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C67S2834C5__A1__7S2834C1[] = {
  ABISELECT(-128,-96),
  ABISELECT(-133,-97),
  0,
  (VTBL_ENTRY)&(_ZTI7S2834C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C67S2834C5__A1__7S2834C1[] = {
  ABISELECT(-5,-1),
  ABISELECT(128,96),
  (VTBL_ENTRY)&(_ZTI7S2834C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C107S2834C5__A3__7S2834C1[] = {
  ABISELECT(-120,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S2834C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2834C7__7S2834C5__A1__7S2834C1[] = {
  ABISELECT(-5,-1),
  ABISELECT(128,96),
  (VTBL_ENTRY)&(_ZTI7S2834C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2834C10__7S2834C5__A1__7S2834C1[] = {
  ABISELECT(-120,-92),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2834C5[0]),
};
static  VTT_ENTRY vtt_S2834C1[] = {
  {&(_ZTV7S2834C1[12]),  12,63},
  {&(_tg__ZTV7S2834C2__7S2834C1[8]),  8,10},
  {&(_tg__ZTV7S2834C47S2834C2__7S2834C1[8]),  8,10},
  {&(_tg__ZTV7S2834C57S2834C47S2834C2__7S2834C1[5]),  5,5},
  {&(_tg__ZTV7S2834C67S2834C57S2834C47S2834C2__7S2834C1[4]),  4,4},
  {&(_tg__ZTV7S2834C7__7S2834C67S2834C57S2834C47S2834C2__7S2834C1[3]),  3,3},
  {&(_tg__ZTV8S2834C107S2834C57S2834C47S2834C2__7S2834C1[3]),  3,3},
  {&(_tg__ZTV7S2834C7__7S2834C57S2834C47S2834C2__7S2834C1[3]),  3,3},
  {&(_tg__ZTV8S2834C10__7S2834C57S2834C47S2834C2__7S2834C1[3]),  3,3},
  {&(_tg__ZTV8S2834C107S2834C47S2834C2__A1__7S2834C1[3]),  3,3},
  {&(_tg__ZTV7S2834C7__7S2834C47S2834C2__7S2834C1[3]),  3,3},
  {&(_tg__ZTV8S2834C107S2834C5__7S2834C47S2834C2__7S2834C1[3]),  3,3},
  {&(_tg__ZTV8S2834C10__A__7S2834C47S2834C2__7S2834C1[3]),  3,3},
  {&(_tg__ZTV8S2834C11__7S2834C47S2834C2__7S2834C1[5]),  5,5},
  {&(_tg__ZTV8S2834C11__7S2834C47S2834C2__7S2834C1[5]),  5,5},
  {&(_tg__ZTV11S2834C13_nt7S2834C2__7S2834C1[3]),  3,5},
  {&(_tg__ZTV7S2834C7__7S2834C2__7S2834C1[3]),  3,3},
  {&(_tg__ZTV8S2834C107S2834C57S2834C4__7S2834C2__7S2834C1[3]),  3,3},
  {&(_tg__ZTV8S2834C107S2834C4__A1__7S2834C2__7S2834C1[3]),  3,3},
  {&(_tg__ZTV8S2834C11__7S2834C2__7S2834C1[5]),  5,5},
  {&(_tg__ZTV8S2834C11__7S2834C2__7S2834C1[5]),  5,5},
  {&(_tg__ZTV11S2834C13_nt__7S2834C2__7S2834C1[3]),  3,5},
  {&(_tg__ZTV8S2834C16__7S2834C1[7]),  7,10},
  {&(_tg__ZTV8S2834C178S2834C16__7S2834C1[6]),  6,8},
  {&(_tg__ZTV8S2834C11__8S2834C178S2834C16__7S2834C1[5]),  5,5},
  {&(_tg__ZTV8S2834C11__8S2834C178S2834C16__7S2834C1[5]),  5,5},
  {&(_tg__ZTV8S2834C11__8S2834C16__7S2834C1[5]),  5,5},
  {&(_tg__ZTV8S2834C11__8S2834C16__7S2834C1[5]),  5,5},
  {&(_ZTV7S2834C1[38]),  38,63},
  {&(_ZTV7S2834C1[17]),  17,63},
  {&(_ZTV7S2834C1[20]),  20,63},
  {&(_ZTV7S2834C1[43]),  43,63},
  {&(_ZTV7S2834C1[43]),  43,63},
  {&(_ZTV7S2834C1[23]),  23,63},
  {&(_ZTV7S2834C1[54]),  54,63},
  {&(_ZTV7S2834C1[60]),  60,63},
  {&(_ZTV7S2834C1[63]),  63,63},
  {&(_ZTV7S2834C1[54]),  54,63},
  {&(_ZTV7S2834C1[32]),  32,63},
  {&(_tg__ZTV7S2834C7__7S2834C1[3]),  3,3},
  {&(_tg__ZTV8S2834C11__7S2834C1[5]),  5,5},
  {&(_tg__ZTV8S2834C11__7S2834C1[5]),  5,5},
  {&(_tg__ZTV8S2834C10__A2__7S2834C1[3]),  3,3},
  {&(_tg__ZTV8S2834C14__7S2834C1[11]),  11,12},
  {&(_tg__ZTV7S2834C5__8S2834C14__7S2834C1[5]),  5,5},
  {&(_tg__ZTV7S2834C7__8S2834C14__7S2834C1[3]),  3,3},
  {&(_tg__ZTV8S2834C107S2834C5__8S2834C14__7S2834C1[3]),  3,3},
  {&(_tg__ZTV8S2834C14__7S2834C1[11]),  11,12},
  {&(_tg__ZTV8S2834C11__8S2834C14__7S2834C1[5]),  5,5},
  {&(_tg__ZTV8S2834C11__8S2834C14__7S2834C1[5]),  5,5},
  {&(_tg__ZTV7S2834C5__A1__7S2834C1[5]),  5,5},
  {&(_tg__ZTV7S2834C67S2834C5__A1__7S2834C1[4]),  4,4},
  {&(_tg__ZTV7S2834C7__7S2834C67S2834C5__A1__7S2834C1[3]),  3,3},
  {&(_tg__ZTV8S2834C107S2834C5__A3__7S2834C1[3]),  3,3},
  {&(_tg__ZTV7S2834C7__7S2834C5__A1__7S2834C1[3]),  3,3},
  {&(_tg__ZTV8S2834C10__7S2834C5__A1__7S2834C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2834C1[];
extern  VTBL_ENTRY _ZTV7S2834C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2834C1[];
Class_Descriptor cd_S2834C1 = {  "S2834C1", // class name
  bases_S2834C1, 30,
  &(vtc_S2834C1[0]), // expected_vtbl_contents
  &(vtt_S2834C1[0]), // expected_vtt_contents
  ABISELECT(232,152), // object size
  NSPAIRA(_ZTI7S2834C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2834C1),63, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2834C1),56, //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  S20494C3  : S3600C19 , S3600C29_nt {
};
//SIG(-1 S20494C3) C1{ BC2{ m} BC3{ m Fp}}



static void Test_S20494C3()
{
  extern Class_Descriptor cd_S20494C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20494C3, buf);
    S20494C3 &lv = *(new (buf) S20494C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20494C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20494C3)");
    check_base_class_offset(lv, (S3600C19*), 0, "S20494C3");
    check_base_class_offset(lv, (S3600C29_nt*), 0, "S20494C3");
    test_class_info(&lv, &cd_S20494C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20494C3(Test_S20494C3, "S20494C3", ABISELECT(8,4));

#else // __cplusplus

extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S20494C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3600C29_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 _ZTI8S20494C3[];
Class_Descriptor cd_S20494C3 = {  "S20494C3", // class name
  bases_S20494C3, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20494C3),ABISELECT(56,32), //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  S20494C6  : virtual S3600C29_nt , S3600C19 {
  ~S20494C6(); // tgen
  S20494C6(); // tgen
};
//SIG(-1 S20494C6) C1{ VBC2{ m Fp} BC3{ m}}


S20494C6 ::~S20494C6(){ note_dtor("S20494C6", this);} // tgen
S20494C6 ::S20494C6(){ note_ctor("S20494C6", this);} // tgen

static void Test_S20494C6()
{
  extern Class_Descriptor cd_S20494C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20494C6, buf);
    S20494C6 *dp, &lv = *(dp=new (buf) S20494C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20494C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20494C6)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20494C6");
    check_base_class_offset(lv, (S3600C19*), 0, "S20494C6");
    test_class_info(&lv, &cd_S20494C6);
    dp->~S20494C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20494C6(Test_S20494C6, "S20494C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20494C6C1Ev();
extern void _ZN8S20494C6D1Ev();
Name_Map name_map_S20494C6[] = {
  NSPAIR(_ZN8S20494C6C1Ev),
  NSPAIR(_ZN8S20494C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S20494C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S20494C6[];
static  VTBL_ENTRY vtc_S20494C6[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C6[0]),
};
extern VTBL_ENTRY _ZTV8S20494C6[];
static  VTT_ENTRY vtt_S20494C6[] = {
  {&(_ZTV8S20494C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20494C6[];
extern  VTBL_ENTRY _ZTV8S20494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C6[];
Class_Descriptor cd_S20494C6 = {  "S20494C6", // class name
  bases_S20494C6, 2,
  &(vtc_S20494C6[0]), // expected_vtbl_contents
  &(vtt_S20494C6[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20494C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20494C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20494C6),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  S20494C2  : virtual S20494C3 , virtual S20494C6 , S3600C29_nt {
  __tsi64 s20494c2f0[8];
  ~S20494C2(); // tgen
  S20494C2(); // tgen
};
//SIG(-1 S20494C2) C1{ VBC2{ BC3{ m} BC4{ m Fp}} VBC5{ VBC4 BC3} BC4 FL[8]}


S20494C2 ::~S20494C2(){ note_dtor("S20494C2", this);} // tgen
S20494C2 ::S20494C2(){ note_ctor("S20494C2", this);} // tgen

static void Test_S20494C2()
{
  extern Class_Descriptor cd_S20494C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,21)];
    init_test(&cd_S20494C2, buf);
    S20494C2 *dp, &lv = *(dp=new (buf) S20494C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,80), "sizeof(S20494C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20494C2)");
    check_base_class_offset(lv, (S3600C19*)(S20494C3*), ABISELECT(80,72), "S20494C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C3*), ABISELECT(80,72), "S20494C2");
    check_base_class_offset(lv, (S20494C3*), ABISELECT(80,72), "S20494C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C6*), ABISELECT(88,76), "S20494C2");
    check_base_class_offset(lv, (S3600C19*)(S20494C6*), 0, "S20494C2");
    check_base_class_offset(lv, (S20494C6*), 0, "S20494C2");
    /*is_ambiguous_... S20494C2::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20494C2");
    check_field_offset(lv, s20494c2f0, ABISELECT(16,8), "S20494C2.s20494c2f0");
    test_class_info(&lv, &cd_S20494C2);
    dp->~S20494C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20494C2(Test_S20494C2, "S20494C2", ABISELECT(96,80));

#else // __cplusplus

extern void _ZN8S20494C2C1Ev();
extern void _ZN8S20494C2D1Ev();
Name_Map name_map_S20494C2[] = {
  NSPAIR(_ZN8S20494C2C1Ev),
  NSPAIR(_ZN8S20494C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20494C3;
extern VTBL_ENTRY _ZTI8S20494C3[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20494C6;
extern VTBL_ENTRY _ZTI8S20494C6[];
extern  VTBL_ENTRY _ZTV8S20494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S20494C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S20494C3,    ABISELECT(80,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_S3600C29_nt,    ABISELECT(88,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20494C6,    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},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20494C2[];
static  VTBL_ENTRY vtc_S20494C2[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C2[0]),
};
extern VTBL_ENTRY _ZTV8S20494C2[];
static  VTBL_ENTRY _tg__ZTV8S20494C6__8S20494C2[] = {
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C6[0]),
};
static  VTT_ENTRY vtt_S20494C2[] = {
  {&(_ZTV8S20494C2[5]),  5,5},
  {&(_ZTV8S20494C2[5]),  5,5},
  {&(_tg__ZTV8S20494C6__8S20494C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20494C2[];
extern  VTBL_ENTRY _ZTV8S20494C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C2[];
Class_Descriptor cd_S20494C2 = {  "S20494C2", // class name
  bases_S20494C2, 7,
  &(vtc_S20494C2[0]), // expected_vtbl_contents
  &(vtt_S20494C2[0]), // expected_vtt_contents
  ABISELECT(96,80), // object size
  NSPAIRA(_ZTI8S20494C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20494C2),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20494C2),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  S20494C7  : virtual S20494C2 {
  short s20494c7f0;
  virtual  ~S20494C7(); // _ZN8S20494C7D2Ev
  S20494C7(); // tgen
};
//SIG(-1 S20494C7) C1{ VBC2{ VBC3{ BC4{ m} BC5{ m Fp}} VBC6{ VBC5 BC4} BC5 FL[8]} vd Fs}


 S20494C7 ::~S20494C7(){ note_dtor("S20494C7", this);}
S20494C7 ::S20494C7(){ note_ctor("S20494C7", this);} // tgen

static void Test_S20494C7()
{
  extern Class_Descriptor cd_S20494C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,23)];
    init_test(&cd_S20494C7, buf);
    S20494C7 *dp, &lv = *(dp=new (buf) S20494C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,88), "sizeof(S20494C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20494C7)");
    check_base_class_offset(lv, (S3600C19*)(S20494C3*), ABISELECT(96,80), "S20494C7");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C3*), ABISELECT(96,80), "S20494C7");
    check_base_class_offset(lv, (S20494C3*)(S20494C2*), ABISELECT(96,80), "S20494C7");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C6*), ABISELECT(104,84), "S20494C7");
    check_base_class_offset(lv, (S3600C19*)(S20494C6*), 0, "S20494C7");
    check_base_class_offset(lv, (S20494C6*)(S20494C2*), 0, "S20494C7");
    /*is_ambiguous_... S20494C2::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20494C2*), ABISELECT(24,12), "S20494C7");
    check_base_class_offset(lv, (S20494C2*), ABISELECT(16,8), "S20494C7");
    check_field_offset(lv, s20494c7f0, ABISELECT(8,4), "S20494C7.s20494c7f0");
    test_class_info(&lv, &cd_S20494C7);
    dp->~S20494C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20494C7(Test_S20494C7, "S20494C7", ABISELECT(112,88));

#else // __cplusplus

extern void _ZN8S20494C7C1Ev();
extern void _ZN8S20494C7D2Ev();
Name_Map name_map_S20494C7[] = {
  NSPAIR(_ZN8S20494C7C1Ev),
  NSPAIR(_ZN8S20494C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20494C3;
extern VTBL_ENTRY _ZTI8S20494C3[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20494C6;
extern VTBL_ENTRY _ZTI8S20494C6[];
extern  VTBL_ENTRY _ZTV8S20494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20494C2;
extern VTBL_ENTRY _ZTI8S20494C2[];
extern  VTBL_ENTRY _ZTV8S20494C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C2[];
static Base_Class bases_S20494C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(96,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
    2, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(96,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
    2, //immediately_derived
  0, 0},
  {&cd_S20494C3,    ABISELECT(96,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
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(104,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20494C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20494C2,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20494C7[];
extern void _ZN8S20494C7D1Ev();
extern void _ZN8S20494C7D0Ev();
static  VTBL_ENTRY vtc_S20494C7[] = {
  0,
  ABISELECT(96,80),
  ABISELECT(16,8),
  ABISELECT(104,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C7[0]),
  (VTBL_ENTRY)&_ZN8S20494C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20494C7D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20494C7[0]),
};
extern VTBL_ENTRY _ZTV8S20494C7[];
static  VTBL_ENTRY _tg__ZTV8S20494C2__8S20494C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C6__8S20494C2__8S20494C7[] = {
  ABISELECT(104,84),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20494C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C6__8S20494C7[] = {
  ABISELECT(104,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C6[0]),
};
static  VTT_ENTRY vtt_S20494C7[] = {
  {&(_ZTV8S20494C7[6]),  6,13},
  {&(_ZTV8S20494C7[13]),  13,13},
  {&(_ZTV8S20494C7[6]),  6,13},
  {&(_tg__ZTV8S20494C2__8S20494C7[5]),  5,5},
  {&(_tg__ZTV8S20494C6__8S20494C2__8S20494C7[3]),  3,3},
  {&(_tg__ZTV8S20494C6__8S20494C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20494C7[];
extern  VTBL_ENTRY _ZTV8S20494C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C7[];
Class_Descriptor cd_S20494C7 = {  "S20494C7", // class name
  bases_S20494C7, 8,
  &(vtc_S20494C7[0]), // expected_vtbl_contents
  &(vtt_S20494C7[0]), // expected_vtt_contents
  ABISELECT(112,88), // object size
  NSPAIRA(_ZTI8S20494C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20494C7),13, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20494C7),6, //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  S20494C13  : S3600C29_nt , virtual S3600C19 {
  ::S19426C9_nt s20494c13f0;
  ~S20494C13(); // tgen
  S20494C13(); // tgen
};
//SIG(-1 S20494C13) C1{ BC2{ m Fp} VBC3{ m} FU4{ m}}


S20494C13 ::~S20494C13(){ note_dtor("S20494C13", this);} // tgen
S20494C13 ::S20494C13(){ note_ctor("S20494C13", this);} // tgen

static void Test_S20494C13()
{
  extern Class_Descriptor cd_S20494C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20494C13, buf);
    S20494C13 *dp, &lv = *(dp=new (buf) S20494C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20494C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20494C13)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20494C13");
    check_base_class_offset(lv, (S3600C19*), 0, "S20494C13");
    check_field_offset(lv, s20494c13f0, ABISELECT(16,8), "S20494C13.s20494c13f0");
    test_class_info(&lv, &cd_S20494C13);
    dp->~S20494C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20494C13(Test_S20494C13, "S20494C13", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S20494C13C1Ev();
extern void _ZN9S20494C13D1Ev();
Name_Map name_map_S20494C13[] = {
  NSPAIR(_ZN9S20494C13C1Ev),
  NSPAIR(_ZN9S20494C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S20494C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S20494C13[];
static  VTBL_ENTRY vtc_S20494C13[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C13[0]),
};
extern VTBL_ENTRY _ZTV9S20494C13[];
static  VTT_ENTRY vtt_S20494C13[] = {
  {&(_ZTV9S20494C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20494C13[];
extern  VTBL_ENTRY _ZTV9S20494C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C13[];
Class_Descriptor cd_S20494C13 = {  "S20494C13", // class name
  bases_S20494C13, 2,
  &(vtc_S20494C13[0]), // expected_vtbl_contents
  &(vtt_S20494C13[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S20494C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20494C13),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20494C13),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  S20494C12  : virtual S3600C19 , virtual S20494C13 {
  int s20494c12f0;
  ~S20494C12(); // tgen
  S20494C12(); // tgen
};
//SIG(-1 S20494C12) C1{ VBC2{ m} VBC3{ BC4{ m Fp} VBC2 FU5{ m}} Fi}


S20494C12 ::~S20494C12(){ note_dtor("S20494C12", this);} // tgen
S20494C12 ::S20494C12(){ note_ctor("S20494C12", this);} // tgen

static void Test_S20494C12()
{
  extern Class_Descriptor cd_S20494C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20494C12, buf);
    S20494C12 *dp, &lv = *(dp=new (buf) S20494C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20494C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20494C12)");
    check_base_class_offset(lv, (S3600C19*), 0, "S20494C12");
    check_base_class_offset(lv, (S3600C19*)(S20494C13*), 0, "S20494C12");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C13*), ABISELECT(24,12), "S20494C12");
    check_base_class_offset(lv, (S20494C13*), ABISELECT(16,8), "S20494C12");
    check_field_offset(lv, s20494c12f0, ABISELECT(8,4), "S20494C12.s20494c12f0");
    test_class_info(&lv, &cd_S20494C12);
    dp->~S20494C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20494C12(Test_S20494C12, "S20494C12", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S20494C12C1Ev();
extern void _ZN9S20494C12D1Ev();
Name_Map name_map_S20494C12[] = {
  NSPAIR(_ZN9S20494C12C1Ev),
  NSPAIR(_ZN9S20494C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20494C13;
extern VTBL_ENTRY _ZTI9S20494C13[];
extern  VTBL_ENTRY _ZTV9S20494C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C13[];
static Base_Class bases_S20494C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20494C13,    ABISELECT(16,8), //bcp->offset
    4, //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 _ZTI9S20494C12[];
static  VTBL_ENTRY vtc_S20494C12[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C12[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20494C12[0]),
};
extern VTBL_ENTRY _ZTV9S20494C12[];
static  VTBL_ENTRY _tg__ZTV9S20494C13__9S20494C12[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C13[0]),
};
static  VTT_ENTRY vtt_S20494C12[] = {
  {&(_ZTV9S20494C12[4]),  4,7},
  {&(_ZTV9S20494C12[7]),  7,7},
  {&(_tg__ZTV9S20494C13__9S20494C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20494C12[];
extern  VTBL_ENTRY _ZTV9S20494C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C12[];
Class_Descriptor cd_S20494C12 = {  "S20494C12", // class name
  bases_S20494C12, 3,
  &(vtc_S20494C12[0]), // expected_vtbl_contents
  &(vtt_S20494C12[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S20494C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20494C12),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20494C12),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  S20494C11  : S20494C12 , S20494C6 {
  ::S3600C19 s20494c11f0;
  ~S20494C11(); // tgen
  S20494C11(); // tgen
};
//SIG(-1 S20494C11) C1{ BC2{ VBC3{ m} VBC4{ BC5{ m Fp} VBC3 FU6{ m}} Fi} BC7{ VBC5 BC3} FC3}


S20494C11 ::~S20494C11(){ note_dtor("S20494C11", this);} // tgen
S20494C11 ::S20494C11(){ note_ctor("S20494C11", this);} // tgen

static void Test_S20494C11()
{
  extern Class_Descriptor cd_S20494C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20494C11, buf);
    S20494C11 *dp, &lv = *(dp=new (buf) S20494C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20494C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20494C11)");
    check_base_class_offset(lv, (S3600C19*)(S20494C12*), 0, "S20494C11");
    check_base_class_offset(lv, (S3600C19*)(S20494C13*), 0, "S20494C11");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C13*), ABISELECT(40,20), "S20494C11");
    check_base_class_offset(lv, (S20494C13*)(S20494C12*), ABISELECT(32,16), "S20494C11");
    check_base_class_offset(lv, (S20494C12*), 0, "S20494C11");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C6*), ABISELECT(56,28), "S20494C11");
    check_base_class_offset(lv, (S3600C19*)(S20494C6*), ABISELECT(16,8), "S20494C11");
    check_base_class_offset(lv, (S20494C6*), ABISELECT(16,8), "S20494C11");
    check_field_offset(lv, s20494c11f0, ABISELECT(24,12), "S20494C11.s20494c11f0");
    test_class_info(&lv, &cd_S20494C11);
    dp->~S20494C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20494C11(Test_S20494C11, "S20494C11", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S20494C11C1Ev();
extern void _ZN9S20494C11D1Ev();
Name_Map name_map_S20494C11[] = {
  NSPAIR(_ZN9S20494C11C1Ev),
  NSPAIR(_ZN9S20494C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20494C13;
extern VTBL_ENTRY _ZTI9S20494C13[];
extern  VTBL_ENTRY _ZTV9S20494C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C13[];
extern Class_Descriptor cd_S20494C12;
extern VTBL_ENTRY _ZTI9S20494C12[];
extern  VTBL_ENTRY _ZTV9S20494C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C12[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20494C6;
extern VTBL_ENTRY _ZTI8S20494C6[];
extern  VTBL_ENTRY _ZTV8S20494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C6[];
static Base_Class bases_S20494C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20494C13,    ABISELECT(32,16), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20494C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C29_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S20494C6,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI9S20494C11[];
static  VTBL_ENTRY vtc_S20494C11[] = {
  ABISELECT(56,28),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C11[0]),
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20494C11[0]),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20494C11[0]),
};
extern VTBL_ENTRY _ZTV9S20494C11[];
static  VTBL_ENTRY _tg__ZTV9S20494C12__9S20494C11[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__9S20494C12__9S20494C11[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20494C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C6__9S20494C11[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__9S20494C11[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C13[0]),
};
static  VTT_ENTRY vtt_S20494C11[] = {
  {&(_ZTV9S20494C11[5]),  5,11},
  {&(_tg__ZTV9S20494C12__9S20494C11[4]),  4,4},
  {&(_tg__ZTV9S20494C13__9S20494C12__9S20494C11[3]),  3,3},
  {&(_tg__ZTV8S20494C6__9S20494C11[3]),  3,3},
  {&(_ZTV9S20494C11[11]),  11,11},
  {&(_ZTV9S20494C11[8]),  8,11},
  {&(_tg__ZTV9S20494C13__9S20494C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20494C11[];
extern  VTBL_ENTRY _ZTV9S20494C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C11[];
Class_Descriptor cd_S20494C11 = {  "S20494C11", // class name
  bases_S20494C11, 7,
  &(vtc_S20494C11[0]), // expected_vtbl_contents
  &(vtt_S20494C11[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S20494C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20494C11),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20494C11),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  S20494C10  : virtual S3600C19 , S20494C11 , S20494C6 , virtual S20494C2 {
  virtual  ~S20494C10(); // _ZN9S20494C10D2Ev
  S20494C10(); // tgen
};
//SIG(-1 S20494C10) C1{ VBC2{ m} BC3{ BC4{ VBC2 VBC5{ BC6{ m Fp} VBC2 FU7{ m}} Fi} BC8{ VBC6 BC2} FC2} BC8 VBC9{ VBC10{ BC2 BC6} VBC8 BC6 FL[8]} vd}


 S20494C10 ::~S20494C10(){ note_dtor("S20494C10", this);}
S20494C10 ::S20494C10(){ note_ctor("S20494C10", this);} // tgen

static void Test_S20494C10()
{
  extern Class_Descriptor cd_S20494C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S20494C10, buf);
    S20494C10 *dp, &lv = *(dp=new (buf) S20494C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20494C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20494C10)");
    /*is_ambiguous_... S20494C10::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), 0, "S20494C10");
    check_base_class_offset(lv, (S3600C19*)(S20494C12*)(S20494C11*), 0, "S20494C10");
    check_base_class_offset(lv, (S3600C19*)(S20494C13*), 0, "S20494C10");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C13*), ABISELECT(48,24), "S20494C10");
    check_base_class_offset(lv, (S20494C13*)(S20494C12*)(S20494C11*), ABISELECT(40,20), "S20494C10");
    check_base_class_offset(lv, (S20494C12*)(S20494C11*), 0, "S20494C10");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C6*)(S20494C11*), ABISELECT(64,32), "S20494C10");
    /*is_ambiguous_... S20494C10::S20494C6 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20494C6*), ABISELECT(64,32), "S20494C10");
    /*is_ambiguous_... S20494C10::S20494C6 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20494C6*), ABISELECT(64,32), "S20494C10");
    check_base_class_offset(lv, (S3600C19*)(S20494C6*)(S20494C11*), ABISELECT(16,8), "S20494C10");
    check_base_class_offset(lv, (S20494C6*)(S20494C11*), ABISELECT(16,8), "S20494C10");
    check_base_class_offset(lv, (S20494C11*), 0, "S20494C10");
    /*is_ambiguous_... S20494C10::S20494C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20494C6*), ABISELECT(32,16), "S20494C10");
    /*is_ambiguous_... S20494C10::S20494C6 */ AMB_check_base_class_offset(lv, (S20494C6*), ABISELECT(32,16), "S20494C10");
    check_base_class_offset(lv, (S3600C19*)(S20494C3*), ABISELECT(152,108), "S20494C10");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C3*), ABISELECT(152,108), "S20494C10");
    check_base_class_offset(lv, (S20494C3*)(S20494C2*), ABISELECT(152,108), "S20494C10");
    /*is_ambiguous_... S20494C10::S20494C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20494C6*), ABISELECT(72,36), "S20494C10");
    check_base_class_offset(lv, (S20494C6*)(S20494C2*), ABISELECT(72,36), "S20494C10");
    /*is_ambiguous_... S20494C2::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20494C2*), ABISELECT(80,40), "S20494C10");
    check_base_class_offset(lv, (S20494C2*), ABISELECT(72,36), "S20494C10");
    test_class_info(&lv, &cd_S20494C10);
    dp->~S20494C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20494C10(Test_S20494C10, "S20494C10", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN9S20494C10C1Ev();
extern void _ZN9S20494C10D2Ev();
Name_Map name_map_S20494C10[] = {
  NSPAIR(_ZN9S20494C10C1Ev),
  NSPAIR(_ZN9S20494C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20494C13;
extern VTBL_ENTRY _ZTI9S20494C13[];
extern  VTBL_ENTRY _ZTV9S20494C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C13[];
extern Class_Descriptor cd_S20494C12;
extern VTBL_ENTRY _ZTI9S20494C12[];
extern  VTBL_ENTRY _ZTV9S20494C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C12[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20494C6;
extern VTBL_ENTRY _ZTI8S20494C6[];
extern  VTBL_ENTRY _ZTV8S20494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C6[];
extern Class_Descriptor cd_S20494C11;
extern VTBL_ENTRY _ZTI9S20494C11[];
extern  VTBL_ENTRY _ZTV9S20494C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C11[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20494C6;
extern VTBL_ENTRY _ZTI8S20494C6[];
extern  VTBL_ENTRY _ZTV8S20494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C6[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20494C3;
extern VTBL_ENTRY _ZTI8S20494C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20494C6;
extern VTBL_ENTRY _ZTI8S20494C6[];
extern  VTBL_ENTRY _ZTV8S20494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20494C2;
extern VTBL_ENTRY _ZTI8S20494C2[];
extern  VTBL_ENTRY _ZTV8S20494C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C2[];
static Base_Class bases_S20494C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20494C13,    ABISELECT(40,20), //bcp->offset
    16, //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
    3, //immediately_derived
  0, 1},
  {&cd_S20494C12,    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
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S20494C6,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20494C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20494C6,    ABISELECT(32,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20494C3,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20494C6,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20494C2,    ABISELECT(72,36), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20494C10[];
extern void _ZN9S20494C10D1Ev();
extern void _ZN9S20494C10D0Ev();
static  VTBL_ENTRY vtc_S20494C10[] = {
  ABISELECT(72,36),
  ABISELECT(152,108),
  ABISELECT(72,36),
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C10[0]),
  (VTBL_ENTRY)&_ZN9S20494C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20494C10D0Ev,
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20494C10[0]),
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20494C10[0]),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20494C10[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S20494C10[0]),
};
extern VTBL_ENTRY _ZTV9S20494C10[];
static  VTBL_ENTRY _tg__ZTV9S20494C11__9S20494C10[] = {
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C129S20494C11__9S20494C10[] = {
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__9S20494C129S20494C11__9S20494C10[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20494C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C69S20494C11__9S20494C10[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__9S20494C11__9S20494C10[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20494C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C6__9S20494C11__9S20494C10[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20494C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C6__A__9S20494C10[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__9S20494C10[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C2__9S20494C10[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C6__A2__9S20494C10[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C6[0]),
};
static  VTT_ENTRY vtt_S20494C10[] = {
  {&(_ZTV9S20494C10[8]),  8,24},
  {&(_tg__ZTV9S20494C11__9S20494C10[5]),  5,5},
  {&(_tg__ZTV9S20494C129S20494C11__9S20494C10[4]),  4,4},
  {&(_tg__ZTV9S20494C13__9S20494C129S20494C11__9S20494C10[3]),  3,3},
  {&(_tg__ZTV8S20494C69S20494C11__9S20494C10[3]),  3,3},
  {&(_tg__ZTV9S20494C13__9S20494C11__9S20494C10[3]),  3,3},
  {&(_tg__ZTV8S20494C6__9S20494C11__9S20494C10[3]),  3,3},
  {&(_tg__ZTV8S20494C6__A__9S20494C10[3]),  3,3},
  {&(_ZTV9S20494C10[19]),  19,24},
  {&(_ZTV9S20494C10[13]),  13,24},
  {&(_ZTV9S20494C10[16]),  16,24},
  {&(_ZTV9S20494C10[24]),  24,24},
  {&(_ZTV9S20494C10[24]),  24,24},
  {&(_tg__ZTV9S20494C13__9S20494C10[3]),  3,3},
  {&(_tg__ZTV8S20494C2__9S20494C10[5]),  5,5},
  {&(_tg__ZTV8S20494C2__9S20494C10[5]),  5,5},
  {&(_tg__ZTV8S20494C6__A2__9S20494C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20494C10[];
extern  VTBL_ENTRY _ZTV9S20494C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C10[];
Class_Descriptor cd_S20494C10 = {  "S20494C10", // class name
  bases_S20494C10, 17,
  &(vtc_S20494C10[0]), // expected_vtbl_contents
  &(vtt_S20494C10[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI9S20494C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20494C10),24, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20494C10),17, //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  S20494C15  : virtual S3600C29_nt {
  virtual  ~S20494C15(); // _ZN9S20494C15D2Ev
  S20494C15(); // tgen
};
//SIG(-1 S20494C15) C1{ VBC2{ m Fp} vd}


 S20494C15 ::~S20494C15(){ note_dtor("S20494C15", this);}
S20494C15 ::S20494C15(){ note_ctor("S20494C15", this);} // tgen

static void Test_S20494C15()
{
  extern Class_Descriptor cd_S20494C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20494C15, buf);
    S20494C15 *dp, &lv = *(dp=new (buf) S20494C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20494C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20494C15)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20494C15");
    test_class_info(&lv, &cd_S20494C15);
    dp->~S20494C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20494C15(Test_S20494C15, "S20494C15", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S20494C15C1Ev();
extern void _ZN9S20494C15D2Ev();
Name_Map name_map_S20494C15[] = {
  NSPAIR(_ZN9S20494C15C1Ev),
  NSPAIR(_ZN9S20494C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S20494C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20494C15[];
extern void _ZN9S20494C15D1Ev();
extern void _ZN9S20494C15D0Ev();
static  VTBL_ENTRY vtc_S20494C15[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C15[0]),
  (VTBL_ENTRY)&_ZN9S20494C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20494C15D0Ev,
};
extern VTBL_ENTRY _ZTV9S20494C15[];
static  VTT_ENTRY vtt_S20494C15[] = {
  {&(_ZTV9S20494C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20494C15[];
extern  VTBL_ENTRY _ZTV9S20494C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C15[];
Class_Descriptor cd_S20494C15 = {  "S20494C15", // class name
  bases_S20494C15, 1,
  &(vtc_S20494C15[0]), // expected_vtbl_contents
  &(vtt_S20494C15[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S20494C15),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20494C15),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20494C15),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  S20494C9  : S3600C19 , S20494C10 , S20494C15 {
  virtual  ~S20494C9(); // _ZN8S20494C9D2Ev
  S20494C9(); // tgen
};
//SIG(-1 S20494C9) C1{ BC2{ m} BC3{ VBC2 BC4{ BC5{ VBC2 VBC6{ BC7{ m Fp} VBC2 FU8{ m}} Fi} BC9{ VBC7 BC2} FC2} BC9 VBC10{ VBC11{ BC2 BC7} VBC9 BC7 FL[8]} vd} BC12{ VBC7 vd} vd}


 S20494C9 ::~S20494C9(){ note_dtor("S20494C9", this);}
S20494C9 ::S20494C9(){ note_ctor("S20494C9", this);} // tgen

static void Test_S20494C9()
{
  extern Class_Descriptor cd_S20494C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,30)];
    init_test(&cd_S20494C9, buf);
    S20494C9 *dp, &lv = *(dp=new (buf) S20494C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,116), "sizeof(S20494C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20494C9)");
    /*is_ambiguous_... S20494C9::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), 0, "S20494C9");
    /*is_ambiguous_... S20494C10::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20494C10*), ABISELECT(48,24), "S20494C9");
    check_base_class_offset(lv, (S3600C19*)(S20494C12*)(S20494C11*)(S20494C10*), ABISELECT(48,24), "S20494C9");
    check_base_class_offset(lv, (S3600C19*)(S20494C13*), ABISELECT(48,24), "S20494C9");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C13*), ABISELECT(56,28), "S20494C9");
    check_base_class_offset(lv, (S20494C13*)(S20494C12*)(S20494C11*)(S20494C10*), ABISELECT(48,24), "S20494C9");
    check_base_class_offset(lv, (S20494C12*)(S20494C11*)(S20494C10*), 0, "S20494C9");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C6*)(S20494C11*)(S20494C10*), ABISELECT(72,36), "S20494C9");
    /*is_ambiguous_... S20494C10::S20494C6 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20494C6*)(S20494C10*), ABISELECT(72,36), "S20494C9");
    /*is_ambiguous_... S20494C9::S20494C6 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20494C6*), ABISELECT(72,36), "S20494C9");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C15*), ABISELECT(72,36), "S20494C9");
    check_base_class_offset(lv, (S3600C19*)(S20494C6*)(S20494C11*)(S20494C10*), ABISELECT(16,8), "S20494C9");
    check_base_class_offset(lv, (S20494C6*)(S20494C11*)(S20494C10*), ABISELECT(16,8), "S20494C9");
    check_base_class_offset(lv, (S20494C11*)(S20494C10*), 0, "S20494C9");
    /*is_ambiguous_... S20494C10::S20494C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20494C6*)(S20494C10*), ABISELECT(32,16), "S20494C9");
    /*is_ambiguous_... S20494C10::S20494C6 */ AMB_check_base_class_offset(lv, (S20494C6*)(S20494C10*), ABISELECT(32,16), "S20494C9");
    check_base_class_offset(lv, (S3600C19*)(S20494C3*), ABISELECT(160,112), "S20494C9");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C3*), ABISELECT(160,112), "S20494C9");
    check_base_class_offset(lv, (S20494C3*)(S20494C2*), ABISELECT(160,112), "S20494C9");
    /*is_ambiguous_... S20494C9::S20494C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20494C6*), ABISELECT(80,40), "S20494C9");
    check_base_class_offset(lv, (S20494C6*)(S20494C2*), ABISELECT(80,40), "S20494C9");
    /*is_ambiguous_... S20494C2::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20494C2*), ABISELECT(88,44), "S20494C9");
    check_base_class_offset(lv, (S20494C2*)(S20494C10*), ABISELECT(80,40), "S20494C9");
    check_base_class_offset(lv, (S20494C10*), 0, "S20494C9");
    check_base_class_offset(lv, (S20494C15*), ABISELECT(40,20), "S20494C9");
    test_class_info(&lv, &cd_S20494C9);
    dp->~S20494C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20494C9(Test_S20494C9, "S20494C9", ABISELECT(168,116));

#else // __cplusplus

extern void _ZN8S20494C9C1Ev();
extern void _ZN8S20494C9D2Ev();
Name_Map name_map_S20494C9[] = {
  NSPAIR(_ZN8S20494C9C1Ev),
  NSPAIR(_ZN8S20494C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20494C13;
extern VTBL_ENTRY _ZTI9S20494C13[];
extern  VTBL_ENTRY _ZTV9S20494C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C13[];
extern Class_Descriptor cd_S20494C12;
extern VTBL_ENTRY _ZTI9S20494C12[];
extern  VTBL_ENTRY _ZTV9S20494C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C12[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20494C6;
extern VTBL_ENTRY _ZTI8S20494C6[];
extern  VTBL_ENTRY _ZTV8S20494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C6[];
extern Class_Descriptor cd_S20494C11;
extern VTBL_ENTRY _ZTI9S20494C11[];
extern  VTBL_ENTRY _ZTV9S20494C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C11[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20494C6;
extern VTBL_ENTRY _ZTI8S20494C6[];
extern  VTBL_ENTRY _ZTV8S20494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C6[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20494C3;
extern VTBL_ENTRY _ZTI8S20494C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20494C6;
extern VTBL_ENTRY _ZTI8S20494C6[];
extern  VTBL_ENTRY _ZTV8S20494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20494C2;
extern VTBL_ENTRY _ZTI8S20494C2[];
extern  VTBL_ENTRY _ZTV8S20494C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C2[];
extern Class_Descriptor cd_S20494C10;
extern VTBL_ENTRY _ZTI9S20494C10[];
extern  VTBL_ENTRY _ZTV9S20494C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C10[];
extern Class_Descriptor cd_S20494C15;
extern VTBL_ENTRY _ZTI9S20494C15[];
extern  VTBL_ENTRY _ZTV9S20494C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C15[];
static Base_Class bases_S20494C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3600C19,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20494C13,    ABISELECT(48,24), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20494C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S20494C6,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20494C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20494C6,    ABISELECT(32,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(160,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
    13, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(160,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
    13, //immediately_derived
  0, 0},
  {&cd_S20494C3,    ABISELECT(160,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
    17, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20494C6,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20494C2,    ABISELECT(80,40), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20494C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20494C15,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20494C9[];
extern void _ZN8S20494C9D1Ev();
extern void _ZN8S20494C9D0Ev();
extern void ABISELECT(_ZThn40_N8S20494C9D1Ev,_ZThn20_N8S20494C9D1Ev)();
extern void ABISELECT(_ZThn40_N8S20494C9D0Ev,_ZThn20_N8S20494C9D0Ev)();
static  VTBL_ENTRY vtc_S20494C9[] = {
  ABISELECT(80,40),
  ABISELECT(160,112),
  ABISELECT(80,40),
  ABISELECT(72,36),
  ABISELECT(48,24),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C9[0]),
  (VTBL_ENTRY)&_ZN8S20494C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20494C9D0Ev,
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20494C9[0]),
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20494C9[0]),
  ABISELECT(32,16),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20494C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S20494C9D1Ev,_ZThn20_N8S20494C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S20494C9D0Ev,_ZThn20_N8S20494C9D0Ev),
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20494C9[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S20494C9[0]),
};
extern VTBL_ENTRY _ZTV8S20494C9[];
extern void _ZN9S20494C10D1Ev();
extern void _ZN9S20494C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20494C10__8S20494C9[] = {
  ABISELECT(80,40),
  ABISELECT(160,112),
  ABISELECT(80,40),
  ABISELECT(72,36),
  ABISELECT(48,24),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C10[0]),
  (VTBL_ENTRY)&_ZN9S20494C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20494C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20494C119S20494C10__8S20494C9[] = {
  ABISELECT(72,36),
  ABISELECT(48,24),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C129S20494C119S20494C10__8S20494C9[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__9S20494C129S20494C119S20494C10__8S20494C9[] = {
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20494C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C69S20494C119S20494C10__8S20494C9[] = {
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__9S20494C119S20494C10__8S20494C9[] = {
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20494C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C6__9S20494C119S20494C10__8S20494C9[] = {
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20494C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C69S20494C10__A1__8S20494C9[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__9S20494C10__8S20494C9[] = {
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20494C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C69S20494C11__9S20494C10__8S20494C9[] = {
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20494C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C6__A__9S20494C10__8S20494C9[] = {
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20494C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C2__9S20494C10__8S20494C9[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S20494C10[0]),
};
extern void _ZN9S20494C15D1Ev();
extern void _ZN9S20494C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20494C15__8S20494C9[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C15[0]),
  (VTBL_ENTRY)&_ZN9S20494C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20494C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__8S20494C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C2__8S20494C9[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C6__A2__8S20494C9[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C6[0]),
};
static  VTT_ENTRY vtt_S20494C9[] = {
  {&(_ZTV8S20494C9[8]),  8,29},
  {&(_tg__ZTV9S20494C10__8S20494C9[8]),  8,10},
  {&(_tg__ZTV9S20494C119S20494C10__8S20494C9[5]),  5,5},
  {&(_tg__ZTV9S20494C129S20494C119S20494C10__8S20494C9[4]),  4,4},
  {&(_tg__ZTV9S20494C13__9S20494C129S20494C119S20494C10__8S20494C9[3]),  3,3},
  {&(_tg__ZTV8S20494C69S20494C119S20494C10__8S20494C9[3]),  3,3},
  {&(_tg__ZTV9S20494C13__9S20494C119S20494C10__8S20494C9[3]),  3,3},
  {&(_tg__ZTV8S20494C6__9S20494C119S20494C10__8S20494C9[3]),  3,3},
  {&(_tg__ZTV8S20494C69S20494C10__A1__8S20494C9[3]),  3,3},
  {&(_tg__ZTV9S20494C13__9S20494C10__8S20494C9[3]),  3,3},
  {&(_tg__ZTV8S20494C69S20494C11__9S20494C10__8S20494C9[3]),  3,3},
  {&(_tg__ZTV8S20494C6__A__9S20494C10__8S20494C9[3]),  3,3},
  {&(_tg__ZTV8S20494C2__9S20494C10__8S20494C9[5]),  5,5},
  {&(_tg__ZTV8S20494C2__9S20494C10__8S20494C9[5]),  5,5},
  {&(_tg__ZTV9S20494C15__8S20494C9[3]),  3,5},
  {&(_ZTV8S20494C9[24]),  24,29},
  {&(_ZTV8S20494C9[13]),  13,29},
  {&(_ZTV8S20494C9[16]),  16,29},
  {&(_ZTV8S20494C9[29]),  29,29},
  {&(_ZTV8S20494C9[29]),  29,29},
  {&(_ZTV8S20494C9[19]),  19,29},
  {&(_tg__ZTV9S20494C13__8S20494C9[3]),  3,3},
  {&(_tg__ZTV8S20494C2__8S20494C9[5]),  5,5},
  {&(_tg__ZTV8S20494C2__8S20494C9[5]),  5,5},
  {&(_tg__ZTV8S20494C6__A2__8S20494C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20494C9[];
extern  VTBL_ENTRY _ZTV8S20494C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C9[];
Class_Descriptor cd_S20494C9 = {  "S20494C9", // class name
  bases_S20494C9, 20,
  &(vtc_S20494C9[0]), // expected_vtbl_contents
  &(vtt_S20494C9[0]), // expected_vtt_contents
  ABISELECT(168,116), // object size
  NSPAIRA(_ZTI8S20494C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20494C9),29, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20494C9),25, //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  S20494C17  {
  virtual void  v1(); // _ZN9S20494C172v1Ev
  ~S20494C17(); // tgen
  S20494C17(); // tgen
};
//SIG(-1 S20494C17) C1{ v1}


void  S20494C17 ::v1(){vfunc_called(this, "_ZN9S20494C172v1Ev");}
S20494C17 ::~S20494C17(){ note_dtor("S20494C17", this);} // tgen
S20494C17 ::S20494C17(){ note_ctor("S20494C17", this);} // tgen

static void Test_S20494C17()
{
  extern Class_Descriptor cd_S20494C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20494C17, buf);
    S20494C17 *dp, &lv = *(dp=new (buf) S20494C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20494C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20494C17)");
    test_class_info(&lv, &cd_S20494C17);
    dp->~S20494C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20494C17(Test_S20494C17, "S20494C17", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S20494C17C1Ev();
extern void _ZN9S20494C17D1Ev();
Name_Map name_map_S20494C17[] = {
  NSPAIR(_ZN9S20494C17C1Ev),
  NSPAIR(_ZN9S20494C17D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20494C17[];
extern void _ZN9S20494C172v1Ev();
static  VTBL_ENTRY vtc_S20494C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C17[0]),
  (VTBL_ENTRY)&_ZN9S20494C172v1Ev,
};
extern VTBL_ENTRY _ZTI9S20494C17[];
extern  VTBL_ENTRY _ZTV9S20494C17[];
Class_Descriptor cd_S20494C17 = {  "S20494C17", // class name
  0,0,//no base classes
  &(vtc_S20494C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S20494C17),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20494C17),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  S20494C16  : virtual S20494C11 , virtual S20494C17 , virtual S20494C2 {
  ~S20494C16(); // tgen
  S20494C16(); // tgen
};
//SIG(-1 S20494C16) C1{ VBC2{ BC3{ VBC4{ m} VBC5{ BC6{ m Fp} VBC4 FU7{ m}} Fi} BC8{ VBC6 BC4} FC4} VBC9{ v1} VBC10{ VBC11{ BC4 BC6} VBC8 BC6 FL[8]}}


S20494C16 ::~S20494C16(){ note_dtor("S20494C16", this);} // tgen
S20494C16 ::S20494C16(){ note_ctor("S20494C16", this);} // tgen

static void Test_S20494C16()
{
  extern Class_Descriptor cd_S20494C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S20494C16, buf);
    S20494C16 *dp, &lv = *(dp=new (buf) S20494C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20494C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20494C16)");
    check_base_class_offset(lv, (S3600C19*)(S20494C12*)(S20494C11*), 0, "S20494C16");
    check_base_class_offset(lv, (S3600C19*)(S20494C13*), 0, "S20494C16");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C13*), ABISELECT(48,24), "S20494C16");
    check_base_class_offset(lv, (S20494C13*)(S20494C12*)(S20494C11*), ABISELECT(40,20), "S20494C16");
    check_base_class_offset(lv, (S20494C12*)(S20494C11*), ABISELECT(8,4), "S20494C16");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C6*)(S20494C11*), ABISELECT(64,32), "S20494C16");
    /*is_ambiguous_... S20494C16::S20494C6 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20494C6*), ABISELECT(64,32), "S20494C16");
    check_base_class_offset(lv, (S3600C19*)(S20494C6*)(S20494C11*), ABISELECT(24,12), "S20494C16");
    check_base_class_offset(lv, (S20494C6*)(S20494C11*), ABISELECT(24,12), "S20494C16");
    check_base_class_offset(lv, (S20494C11*), ABISELECT(8,4), "S20494C16");
    check_base_class_offset(lv, (S20494C17*), 0, "S20494C16");
    check_base_class_offset(lv, (S3600C19*)(S20494C3*), ABISELECT(152,108), "S20494C16");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C3*), ABISELECT(152,108), "S20494C16");
    check_base_class_offset(lv, (S20494C3*)(S20494C2*), ABISELECT(152,108), "S20494C16");
    /*is_ambiguous_... S20494C16::S20494C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20494C6*), ABISELECT(72,36), "S20494C16");
    check_base_class_offset(lv, (S20494C6*)(S20494C2*), ABISELECT(72,36), "S20494C16");
    /*is_ambiguous_... S20494C2::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20494C2*), ABISELECT(80,40), "S20494C16");
    check_base_class_offset(lv, (S20494C2*), ABISELECT(72,36), "S20494C16");
    test_class_info(&lv, &cd_S20494C16);
    dp->~S20494C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20494C16(Test_S20494C16, "S20494C16", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN9S20494C16C1Ev();
extern void _ZN9S20494C16D1Ev();
Name_Map name_map_S20494C16[] = {
  NSPAIR(_ZN9S20494C16C1Ev),
  NSPAIR(_ZN9S20494C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20494C13;
extern VTBL_ENTRY _ZTI9S20494C13[];
extern  VTBL_ENTRY _ZTV9S20494C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C13[];
extern Class_Descriptor cd_S20494C12;
extern VTBL_ENTRY _ZTI9S20494C12[];
extern  VTBL_ENTRY _ZTV9S20494C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C12[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20494C6;
extern VTBL_ENTRY _ZTI8S20494C6[];
extern  VTBL_ENTRY _ZTV8S20494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C6[];
extern Class_Descriptor cd_S20494C11;
extern VTBL_ENTRY _ZTI9S20494C11[];
extern  VTBL_ENTRY _ZTV9S20494C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C11[];
extern Class_Descriptor cd_S20494C17;
extern VTBL_ENTRY _ZTI9S20494C17[];
extern  VTBL_ENTRY _ZTV9S20494C17[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20494C3;
extern VTBL_ENTRY _ZTI8S20494C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20494C6;
extern VTBL_ENTRY _ZTI8S20494C6[];
extern  VTBL_ENTRY _ZTV8S20494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20494C2;
extern VTBL_ENTRY _ZTI8S20494C2[];
extern  VTBL_ENTRY _ZTV8S20494C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C2[];
static Base_Class bases_S20494C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20494C13,    ABISELECT(40,20), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20494C12,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S20494C6,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //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
    7, //immediately_derived
  0, 0},
  {&cd_S20494C11,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20494C17,    0, //bcp->offset
    -1, //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
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20494C3,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20494C6,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    15, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20494C2,    ABISELECT(72,36), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20494C16[];
extern void _ZN9S20494C172v1Ev();
static  VTBL_ENTRY vtc_S20494C16[] = {
  ABISELECT(72,36),
  ABISELECT(152,108),
  ABISELECT(72,36),
  0,
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C16[0]),
  (VTBL_ENTRY)&_ZN9S20494C172v1Ev,
  ABISELECT(56,28),
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20494C16[0]),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20494C16[0]),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20494C16[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S20494C16[0]),
};
extern VTBL_ENTRY _ZTV9S20494C16[];
static  VTBL_ENTRY _tg__ZTV9S20494C11__9S20494C16[] = {
  ABISELECT(56,28),
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C129S20494C11__9S20494C16[] = {
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__9S20494C129S20494C11__9S20494C16[] = {
  ABISELECT(-40,-20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20494C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C69S20494C11__9S20494C16[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__9S20494C11__9S20494C16[] = {
  ABISELECT(-40,-20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20494C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C6__9S20494C11__9S20494C16[] = {
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20494C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__9S20494C16[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C2__9S20494C16[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C6__A1__9S20494C16[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C6[0]),
};
static  VTT_ENTRY vtt_S20494C16[] = {
  {&(_ZTV9S20494C16[11]),  11,28},
  {&(_ZTV9S20494C16[17]),  17,28},
  {&(_ZTV9S20494C16[23]),  23,28},
  {&(_ZTV9S20494C16[20]),  20,28},
  {&(_ZTV9S20494C16[11]),  11,28},
  {&(_ZTV9S20494C16[28]),  28,28},
  {&(_ZTV9S20494C16[28]),  28,28},
  {&(_tg__ZTV9S20494C11__9S20494C16[5]),  5,5},
  {&(_tg__ZTV9S20494C129S20494C11__9S20494C16[4]),  4,4},
  {&(_tg__ZTV9S20494C13__9S20494C129S20494C11__9S20494C16[3]),  3,3},
  {&(_tg__ZTV8S20494C69S20494C11__9S20494C16[3]),  3,3},
  {&(_tg__ZTV9S20494C13__9S20494C11__9S20494C16[3]),  3,3},
  {&(_tg__ZTV8S20494C6__9S20494C11__9S20494C16[3]),  3,3},
  {&(_tg__ZTV9S20494C13__9S20494C16[3]),  3,3},
  {&(_tg__ZTV8S20494C2__9S20494C16[5]),  5,5},
  {&(_tg__ZTV8S20494C2__9S20494C16[5]),  5,5},
  {&(_tg__ZTV8S20494C6__A1__9S20494C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20494C16[];
extern  VTBL_ENTRY _ZTV9S20494C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C16[];
Class_Descriptor cd_S20494C16 = {  "S20494C16", // class name
  bases_S20494C16, 16,
  &(vtc_S20494C16[0]), // expected_vtbl_contents
  &(vtt_S20494C16[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI9S20494C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20494C16),28, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20494C16),17, //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  S20494C1  : virtual S20494C2 , virtual S20494C7 , virtual S3600C6_nt , virtual S20494C9 , virtual S20494C16 {
  ::S20494C15 s20494c1f0;
  int s20494c1f1;
  virtual  ~S20494C1(); // _ZN8S20494C1D2Ev
  S20494C1(); // tgen
};
//SIG(1 S20494C1) C1{ VBC2{ VBC3{ BC4{ m} BC5{ m Fp}} VBC6{ VBC5 BC4} BC5 FL[8]} VBC7{ VBC2 vd Fs} VBC8{ m} VBC9{ BC4 BC10{ VBC4 BC11{ BC12{ VBC4 VBC13{ BC5 VBC4 FU14{ m}} Fi} BC6 FC4} BC6 VBC2 vd} BC15{ VBC5 vd} vd} VBC16{ VBC11 VBC17{ v1} VBC2} vd FC15 Fi}


 S20494C1 ::~S20494C1(){ note_dtor("S20494C1", this);}
S20494C1 ::S20494C1(){ note_ctor("S20494C1", this);} // tgen

static void Test_S20494C1()
{
  extern Class_Descriptor cd_S20494C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,40)];
    init_test(&cd_S20494C1, buf);
    S20494C1 *dp, &lv = *(dp=new (buf) S20494C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,156), "sizeof(S20494C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20494C1)");
    check_base_class_offset(lv, (S3600C19*)(S20494C3*), ABISELECT(112,88), "S20494C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C3*), ABISELECT(112,88), "S20494C1");
    check_base_class_offset(lv, (S20494C3*)(S20494C2*), ABISELECT(112,88), "S20494C1");
    /*is_ambiguous_... S20494C1::S20494C6 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20494C6*), ABISELECT(120,92), "S20494C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C6*)(S20494C11*)(S20494C10*)(S20494C9*), ABISELECT(120,92), "S20494C1");
    /*is_ambiguous_... S20494C10::S20494C6 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20494C6*)(S20494C10*)(S20494C9*), ABISELECT(120,92), "S20494C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C15*)(S20494C9*), ABISELECT(120,92), "S20494C1");
    /*is_ambiguous_... S20494C1::S20494C11 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20494C6*)(S20494C11*), ABISELECT(120,92), "S20494C1");
    /*is_ambiguous_... S20494C1::S20494C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20494C6*), ABISELECT(32,16), "S20494C1");
    check_base_class_offset(lv, (S20494C6*)(S20494C2*), ABISELECT(32,16), "S20494C1");
    /*is_ambiguous_... S20494C2::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20494C2*), ABISELECT(40,20), "S20494C1");
    check_base_class_offset(lv, (S20494C2*), ABISELECT(32,16), "S20494C1");
    check_base_class_offset(lv, (S20494C2*)(S20494C7*), ABISELECT(32,16), "S20494C1");
    check_base_class_offset(lv, (S20494C2*)(S20494C10*)(S20494C9*), ABISELECT(32,16), "S20494C1");
    check_base_class_offset(lv, (S20494C2*)(S20494C16*), ABISELECT(32,16), "S20494C1");
    check_base_class_offset(lv, (S20494C7*), ABISELECT(128,96), "S20494C1");
    check_base_class_offset(lv, (S3600C6_nt*), 0, "S20494C1");
    /*is_ambiguous_... S20494C9::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20494C9*), ABISELECT(144,104), "S20494C1");
    /*is_ambiguous_... S20494C10::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20494C10*)(S20494C9*), 0, "S20494C1");
    check_base_class_offset(lv, (S3600C19*)(S20494C12*)(S20494C11*)(S20494C10*)(S20494C9*), 0, "S20494C1");
    check_base_class_offset(lv, (S3600C19*)(S20494C13*), 0, "S20494C1");
    /*is_ambiguous_... S20494C1::S20494C11 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20494C12*)(S20494C11*), 0, "S20494C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S20494C13*), ABISELECT(200,132), "S20494C1");
    check_base_class_offset(lv, (S20494C13*)(S20494C12*)(S20494C11*)(S20494C10*)(S20494C9*), ABISELECT(192,128), "S20494C1");
    /*is_ambiguous_... S20494C1::S20494C11 */ AMB_check_base_class_offset(lv, (S20494C13*)(S20494C12*)(S20494C11*), ABISELECT(192,128), "S20494C1");
    check_base_class_offset(lv, (S20494C12*)(S20494C11*)(S20494C10*)(S20494C9*), ABISELECT(144,104), "S20494C1");
    check_base_class_offset(lv, (S3600C19*)(S20494C6*)(S20494C11*)(S20494C10*)(S20494C9*), ABISELECT(160,112), "S20494C1");
    check_base_class_offset(lv, (S20494C6*)(S20494C11*)(S20494C10*)(S20494C9*), ABISELECT(160,112), "S20494C1");
    check_base_class_offset(lv, (S20494C11*)(S20494C10*)(S20494C9*), ABISELECT(144,104), "S20494C1");
    /*is_ambiguous_... S20494C10::S20494C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20494C6*)(S20494C10*)(S20494C9*), ABISELECT(176,120), "S20494C1");
    /*is_ambiguous_... S20494C10::S20494C6 */ AMB_check_base_class_offset(lv, (S20494C6*)(S20494C10*)(S20494C9*), ABISELECT(176,120), "S20494C1");
    check_base_class_offset(lv, (S20494C10*)(S20494C9*), ABISELECT(144,104), "S20494C1");
    check_base_class_offset(lv, (S20494C15*)(S20494C9*), ABISELECT(184,124), "S20494C1");
    check_base_class_offset(lv, (S20494C9*), ABISELECT(144,104), "S20494C1");
    /*is_ambiguous_... S20494C1::S20494C11 */ AMB_check_base_class_offset(lv, (S20494C12*)(S20494C11*), ABISELECT(216,140), "S20494C1");
    /*is_ambiguous_... S20494C1::S20494C11 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20494C6*)(S20494C11*), ABISELECT(232,148), "S20494C1");
    /*is_ambiguous_... S20494C1::S20494C11 */ AMB_check_base_class_offset(lv, (S20494C6*)(S20494C11*), ABISELECT(232,148), "S20494C1");
    check_base_class_offset(lv, (S20494C11*)(S20494C16*), ABISELECT(216,140), "S20494C1");
    check_base_class_offset(lv, (S20494C17*)(S20494C16*), 0, "S20494C1");
    check_base_class_offset(lv, (S20494C16*), 0, "S20494C1");
    check_field_offset(lv, s20494c1f0, ABISELECT(8,4), "S20494C1.s20494c1f0");
    check_field_offset(lv, s20494c1f1, ABISELECT(24,12), "S20494C1.s20494c1f1");
    test_class_info(&lv, &cd_S20494C1);
    dp->~S20494C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20494C1(Test_S20494C1, "S20494C1", ABISELECT(248,156));

#else // __cplusplus

extern void _ZN8S20494C1C1Ev();
extern void _ZN8S20494C1D2Ev();
Name_Map name_map_S20494C1[] = {
  NSPAIR(_ZN8S20494C1C1Ev),
  NSPAIR(_ZN8S20494C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20494C3;
extern VTBL_ENTRY _ZTI8S20494C3[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20494C6;
extern VTBL_ENTRY _ZTI8S20494C6[];
extern  VTBL_ENTRY _ZTV8S20494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20494C2;
extern VTBL_ENTRY _ZTI8S20494C2[];
extern  VTBL_ENTRY _ZTV8S20494C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C2[];
extern Class_Descriptor cd_S20494C7;
extern VTBL_ENTRY _ZTI8S20494C7[];
extern  VTBL_ENTRY _ZTV8S20494C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C7[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20494C13;
extern VTBL_ENTRY _ZTI9S20494C13[];
extern  VTBL_ENTRY _ZTV9S20494C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C13[];
extern Class_Descriptor cd_S20494C12;
extern VTBL_ENTRY _ZTI9S20494C12[];
extern  VTBL_ENTRY _ZTV9S20494C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C12[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20494C6;
extern VTBL_ENTRY _ZTI8S20494C6[];
extern  VTBL_ENTRY _ZTV8S20494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C6[];
extern Class_Descriptor cd_S20494C11;
extern VTBL_ENTRY _ZTI9S20494C11[];
extern  VTBL_ENTRY _ZTV9S20494C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C11[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20494C6;
extern VTBL_ENTRY _ZTI8S20494C6[];
extern  VTBL_ENTRY _ZTV8S20494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C6[];
extern Class_Descriptor cd_S20494C10;
extern VTBL_ENTRY _ZTI9S20494C10[];
extern  VTBL_ENTRY _ZTV9S20494C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C10[];
extern Class_Descriptor cd_S20494C15;
extern VTBL_ENTRY _ZTI9S20494C15[];
extern  VTBL_ENTRY _ZTV9S20494C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C15[];
extern Class_Descriptor cd_S20494C9;
extern VTBL_ENTRY _ZTI8S20494C9[];
extern  VTBL_ENTRY _ZTV8S20494C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C9[];
extern Class_Descriptor cd_S20494C12;
extern VTBL_ENTRY _ZTI9S20494C12[];
extern  VTBL_ENTRY _ZTV9S20494C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C12[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20494C6;
extern VTBL_ENTRY _ZTI8S20494C6[];
extern  VTBL_ENTRY _ZTV8S20494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C6[];
extern Class_Descriptor cd_S20494C11;
extern VTBL_ENTRY _ZTI9S20494C11[];
extern  VTBL_ENTRY _ZTV9S20494C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C11[];
extern Class_Descriptor cd_S20494C17;
extern VTBL_ENTRY _ZTI9S20494C17[];
extern  VTBL_ENTRY _ZTV9S20494C17[];
extern Class_Descriptor cd_S20494C16;
extern VTBL_ENTRY _ZTI9S20494C16[];
extern  VTBL_ENTRY _ZTV9S20494C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20494C16[];
static Base_Class bases_S20494C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(112,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_S3600C29_nt,    ABISELECT(112,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_S20494C3,    ABISELECT(112,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
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(120,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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
    5, //immediately_derived
  0, 0},
  {&cd_S20494C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20494C2,    ABISELECT(32,16), //bcp->offset
    18, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20494C7,    ABISELECT(128,96), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C6_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, 1},
  {&cd_S3600C19,    ABISELECT(144,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S3600C29_nt,    ABISELECT(200,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
    13, //immediately_derived
  0, 0},
  {&cd_S20494C13,    ABISELECT(192,128), //bcp->offset
    54, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20494C12,    ABISELECT(144,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(160,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
    16, //immediately_derived
  0, 0},
  {&cd_S20494C6,    ABISELECT(160,112), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20494C11,    ABISELECT(144,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(176,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
    19, //immediately_derived
  0, 0},
  {&cd_S20494C6,    ABISELECT(176,120), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20494C10,    ABISELECT(144,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20494C15,    ABISELECT(184,124), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20494C9,    ABISELECT(144,104), //bcp->offset
    32, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20494C12,    ABISELECT(216,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(232,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_S20494C6,    ABISELECT(232,148), //bcp->offset
    62, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20494C11,    ABISELECT(216,140), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S20494C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S20494C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20494C1[];
extern void _ZN9S20494C172v1Ev();
extern void _ZN8S20494C1D1Ev();
extern void _ZN8S20494C1D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S20494C1D1Ev,_ZTv0_n28_N8S20494C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S20494C1D1Ev,_ZThn96_N8S20494C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20494C1D0Ev,_ZTv0_n28_N8S20494C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S20494C1D0Ev,_ZThn96_N8S20494C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20494C1D1Ev,_ZTv0_n36_N8S20494C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S20494C1D1Ev,_ZThn104_N8S20494C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20494C1D0Ev,_ZTv0_n36_N8S20494C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S20494C1D0Ev,_ZThn104_N8S20494C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn40_n72_N8S20494C1D1Ev,_ZTvn20_n36_N8S20494C1D1Ev)();
extern void ABISELECT(_ZTvn40_n72_N8S20494C1D0Ev,_ZTvn20_n36_N8S20494C1D0Ev)();
static  VTBL_ENTRY vtc_S20494C1[] = {
  0,
  ABISELECT(144,104),
  0,
  ABISELECT(128,96),
  ABISELECT(32,16),
  ABISELECT(112,88),
  ABISELECT(32,16),
  0,
  ABISELECT(120,92),
  ABISELECT(192,128),
  0,
  ABISELECT(216,140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C1[0]),
  (VTBL_ENTRY)&_ZN9S20494C172v1Ev,
  (VTBL_ENTRY)&_ZN8S20494C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20494C1D0Ev,
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20494C1[0]),
  ABISELECT(-128,-96),
  ABISELECT(-96,-80),
  ABISELECT(-16,-8),
  ABISELECT(-96,-80),
  ABISELECT(-8,-4),
  ABISELECT(-128,-96),
  (VTBL_ENTRY)&(_ZTI8S20494C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20494C1D1Ev,_ZTv0_n28_N8S20494C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20494C1D0Ev,_ZTv0_n28_N8S20494C1D0Ev),
  ABISELECT(-144,-104),
  ABISELECT(-112,-88),
  ABISELECT(-32,-16),
  ABISELECT(-112,-88),
  ABISELECT(-24,-12),
  ABISELECT(48,24),
  ABISELECT(-144,-104),
  ABISELECT(-144,-104),
  (VTBL_ENTRY)&(_ZTI8S20494C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20494C1D1Ev,_ZTv0_n36_N8S20494C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20494C1D0Ev,_ZTv0_n36_N8S20494C1D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20494C1[0]),
  ABISELECT(-56,-28),
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI8S20494C1[0]),
  ABISELECT(-64,-32),
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI8S20494C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n72_N8S20494C1D1Ev,_ZTvn20_n36_N8S20494C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n72_N8S20494C1D0Ev,_ZTvn20_n36_N8S20494C1D0Ev),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI8S20494C1[0]),
  ABISELECT(-96,-48),
  ABISELECT(-24,-12),
  ABISELECT(-216,-140),
  ABISELECT(-216,-140),
  (VTBL_ENTRY)&(_ZTI8S20494C1[0]),
  ABISELECT(-112,-56),
  ABISELECT(-232,-148),
  (VTBL_ENTRY)&(_ZTI8S20494C1[0]),
};
extern VTBL_ENTRY _ZTV8S20494C1[];
static  VTBL_ENTRY _tg__ZTV8S20494C2__8S20494C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C6__8S20494C1[] = {
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C6[0]),
};
extern void _ZN8S20494C7D1Ev();
extern void _ZN8S20494C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20494C7__8S20494C1[] = {
  ABISELECT(-96,-80),
  ABISELECT(-16,-8),
  ABISELECT(-96,-80),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C7[0]),
  (VTBL_ENTRY)&_ZN8S20494C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20494C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20494C2__8S20494C7__8S20494C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(96,80),
  (VTBL_ENTRY)&(_ZTI8S20494C7[0]),
};
extern void _ZN8S20494C9D1Ev();
extern void _ZN8S20494C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20494C9__8S20494C1[] = {
  ABISELECT(-112,-88),
  ABISELECT(-32,-16),
  ABISELECT(-112,-88),
  ABISELECT(-24,-12),
  ABISELECT(48,24),
  ABISELECT(-144,-104),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C9[0]),
  (VTBL_ENTRY)&_ZN8S20494C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20494C9D0Ev,
};
extern void _ZN9S20494C10D1Ev();
extern void _ZN9S20494C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20494C108S20494C9__8S20494C1[] = {
  ABISELECT(-112,-88),
  ABISELECT(-32,-16),
  ABISELECT(-112,-88),
  ABISELECT(-24,-12),
  ABISELECT(48,24),
  ABISELECT(-144,-104),
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C10[0]),
  (VTBL_ENTRY)&_ZN9S20494C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20494C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20494C119S20494C108S20494C9__8S20494C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(48,24),
  ABISELECT(-144,-104),
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C129S20494C119S20494C108S20494C9__8S20494C1[] = {
  ABISELECT(48,24),
  ABISELECT(-144,-104),
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__9S20494C129S20494C119S20494C108S20494C9__8S20494C1[] = {
  ABISELECT(-192,-128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20494C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C69S20494C119S20494C108S20494C9__A1__8S20494C1[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__9S20494C119S20494C108S20494C9__8S20494C1[] = {
  ABISELECT(-192,-128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20494C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C6__9S20494C119S20494C108S20494C9__8S20494C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20494C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C69S20494C108S20494C9__A2__8S20494C1[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__9S20494C108S20494C9__8S20494C1[] = {
  ABISELECT(-192,-128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20494C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C69S20494C11__9S20494C108S20494C9__8S20494C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20494C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C6__A__9S20494C108S20494C9__8S20494C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20494C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C2__9S20494C108S20494C9__8S20494C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(112,88),
  (VTBL_ENTRY)&(_ZTI9S20494C10[0]),
};
extern void _ZN9S20494C15D1Ev();
extern void _ZN9S20494C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20494C158S20494C9__8S20494C1[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C15[0]),
  (VTBL_ENTRY)&_ZN9S20494C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20494C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__8S20494C9__8S20494C1[] = {
  ABISELECT(-192,-128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20494C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C69S20494C119S20494C10__8S20494C9__8S20494C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20494C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C69S20494C10__A1__8S20494C9__8S20494C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20494C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C2__8S20494C9__8S20494C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(112,88),
  (VTBL_ENTRY)&(_ZTI8S20494C9[0]),
};
extern void ABISELECT(_ZThn40_N8S20494C9D1Ev,_ZThn20_N8S20494C9D1Ev)();
extern void ABISELECT(_ZThn40_N8S20494C9D0Ev,_ZThn20_N8S20494C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20494C15__8S20494C9__8S20494C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20494C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S20494C9D1Ev,_ZThn20_N8S20494C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S20494C9D0Ev,_ZThn20_N8S20494C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__8S20494C1[] = {
  ABISELECT(-192,-128),
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C13[0]),
};
extern void _ZN9S20494C172v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20494C16__8S20494C1[] = {
  ABISELECT(32,16),
  ABISELECT(112,88),
  ABISELECT(32,16),
  0,
  ABISELECT(120,92),
  ABISELECT(192,128),
  0,
  ABISELECT(216,140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C16[0]),
  (VTBL_ENTRY)&_ZN9S20494C172v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20494C11__9S20494C16__8S20494C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(-24,-12),
  ABISELECT(-216,-140),
  ABISELECT(-216,-140),
  (VTBL_ENTRY)&(_ZTI9S20494C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__9S20494C16__8S20494C1[] = {
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI9S20494C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C69S20494C11__9S20494C16__8S20494C1[] = {
  ABISELECT(-112,-56),
  ABISELECT(-232,-148),
  (VTBL_ENTRY)&(_ZTI9S20494C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C2__9S20494C16__8S20494C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20494C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C11__A1__8S20494C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(-24,-12),
  ABISELECT(-216,-140),
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C129S20494C11__A1__8S20494C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-216,-140),
  0,
  (VTBL_ENTRY)&(_ZTI9S20494C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__9S20494C129S20494C11__A1__8S20494C1[] = {
  ABISELECT(-192,-128),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S20494C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C69S20494C11__A3__8S20494C1[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20494C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20494C13__9S20494C11__A1__8S20494C1[] = {
  ABISELECT(-192,-128),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S20494C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20494C6__9S20494C11__A1__8S20494C1[] = {
  ABISELECT(-112,-56),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20494C11[0]),
};
static  VTT_ENTRY vtt_S20494C1[] = {
  {&(_ZTV8S20494C1[15]),  15,65},
  {&(_ZTV8S20494C1[23]),  23,65},
  {&(_ZTV8S20494C1[23]),  23,65},
  {&(_ZTV8S20494C1[30]),  30,65},
  {&(_ZTV8S20494C1[41]),  41,65},
  {&(_ZTV8S20494C1[57]),  57,65},
  {&(_ZTV8S20494C1[46]),  46,65},
  {&(_ZTV8S20494C1[49]),  49,65},
  {&(_ZTV8S20494C1[52]),  52,65},
  {&(_ZTV8S20494C1[15]),  15,65},
  {&(_ZTV8S20494C1[62]),  62,65},
  {&(_ZTV8S20494C1[65]),  65,65},
  {&(_ZTV8S20494C1[15]),  15,65},
  {&(_tg__ZTV8S20494C2__8S20494C1[5]),  5,5},
  {&(_tg__ZTV8S20494C2__8S20494C1[5]),  5,5},
  {&(_tg__ZTV8S20494C6__8S20494C1[3]),  3,3},
  {&(_tg__ZTV8S20494C7__8S20494C1[6]),  6,8},
  {&(_tg__ZTV8S20494C2__8S20494C7__8S20494C1[5]),  5,5},
  {&(_tg__ZTV8S20494C2__8S20494C7__8S20494C1[5]),  5,5},
  {&(_tg__ZTV8S20494C9__8S20494C1[8]),  8,10},
  {&(_tg__ZTV9S20494C108S20494C9__8S20494C1[8]),  8,10},
  {&(_tg__ZTV9S20494C119S20494C108S20494C9__8S20494C1[5]),  5,5},
  {&(_tg__ZTV9S20494C129S20494C119S20494C108S20494C9__8S20494C1[4]),  4,4},
  {&(_tg__ZTV9S20494C13__9S20494C129S20494C119S20494C108S20494C9__8S20494C1[3]),  3,3},
  {&(_tg__ZTV8S20494C69S20494C119S20494C108S20494C9__A1__8S20494C1[3]),  3,3},
  {&(_tg__ZTV9S20494C13__9S20494C119S20494C108S20494C9__8S20494C1[3]),  3,3},
  {&(_tg__ZTV8S20494C6__9S20494C119S20494C108S20494C9__8S20494C1[3]),  3,3},
  {&(_tg__ZTV8S20494C69S20494C108S20494C9__A2__8S20494C1[3]),  3,3},
  {&(_tg__ZTV9S20494C13__9S20494C108S20494C9__8S20494C1[3]),  3,3},
  {&(_tg__ZTV8S20494C69S20494C11__9S20494C108S20494C9__8S20494C1[3]),  3,3},
  {&(_tg__ZTV8S20494C6__A__9S20494C108S20494C9__8S20494C1[3]),  3,3},
  {&(_tg__ZTV8S20494C2__9S20494C108S20494C9__8S20494C1[5]),  5,5},
  {&(_tg__ZTV8S20494C2__9S20494C108S20494C9__8S20494C1[5]),  5,5},
  {&(_tg__ZTV9S20494C158S20494C9__8S20494C1[3]),  3,5},
  {&(_tg__ZTV9S20494C13__8S20494C9__8S20494C1[3]),  3,3},
  {&(_tg__ZTV8S20494C69S20494C119S20494C10__8S20494C9__8S20494C1[3]),  3,3},
  {&(_tg__ZTV8S20494C69S20494C10__A1__8S20494C9__8S20494C1[3]),  3,3},
  {&(_tg__ZTV8S20494C2__8S20494C9__8S20494C1[5]),  5,5},
  {&(_tg__ZTV8S20494C2__8S20494C9__8S20494C1[5]),  5,5},
  {&(_tg__ZTV9S20494C15__8S20494C9__8S20494C1[3]),  3,5},
  {&(_tg__ZTV9S20494C13__8S20494C1[3]),  3,3},
  {&(_tg__ZTV9S20494C16__8S20494C1[11]),  11,12},
  {&(_tg__ZTV9S20494C11__9S20494C16__8S20494C1[5]),  5,5},
  {&(_tg__ZTV9S20494C13__9S20494C16__8S20494C1[3]),  3,3},
  {&(_tg__ZTV8S20494C69S20494C11__9S20494C16__8S20494C1[3]),  3,3},
  {&(_tg__ZTV9S20494C16__8S20494C1[11]),  11,12},
  {&(_tg__ZTV8S20494C2__9S20494C16__8S20494C1[5]),  5,5},
  {&(_tg__ZTV8S20494C2__9S20494C16__8S20494C1[5]),  5,5},
  {&(_tg__ZTV9S20494C11__A1__8S20494C1[5]),  5,5},
  {&(_tg__ZTV9S20494C129S20494C11__A1__8S20494C1[4]),  4,4},
  {&(_tg__ZTV9S20494C13__9S20494C129S20494C11__A1__8S20494C1[3]),  3,3},
  {&(_tg__ZTV8S20494C69S20494C11__A3__8S20494C1[3]),  3,3},
  {&(_tg__ZTV9S20494C13__9S20494C11__A1__8S20494C1[3]),  3,3},
  {&(_tg__ZTV8S20494C6__9S20494C11__A1__8S20494C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20494C1[];
extern  VTBL_ENTRY _ZTV8S20494C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20494C1[];
static VTBL_ENTRY alt_thunk_names91[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20494C1D0Ev,_ZTv0_n36_N8S20494C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20494C1D0Ev,_ZThn104_N8S20494C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20494C1D1Ev,_ZTv0_n36_N8S20494C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20494C1D1Ev,_ZThn104_N8S20494C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20494C1D0Ev,_ZTv0_n28_N8S20494C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20494C1D0Ev,_ZThn96_N8S20494C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20494C1D1Ev,_ZTv0_n28_N8S20494C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20494C1D1Ev,_ZThn96_N8S20494C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20494C1 = {  "S20494C1", // class name
  bases_S20494C1, 29,
  &(vtc_S20494C1[0]), // expected_vtbl_contents
  &(vtt_S20494C1[0]), // expected_vtt_contents
  ABISELECT(248,156), // object size
  NSPAIRA(_ZTI8S20494C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20494C1),65, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20494C1),54, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names91,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20493C3  : S3600C19 , S3600C29_nt {
};
//SIG(-1 S20493C3) C1{ BC2{ m} BC3{ m Fp}}



static void Test_S20493C3()
{
  extern Class_Descriptor cd_S20493C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20493C3, buf);
    S20493C3 &lv = *(new (buf) S20493C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20493C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20493C3)");
    check_base_class_offset(lv, (S3600C19*), 0, "S20493C3");
    check_base_class_offset(lv, (S3600C29_nt*), 0, "S20493C3");
    test_class_info(&lv, &cd_S20493C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20493C3(Test_S20493C3, "S20493C3", ABISELECT(8,4));

#else // __cplusplus

extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S20493C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3600C29_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 _ZTI8S20493C3[];
Class_Descriptor cd_S20493C3 = {  "S20493C3", // class name
  bases_S20493C3, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20493C3),ABISELECT(56,32), //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  S20493C6  : virtual S3600C29_nt , S3600C19 {
  ~S20493C6(); // tgen
  S20493C6(); // tgen
};
//SIG(-1 S20493C6) C1{ VBC2{ m Fp} BC3{ m}}


S20493C6 ::~S20493C6(){ note_dtor("S20493C6", this);} // tgen
S20493C6 ::S20493C6(){ note_ctor("S20493C6", this);} // tgen

static void Test_S20493C6()
{
  extern Class_Descriptor cd_S20493C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20493C6, buf);
    S20493C6 *dp, &lv = *(dp=new (buf) S20493C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20493C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20493C6)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20493C6");
    check_base_class_offset(lv, (S3600C19*), 0, "S20493C6");
    test_class_info(&lv, &cd_S20493C6);
    dp->~S20493C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20493C6(Test_S20493C6, "S20493C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20493C6C1Ev();
extern void _ZN8S20493C6D1Ev();
Name_Map name_map_S20493C6[] = {
  NSPAIR(_ZN8S20493C6C1Ev),
  NSPAIR(_ZN8S20493C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S20493C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S20493C6[];
static  VTBL_ENTRY vtc_S20493C6[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C6[0]),
};
extern VTBL_ENTRY _ZTV8S20493C6[];
static  VTT_ENTRY vtt_S20493C6[] = {
  {&(_ZTV8S20493C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20493C6[];
extern  VTBL_ENTRY _ZTV8S20493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C6[];
Class_Descriptor cd_S20493C6 = {  "S20493C6", // class name
  bases_S20493C6, 2,
  &(vtc_S20493C6[0]), // expected_vtbl_contents
  &(vtt_S20493C6[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20493C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20493C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20493C6),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  S20493C2  : virtual S20493C3 , virtual S20493C6 , S3600C29_nt {
  __tsi64 s20493c2f0[8];
  ~S20493C2(); // tgen
  S20493C2(); // tgen
};
//SIG(-1 S20493C2) C1{ VBC2{ BC3{ m} BC4{ m Fp}} VBC5{ VBC4 BC3} BC4 FL[8]}


S20493C2 ::~S20493C2(){ note_dtor("S20493C2", this);} // tgen
S20493C2 ::S20493C2(){ note_ctor("S20493C2", this);} // tgen

static void Test_S20493C2()
{
  extern Class_Descriptor cd_S20493C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,21)];
    init_test(&cd_S20493C2, buf);
    S20493C2 *dp, &lv = *(dp=new (buf) S20493C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,80), "sizeof(S20493C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20493C2)");
    check_base_class_offset(lv, (S3600C19*)(S20493C3*), ABISELECT(80,72), "S20493C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C3*), ABISELECT(80,72), "S20493C2");
    check_base_class_offset(lv, (S20493C3*), ABISELECT(80,72), "S20493C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C6*), ABISELECT(88,76), "S20493C2");
    check_base_class_offset(lv, (S3600C19*)(S20493C6*), 0, "S20493C2");
    check_base_class_offset(lv, (S20493C6*), 0, "S20493C2");
    /*is_ambiguous_... S20493C2::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20493C2");
    check_field_offset(lv, s20493c2f0, ABISELECT(16,8), "S20493C2.s20493c2f0");
    test_class_info(&lv, &cd_S20493C2);
    dp->~S20493C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20493C2(Test_S20493C2, "S20493C2", ABISELECT(96,80));

#else // __cplusplus

extern void _ZN8S20493C2C1Ev();
extern void _ZN8S20493C2D1Ev();
Name_Map name_map_S20493C2[] = {
  NSPAIR(_ZN8S20493C2C1Ev),
  NSPAIR(_ZN8S20493C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C3;
extern VTBL_ENTRY _ZTI8S20493C3[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20493C6;
extern VTBL_ENTRY _ZTI8S20493C6[];
extern  VTBL_ENTRY _ZTV8S20493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S20493C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S20493C3,    ABISELECT(80,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_S3600C29_nt,    ABISELECT(88,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20493C6,    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},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20493C2[];
static  VTBL_ENTRY vtc_S20493C2[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C2[0]),
};
extern VTBL_ENTRY _ZTV8S20493C2[];
static  VTBL_ENTRY _tg__ZTV8S20493C6__8S20493C2[] = {
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C6[0]),
};
static  VTT_ENTRY vtt_S20493C2[] = {
  {&(_ZTV8S20493C2[5]),  5,5},
  {&(_ZTV8S20493C2[5]),  5,5},
  {&(_tg__ZTV8S20493C6__8S20493C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20493C2[];
extern  VTBL_ENTRY _ZTV8S20493C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C2[];
Class_Descriptor cd_S20493C2 = {  "S20493C2", // class name
  bases_S20493C2, 7,
  &(vtc_S20493C2[0]), // expected_vtbl_contents
  &(vtt_S20493C2[0]), // expected_vtt_contents
  ABISELECT(96,80), // object size
  NSPAIRA(_ZTI8S20493C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20493C2),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20493C2),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  S20493C7  : virtual S20493C2 {
  short s20493c7f0;
  virtual  ~S20493C7(); // _ZN8S20493C7D2Ev
  S20493C7(); // tgen
};
//SIG(-1 S20493C7) C1{ VBC2{ VBC3{ BC4{ m} BC5{ m Fp}} VBC6{ VBC5 BC4} BC5 FL[8]} vd Fs}


 S20493C7 ::~S20493C7(){ note_dtor("S20493C7", this);}
S20493C7 ::S20493C7(){ note_ctor("S20493C7", this);} // tgen

static void Test_S20493C7()
{
  extern Class_Descriptor cd_S20493C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,23)];
    init_test(&cd_S20493C7, buf);
    S20493C7 *dp, &lv = *(dp=new (buf) S20493C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,88), "sizeof(S20493C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20493C7)");
    check_base_class_offset(lv, (S3600C19*)(S20493C3*), ABISELECT(96,80), "S20493C7");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C3*), ABISELECT(96,80), "S20493C7");
    check_base_class_offset(lv, (S20493C3*)(S20493C2*), ABISELECT(96,80), "S20493C7");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C6*), ABISELECT(104,84), "S20493C7");
    check_base_class_offset(lv, (S3600C19*)(S20493C6*), 0, "S20493C7");
    check_base_class_offset(lv, (S20493C6*)(S20493C2*), 0, "S20493C7");
    /*is_ambiguous_... S20493C2::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20493C2*), ABISELECT(24,12), "S20493C7");
    check_base_class_offset(lv, (S20493C2*), ABISELECT(16,8), "S20493C7");
    check_field_offset(lv, s20493c7f0, ABISELECT(8,4), "S20493C7.s20493c7f0");
    test_class_info(&lv, &cd_S20493C7);
    dp->~S20493C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20493C7(Test_S20493C7, "S20493C7", ABISELECT(112,88));

#else // __cplusplus

extern void _ZN8S20493C7C1Ev();
extern void _ZN8S20493C7D2Ev();
Name_Map name_map_S20493C7[] = {
  NSPAIR(_ZN8S20493C7C1Ev),
  NSPAIR(_ZN8S20493C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C3;
extern VTBL_ENTRY _ZTI8S20493C3[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20493C6;
extern VTBL_ENTRY _ZTI8S20493C6[];
extern  VTBL_ENTRY _ZTV8S20493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C2;
extern VTBL_ENTRY _ZTI8S20493C2[];
extern  VTBL_ENTRY _ZTV8S20493C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C2[];
static Base_Class bases_S20493C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(96,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
    2, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(96,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
    2, //immediately_derived
  0, 0},
  {&cd_S20493C3,    ABISELECT(96,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
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(104,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20493C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20493C2,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20493C7[];
extern void _ZN8S20493C7D1Ev();
extern void _ZN8S20493C7D0Ev();
static  VTBL_ENTRY vtc_S20493C7[] = {
  0,
  ABISELECT(96,80),
  ABISELECT(16,8),
  ABISELECT(104,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C7[0]),
  (VTBL_ENTRY)&_ZN8S20493C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20493C7D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20493C7[0]),
};
extern VTBL_ENTRY _ZTV8S20493C7[];
static  VTBL_ENTRY _tg__ZTV8S20493C2__8S20493C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C6__8S20493C2__8S20493C7[] = {
  ABISELECT(104,84),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20493C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C6__8S20493C7[] = {
  ABISELECT(104,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C6[0]),
};
static  VTT_ENTRY vtt_S20493C7[] = {
  {&(_ZTV8S20493C7[6]),  6,13},
  {&(_ZTV8S20493C7[13]),  13,13},
  {&(_ZTV8S20493C7[6]),  6,13},
  {&(_tg__ZTV8S20493C2__8S20493C7[5]),  5,5},
  {&(_tg__ZTV8S20493C6__8S20493C2__8S20493C7[3]),  3,3},
  {&(_tg__ZTV8S20493C6__8S20493C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20493C7[];
extern  VTBL_ENTRY _ZTV8S20493C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C7[];
Class_Descriptor cd_S20493C7 = {  "S20493C7", // class name
  bases_S20493C7, 8,
  &(vtc_S20493C7[0]), // expected_vtbl_contents
  &(vtt_S20493C7[0]), // expected_vtt_contents
  ABISELECT(112,88), // object size
  NSPAIRA(_ZTI8S20493C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20493C7),13, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20493C7),6, //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  S20493C13  : S3600C29_nt , virtual S3600C19 {
  ::S19426C9_nt s20493c13f0;
  ~S20493C13(); // tgen
  S20493C13(); // tgen
};
//SIG(-1 S20493C13) C1{ BC2{ m Fp} VBC3{ m} FU4{ m}}


S20493C13 ::~S20493C13(){ note_dtor("S20493C13", this);} // tgen
S20493C13 ::S20493C13(){ note_ctor("S20493C13", this);} // tgen

static void Test_S20493C13()
{
  extern Class_Descriptor cd_S20493C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20493C13, buf);
    S20493C13 *dp, &lv = *(dp=new (buf) S20493C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20493C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20493C13)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20493C13");
    check_base_class_offset(lv, (S3600C19*), 0, "S20493C13");
    check_field_offset(lv, s20493c13f0, ABISELECT(16,8), "S20493C13.s20493c13f0");
    test_class_info(&lv, &cd_S20493C13);
    dp->~S20493C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20493C13(Test_S20493C13, "S20493C13", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S20493C13C1Ev();
extern void _ZN9S20493C13D1Ev();
Name_Map name_map_S20493C13[] = {
  NSPAIR(_ZN9S20493C13C1Ev),
  NSPAIR(_ZN9S20493C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S20493C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S20493C13[];
static  VTBL_ENTRY vtc_S20493C13[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C13[0]),
};
extern VTBL_ENTRY _ZTV9S20493C13[];
static  VTT_ENTRY vtt_S20493C13[] = {
  {&(_ZTV9S20493C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20493C13[];
extern  VTBL_ENTRY _ZTV9S20493C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C13[];
Class_Descriptor cd_S20493C13 = {  "S20493C13", // class name
  bases_S20493C13, 2,
  &(vtc_S20493C13[0]), // expected_vtbl_contents
  &(vtt_S20493C13[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S20493C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20493C13),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20493C13),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  S20493C12  : virtual S3600C19 , virtual S20493C13 {
  int s20493c12f0;
  ~S20493C12(); // tgen
  S20493C12(); // tgen
};
//SIG(-1 S20493C12) C1{ VBC2{ m} VBC3{ BC4{ m Fp} VBC2 FU5{ m}} Fi}


S20493C12 ::~S20493C12(){ note_dtor("S20493C12", this);} // tgen
S20493C12 ::S20493C12(){ note_ctor("S20493C12", this);} // tgen

static void Test_S20493C12()
{
  extern Class_Descriptor cd_S20493C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20493C12, buf);
    S20493C12 *dp, &lv = *(dp=new (buf) S20493C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20493C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20493C12)");
    check_base_class_offset(lv, (S3600C19*), 0, "S20493C12");
    check_base_class_offset(lv, (S3600C19*)(S20493C13*), 0, "S20493C12");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C13*), ABISELECT(24,12), "S20493C12");
    check_base_class_offset(lv, (S20493C13*), ABISELECT(16,8), "S20493C12");
    check_field_offset(lv, s20493c12f0, ABISELECT(8,4), "S20493C12.s20493c12f0");
    test_class_info(&lv, &cd_S20493C12);
    dp->~S20493C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20493C12(Test_S20493C12, "S20493C12", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S20493C12C1Ev();
extern void _ZN9S20493C12D1Ev();
Name_Map name_map_S20493C12[] = {
  NSPAIR(_ZN9S20493C12C1Ev),
  NSPAIR(_ZN9S20493C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C13;
extern VTBL_ENTRY _ZTI9S20493C13[];
extern  VTBL_ENTRY _ZTV9S20493C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C13[];
static Base_Class bases_S20493C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20493C13,    ABISELECT(16,8), //bcp->offset
    4, //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 _ZTI9S20493C12[];
static  VTBL_ENTRY vtc_S20493C12[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C12[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20493C12[0]),
};
extern VTBL_ENTRY _ZTV9S20493C12[];
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C12[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C13[0]),
};
static  VTT_ENTRY vtt_S20493C12[] = {
  {&(_ZTV9S20493C12[4]),  4,7},
  {&(_ZTV9S20493C12[7]),  7,7},
  {&(_tg__ZTV9S20493C13__9S20493C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20493C12[];
extern  VTBL_ENTRY _ZTV9S20493C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C12[];
Class_Descriptor cd_S20493C12 = {  "S20493C12", // class name
  bases_S20493C12, 3,
  &(vtc_S20493C12[0]), // expected_vtbl_contents
  &(vtt_S20493C12[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S20493C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20493C12),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20493C12),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  S20493C11  : S20493C12 , S20493C6 {
  ::S3600C19 s20493c11f0;
  ~S20493C11(); // tgen
  S20493C11(); // tgen
};
//SIG(-1 S20493C11) C1{ BC2{ VBC3{ m} VBC4{ BC5{ m Fp} VBC3 FU6{ m}} Fi} BC7{ VBC5 BC3} FC3}


S20493C11 ::~S20493C11(){ note_dtor("S20493C11", this);} // tgen
S20493C11 ::S20493C11(){ note_ctor("S20493C11", this);} // tgen

static void Test_S20493C11()
{
  extern Class_Descriptor cd_S20493C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20493C11, buf);
    S20493C11 *dp, &lv = *(dp=new (buf) S20493C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20493C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20493C11)");
    check_base_class_offset(lv, (S3600C19*)(S20493C12*), 0, "S20493C11");
    check_base_class_offset(lv, (S3600C19*)(S20493C13*), 0, "S20493C11");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C13*), ABISELECT(40,20), "S20493C11");
    check_base_class_offset(lv, (S20493C13*)(S20493C12*), ABISELECT(32,16), "S20493C11");
    check_base_class_offset(lv, (S20493C12*), 0, "S20493C11");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C6*), ABISELECT(56,28), "S20493C11");
    check_base_class_offset(lv, (S3600C19*)(S20493C6*), ABISELECT(16,8), "S20493C11");
    check_base_class_offset(lv, (S20493C6*), ABISELECT(16,8), "S20493C11");
    check_field_offset(lv, s20493c11f0, ABISELECT(24,12), "S20493C11.s20493c11f0");
    test_class_info(&lv, &cd_S20493C11);
    dp->~S20493C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20493C11(Test_S20493C11, "S20493C11", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S20493C11C1Ev();
extern void _ZN9S20493C11D1Ev();
Name_Map name_map_S20493C11[] = {
  NSPAIR(_ZN9S20493C11C1Ev),
  NSPAIR(_ZN9S20493C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C13;
extern VTBL_ENTRY _ZTI9S20493C13[];
extern  VTBL_ENTRY _ZTV9S20493C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C13[];
extern Class_Descriptor cd_S20493C12;
extern VTBL_ENTRY _ZTI9S20493C12[];
extern  VTBL_ENTRY _ZTV9S20493C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C12[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20493C6;
extern VTBL_ENTRY _ZTI8S20493C6[];
extern  VTBL_ENTRY _ZTV8S20493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C6[];
static Base_Class bases_S20493C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20493C13,    ABISELECT(32,16), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20493C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C29_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S20493C6,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI9S20493C11[];
static  VTBL_ENTRY vtc_S20493C11[] = {
  ABISELECT(56,28),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C11[0]),
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20493C11[0]),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20493C11[0]),
};
extern VTBL_ENTRY _ZTV9S20493C11[];
static  VTBL_ENTRY _tg__ZTV9S20493C12__9S20493C11[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C12__9S20493C11[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20493C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C6__9S20493C11[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C11[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C13[0]),
};
static  VTT_ENTRY vtt_S20493C11[] = {
  {&(_ZTV9S20493C11[5]),  5,11},
  {&(_tg__ZTV9S20493C12__9S20493C11[4]),  4,4},
  {&(_tg__ZTV9S20493C13__9S20493C12__9S20493C11[3]),  3,3},
  {&(_tg__ZTV8S20493C6__9S20493C11[3]),  3,3},
  {&(_ZTV9S20493C11[11]),  11,11},
  {&(_ZTV9S20493C11[8]),  8,11},
  {&(_tg__ZTV9S20493C13__9S20493C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20493C11[];
extern  VTBL_ENTRY _ZTV9S20493C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C11[];
Class_Descriptor cd_S20493C11 = {  "S20493C11", // class name
  bases_S20493C11, 7,
  &(vtc_S20493C11[0]), // expected_vtbl_contents
  &(vtt_S20493C11[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S20493C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20493C11),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20493C11),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  S20493C10  : virtual S3600C19 , S20493C11 , S20493C6 , virtual S20493C2 {
  virtual  ~S20493C10(); // _ZN9S20493C10D2Ev
  S20493C10(); // tgen
};
//SIG(-1 S20493C10) C1{ VBC2{ m} BC3{ BC4{ VBC2 VBC5{ BC6{ m Fp} VBC2 FU7{ m}} Fi} BC8{ VBC6 BC2} FC2} BC8 VBC9{ VBC10{ BC2 BC6} VBC8 BC6 FL[8]} vd}


 S20493C10 ::~S20493C10(){ note_dtor("S20493C10", this);}
S20493C10 ::S20493C10(){ note_ctor("S20493C10", this);} // tgen

static void Test_S20493C10()
{
  extern Class_Descriptor cd_S20493C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S20493C10, buf);
    S20493C10 *dp, &lv = *(dp=new (buf) S20493C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20493C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20493C10)");
    /*is_ambiguous_... S20493C10::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), 0, "S20493C10");
    check_base_class_offset(lv, (S3600C19*)(S20493C12*)(S20493C11*), 0, "S20493C10");
    check_base_class_offset(lv, (S3600C19*)(S20493C13*), 0, "S20493C10");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C13*), ABISELECT(48,24), "S20493C10");
    check_base_class_offset(lv, (S20493C13*)(S20493C12*)(S20493C11*), ABISELECT(40,20), "S20493C10");
    check_base_class_offset(lv, (S20493C12*)(S20493C11*), 0, "S20493C10");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C6*)(S20493C11*), ABISELECT(64,32), "S20493C10");
    /*is_ambiguous_... S20493C10::S20493C6 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20493C6*), ABISELECT(64,32), "S20493C10");
    /*is_ambiguous_... S20493C10::S20493C6 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20493C6*), ABISELECT(64,32), "S20493C10");
    check_base_class_offset(lv, (S3600C19*)(S20493C6*)(S20493C11*), ABISELECT(16,8), "S20493C10");
    check_base_class_offset(lv, (S20493C6*)(S20493C11*), ABISELECT(16,8), "S20493C10");
    check_base_class_offset(lv, (S20493C11*), 0, "S20493C10");
    /*is_ambiguous_... S20493C10::S20493C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20493C6*), ABISELECT(32,16), "S20493C10");
    /*is_ambiguous_... S20493C10::S20493C6 */ AMB_check_base_class_offset(lv, (S20493C6*), ABISELECT(32,16), "S20493C10");
    check_base_class_offset(lv, (S3600C19*)(S20493C3*), ABISELECT(152,108), "S20493C10");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C3*), ABISELECT(152,108), "S20493C10");
    check_base_class_offset(lv, (S20493C3*)(S20493C2*), ABISELECT(152,108), "S20493C10");
    /*is_ambiguous_... S20493C10::S20493C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20493C6*), ABISELECT(72,36), "S20493C10");
    check_base_class_offset(lv, (S20493C6*)(S20493C2*), ABISELECT(72,36), "S20493C10");
    /*is_ambiguous_... S20493C2::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20493C2*), ABISELECT(80,40), "S20493C10");
    check_base_class_offset(lv, (S20493C2*), ABISELECT(72,36), "S20493C10");
    test_class_info(&lv, &cd_S20493C10);
    dp->~S20493C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20493C10(Test_S20493C10, "S20493C10", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN9S20493C10C1Ev();
extern void _ZN9S20493C10D2Ev();
Name_Map name_map_S20493C10[] = {
  NSPAIR(_ZN9S20493C10C1Ev),
  NSPAIR(_ZN9S20493C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C13;
extern VTBL_ENTRY _ZTI9S20493C13[];
extern  VTBL_ENTRY _ZTV9S20493C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C13[];
extern Class_Descriptor cd_S20493C12;
extern VTBL_ENTRY _ZTI9S20493C12[];
extern  VTBL_ENTRY _ZTV9S20493C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C12[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20493C6;
extern VTBL_ENTRY _ZTI8S20493C6[];
extern  VTBL_ENTRY _ZTV8S20493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C6[];
extern Class_Descriptor cd_S20493C11;
extern VTBL_ENTRY _ZTI9S20493C11[];
extern  VTBL_ENTRY _ZTV9S20493C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C11[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20493C6;
extern VTBL_ENTRY _ZTI8S20493C6[];
extern  VTBL_ENTRY _ZTV8S20493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C6[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C3;
extern VTBL_ENTRY _ZTI8S20493C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20493C6;
extern VTBL_ENTRY _ZTI8S20493C6[];
extern  VTBL_ENTRY _ZTV8S20493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C2;
extern VTBL_ENTRY _ZTI8S20493C2[];
extern  VTBL_ENTRY _ZTV8S20493C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C2[];
static Base_Class bases_S20493C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20493C13,    ABISELECT(40,20), //bcp->offset
    16, //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
    3, //immediately_derived
  0, 1},
  {&cd_S20493C12,    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
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S20493C6,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20493C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20493C6,    ABISELECT(32,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20493C3,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20493C6,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20493C2,    ABISELECT(72,36), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20493C10[];
extern void _ZN9S20493C10D1Ev();
extern void _ZN9S20493C10D0Ev();
static  VTBL_ENTRY vtc_S20493C10[] = {
  ABISELECT(72,36),
  ABISELECT(152,108),
  ABISELECT(72,36),
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C10[0]),
  (VTBL_ENTRY)&_ZN9S20493C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20493C10D0Ev,
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20493C10[0]),
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20493C10[0]),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20493C10[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S20493C10[0]),
};
extern VTBL_ENTRY _ZTV9S20493C10[];
static  VTBL_ENTRY _tg__ZTV9S20493C11__9S20493C10[] = {
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C129S20493C11__9S20493C10[] = {
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C129S20493C11__9S20493C10[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20493C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C69S20493C11__9S20493C10[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C11__9S20493C10[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20493C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C6__9S20493C11__9S20493C10[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20493C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C6__A__9S20493C10[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C10[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C2__9S20493C10[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C6__A2__9S20493C10[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C6[0]),
};
static  VTT_ENTRY vtt_S20493C10[] = {
  {&(_ZTV9S20493C10[8]),  8,24},
  {&(_tg__ZTV9S20493C11__9S20493C10[5]),  5,5},
  {&(_tg__ZTV9S20493C129S20493C11__9S20493C10[4]),  4,4},
  {&(_tg__ZTV9S20493C13__9S20493C129S20493C11__9S20493C10[3]),  3,3},
  {&(_tg__ZTV8S20493C69S20493C11__9S20493C10[3]),  3,3},
  {&(_tg__ZTV9S20493C13__9S20493C11__9S20493C10[3]),  3,3},
  {&(_tg__ZTV8S20493C6__9S20493C11__9S20493C10[3]),  3,3},
  {&(_tg__ZTV8S20493C6__A__9S20493C10[3]),  3,3},
  {&(_ZTV9S20493C10[19]),  19,24},
  {&(_ZTV9S20493C10[13]),  13,24},
  {&(_ZTV9S20493C10[16]),  16,24},
  {&(_ZTV9S20493C10[24]),  24,24},
  {&(_ZTV9S20493C10[24]),  24,24},
  {&(_tg__ZTV9S20493C13__9S20493C10[3]),  3,3},
  {&(_tg__ZTV8S20493C2__9S20493C10[5]),  5,5},
  {&(_tg__ZTV8S20493C2__9S20493C10[5]),  5,5},
  {&(_tg__ZTV8S20493C6__A2__9S20493C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20493C10[];
extern  VTBL_ENTRY _ZTV9S20493C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C10[];
Class_Descriptor cd_S20493C10 = {  "S20493C10", // class name
  bases_S20493C10, 17,
  &(vtc_S20493C10[0]), // expected_vtbl_contents
  &(vtt_S20493C10[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI9S20493C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20493C10),24, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20493C10),17, //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  S20493C15  : virtual S20493C13 , S20493C3 {
  ~S20493C15(); // tgen
  S20493C15(); // tgen
};
//SIG(-1 S20493C15) C1{ VBC2{ BC3{ m Fp} VBC4{ m} FU5{ m}} BC6{ BC4 BC3}}


S20493C15 ::~S20493C15(){ note_dtor("S20493C15", this);} // tgen
S20493C15 ::S20493C15(){ note_ctor("S20493C15", this);} // tgen

static void Test_S20493C15()
{
  extern Class_Descriptor cd_S20493C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20493C15, buf);
    S20493C15 *dp, &lv = *(dp=new (buf) S20493C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20493C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20493C15)");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C13*), ABISELECT(24,12), "S20493C15");
    check_base_class_offset(lv, (S3600C19*)(S20493C13*), 0, "S20493C15");
    check_base_class_offset(lv, (S20493C13*), ABISELECT(16,8), "S20493C15");
    check_base_class_offset(lv, (S3600C19*)(S20493C3*), ABISELECT(8,4), "S20493C15");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C3*), ABISELECT(8,4), "S20493C15");
    check_base_class_offset(lv, (S20493C3*), ABISELECT(8,4), "S20493C15");
    test_class_info(&lv, &cd_S20493C15);
    dp->~S20493C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20493C15(Test_S20493C15, "S20493C15", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S20493C15C1Ev();
extern void _ZN9S20493C15D1Ev();
Name_Map name_map_S20493C15[] = {
  NSPAIR(_ZN9S20493C15C1Ev),
  NSPAIR(_ZN9S20493C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20493C13;
extern VTBL_ENTRY _ZTI9S20493C13[];
extern  VTBL_ENTRY _ZTV9S20493C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C13[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C3;
extern VTBL_ENTRY _ZTI8S20493C3[];
static Base_Class bases_S20493C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20493C13,    ABISELECT(16,8), //bcp->offset
    4, //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},
  {&cd_S3600C19,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20493C3,    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 _ZTI9S20493C15[];
static  VTBL_ENTRY vtc_S20493C15[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C15[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20493C15[0]),
};
extern VTBL_ENTRY _ZTV9S20493C15[];
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C15[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C13[0]),
};
static  VTT_ENTRY vtt_S20493C15[] = {
  {&(_ZTV9S20493C15[4]),  4,7},
  {&(_ZTV9S20493C15[7]),  7,7},
  {&(_tg__ZTV9S20493C13__9S20493C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20493C15[];
extern  VTBL_ENTRY _ZTV9S20493C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C15[];
Class_Descriptor cd_S20493C15 = {  "S20493C15", // class name
  bases_S20493C15, 6,
  &(vtc_S20493C15[0]), // expected_vtbl_contents
  &(vtt_S20493C15[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S20493C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20493C15),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20493C15),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  S20493C9  : virtual S20493C10 , S20493C6 , virtual S20493C15 , S3600C29_nt , virtual S20493C11 {
  virtual  ~S20493C9(); // _ZN8S20493C9D2Ev
  S20493C9(); // tgen
};
//SIG(-1 S20493C9) C1{ VBC2{ VBC3{ m} BC4{ BC5{ VBC3 VBC6{ BC7{ m Fp} VBC3 FU8{ m}} Fi} BC9{ VBC7 BC3} FC3} BC9 VBC10{ VBC11{ BC3 BC7} VBC9 BC7 FL[8]} vd} BC9 VBC12{ VBC6 BC11} BC7 VBC4 vd}


 S20493C9 ::~S20493C9(){ note_dtor("S20493C9", this);}
S20493C9 ::S20493C9(){ note_ctor("S20493C9", this);} // tgen

static void Test_S20493C9()
{
  extern Class_Descriptor cd_S20493C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,37)];
    init_test(&cd_S20493C9, buf);
    S20493C9 *dp, &lv = *(dp=new (buf) S20493C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,144), "sizeof(S20493C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20493C9)");
    /*is_ambiguous_... S20493C10::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20493C10*), ABISELECT(56,28), "S20493C9");
    check_base_class_offset(lv, (S3600C19*)(S20493C12*)(S20493C11*)(S20493C10*), ABISELECT(56,28), "S20493C9");
    check_base_class_offset(lv, (S3600C19*)(S20493C13*), ABISELECT(56,28), "S20493C9");
    /*is_ambiguous_... S20493C9::S20493C11 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20493C12*)(S20493C11*), ABISELECT(56,28), "S20493C9");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C13*), ABISELECT(64,32), "S20493C9");
    check_base_class_offset(lv, (S20493C13*)(S20493C12*)(S20493C11*)(S20493C10*), ABISELECT(56,28), "S20493C9");
    check_base_class_offset(lv, (S20493C13*)(S20493C15*), ABISELECT(56,28), "S20493C9");
    /*is_ambiguous_... S20493C9::S20493C11 */ AMB_check_base_class_offset(lv, (S20493C13*)(S20493C12*)(S20493C11*), ABISELECT(56,28), "S20493C9");
    check_base_class_offset(lv, (S20493C12*)(S20493C11*)(S20493C10*), ABISELECT(16,8), "S20493C9");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C6*)(S20493C11*)(S20493C10*), ABISELECT(80,40), "S20493C9");
    /*is_ambiguous_... S20493C10::S20493C6 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20493C6*)(S20493C10*), ABISELECT(80,40), "S20493C9");
    /*is_ambiguous_... S20493C9::S20493C6 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20493C6*), ABISELECT(80,40), "S20493C9");
    /*is_ambiguous_... S20493C9::S20493C6 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20493C6*), ABISELECT(80,40), "S20493C9");
    /*is_ambiguous_... S20493C9::S20493C11 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20493C6*)(S20493C11*), ABISELECT(80,40), "S20493C9");
    check_base_class_offset(lv, (S3600C19*)(S20493C6*)(S20493C11*)(S20493C10*), ABISELECT(32,16), "S20493C9");
    check_base_class_offset(lv, (S20493C6*)(S20493C11*)(S20493C10*), ABISELECT(32,16), "S20493C9");
    check_base_class_offset(lv, (S20493C11*)(S20493C10*), ABISELECT(16,8), "S20493C9");
    /*is_ambiguous_... S20493C10::S20493C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20493C6*)(S20493C10*), ABISELECT(48,24), "S20493C9");
    /*is_ambiguous_... S20493C10::S20493C6 */ AMB_check_base_class_offset(lv, (S20493C6*)(S20493C10*), ABISELECT(48,24), "S20493C9");
    /*is_ambiguous_... S20493C9::S20493C3 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20493C3*), ABISELECT(168,116), "S20493C9");
    /*is_ambiguous_... S20493C9::S20493C3 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20493C3*), ABISELECT(168,116), "S20493C9");
    check_base_class_offset(lv, (S20493C3*)(S20493C2*), ABISELECT(168,116), "S20493C9");
    /*is_ambiguous_... S20493C9::S20493C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20493C6*), ABISELECT(88,44), "S20493C9");
    check_base_class_offset(lv, (S20493C6*)(S20493C2*), ABISELECT(88,44), "S20493C9");
    /*is_ambiguous_... S20493C2::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20493C2*), ABISELECT(96,48), "S20493C9");
    check_base_class_offset(lv, (S20493C2*)(S20493C10*), ABISELECT(88,44), "S20493C9");
    check_base_class_offset(lv, (S20493C10*), ABISELECT(16,8), "S20493C9");
    /*is_ambiguous_... S20493C9::S20493C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20493C6*), 0, "S20493C9");
    /*is_ambiguous_... S20493C9::S20493C6 */ AMB_check_base_class_offset(lv, (S20493C6*), 0, "S20493C9");
    check_base_class_offset(lv, (S3600C19*)(S20493C3*)(S20493C15*), ABISELECT(184,124), "S20493C9");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C3*)(S20493C15*), ABISELECT(184,124), "S20493C9");
    check_base_class_offset(lv, (S20493C3*)(S20493C15*), ABISELECT(184,124), "S20493C9");
    check_base_class_offset(lv, (S20493C15*), ABISELECT(176,120), "S20493C9");
    /*is_ambiguous_... S20493C9::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20493C9");
    /*is_ambiguous_... S20493C9::S20493C11 */ AMB_check_base_class_offset(lv, (S20493C12*)(S20493C11*), ABISELECT(192,128), "S20493C9");
    /*is_ambiguous_... S20493C9::S20493C11 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20493C6*)(S20493C11*), ABISELECT(208,136), "S20493C9");
    /*is_ambiguous_... S20493C9::S20493C11 */ AMB_check_base_class_offset(lv, (S20493C6*)(S20493C11*), ABISELECT(208,136), "S20493C9");
    /*is_ambiguous_... S20493C9::S20493C11 */ AMB_check_base_class_offset(lv, (S20493C11*), ABISELECT(192,128), "S20493C9");
    test_class_info(&lv, &cd_S20493C9);
    dp->~S20493C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20493C9(Test_S20493C9, "S20493C9", ABISELECT(224,144));

#else // __cplusplus

extern void _ZN8S20493C9C1Ev();
extern void _ZN8S20493C9D2Ev();
Name_Map name_map_S20493C9[] = {
  NSPAIR(_ZN8S20493C9C1Ev),
  NSPAIR(_ZN8S20493C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C13;
extern VTBL_ENTRY _ZTI9S20493C13[];
extern  VTBL_ENTRY _ZTV9S20493C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C13[];
extern Class_Descriptor cd_S20493C12;
extern VTBL_ENTRY _ZTI9S20493C12[];
extern  VTBL_ENTRY _ZTV9S20493C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C12[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20493C6;
extern VTBL_ENTRY _ZTI8S20493C6[];
extern  VTBL_ENTRY _ZTV8S20493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C6[];
extern Class_Descriptor cd_S20493C11;
extern VTBL_ENTRY _ZTI9S20493C11[];
extern  VTBL_ENTRY _ZTV9S20493C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C11[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20493C6;
extern VTBL_ENTRY _ZTI8S20493C6[];
extern  VTBL_ENTRY _ZTV8S20493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C6[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C3;
extern VTBL_ENTRY _ZTI8S20493C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20493C6;
extern VTBL_ENTRY _ZTI8S20493C6[];
extern  VTBL_ENTRY _ZTV8S20493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C2;
extern VTBL_ENTRY _ZTI8S20493C2[];
extern  VTBL_ENTRY _ZTV8S20493C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C2[];
extern Class_Descriptor cd_S20493C10;
extern VTBL_ENTRY _ZTI9S20493C10[];
extern  VTBL_ENTRY _ZTV9S20493C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20493C6;
extern VTBL_ENTRY _ZTI8S20493C6[];
extern  VTBL_ENTRY _ZTV8S20493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C6[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C3;
extern VTBL_ENTRY _ZTI8S20493C3[];
extern Class_Descriptor cd_S20493C15;
extern VTBL_ENTRY _ZTI9S20493C15[];
extern  VTBL_ENTRY _ZTV9S20493C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C15[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C12;
extern VTBL_ENTRY _ZTI9S20493C12[];
extern  VTBL_ENTRY _ZTV9S20493C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C12[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20493C6;
extern VTBL_ENTRY _ZTI8S20493C6[];
extern  VTBL_ENTRY _ZTV8S20493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C6[];
extern Class_Descriptor cd_S20493C11;
extern VTBL_ENTRY _ZTI9S20493C11[];
extern  VTBL_ENTRY _ZTV9S20493C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C11[];
static Base_Class bases_S20493C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20493C13,    ABISELECT(56,28), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20493C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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
    6, //immediately_derived
  0, 0},
  {&cd_S20493C6,    ABISELECT(32,16), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20493C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    17, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20493C6,    ABISELECT(48,24), //bcp->offset
    27, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    12, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    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
    12, //immediately_derived
  0, 0},
  {&cd_S20493C3,    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
    16, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20493C6,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20493C2,    ABISELECT(88,44), //bcp->offset
    33, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S20493C10,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20493C6,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(184,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
    22, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(184,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
    22, //immediately_derived
  0, 0},
  {&cd_S20493C3,    ABISELECT(184,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
    23, //immediately_derived
  0, 0},
  {&cd_S20493C15,    ABISELECT(176,120), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20493C12,    ABISELECT(192,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(208,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
    27, //immediately_derived
  0, 0},
  {&cd_S20493C6,    ABISELECT(208,136), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20493C11,    ABISELECT(192,128), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20493C9[];
extern void _ZN8S20493C9D1Ev();
extern void _ZN8S20493C9D0Ev();
extern void ABISELECT(_ZTv0_n72_N8S20493C9D1Ev,_ZTv0_n36_N8S20493C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S20493C9D1Ev,_ZThn8_N8S20493C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20493C9D0Ev,_ZTv0_n36_N8S20493C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S20493C9D0Ev,_ZThn8_N8S20493C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20493C9[] = {
  ABISELECT(192,128),
  ABISELECT(176,120),
  ABISELECT(88,44),
  ABISELECT(168,116),
  ABISELECT(88,44),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C9[0]),
  (VTBL_ENTRY)&_ZN8S20493C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20493C9D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  ABISELECT(152,108),
  ABISELECT(72,36),
  ABISELECT(64,32),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20493C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20493C9D1Ev,_ZTv0_n36_N8S20493C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20493C9D0Ev,_ZTv0_n36_N8S20493C9D0Ev),
  ABISELECT(48,24),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20493C9[0]),
  ABISELECT(32,16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20493C9[0]),
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20493C9[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S20493C9[0]),
  ABISELECT(-120,-92),
  ABISELECT(-120,-92),
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI8S20493C9[0]),
  ABISELECT(-112,-88),
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI8S20493C9[0]),
  ABISELECT(-128,-96),
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI8S20493C9[0]),
};
extern VTBL_ENTRY _ZTV8S20493C9[];
static  VTBL_ENTRY _tg__ZTV8S20493C6__A__8S20493C9[] = {
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C6[0]),
};
extern void _ZN9S20493C10D1Ev();
extern void _ZN9S20493C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20493C10__8S20493C9[] = {
  ABISELECT(72,36),
  ABISELECT(152,108),
  ABISELECT(72,36),
  ABISELECT(64,32),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C10[0]),
  (VTBL_ENTRY)&_ZN9S20493C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20493C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20493C119S20493C10__8S20493C9[] = {
  ABISELECT(64,32),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C129S20493C119S20493C10__8S20493C9[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C129S20493C119S20493C10__8S20493C9[] = {
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20493C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C69S20493C119S20493C10__8S20493C9[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C119S20493C10__8S20493C9[] = {
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20493C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C6__9S20493C119S20493C10__8S20493C9[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20493C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C69S20493C10__A1__8S20493C9[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C10__8S20493C9[] = {
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20493C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C69S20493C11__9S20493C10__8S20493C9[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20493C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C6__A__9S20493C10__8S20493C9[] = {
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20493C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C2__9S20493C10__8S20493C9[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S20493C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__8S20493C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C2__8S20493C9[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C6__A2__8S20493C9[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C15__8S20493C9[] = {
  ABISELECT(-120,-92),
  ABISELECT(-120,-92),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C15__8S20493C9[] = {
  0,
  ABISELECT(120,92),
  (VTBL_ENTRY)&(_ZTI9S20493C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C11__A1__8S20493C9[] = {
  ABISELECT(-112,-88),
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C129S20493C11__A1__8S20493C9[] = {
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C129S20493C11__A1__8S20493C9[] = {
  0,
  ABISELECT(136,100),
  (VTBL_ENTRY)&(_ZTI9S20493C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C69S20493C11__A4__8S20493C9[] = {
  ABISELECT(-128,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C11__A1__8S20493C9[] = {
  0,
  ABISELECT(136,100),
  (VTBL_ENTRY)&(_ZTI9S20493C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C6__9S20493C11__A1__8S20493C9[] = {
  ABISELECT(-128,-96),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20493C11[0]),
};
static  VTT_ENTRY vtt_S20493C9[] = {
  {&(_ZTV8S20493C9[11]),  11,50},
  {&(_tg__ZTV8S20493C6__A__8S20493C9[3]),  3,3},
  {&(_ZTV8S20493C9[22]),  22,50},
  {&(_ZTV8S20493C9[33]),  33,50},
  {&(_ZTV8S20493C9[27]),  27,50},
  {&(_ZTV8S20493C9[30]),  30,50},
  {&(_ZTV8S20493C9[38]),  38,50},
  {&(_ZTV8S20493C9[38]),  38,50},
  {&(_ZTV8S20493C9[42]),  42,50},
  {&(_ZTV8S20493C9[47]),  47,50},
  {&(_ZTV8S20493C9[50]),  50,50},
  {&(_tg__ZTV9S20493C10__8S20493C9[8]),  8,10},
  {&(_tg__ZTV9S20493C119S20493C10__8S20493C9[5]),  5,5},
  {&(_tg__ZTV9S20493C129S20493C119S20493C10__8S20493C9[4]),  4,4},
  {&(_tg__ZTV9S20493C13__9S20493C129S20493C119S20493C10__8S20493C9[3]),  3,3},
  {&(_tg__ZTV8S20493C69S20493C119S20493C10__8S20493C9[3]),  3,3},
  {&(_tg__ZTV9S20493C13__9S20493C119S20493C10__8S20493C9[3]),  3,3},
  {&(_tg__ZTV8S20493C6__9S20493C119S20493C10__8S20493C9[3]),  3,3},
  {&(_tg__ZTV8S20493C69S20493C10__A1__8S20493C9[3]),  3,3},
  {&(_tg__ZTV9S20493C13__9S20493C10__8S20493C9[3]),  3,3},
  {&(_tg__ZTV8S20493C69S20493C11__9S20493C10__8S20493C9[3]),  3,3},
  {&(_tg__ZTV8S20493C6__A__9S20493C10__8S20493C9[3]),  3,3},
  {&(_tg__ZTV8S20493C2__9S20493C10__8S20493C9[5]),  5,5},
  {&(_tg__ZTV8S20493C2__9S20493C10__8S20493C9[5]),  5,5},
  {&(_tg__ZTV9S20493C13__8S20493C9[3]),  3,3},
  {&(_tg__ZTV8S20493C2__8S20493C9[5]),  5,5},
  {&(_tg__ZTV8S20493C2__8S20493C9[5]),  5,5},
  {&(_tg__ZTV8S20493C6__A2__8S20493C9[3]),  3,3},
  {&(_tg__ZTV9S20493C15__8S20493C9[4]),  4,4},
  {&(_tg__ZTV9S20493C13__9S20493C15__8S20493C9[3]),  3,3},
  {&(_tg__ZTV9S20493C11__A1__8S20493C9[5]),  5,5},
  {&(_tg__ZTV9S20493C129S20493C11__A1__8S20493C9[4]),  4,4},
  {&(_tg__ZTV9S20493C13__9S20493C129S20493C11__A1__8S20493C9[3]),  3,3},
  {&(_tg__ZTV8S20493C69S20493C11__A4__8S20493C9[3]),  3,3},
  {&(_tg__ZTV9S20493C13__9S20493C11__A1__8S20493C9[3]),  3,3},
  {&(_tg__ZTV8S20493C6__9S20493C11__A1__8S20493C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20493C9[];
extern  VTBL_ENTRY _ZTV8S20493C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C9[];
static VTBL_ENTRY alt_thunk_names92[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20493C9D0Ev,_ZTv0_n36_N8S20493C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20493C9D0Ev,_ZThn8_N8S20493C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20493C9D1Ev,_ZTv0_n36_N8S20493C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20493C9D1Ev,_ZThn8_N8S20493C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20493C9 = {  "S20493C9", // class name
  bases_S20493C9, 29,
  &(vtc_S20493C9[0]), // expected_vtbl_contents
  &(vtt_S20493C9[0]), // expected_vtt_contents
  ABISELECT(224,144), // object size
  NSPAIRA(_ZTI8S20493C9),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20493C9),50, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20493C9),36, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names92,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20493C16  : virtual S3600C29_nt {
  virtual  ~S20493C16(); // _ZN9S20493C16D2Ev
  S20493C16(); // tgen
};
//SIG(-1 S20493C16) C1{ VBC2{ m Fp} vd}


 S20493C16 ::~S20493C16(){ note_dtor("S20493C16", this);}
S20493C16 ::S20493C16(){ note_ctor("S20493C16", this);} // tgen

static void Test_S20493C16()
{
  extern Class_Descriptor cd_S20493C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20493C16, buf);
    S20493C16 *dp, &lv = *(dp=new (buf) S20493C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20493C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20493C16)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20493C16");
    test_class_info(&lv, &cd_S20493C16);
    dp->~S20493C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20493C16(Test_S20493C16, "S20493C16", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S20493C16C1Ev();
extern void _ZN9S20493C16D2Ev();
Name_Map name_map_S20493C16[] = {
  NSPAIR(_ZN9S20493C16C1Ev),
  NSPAIR(_ZN9S20493C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S20493C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20493C16[];
extern void _ZN9S20493C16D1Ev();
extern void _ZN9S20493C16D0Ev();
static  VTBL_ENTRY vtc_S20493C16[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C16[0]),
  (VTBL_ENTRY)&_ZN9S20493C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20493C16D0Ev,
};
extern VTBL_ENTRY _ZTV9S20493C16[];
static  VTT_ENTRY vtt_S20493C16[] = {
  {&(_ZTV9S20493C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20493C16[];
extern  VTBL_ENTRY _ZTV9S20493C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C16[];
Class_Descriptor cd_S20493C16 = {  "S20493C16", // class name
  bases_S20493C16, 1,
  &(vtc_S20493C16[0]), // expected_vtbl_contents
  &(vtt_S20493C16[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S20493C16),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20493C16),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20493C16),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  S20493C1  : virtual S20493C2 , virtual S20493C7 , S3600C6_nt , virtual S20493C9 , virtual S20493C16 {
  ::S19252C5_nt s20493c1f0;
  virtual  ~S20493C1(); // _ZN8S20493C1D2Ev
  S20493C1(); // tgen
};
//SIG(1 S20493C1) C1{ VBC2{ VBC3{ BC4{ m} BC5{ m Fp}} VBC6{ VBC5 BC4} BC5 FL[8]} VBC7{ VBC2 vd Fs} BC8{ m} VBC9{ VBC10{ VBC4 BC11{ BC12{ VBC4 VBC13{ BC5 VBC4 FU14{ m}} Fi} BC6 FC4} BC6 VBC2 vd} BC6 VBC15{ VBC13 BC3} BC5 VBC11 vd} VBC16{ VBC5 vd} vd FC17{}}


 S20493C1 ::~S20493C1(){ note_dtor("S20493C1", this);}
S20493C1 ::S20493C1(){ note_ctor("S20493C1", this);} // tgen

static void Test_S20493C1()
{
  extern Class_Descriptor cd_S20493C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,41)];
    init_test(&cd_S20493C1, buf);
    S20493C1 *dp, &lv = *(dp=new (buf) S20493C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,160), "sizeof(S20493C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20493C1)");
    /*is_ambiguous_... S20493C1::S20493C3 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20493C3*), ABISELECT(96,80), "S20493C1");
    /*is_ambiguous_... S20493C1::S20493C3 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20493C3*), ABISELECT(96,80), "S20493C1");
    check_base_class_offset(lv, (S20493C3*)(S20493C2*), ABISELECT(96,80), "S20493C1");
    /*is_ambiguous_... S20493C1::S20493C6 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20493C6*), ABISELECT(104,84), "S20493C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C6*)(S20493C11*)(S20493C10*), ABISELECT(104,84), "S20493C1");
    /*is_ambiguous_... S20493C10::S20493C6 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20493C6*)(S20493C10*), ABISELECT(104,84), "S20493C1");
    /*is_ambiguous_... S20493C9::S20493C6 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20493C6*)(S20493C9*), ABISELECT(104,84), "S20493C1");
    /*is_ambiguous_... S20493C1::S20493C11 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20493C6*)(S20493C11*), ABISELECT(104,84), "S20493C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C16*), ABISELECT(104,84), "S20493C1");
    /*is_ambiguous_... S20493C1::S20493C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20493C6*), ABISELECT(16,8), "S20493C1");
    check_base_class_offset(lv, (S20493C6*)(S20493C2*), ABISELECT(16,8), "S20493C1");
    /*is_ambiguous_... S20493C2::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20493C2*), ABISELECT(24,12), "S20493C1");
    check_base_class_offset(lv, (S20493C2*), ABISELECT(16,8), "S20493C1");
    check_base_class_offset(lv, (S20493C2*)(S20493C7*), ABISELECT(16,8), "S20493C1");
    check_base_class_offset(lv, (S20493C2*)(S20493C10*), ABISELECT(16,8), "S20493C1");
    check_base_class_offset(lv, (S20493C7*), ABISELECT(112,88), "S20493C1");
    check_base_class_offset(lv, (S3600C6_nt*), 0, "S20493C1");
    /*is_ambiguous_... S20493C10::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20493C10*), 0, "S20493C1");
    check_base_class_offset(lv, (S3600C19*)(S20493C12*)(S20493C11*)(S20493C10*), 0, "S20493C1");
    check_base_class_offset(lv, (S3600C19*)(S20493C13*), 0, "S20493C1");
    /*is_ambiguous_... S20493C1::S20493C11 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20493C12*)(S20493C11*), 0, "S20493C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C13*), ABISELECT(192,128), "S20493C1");
    check_base_class_offset(lv, (S20493C13*)(S20493C12*)(S20493C11*)(S20493C10*), ABISELECT(184,124), "S20493C1");
    check_base_class_offset(lv, (S20493C13*)(S20493C15*), ABISELECT(184,124), "S20493C1");
    /*is_ambiguous_... S20493C1::S20493C11 */ AMB_check_base_class_offset(lv, (S20493C13*)(S20493C12*)(S20493C11*), ABISELECT(184,124), "S20493C1");
    check_base_class_offset(lv, (S20493C12*)(S20493C11*)(S20493C10*), ABISELECT(144,104), "S20493C1");
    check_base_class_offset(lv, (S3600C19*)(S20493C6*)(S20493C11*)(S20493C10*), ABISELECT(160,112), "S20493C1");
    check_base_class_offset(lv, (S20493C6*)(S20493C11*)(S20493C10*), ABISELECT(160,112), "S20493C1");
    check_base_class_offset(lv, (S20493C11*)(S20493C10*), ABISELECT(144,104), "S20493C1");
    /*is_ambiguous_... S20493C10::S20493C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20493C6*)(S20493C10*), ABISELECT(176,120), "S20493C1");
    /*is_ambiguous_... S20493C10::S20493C6 */ AMB_check_base_class_offset(lv, (S20493C6*)(S20493C10*), ABISELECT(176,120), "S20493C1");
    check_base_class_offset(lv, (S20493C10*)(S20493C9*), ABISELECT(144,104), "S20493C1");
    /*is_ambiguous_... S20493C9::S20493C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20493C6*)(S20493C9*), ABISELECT(128,96), "S20493C1");
    /*is_ambiguous_... S20493C9::S20493C6 */ AMB_check_base_class_offset(lv, (S20493C6*)(S20493C9*), ABISELECT(128,96), "S20493C1");
    check_base_class_offset(lv, (S3600C19*)(S20493C3*)(S20493C15*), ABISELECT(216,140), "S20493C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S20493C3*)(S20493C15*), ABISELECT(216,140), "S20493C1");
    check_base_class_offset(lv, (S20493C3*)(S20493C15*), ABISELECT(216,140), "S20493C1");
    check_base_class_offset(lv, (S20493C15*)(S20493C9*), ABISELECT(208,136), "S20493C1");
    /*is_ambiguous_... S20493C9::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20493C9*), ABISELECT(136,100), "S20493C1");
    /*is_ambiguous_... S20493C1::S20493C11 */ AMB_check_base_class_offset(lv, (S20493C12*)(S20493C11*), ABISELECT(224,144), "S20493C1");
    /*is_ambiguous_... S20493C1::S20493C11 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20493C6*)(S20493C11*), ABISELECT(240,152), "S20493C1");
    /*is_ambiguous_... S20493C1::S20493C11 */ AMB_check_base_class_offset(lv, (S20493C6*)(S20493C11*), ABISELECT(240,152), "S20493C1");
    /*is_ambiguous_... S20493C9::S20493C11 */ AMB_check_base_class_offset(lv, (S20493C11*)(S20493C9*), ABISELECT(224,144), "S20493C1");
    check_base_class_offset(lv, (S20493C9*), ABISELECT(128,96), "S20493C1");
    check_base_class_offset(lv, (S20493C16*), 0, "S20493C1");
    check_field_offset(lv, s20493c1f0, ABISELECT(8,4), "S20493C1.s20493c1f0");
    test_class_info(&lv, &cd_S20493C1);
    dp->~S20493C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20493C1(Test_S20493C1, "S20493C1", ABISELECT(256,160));

#else // __cplusplus

extern void _ZN8S20493C1C1Ev();
extern void _ZN8S20493C1D2Ev();
Name_Map name_map_S20493C1[] = {
  NSPAIR(_ZN8S20493C1C1Ev),
  NSPAIR(_ZN8S20493C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C3;
extern VTBL_ENTRY _ZTI8S20493C3[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20493C6;
extern VTBL_ENTRY _ZTI8S20493C6[];
extern  VTBL_ENTRY _ZTV8S20493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C2;
extern VTBL_ENTRY _ZTI8S20493C2[];
extern  VTBL_ENTRY _ZTV8S20493C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C2[];
extern Class_Descriptor cd_S20493C7;
extern VTBL_ENTRY _ZTI8S20493C7[];
extern  VTBL_ENTRY _ZTV8S20493C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C7[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C13;
extern VTBL_ENTRY _ZTI9S20493C13[];
extern  VTBL_ENTRY _ZTV9S20493C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C13[];
extern Class_Descriptor cd_S20493C12;
extern VTBL_ENTRY _ZTI9S20493C12[];
extern  VTBL_ENTRY _ZTV9S20493C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C12[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20493C6;
extern VTBL_ENTRY _ZTI8S20493C6[];
extern  VTBL_ENTRY _ZTV8S20493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C6[];
extern Class_Descriptor cd_S20493C11;
extern VTBL_ENTRY _ZTI9S20493C11[];
extern  VTBL_ENTRY _ZTV9S20493C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C11[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20493C6;
extern VTBL_ENTRY _ZTI8S20493C6[];
extern  VTBL_ENTRY _ZTV8S20493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C6[];
extern Class_Descriptor cd_S20493C10;
extern VTBL_ENTRY _ZTI9S20493C10[];
extern  VTBL_ENTRY _ZTV9S20493C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20493C6;
extern VTBL_ENTRY _ZTI8S20493C6[];
extern  VTBL_ENTRY _ZTV8S20493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C6[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C3;
extern VTBL_ENTRY _ZTI8S20493C3[];
extern Class_Descriptor cd_S20493C15;
extern VTBL_ENTRY _ZTI9S20493C15[];
extern  VTBL_ENTRY _ZTV9S20493C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C15[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20493C12;
extern VTBL_ENTRY _ZTI9S20493C12[];
extern  VTBL_ENTRY _ZTV9S20493C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C12[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20493C6;
extern VTBL_ENTRY _ZTI8S20493C6[];
extern  VTBL_ENTRY _ZTV8S20493C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C6[];
extern Class_Descriptor cd_S20493C11;
extern VTBL_ENTRY _ZTI9S20493C11[];
extern  VTBL_ENTRY _ZTV9S20493C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C11[];
extern Class_Descriptor cd_S20493C9;
extern VTBL_ENTRY _ZTI8S20493C9[];
extern  VTBL_ENTRY _ZTV8S20493C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C9[];
extern Class_Descriptor cd_S20493C16;
extern VTBL_ENTRY _ZTI9S20493C16[];
extern  VTBL_ENTRY _ZTV9S20493C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20493C16[];
static Base_Class bases_S20493C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(96,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
    2, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(96,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
    2, //immediately_derived
  0, 0},
  {&cd_S20493C3,    ABISELECT(96,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
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(104,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20493C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20493C2,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20493C7,    ABISELECT(112,88), //bcp->offset
    22, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C6_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_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S3600C29_nt,    ABISELECT(192,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
    12, //immediately_derived
  0, 0},
  {&cd_S20493C13,    ABISELECT(184,124), //bcp->offset
    62, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20493C12,    ABISELECT(144,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(160,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
    15, //immediately_derived
  0, 0},
  {&cd_S20493C6,    ABISELECT(160,112), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20493C11,    ABISELECT(144,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(176,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
    18, //immediately_derived
  0, 0},
  {&cd_S20493C6,    ABISELECT(176,120), //bcp->offset
    59, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20493C10,    ABISELECT(144,104), //bcp->offset
    45, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(128,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
    21, //immediately_derived
  0, 0},
  {&cd_S20493C6,    ABISELECT(128,96), //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
    14, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(216,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
    24, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(216,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
    24, //immediately_derived
  0, 0},
  {&cd_S20493C3,    ABISELECT(216,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
    25, //immediately_derived
  0, 0},
  {&cd_S20493C15,    ABISELECT(208,136), //bcp->offset
    65, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    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
    31, //immediately_derived
  0, 0},
  {&cd_S20493C12,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(240,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20493C6,    ABISELECT(240,152), //bcp->offset
    74, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20493C11,    ABISELECT(224,144), //bcp->offset
    69, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S20493C9,    ABISELECT(128,96), //bcp->offset
    31, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20493C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20493C1[];
extern void _ZN8S20493C1D1Ev();
extern void _ZN8S20493C1D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S20493C1D1Ev,_ZTv0_n28_N8S20493C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S20493C1D1Ev,_ZThn88_N8S20493C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20493C1D0Ev,_ZTv0_n28_N8S20493C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S20493C1D0Ev,_ZThn88_N8S20493C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S20493C1D1Ev,_ZTv0_n48_N8S20493C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S20493C1D1Ev,_ZThn96_N8S20493C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S20493C1D0Ev,_ZTv0_n48_N8S20493C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S20493C1D0Ev,_ZThn96_N8S20493C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20493C1D1Ev,_ZTv0_n36_N8S20493C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S20493C1D1Ev,_ZThn104_N8S20493C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20493C1D0Ev,_ZTv0_n36_N8S20493C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S20493C1D0Ev,_ZThn104_N8S20493C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20493C1[] = {
  0,
  ABISELECT(224,144),
  ABISELECT(208,136),
  ABISELECT(184,124),
  0,
  ABISELECT(144,104),
  ABISELECT(128,96),
  ABISELECT(112,88),
  ABISELECT(16,8),
  ABISELECT(96,80),
  ABISELECT(16,8),
  0,
  ABISELECT(104,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C1[0]),
  (VTBL_ENTRY)&_ZN8S20493C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20493C1D0Ev,
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20493C1[0]),
  ABISELECT(-112,-88),
  ABISELECT(-96,-80),
  ABISELECT(-16,-8),
  ABISELECT(-96,-80),
  ABISELECT(-8,-4),
  ABISELECT(-112,-88),
  (VTBL_ENTRY)&(_ZTI8S20493C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20493C1D1Ev,_ZTv0_n28_N8S20493C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20493C1D0Ev,_ZTv0_n28_N8S20493C1D0Ev),
  ABISELECT(-128,-96),
  ABISELECT(96,48),
  ABISELECT(80,40),
  ABISELECT(-112,-88),
  ABISELECT(-32,-16),
  ABISELECT(-112,-88),
  ABISELECT(56,28),
  ABISELECT(-128,-96),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-128,-96),
  (VTBL_ENTRY)&(_ZTI8S20493C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20493C1D1Ev,_ZTv0_n48_N8S20493C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20493C1D0Ev,_ZTv0_n48_N8S20493C1D0Ev),
  ABISELECT(-144,-104),
  ABISELECT(-128,-96),
  ABISELECT(-48,-24),
  ABISELECT(-128,-96),
  ABISELECT(-40,-20),
  ABISELECT(40,20),
  ABISELECT(-144,-104),
  ABISELECT(-144,-104),
  (VTBL_ENTRY)&(_ZTI8S20493C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20493C1D1Ev,_ZTv0_n36_N8S20493C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20493C1D0Ev,_ZTv0_n36_N8S20493C1D0Ev),
  ABISELECT(-56,-28),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20493C1[0]),
  ABISELECT(-72,-36),
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI8S20493C1[0]),
  ABISELECT(-184,-124),
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI8S20493C1[0]),
  ABISELECT(-208,-136),
  ABISELECT(-24,-12),
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI8S20493C1[0]),
  ABISELECT(-120,-60),
  ABISELECT(-40,-20),
  ABISELECT(-224,-144),
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S20493C1[0]),
  ABISELECT(-136,-68),
  ABISELECT(-240,-152),
  (VTBL_ENTRY)&(_ZTI8S20493C1[0]),
};
extern VTBL_ENTRY _ZTV8S20493C1[];
static  VTBL_ENTRY _tg__ZTV8S20493C2__8S20493C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C6__8S20493C1[] = {
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C6[0]),
};
extern void _ZN8S20493C7D1Ev();
extern void _ZN8S20493C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20493C7__8S20493C1[] = {
  ABISELECT(-96,-80),
  ABISELECT(-16,-8),
  ABISELECT(-96,-80),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C7[0]),
  (VTBL_ENTRY)&_ZN8S20493C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20493C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20493C2__8S20493C7__8S20493C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(96,80),
  (VTBL_ENTRY)&(_ZTI8S20493C7[0]),
};
extern void _ZN8S20493C9D1Ev();
extern void _ZN8S20493C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20493C9__8S20493C1[] = {
  ABISELECT(96,48),
  ABISELECT(80,40),
  ABISELECT(-112,-88),
  ABISELECT(-32,-16),
  ABISELECT(-112,-88),
  ABISELECT(56,28),
  ABISELECT(-128,-96),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C9[0]),
  (VTBL_ENTRY)&_ZN8S20493C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20493C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20493C68S20493C9__A3__8S20493C1[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C6[0]),
};
extern void ABISELECT(_ZTv0_n72_N8S20493C9D1Ev,_ZTv0_n36_N8S20493C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S20493C9D1Ev,_ZThn8_N8S20493C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20493C9D0Ev,_ZTv0_n36_N8S20493C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S20493C9D0Ev,_ZThn8_N8S20493C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20493C10__8S20493C9__8S20493C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-128,-96),
  ABISELECT(-48,-24),
  ABISELECT(-128,-96),
  ABISELECT(-40,-20),
  ABISELECT(40,20),
  ABISELECT(-144,-104),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20493C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20493C9D1Ev,_ZTv0_n36_N8S20493C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20493C9D0Ev,_ZTv0_n36_N8S20493C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__8S20493C9__8S20493C1[] = {
  ABISELECT(-184,-124),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20493C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C69S20493C119S20493C10__8S20493C9__8S20493C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20493C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C69S20493C10__A1__8S20493C9__8S20493C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20493C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C2__8S20493C9__8S20493C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(112,88),
  (VTBL_ENTRY)&(_ZTI8S20493C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C15__8S20493C9__8S20493C1[] = {
  ABISELECT(-208,-136),
  ABISELECT(-24,-12),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S20493C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C11__A1__8S20493C9__8S20493C1[] = {
  ABISELECT(-120,-60),
  ABISELECT(-40,-20),
  ABISELECT(-224,-144),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S20493C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C69S20493C11__A4__8S20493C9__8S20493C1[] = {
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20493C9[0]),
};
extern void _ZN9S20493C10D1Ev();
extern void _ZN9S20493C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20493C10__8S20493C1[] = {
  ABISELECT(-128,-96),
  ABISELECT(-48,-24),
  ABISELECT(-128,-96),
  ABISELECT(-40,-20),
  ABISELECT(40,20),
  ABISELECT(-144,-104),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C10[0]),
  (VTBL_ENTRY)&_ZN9S20493C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20493C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20493C119S20493C10__8S20493C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(40,20),
  ABISELECT(-144,-104),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C129S20493C119S20493C10__8S20493C1[] = {
  ABISELECT(40,20),
  ABISELECT(-144,-104),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C129S20493C119S20493C10__8S20493C1[] = {
  ABISELECT(-184,-124),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20493C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C69S20493C119S20493C10__A1__8S20493C1[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C119S20493C10__8S20493C1[] = {
  ABISELECT(-184,-124),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20493C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C6__9S20493C119S20493C10__8S20493C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20493C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C69S20493C10__A2__8S20493C1[] = {
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C10__8S20493C1[] = {
  ABISELECT(-184,-124),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20493C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C69S20493C11__9S20493C10__8S20493C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20493C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C6__A__9S20493C10__8S20493C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20493C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C2__9S20493C10__8S20493C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(128,96),
  (VTBL_ENTRY)&(_ZTI9S20493C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__8S20493C1[] = {
  ABISELECT(-184,-124),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C13[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C15__8S20493C1[] = {
  ABISELECT(-208,-136),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C15__8S20493C1[] = {
  ABISELECT(-184,-124),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S20493C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C11__A1__8S20493C1[] = {
  ABISELECT(-120,-60),
  ABISELECT(-40,-20),
  ABISELECT(-224,-144),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C129S20493C11__A1__8S20493C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-224,-144),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C129S20493C11__A1__8S20493C1[] = {
  ABISELECT(-184,-124),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI9S20493C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C69S20493C11__A4__8S20493C1[] = {
  ABISELECT(-136,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20493C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20493C13__9S20493C11__A1__8S20493C1[] = {
  ABISELECT(-184,-124),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI9S20493C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20493C6__9S20493C11__A1__8S20493C1[] = {
  ABISELECT(-136,-68),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20493C11[0]),
};
extern void _ZN9S20493C16D1Ev();
extern void _ZN9S20493C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20493C16__8S20493C1[] = {
  ABISELECT(104,84),
  0,
  (VTBL_ENTRY)&(_ZTI9S20493C16[0]),
  (VTBL_ENTRY)&_ZN9S20493C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20493C16D0Ev,
};
static  VTT_ENTRY vtt_S20493C1[] = {
  {&(_ZTV8S20493C1[15]),  15,77},
  {&(_ZTV8S20493C1[22]),  22,77},
  {&(_ZTV8S20493C1[22]),  22,77},
  {&(_ZTV8S20493C1[29]),  29,77},
  {&(_ZTV8S20493C1[43]),  43,77},
  {&(_ZTV8S20493C1[54]),  54,77},
  {&(_ZTV8S20493C1[65]),  65,77},
  {&(_ZTV8S20493C1[59]),  59,77},
  {&(_ZTV8S20493C1[62]),  62,77},
  {&(_ZTV8S20493C1[69]),  69,77},
  {&(_ZTV8S20493C1[74]),  74,77},
  {&(_ZTV8S20493C1[77]),  77,77},
  {&(_ZTV8S20493C1[15]),  15,77},
  {&(_tg__ZTV8S20493C2__8S20493C1[5]),  5,5},
  {&(_tg__ZTV8S20493C2__8S20493C1[5]),  5,5},
  {&(_tg__ZTV8S20493C6__8S20493C1[3]),  3,3},
  {&(_tg__ZTV8S20493C7__8S20493C1[6]),  6,8},
  {&(_tg__ZTV8S20493C2__8S20493C7__8S20493C1[5]),  5,5},
  {&(_tg__ZTV8S20493C2__8S20493C7__8S20493C1[5]),  5,5},
  {&(_tg__ZTV8S20493C9__8S20493C1[11]),  11,13},
  {&(_tg__ZTV8S20493C68S20493C9__A3__8S20493C1[3]),  3,3},
  {&(_tg__ZTV9S20493C10__8S20493C9__8S20493C1[9]),  9,11},
  {&(_tg__ZTV9S20493C13__8S20493C9__8S20493C1[3]),  3,3},
  {&(_tg__ZTV8S20493C69S20493C119S20493C10__8S20493C9__8S20493C1[3]),  3,3},
  {&(_tg__ZTV8S20493C69S20493C10__A1__8S20493C9__8S20493C1[3]),  3,3},
  {&(_tg__ZTV8S20493C2__8S20493C9__8S20493C1[5]),  5,5},
  {&(_tg__ZTV8S20493C2__8S20493C9__8S20493C1[5]),  5,5},
  {&(_tg__ZTV9S20493C15__8S20493C9__8S20493C1[4]),  4,4},
  {&(_tg__ZTV9S20493C11__A1__8S20493C9__8S20493C1[5]),  5,5},
  {&(_tg__ZTV8S20493C69S20493C11__A4__8S20493C9__8S20493C1[3]),  3,3},
  {&(_tg__ZTV9S20493C10__8S20493C1[8]),  8,10},
  {&(_tg__ZTV9S20493C119S20493C10__8S20493C1[5]),  5,5},
  {&(_tg__ZTV9S20493C129S20493C119S20493C10__8S20493C1[4]),  4,4},
  {&(_tg__ZTV9S20493C13__9S20493C129S20493C119S20493C10__8S20493C1[3]),  3,3},
  {&(_tg__ZTV8S20493C69S20493C119S20493C10__A1__8S20493C1[3]),  3,3},
  {&(_tg__ZTV9S20493C13__9S20493C119S20493C10__8S20493C1[3]),  3,3},
  {&(_tg__ZTV8S20493C6__9S20493C119S20493C10__8S20493C1[3]),  3,3},
  {&(_tg__ZTV8S20493C69S20493C10__A2__8S20493C1[3]),  3,3},
  {&(_tg__ZTV9S20493C13__9S20493C10__8S20493C1[3]),  3,3},
  {&(_tg__ZTV8S20493C69S20493C11__9S20493C10__8S20493C1[3]),  3,3},
  {&(_tg__ZTV8S20493C6__A__9S20493C10__8S20493C1[3]),  3,3},
  {&(_tg__ZTV8S20493C2__9S20493C10__8S20493C1[5]),  5,5},
  {&(_tg__ZTV8S20493C2__9S20493C10__8S20493C1[5]),  5,5},
  {&(_tg__ZTV9S20493C13__8S20493C1[3]),  3,3},
  {&(_tg__ZTV9S20493C15__8S20493C1[4]),  4,4},
  {&(_tg__ZTV9S20493C13__9S20493C15__8S20493C1[3]),  3,3},
  {&(_tg__ZTV9S20493C11__A1__8S20493C1[5]),  5,5},
  {&(_tg__ZTV9S20493C129S20493C11__A1__8S20493C1[4]),  4,4},
  {&(_tg__ZTV9S20493C13__9S20493C129S20493C11__A1__8S20493C1[3]),  3,3},
  {&(_tg__ZTV8S20493C69S20493C11__A4__8S20493C1[3]),  3,3},
  {&(_tg__ZTV9S20493C13__9S20493C11__A1__8S20493C1[3]),  3,3},
  {&(_tg__ZTV8S20493C6__9S20493C11__A1__8S20493C1[3]),  3,3},
  {&(_tg__ZTV9S20493C16__8S20493C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20493C1[];
extern  VTBL_ENTRY _ZTV8S20493C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20493C1[];
static VTBL_ENTRY alt_thunk_names93[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20493C9D0Ev,_ZTv0_n36_N8S20493C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20493C9D0Ev,_ZThn8_N8S20493C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20493C9D1Ev,_ZTv0_n36_N8S20493C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20493C9D1Ev,_ZThn8_N8S20493C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20493C1D0Ev,_ZTv0_n36_N8S20493C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20493C1D0Ev,_ZThn104_N8S20493C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20493C1D1Ev,_ZTv0_n36_N8S20493C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20493C1D1Ev,_ZThn104_N8S20493C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20493C1D0Ev,_ZTv0_n48_N8S20493C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20493C1D0Ev,_ZThn96_N8S20493C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20493C1D1Ev,_ZTv0_n48_N8S20493C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20493C1D1Ev,_ZThn96_N8S20493C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20493C1D0Ev,_ZTv0_n28_N8S20493C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20493C1D0Ev,_ZThn88_N8S20493C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20493C1D1Ev,_ZTv0_n28_N8S20493C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20493C1D1Ev,_ZThn88_N8S20493C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20493C1 = {  "S20493C1", // class name
  bases_S20493C1, 33,
  &(vtc_S20493C1[0]), // expected_vtbl_contents
  &(vtt_S20493C1[0]), // expected_vtt_contents
  ABISELECT(256,160), // object size
  NSPAIRA(_ZTI8S20493C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20493C1),77, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20493C1),53, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names93,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S536C5  {
  virtual  ~S536C5(); // _ZN6S536C5D1Ev
  virtual void  v3(); // _ZN6S536C52v3Ev
  S536C5(); // tgen
};
//SIG(-1 S536C5) C1{ vd v1}


 S536C5 ::~S536C5(){ note_dtor("S536C5", this);}
void  S536C5 ::v3(){vfunc_called(this, "_ZN6S536C52v3Ev");}
S536C5 ::S536C5(){ note_ctor("S536C5", this);} // tgen

static void Test_S536C5()
{
  extern Class_Descriptor cd_S536C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S536C5, buf);
    S536C5 *dp, &lv = *(dp=new (buf) S536C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S536C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S536C5)");
    test_class_info(&lv, &cd_S536C5);
    dp->~S536C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS536C5(Test_S536C5, "S536C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S536C5C1Ev();
extern void _ZN6S536C5D1Ev();
Name_Map name_map_S536C5[] = {
  NSPAIR(_ZN6S536C5C1Ev),
  NSPAIR(_ZN6S536C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S536C5[];
extern void _ZN6S536C5D1Ev();
extern void _ZN6S536C5D0Ev();
extern void _ZN6S536C52v3Ev();
static  VTBL_ENTRY vtc_S536C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S536C5[0]),
  (VTBL_ENTRY)&_ZN6S536C5D1Ev,
  (VTBL_ENTRY)&_ZN6S536C5D0Ev,
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
};
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
Class_Descriptor cd_S536C5 = {  "S536C5", // class name
  0,0,//no base classes
  &(vtc_S536C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S536C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S536C5),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  S536C4  : S536C5 {
  virtual  ~S536C4(); // _ZN6S536C4D1Ev
  virtual void  v4(); // _ZN6S536C42v4Ev
  S536C4(); // tgen
};
//SIG(-1 S536C4) C1{ BC2{ vd v2} vd v1}


 S536C4 ::~S536C4(){ note_dtor("S536C4", this);}
void  S536C4 ::v4(){vfunc_called(this, "_ZN6S536C42v4Ev");}
S536C4 ::S536C4(){ note_ctor("S536C4", this);} // tgen

static void Test_S536C4()
{
  extern Class_Descriptor cd_S536C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S536C4, buf);
    S536C4 *dp, &lv = *(dp=new (buf) S536C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S536C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S536C4)");
    check_base_class_offset(lv, (S536C5*), 0, "S536C4");
    test_class_info(&lv, &cd_S536C4);
    dp->~S536C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS536C4(Test_S536C4, "S536C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S536C4C1Ev();
extern void _ZN6S536C4D1Ev();
Name_Map name_map_S536C4[] = {
  NSPAIR(_ZN6S536C4C1Ev),
  NSPAIR(_ZN6S536C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
static Base_Class bases_S536C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S536C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI6S536C4[];
extern void _ZN6S536C4D1Ev();
extern void _ZN6S536C4D0Ev();
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
static  VTBL_ENTRY vtc_S536C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S536C4[0]),
  (VTBL_ENTRY)&_ZN6S536C4D1Ev,
  (VTBL_ENTRY)&_ZN6S536C4D0Ev,
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
};
extern VTBL_ENTRY _ZTI6S536C4[];
extern  VTBL_ENTRY _ZTV6S536C4[];
Class_Descriptor cd_S536C4 = {  "S536C4", // class name
  bases_S536C4, 1,
  &(vtc_S536C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S536C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S536C4),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  S536C3  : S536C4 , S536C5 {
  virtual  ~S536C3(); // _ZN6S536C3D1Ev
  virtual void  v5(); // _ZN6S536C32v5Ev
  virtual void  v6(); // _ZN6S536C32v6Ev
  S536C3(); // tgen
};
//SIG(-1 S536C3) C1{ BC2{ BC3{ vd v3} vd v4} BC3 vd v1 v2}


 S536C3 ::~S536C3(){ note_dtor("S536C3", this);}
void  S536C3 ::v5(){vfunc_called(this, "_ZN6S536C32v5Ev");}
void  S536C3 ::v6(){vfunc_called(this, "_ZN6S536C32v6Ev");}
S536C3 ::S536C3(){ note_ctor("S536C3", this);} // tgen

static void Test_S536C3()
{
  extern Class_Descriptor cd_S536C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S536C3, buf);
    S536C3 *dp, &lv = *(dp=new (buf) S536C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S536C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S536C3)");
    check_base_class_offset(lv, (S536C5*)(S536C4*), 0, "S536C3");
    check_base_class_offset(lv, (S536C4*), 0, "S536C3");
    /*is_ambiguous_... S536C3::S536C5 */ AMB_check_base_class_offset(lv, (S536C5*), ABISELECT(8,4), "S536C3");
    test_class_info(&lv, &cd_S536C3);
    dp->~S536C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS536C3(Test_S536C3, "S536C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S536C3C1Ev();
extern void _ZN6S536C3D1Ev();
Name_Map name_map_S536C3[] = {
  NSPAIR(_ZN6S536C3C1Ev),
  NSPAIR(_ZN6S536C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C4;
extern VTBL_ENTRY _ZTI6S536C4[];
extern  VTBL_ENTRY _ZTV6S536C4[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
static Base_Class bases_S536C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S536C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S536C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S536C5,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S536C3[];
extern void _ZN6S536C3D1Ev();
extern void _ZN6S536C3D0Ev();
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
extern void ABISELECT(_ZThn8_N6S536C3D1Ev,_ZThn4_N6S536C3D1Ev)();
extern void ABISELECT(_ZThn8_N6S536C3D0Ev,_ZThn4_N6S536C3D0Ev)();
extern void _ZN6S536C52v3Ev();
static  VTBL_ENTRY vtc_S536C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S536C3[0]),
  (VTBL_ENTRY)&_ZN6S536C3D1Ev,
  (VTBL_ENTRY)&_ZN6S536C3D0Ev,
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S536C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S536C3D1Ev,_ZThn4_N6S536C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S536C3D0Ev,_ZThn4_N6S536C3D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
};
extern VTBL_ENTRY _ZTI6S536C3[];
extern  VTBL_ENTRY _ZTV6S536C3[];
Class_Descriptor cd_S536C3 = {  "S536C3", // class name
  bases_S536C3, 3,
  &(vtc_S536C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S536C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S536C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S536C6  : virtual S536C3 , virtual S536C4 {
  int s536c6f0;
  char s536c6f1;
  int s536c6f2;
  virtual  ~S536C6(); // _ZN6S536C6D2Ev
  virtual void  v7(); // _ZN6S536C62v7Ev
  virtual void  v8(); // _ZN6S536C62v8Ev
  virtual void  v9(); // _ZN6S536C62v9Ev
  virtual void  v10(); // _ZN6S536C63v10Ev
  virtual void  v11(); // _ZN6S536C63v11Ev
  virtual void  v12(); // _ZN6S536C63v12Ev
  S536C6(); // tgen
};
//SIG(-1 S536C6) C1{ VBC2{ BC3{ BC4{ vd v7} vd v8} BC4 vd v9 v10} VBC3 vd v1 v2 v3 v4 v5 v6 Fi Fc Fi}


 S536C6 ::~S536C6(){ note_dtor("S536C6", this);}
void  S536C6 ::v7(){vfunc_called(this, "_ZN6S536C62v7Ev");}
void  S536C6 ::v8(){vfunc_called(this, "_ZN6S536C62v8Ev");}
void  S536C6 ::v9(){vfunc_called(this, "_ZN6S536C62v9Ev");}
void  S536C6 ::v10(){vfunc_called(this, "_ZN6S536C63v10Ev");}
void  S536C6 ::v11(){vfunc_called(this, "_ZN6S536C63v11Ev");}
void  S536C6 ::v12(){vfunc_called(this, "_ZN6S536C63v12Ev");}
S536C6 ::S536C6(){ note_ctor("S536C6", this);} // tgen

static void Test_S536C6()
{
  extern Class_Descriptor cd_S536C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S536C6, buf);
    S536C6 *dp, &lv = *(dp=new (buf) S536C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S536C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S536C6)");
    check_base_class_offset(lv, (S536C5*)(S536C4*)(S536C3*), ABISELECT(24,16), "S536C6");
    check_base_class_offset(lv, (S536C4*)(S536C3*), ABISELECT(24,16), "S536C6");
    /*is_ambiguous_... S536C3::S536C5 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C3*), ABISELECT(32,20), "S536C6");
    check_base_class_offset(lv, (S536C3*), ABISELECT(24,16), "S536C6");
    /*is_ambiguous_... S536C6::S536C4 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C4*), 0, "S536C6");
    /*is_ambiguous_... S536C6::S536C4 */ AMB_check_base_class_offset(lv, (S536C4*), 0, "S536C6");
    check_field_offset(lv, s536c6f0, ABISELECT(8,4), "S536C6.s536c6f0");
    check_field_offset(lv, s536c6f1, ABISELECT(12,8), "S536C6.s536c6f1");
    check_field_offset(lv, s536c6f2, ABISELECT(16,12), "S536C6.s536c6f2");
    test_class_info(&lv, &cd_S536C6);
    dp->~S536C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS536C6(Test_S536C6, "S536C6", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN6S536C6C1Ev();
extern void _ZN6S536C6D2Ev();
Name_Map name_map_S536C6[] = {
  NSPAIR(_ZN6S536C6C1Ev),
  NSPAIR(_ZN6S536C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C4;
extern VTBL_ENTRY _ZTI6S536C4[];
extern  VTBL_ENTRY _ZTV6S536C4[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C3;
extern VTBL_ENTRY _ZTI6S536C3[];
extern  VTBL_ENTRY _ZTV6S536C3[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C4;
extern VTBL_ENTRY _ZTI6S536C4[];
extern  VTBL_ENTRY _ZTV6S536C4[];
static Base_Class bases_S536C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S536C5,    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, 0},
  {&cd_S536C4,    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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S536C5,    ABISELECT(32,20), //bcp->offset
    30, //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
    3, //immediately_derived
  0, 0},
  {&cd_S536C3,    ABISELECT(24,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S536C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S536C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI6S536C6[];
extern void ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev)();
extern void _ZN6S536C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev)();
extern void _ZN6S536C6D0Ev() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C62v7Ev();
extern void _ZN6S536C62v8Ev();
extern void _ZN6S536C62v9Ev();
extern void _ZN6S536C63v10Ev();
extern void _ZN6S536C63v11Ev();
extern void _ZN6S536C63v12Ev();
extern void ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev)();
extern void ABISELECT(_ZThn24_N6S536C6D1Ev,_ZThn16_N6S536C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev)();
extern void ABISELECT(_ZThn24_N6S536C6D0Ev,_ZThn16_N6S536C6D0Ev)() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
extern void ABISELECT(_ZTvn8_n24_N6S536C6D1Ev,_ZTvn4_n12_N6S536C6D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N6S536C6D0Ev,_ZTvn4_n12_N6S536C6D0Ev)();
extern void _ZN6S536C52v3Ev();
static  VTBL_ENTRY vtc_S536C6[] = {
  0,
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI6S536C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C62v7Ev,
  (VTBL_ENTRY)&_ZN6S536C62v8Ev,
  (VTBL_ENTRY)&_ZN6S536C62v9Ev,
  (VTBL_ENTRY)&_ZN6S536C63v10Ev,
  (VTBL_ENTRY)&_ZN6S536C63v11Ev,
  (VTBL_ENTRY)&_ZN6S536C63v12Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI6S536C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI6S536C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C6D1Ev,_ZTvn4_n12_N6S536C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C6D0Ev,_ZTvn4_n12_N6S536C6D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
};
extern VTBL_ENTRY _ZTV6S536C6[];
static  VTT_ENTRY vtt_S536C6[] = {
  {&(_ZTV6S536C6[7]),  7,35},
  {&(_ZTV6S536C6[24]),  24,35},
  {&(_ZTV6S536C6[32]),  32,35},
  {&(_ZTV6S536C6[7]),  7,35},
};
extern VTBL_ENTRY _ZTI6S536C6[];
extern  VTBL_ENTRY _ZTV6S536C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S536C6[];
static VTBL_ENTRY alt_thunk_names94[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N6S536C6D0Ev,_ZThn16_N6S536C6D0Ev),
  (VTBL_ENTRY)_ZN6S536C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N6S536C6D1Ev,_ZThn16_N6S536C6D1Ev),
  (VTBL_ENTRY)_ZN6S536C6D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S536C6 = {  "S536C6", // class name
  bases_S536C6, 6,
  &(vtc_S536C6[0]), // expected_vtbl_contents
  &(vtt_S536C6[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI6S536C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S536C6),35, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S536C6),4, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names94,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S536C2  : S536C3 , S536C6 , S536C5 {
  ::S19426C9_nt s536c2f0;
  virtual void  v13(); // _ZN6S536C23v13Ev
  virtual void  v14(); // _ZN6S536C23v14Ev
  ~S536C2(); // tgen
  S536C2(); // tgen
};
//SIG(-1 S536C2) C1{ BC2{ BC3{ BC4{ vd v3} vd v4} BC4 vd v5 v6} BC5{ VBC2 VBC3 vd v7 v8 v9 v10 v11 v12 Fi Fc Fi} BC4 v1 v2 FU6{ m}}


void  S536C2 ::v13(){vfunc_called(this, "_ZN6S536C23v13Ev");}
void  S536C2 ::v14(){vfunc_called(this, "_ZN6S536C23v14Ev");}
S536C2 ::~S536C2(){ note_dtor("S536C2", this);} // tgen
S536C2 ::S536C2(){ note_ctor("S536C2", this);} // tgen

static void Test_S536C2()
{
  extern Class_Descriptor cd_S536C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S536C2, buf);
    S536C2 *dp, &lv = *(dp=new (buf) S536C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S536C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S536C2)");
    /*is_ambiguous_... S536C2::S536C3 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C4*)(S536C3*), 0, "S536C2");
    /*is_ambiguous_... S536C2::S536C3 */ AMB_check_base_class_offset(lv, (S536C4*)(S536C3*), 0, "S536C2");
    /*is_ambiguous_... S536C2::S536C3 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C3*), ABISELECT(8,4), "S536C2");
    /*is_ambiguous_... S536C2::S536C3 */ AMB_check_base_class_offset(lv, (S536C3*), 0, "S536C2");
    /*is_ambiguous_... S536C2::S536C3 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C4*)(S536C3*), ABISELECT(56,32), "S536C2");
    /*is_ambiguous_... S536C2::S536C3 */ AMB_check_base_class_offset(lv, (S536C4*)(S536C3*), ABISELECT(56,32), "S536C2");
    /*is_ambiguous_... S536C2::S536C3 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C3*), ABISELECT(64,36), "S536C2");
    check_base_class_offset(lv, (S536C3*)(S536C6*), ABISELECT(56,32), "S536C2");
    /*is_ambiguous_... S536C2::S536C4 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C4*), ABISELECT(16,8), "S536C2");
    /*is_ambiguous_... S536C6::S536C4 */ AMB_check_base_class_offset(lv, (S536C4*)(S536C6*), ABISELECT(16,8), "S536C2");
    check_base_class_offset(lv, (S536C6*), ABISELECT(16,8), "S536C2");
    /*is_ambiguous_... S536C2::S536C5 */ AMB_check_base_class_offset(lv, (S536C5*), ABISELECT(40,24), "S536C2");
    check_field_offset(lv, s536c2f0, ABISELECT(48,28), "S536C2.s536c2f0");
    test_class_info(&lv, &cd_S536C2);
    dp->~S536C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS536C2(Test_S536C2, "S536C2", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN6S536C2C1Ev();
extern void _ZN6S536C2D1Ev();
Name_Map name_map_S536C2[] = {
  NSPAIR(_ZN6S536C2C1Ev),
  NSPAIR(_ZN6S536C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C4;
extern VTBL_ENTRY _ZTI6S536C4[];
extern  VTBL_ENTRY _ZTV6S536C4[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C3;
extern VTBL_ENTRY _ZTI6S536C3[];
extern  VTBL_ENTRY _ZTV6S536C3[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C4;
extern VTBL_ENTRY _ZTI6S536C4[];
extern  VTBL_ENTRY _ZTV6S536C4[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C3;
extern VTBL_ENTRY _ZTI6S536C3[];
extern  VTBL_ENTRY _ZTV6S536C3[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C4;
extern VTBL_ENTRY _ZTI6S536C4[];
extern  VTBL_ENTRY _ZTV6S536C4[];
extern Class_Descriptor cd_S536C6;
extern VTBL_ENTRY _ZTI6S536C6[];
extern  VTBL_ENTRY _ZTV6S536C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S536C6[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
static Base_Class bases_S536C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S536C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S536C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S536C5,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S536C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S536C5,    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_S536C4,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S536C5,    ABISELECT(64,36), //bcp->offset
    52, //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
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S536C3,    ABISELECT(56,32), //bcp->offset
    39, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S536C5,    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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S536C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S536C6,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //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},
  {&cd_S536C5,    ABISELECT(40,24), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S536C2[];
extern void _ZN6S536C2D1Ev();
extern void _ZN6S536C2D0Ev();
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
extern void _ZN6S536C23v13Ev();
extern void _ZN6S536C23v14Ev();
extern void ABISELECT(_ZThn8_N6S536C2D1Ev,_ZThn4_N6S536C2D1Ev)();
extern void ABISELECT(_ZThn8_N6S536C2D0Ev,_ZThn4_N6S536C2D0Ev)();
extern void _ZN6S536C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N6S536C2D1Ev,_ZTv0_n12_N6S536C2D1Ev)();
extern void ABISELECT(_ZThn16_N6S536C2D1Ev,_ZThn8_N6S536C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C2D0Ev,_ZTv0_n12_N6S536C2D0Ev)();
extern void ABISELECT(_ZThn16_N6S536C2D0Ev,_ZThn8_N6S536C2D0Ev)() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C62v7Ev();
extern void _ZN6S536C62v8Ev();
extern void _ZN6S536C62v9Ev();
extern void _ZN6S536C63v10Ev();
extern void _ZN6S536C63v11Ev();
extern void _ZN6S536C63v12Ev();
extern void ABISELECT(_ZThn40_N6S536C2D1Ev,_ZThn24_N6S536C2D1Ev)();
extern void ABISELECT(_ZThn40_N6S536C2D0Ev,_ZThn24_N6S536C2D0Ev)();
extern void _ZN6S536C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N6S536C2D1Ev,_ZTv0_n12_N6S536C2D1Ev)();
extern void ABISELECT(_ZThn56_N6S536C2D1Ev,_ZThn32_N6S536C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C2D0Ev,_ZTv0_n12_N6S536C2D0Ev)();
extern void ABISELECT(_ZThn56_N6S536C2D0Ev,_ZThn32_N6S536C2D0Ev)() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
extern void ABISELECT(_ZTvn8_n24_N6S536C2D1Ev,_ZTvn4_n12_N6S536C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N6S536C2D0Ev,_ZTvn4_n12_N6S536C2D0Ev)();
extern void _ZN6S536C52v3Ev();
static  VTBL_ENTRY vtc_S536C2[] = {
  ABISELECT(16,8),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI6S536C2[0]),
  (VTBL_ENTRY)&_ZN6S536C2D1Ev,
  (VTBL_ENTRY)&_ZN6S536C2D0Ev,
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
  (VTBL_ENTRY)&_ZN6S536C23v13Ev,
  (VTBL_ENTRY)&_ZN6S536C23v14Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S536C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S536C2D1Ev,_ZThn4_N6S536C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S536C2D0Ev,_ZThn4_N6S536C2D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI6S536C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C2D1Ev,_ZTv0_n12_N6S536C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C2D0Ev,_ZTv0_n12_N6S536C2D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C62v7Ev,
  (VTBL_ENTRY)&_ZN6S536C62v8Ev,
  (VTBL_ENTRY)&_ZN6S536C62v9Ev,
  (VTBL_ENTRY)&_ZN6S536C63v10Ev,
  (VTBL_ENTRY)&_ZN6S536C63v11Ev,
  (VTBL_ENTRY)&_ZN6S536C63v12Ev,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI6S536C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N6S536C2D1Ev,_ZThn24_N6S536C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N6S536C2D0Ev,_ZThn24_N6S536C2D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI6S536C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C2D1Ev,_ZTv0_n12_N6S536C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C2D0Ev,_ZTv0_n12_N6S536C2D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI6S536C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C2D1Ev,_ZTvn4_n12_N6S536C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C2D0Ev,_ZTvn4_n12_N6S536C2D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
};
extern VTBL_ENTRY _ZTV6S536C2[];
extern void ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev)();
extern void _ZN6S536C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev)();
extern void _ZN6S536C6D0Ev() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C62v7Ev();
extern void _ZN6S536C62v8Ev();
extern void _ZN6S536C62v9Ev();
extern void _ZN6S536C63v10Ev();
extern void _ZN6S536C63v11Ev();
extern void _ZN6S536C63v12Ev();
static  VTBL_ENTRY _tg__ZTV6S536C6__6S536C2[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI6S536C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C62v7Ev,
  (VTBL_ENTRY)&_ZN6S536C62v8Ev,
  (VTBL_ENTRY)&_ZN6S536C62v9Ev,
  (VTBL_ENTRY)&_ZN6S536C63v10Ev,
  (VTBL_ENTRY)&_ZN6S536C63v11Ev,
  (VTBL_ENTRY)&_ZN6S536C63v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev)();
extern void ABISELECT(_ZThn40_N6S536C6D1Ev,_ZThn24_N6S536C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev)();
extern void ABISELECT(_ZThn40_N6S536C6D0Ev,_ZThn24_N6S536C6D0Ev)() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
static  VTBL_ENTRY _tg__ZTV6S536C3__6S536C6__6S536C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI6S536C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
};
extern void ABISELECT(_ZTvn8_n24_N6S536C6D1Ev,_ZTvn4_n12_N6S536C6D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N6S536C6D0Ev,_ZTvn4_n12_N6S536C6D0Ev)();
extern void _ZN6S536C52v3Ev();
static  VTBL_ENTRY _tg__ZTV6S536C56S536C3__A1__6S536C6__6S536C2[] = {
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI6S536C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C6D1Ev,_ZTvn4_n12_N6S536C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C6D0Ev,_ZTvn4_n12_N6S536C6D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
};
static  VTT_ENTRY vtt_S536C2[] = {
  {&(_ZTV6S536C2[4]),  4,57},
  {&(_tg__ZTV6S536C6__6S536C2[7]),  7,17},
  {&(_tg__ZTV6S536C3__6S536C6__6S536C2[7]),  7,13},
  {&(_tg__ZTV6S536C56S536C3__A1__6S536C6__6S536C2[2]),  2,5},
  {&(_tg__ZTV6S536C6__6S536C2[7]),  7,17},
  {&(_ZTV6S536C2[24]),  24,57},
  {&(_ZTV6S536C2[46]),  46,57},
  {&(_ZTV6S536C2[54]),  54,57},
  {&(_ZTV6S536C2[24]),  24,57},
};
extern VTBL_ENTRY _ZTI6S536C2[];
extern  VTBL_ENTRY _ZTV6S536C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S536C2[];
static VTBL_ENTRY alt_thunk_names95[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N6S536C6D0Ev,_ZThn24_N6S536C6D0Ev),
  (VTBL_ENTRY)_ZN6S536C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N6S536C6D1Ev,_ZThn24_N6S536C6D1Ev),
  (VTBL_ENTRY)_ZN6S536C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S536C2D0Ev,_ZTv0_n12_N6S536C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N6S536C2D0Ev,_ZThn32_N6S536C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N6S536C2D0Ev,_ZThn8_N6S536C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S536C2D1Ev,_ZTv0_n12_N6S536C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N6S536C2D1Ev,_ZThn32_N6S536C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N6S536C2D1Ev,_ZThn8_N6S536C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S536C2 = {  "S536C2", // class name
  bases_S536C2, 12,
  &(vtc_S536C2[0]), // expected_vtbl_contents
  &(vtt_S536C2[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI6S536C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV6S536C2),57, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S536C2),9, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names95,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S536C8  : S536C3 {
  ::S536C3 s536c8f0;
  ::S536C5 s536c8f1;
  virtual  ~S536C8(); // _ZN6S536C8D1Ev
  virtual void  v15(); // _ZN6S536C83v15Ev
  virtual void  v16(); // _ZN6S536C83v16Ev
  virtual void  v17(); // _ZN6S536C83v17Ev
  virtual void  v18(); // _ZN6S536C83v18Ev
  virtual void  v19(); // _ZN6S536C83v19Ev
  S536C8(); // tgen
};
//SIG(-1 S536C8) C1{ BC2{ BC3{ BC4{ vd v6} vd v7} BC4 vd v8 v9} vd v1 v2 v3 v4 v5 FC2 FC4}


 S536C8 ::~S536C8(){ note_dtor("S536C8", this);}
void  S536C8 ::v15(){vfunc_called(this, "_ZN6S536C83v15Ev");}
void  S536C8 ::v16(){vfunc_called(this, "_ZN6S536C83v16Ev");}
void  S536C8 ::v17(){vfunc_called(this, "_ZN6S536C83v17Ev");}
void  S536C8 ::v18(){vfunc_called(this, "_ZN6S536C83v18Ev");}
void  S536C8 ::v19(){vfunc_called(this, "_ZN6S536C83v19Ev");}
S536C8 ::S536C8(){ note_ctor("S536C8", this);} // tgen

static void Test_S536C8()
{
  extern Class_Descriptor cd_S536C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S536C8, buf);
    S536C8 *dp, &lv = *(dp=new (buf) S536C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S536C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S536C8)");
    check_base_class_offset(lv, (S536C5*)(S536C4*)(S536C3*), 0, "S536C8");
    check_base_class_offset(lv, (S536C4*)(S536C3*), 0, "S536C8");
    /*is_ambiguous_... S536C3::S536C5 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C3*), ABISELECT(8,4), "S536C8");
    check_base_class_offset(lv, (S536C3*), 0, "S536C8");
    check_field_offset(lv, s536c8f0, ABISELECT(16,8), "S536C8.s536c8f0");
    check_field_offset(lv, s536c8f1, ABISELECT(32,16), "S536C8.s536c8f1");
    test_class_info(&lv, &cd_S536C8);
    dp->~S536C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS536C8(Test_S536C8, "S536C8", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN6S536C8C1Ev();
extern void _ZN6S536C8D1Ev();
Name_Map name_map_S536C8[] = {
  NSPAIR(_ZN6S536C8C1Ev),
  NSPAIR(_ZN6S536C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C4;
extern VTBL_ENTRY _ZTI6S536C4[];
extern  VTBL_ENTRY _ZTV6S536C4[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C3;
extern VTBL_ENTRY _ZTI6S536C3[];
extern  VTBL_ENTRY _ZTV6S536C3[];
static Base_Class bases_S536C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S536C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S536C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S536C5,    ABISELECT(8,4), //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S536C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S536C8[];
extern void _ZN6S536C8D1Ev();
extern void _ZN6S536C8D0Ev();
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
extern void _ZN6S536C83v15Ev();
extern void _ZN6S536C83v16Ev();
extern void _ZN6S536C83v17Ev();
extern void _ZN6S536C83v18Ev();
extern void _ZN6S536C83v19Ev();
extern void ABISELECT(_ZThn8_N6S536C8D1Ev,_ZThn4_N6S536C8D1Ev)();
extern void ABISELECT(_ZThn8_N6S536C8D0Ev,_ZThn4_N6S536C8D0Ev)();
extern void _ZN6S536C52v3Ev();
static  VTBL_ENTRY vtc_S536C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S536C8[0]),
  (VTBL_ENTRY)&_ZN6S536C8D1Ev,
  (VTBL_ENTRY)&_ZN6S536C8D0Ev,
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
  (VTBL_ENTRY)&_ZN6S536C83v15Ev,
  (VTBL_ENTRY)&_ZN6S536C83v16Ev,
  (VTBL_ENTRY)&_ZN6S536C83v17Ev,
  (VTBL_ENTRY)&_ZN6S536C83v18Ev,
  (VTBL_ENTRY)&_ZN6S536C83v19Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S536C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S536C8D1Ev,_ZThn4_N6S536C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S536C8D0Ev,_ZThn4_N6S536C8D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
};
extern VTBL_ENTRY _ZTI6S536C8[];
extern  VTBL_ENTRY _ZTV6S536C8[];
Class_Descriptor cd_S536C8 = {  "S536C8", // class name
  bases_S536C8, 4,
  &(vtc_S536C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI6S536C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S536C8),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  S536C9  : virtual S536C3 , virtual S536C4 , virtual S536C8 , virtual S536C6 , virtual S536C5 {
  virtual void  v20(); // _ZN6S536C93v20Ev
  virtual void  v21(); // _ZN6S536C93v21Ev
  virtual void  v22(); // _ZN6S536C93v22Ev
  ~S536C9(); // tgen
  S536C9(); // tgen
};
//SIG(-1 S536C9) C1{ VBC2{ BC3{ BC4{ vd v4} vd v5} BC4 vd v6 v7} VBC3 VBC5{ BC2 vd v8 v9 v10 v11 v12 FC2 FC4} VBC6{ VBC2 VBC3 vd v13 v14 v15 v16 v17 v18 Fi Fc Fi} VBC4 v1 v2 v3}


void  S536C9 ::v20(){vfunc_called(this, "_ZN6S536C93v20Ev");}
void  S536C9 ::v21(){vfunc_called(this, "_ZN6S536C93v21Ev");}
void  S536C9 ::v22(){vfunc_called(this, "_ZN6S536C93v22Ev");}
S536C9 ::~S536C9(){ note_dtor("S536C9", this);} // tgen
S536C9 ::S536C9(){ note_ctor("S536C9", this);} // tgen

static void Test_S536C9()
{
  extern Class_Descriptor cd_S536C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S536C9, buf);
    S536C9 *dp, &lv = *(dp=new (buf) S536C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S536C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S536C9)");
    /*is_ambiguous_... S536C9::S536C3 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C4*)(S536C3*), ABISELECT(8,4), "S536C9");
    /*is_ambiguous_... S536C9::S536C3 */ AMB_check_base_class_offset(lv, (S536C4*)(S536C3*), ABISELECT(8,4), "S536C9");
    /*is_ambiguous_... S536C9::S536C3 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C3*), ABISELECT(16,8), "S536C9");
    /*is_ambiguous_... S536C9::S536C3 */ AMB_check_base_class_offset(lv, (S536C3*), ABISELECT(8,4), "S536C9");
    check_base_class_offset(lv, (S536C3*)(S536C6*), ABISELECT(8,4), "S536C9");
    /*is_ambiguous_... S536C9::S536C4 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C4*), ABISELECT(64,32), "S536C9");
    /*is_ambiguous_... S536C9::S536C4 */ AMB_check_base_class_offset(lv, (S536C4*), ABISELECT(64,32), "S536C9");
    /*is_ambiguous_... S536C6::S536C4 */ AMB_check_base_class_offset(lv, (S536C4*)(S536C6*), ABISELECT(64,32), "S536C9");
    check_base_class_offset(lv, (S536C5*)(S536C4*)(S536C3*)(S536C8*), ABISELECT(24,12), "S536C9");
    check_base_class_offset(lv, (S536C4*)(S536C3*)(S536C8*), ABISELECT(24,12), "S536C9");
    /*is_ambiguous_... S536C3::S536C5 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C3*)(S536C8*), ABISELECT(32,16), "S536C9");
    check_base_class_offset(lv, (S536C3*)(S536C8*), ABISELECT(24,12), "S536C9");
    check_base_class_offset(lv, (S536C8*), ABISELECT(24,12), "S536C9");
    check_base_class_offset(lv, (S536C6*), ABISELECT(64,32), "S536C9");
    /*is_ambiguous_... S536C9::S536C5 */ AMB_check_base_class_offset(lv, (S536C5*), 0, "S536C9");
    test_class_info(&lv, &cd_S536C9);
    dp->~S536C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS536C9(Test_S536C9, "S536C9", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN6S536C9C1Ev();
extern void _ZN6S536C9D1Ev();
Name_Map name_map_S536C9[] = {
  NSPAIR(_ZN6S536C9C1Ev),
  NSPAIR(_ZN6S536C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C4;
extern VTBL_ENTRY _ZTI6S536C4[];
extern  VTBL_ENTRY _ZTV6S536C4[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C3;
extern VTBL_ENTRY _ZTI6S536C3[];
extern  VTBL_ENTRY _ZTV6S536C3[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C4;
extern VTBL_ENTRY _ZTI6S536C4[];
extern  VTBL_ENTRY _ZTV6S536C4[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C4;
extern VTBL_ENTRY _ZTI6S536C4[];
extern  VTBL_ENTRY _ZTV6S536C4[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C3;
extern VTBL_ENTRY _ZTI6S536C3[];
extern  VTBL_ENTRY _ZTV6S536C3[];
extern Class_Descriptor cd_S536C8;
extern VTBL_ENTRY _ZTI6S536C8[];
extern  VTBL_ENTRY _ZTV6S536C8[];
extern Class_Descriptor cd_S536C6;
extern VTBL_ENTRY _ZTI6S536C6[];
extern  VTBL_ENTRY _ZTV6S536C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S536C6[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
static Base_Class bases_S536C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S536C5,    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_S536C4,    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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S536C5,    ABISELECT(16,8), //bcp->offset
    28, //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
    3, //immediately_derived
  0, 0},
  {&cd_S536C3,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S536C5,    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
    5, //immediately_derived
  0, 0},
  {&cd_S536C4,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S536C5,    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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S536C4,    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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S536C5,    ABISELECT(32,16), //bcp->offset
    56, //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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S536C3,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S536C8,    ABISELECT(24,12), //bcp->offset
    33, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S536C6,    ABISELECT(64,32), //bcp->offset
    61, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S536C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI6S536C9[];
extern void ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev)();
extern void _ZN6S536C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev)();
extern void _ZN6S536C9D0Ev() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C93v20Ev();
extern void _ZN6S536C93v21Ev();
extern void _ZN6S536C93v22Ev();
extern void ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev)();
extern void ABISELECT(_ZThn8_N6S536C9D1Ev,_ZThn4_N6S536C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev)();
extern void ABISELECT(_ZThn8_N6S536C9D0Ev,_ZThn4_N6S536C9D0Ev)() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
extern void ABISELECT(_ZTvn8_n24_N6S536C9D1Ev,_ZTvn4_n12_N6S536C9D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N6S536C9D0Ev,_ZTvn4_n12_N6S536C9D0Ev)();
extern void _ZN6S536C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev)();
extern void ABISELECT(_ZThn24_N6S536C9D1Ev,_ZThn12_N6S536C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev)();
extern void ABISELECT(_ZThn24_N6S536C9D0Ev,_ZThn12_N6S536C9D0Ev)() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
extern void _ZN6S536C83v15Ev();
extern void _ZN6S536C83v16Ev();
extern void _ZN6S536C83v17Ev();
extern void _ZN6S536C83v18Ev();
extern void _ZN6S536C83v19Ev();
extern void ABISELECT(_ZTvn8_n24_N6S536C9D1Ev,_ZTvn4_n12_N6S536C9D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N6S536C9D0Ev,_ZTvn4_n12_N6S536C9D0Ev)();
extern void _ZN6S536C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev)();
extern void ABISELECT(_ZThn64_N6S536C9D1Ev,_ZThn32_N6S536C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev)();
extern void ABISELECT(_ZThn64_N6S536C9D0Ev,_ZThn32_N6S536C9D0Ev)() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C62v7Ev();
extern void _ZN6S536C62v8Ev();
extern void _ZN6S536C62v9Ev();
extern void _ZN6S536C63v10Ev();
extern void _ZN6S536C63v11Ev();
extern void _ZN6S536C63v12Ev();
static  VTBL_ENTRY vtc_S536C9[] = {
  0,
  ABISELECT(64,32),
  ABISELECT(24,12),
  ABISELECT(64,32),
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI6S536C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C93v20Ev,
  (VTBL_ENTRY)&_ZN6S536C93v21Ev,
  (VTBL_ENTRY)&_ZN6S536C93v22Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S536C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI6S536C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C9D1Ev,_ZTvn4_n12_N6S536C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C9D0Ev,_ZTvn4_n12_N6S536C9D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI6S536C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
  (VTBL_ENTRY)&_ZN6S536C83v15Ev,
  (VTBL_ENTRY)&_ZN6S536C83v16Ev,
  (VTBL_ENTRY)&_ZN6S536C83v17Ev,
  (VTBL_ENTRY)&_ZN6S536C83v18Ev,
  (VTBL_ENTRY)&_ZN6S536C83v19Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI6S536C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C9D1Ev,_ZTvn4_n12_N6S536C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C9D0Ev,_ZTvn4_n12_N6S536C9D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI6S536C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C62v7Ev,
  (VTBL_ENTRY)&_ZN6S536C62v8Ev,
  (VTBL_ENTRY)&_ZN6S536C62v9Ev,
  (VTBL_ENTRY)&_ZN6S536C63v10Ev,
  (VTBL_ENTRY)&_ZN6S536C63v11Ev,
  (VTBL_ENTRY)&_ZN6S536C63v12Ev,
};
extern VTBL_ENTRY _ZTV6S536C9[];
extern void ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev)();
extern void _ZN6S536C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev)();
extern void _ZN6S536C6D0Ev() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C62v7Ev();
extern void _ZN6S536C62v8Ev();
extern void _ZN6S536C62v9Ev();
extern void _ZN6S536C63v10Ev();
extern void _ZN6S536C63v11Ev();
extern void _ZN6S536C63v12Ev();
static  VTBL_ENTRY _tg__ZTV6S536C6__6S536C9[] = {
  0,
  ABISELECT(-56,-28),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI6S536C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C62v7Ev,
  (VTBL_ENTRY)&_ZN6S536C62v8Ev,
  (VTBL_ENTRY)&_ZN6S536C62v9Ev,
  (VTBL_ENTRY)&_ZN6S536C63v10Ev,
  (VTBL_ENTRY)&_ZN6S536C63v11Ev,
  (VTBL_ENTRY)&_ZN6S536C63v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev)();
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
static  VTBL_ENTRY _tg__ZTV6S536C3__6S536C6__6S536C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI6S536C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
};
extern void ABISELECT(_ZTvn8_n24_N6S536C6D1Ev,_ZTvn4_n12_N6S536C6D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N6S536C6D0Ev,_ZTvn4_n12_N6S536C6D0Ev)();
extern void _ZN6S536C52v3Ev();
static  VTBL_ENTRY _tg__ZTV6S536C56S536C3__A1__6S536C6__6S536C9[] = {
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI6S536C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C6D1Ev,_ZTvn4_n12_N6S536C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C6D0Ev,_ZTvn4_n12_N6S536C6D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
};
static  VTT_ENTRY vtt_S536C9[] = {
  {&(_ZTV6S536C9[9]),  9,84},
  {&(_ZTV6S536C9[22]),  22,84},
  {&(_ZTV6S536C9[30]),  30,84},
  {&(_ZTV6S536C9[74]),  74,84},
  {&(_ZTV6S536C9[45]),  45,84},
  {&(_ZTV6S536C9[58]),  58,84},
  {&(_ZTV6S536C9[74]),  74,84},
  {&(_ZTV6S536C9[9]),  9,84},
  {&(_tg__ZTV6S536C6__6S536C9[7]),  7,17},
  {&(_tg__ZTV6S536C3__6S536C6__6S536C9[7]),  7,13},
  {&(_tg__ZTV6S536C56S536C3__A1__6S536C6__6S536C9[2]),  2,5},
  {&(_tg__ZTV6S536C6__6S536C9[7]),  7,17},
};
extern VTBL_ENTRY _ZTI6S536C9[];
extern  VTBL_ENTRY _ZTV6S536C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S536C9[];
static VTBL_ENTRY alt_thunk_names96[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev), // 
  (VTBL_ENTRY)_ZN6S536C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev), // 
  (VTBL_ENTRY)_ZN6S536C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N6S536C9D0Ev,_ZThn32_N6S536C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N6S536C9D0Ev,_ZThn12_N6S536C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N6S536C9D0Ev,_ZThn4_N6S536C9D0Ev),
  (VTBL_ENTRY)_ZN6S536C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N6S536C9D1Ev,_ZThn32_N6S536C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N6S536C9D1Ev,_ZThn12_N6S536C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N6S536C9D1Ev,_ZThn4_N6S536C9D1Ev),
  (VTBL_ENTRY)_ZN6S536C9D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S536C9 = {  "S536C9", // class name
  bases_S536C9, 13,
  &(vtc_S536C9[0]), // expected_vtbl_contents
  &(vtt_S536C9[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI6S536C9),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV6S536C9),84, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S536C9),12, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names96,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S536C1  : S536C2 , S536C8 , virtual S536C9 , S536C4 {
  short s536c1f0;
  virtual  ~S536C1(); // _ZN6S536C1D2Ev
  virtual void  v1(); // _ZN6S536C12v1Ev
  virtual void  v2(); // _ZN6S536C12v2Ev
  S536C1(); // tgen
};
//SIG(1 S536C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v3} vd v4} BC5 vd v5 v6} BC6{ VBC3 VBC4 vd v7 v8 v9 v10 v11 v12 Fi Fc Fi} BC5 v13 v14 FU7{ m}} BC8{ BC3 vd v15 v16 v17 v18 v19 FC3 FC5} VBC9{ VBC3 VBC4 VBC8 VBC6 VBC5 v20 v21 v22} BC4 vd v1 v2 Fs}


 S536C1 ::~S536C1(){ note_dtor("S536C1", this);}
void  S536C1 ::v1(){vfunc_called(this, "_ZN6S536C12v1Ev");}
void  S536C1 ::v2(){vfunc_called(this, "_ZN6S536C12v2Ev");}
S536C1 ::S536C1(){ note_ctor("S536C1", this);} // tgen

static void Test_S536C1()
{
  extern Class_Descriptor cd_S536C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,28)];
    init_test(&cd_S536C1, buf);
    S536C1 *dp, &lv = *(dp=new (buf) S536C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,108), "sizeof(S536C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S536C1)");
    /*is_ambiguous_... S536C2::S536C3 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C4*)(S536C3*)(S536C2*), 0, "S536C1");
    /*is_ambiguous_... S536C2::S536C3 */ AMB_check_base_class_offset(lv, (S536C4*)(S536C3*)(S536C2*), 0, "S536C1");
    /*is_ambiguous_... S536C2::S536C3 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C3*)(S536C2*), ABISELECT(8,4), "S536C1");
    /*is_ambiguous_... S536C2::S536C3 */ AMB_check_base_class_offset(lv, (S536C3*)(S536C2*), 0, "S536C1");
    /*is_ambiguous_... S536C1::S536C3 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C4*)(S536C3*), ABISELECT(112,60), "S536C1");
    /*is_ambiguous_... S536C1::S536C3 */ AMB_check_base_class_offset(lv, (S536C4*)(S536C3*), ABISELECT(112,60), "S536C1");
    /*is_ambiguous_... S536C1::S536C3 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C3*), ABISELECT(120,64), "S536C1");
    check_base_class_offset(lv, (S536C3*)(S536C6*)(S536C2*), ABISELECT(112,60), "S536C1");
    /*is_ambiguous_... S536C9::S536C3 */ AMB_check_base_class_offset(lv, (S536C3*)(S536C9*), ABISELECT(112,60), "S536C1");
    /*is_ambiguous_... S536C1::S536C6 */ AMB_check_base_class_offset(lv, (S536C3*)(S536C6*), ABISELECT(112,60), "S536C1");
    /*is_ambiguous_... S536C1::S536C4 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C4*), ABISELECT(16,8), "S536C1");
    /*is_ambiguous_... S536C6::S536C4 */ AMB_check_base_class_offset(lv, (S536C4*)(S536C6*)(S536C2*), ABISELECT(16,8), "S536C1");
    /*is_ambiguous_... S536C9::S536C4 */ AMB_check_base_class_offset(lv, (S536C4*)(S536C9*), ABISELECT(16,8), "S536C1");
    /*is_ambiguous_... S536C1::S536C6 */ AMB_check_base_class_offset(lv, (S536C4*)(S536C6*), ABISELECT(16,8), "S536C1");
    check_base_class_offset(lv, (S536C6*)(S536C2*), ABISELECT(16,8), "S536C1");
    /*is_ambiguous_... S536C2::S536C5 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C2*), ABISELECT(40,24), "S536C1");
    check_base_class_offset(lv, (S536C2*), 0, "S536C1");
    /*is_ambiguous_... S536C1::S536C8 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C4*)(S536C3*)(S536C8*), ABISELECT(56,32), "S536C1");
    /*is_ambiguous_... S536C1::S536C8 */ AMB_check_base_class_offset(lv, (S536C4*)(S536C3*)(S536C8*), ABISELECT(56,32), "S536C1");
    /*is_ambiguous_... S536C1::S536C8 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C3*)(S536C8*), ABISELECT(64,36), "S536C1");
    /*is_ambiguous_... S536C1::S536C8 */ AMB_check_base_class_offset(lv, (S536C3*)(S536C8*), ABISELECT(56,32), "S536C1");
    /*is_ambiguous_... S536C1::S536C8 */ AMB_check_base_class_offset(lv, (S536C8*), ABISELECT(56,32), "S536C1");
    /*is_ambiguous_... S536C1::S536C8 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C4*)(S536C3*)(S536C8*), ABISELECT(136,72), "S536C1");
    /*is_ambiguous_... S536C1::S536C8 */ AMB_check_base_class_offset(lv, (S536C4*)(S536C3*)(S536C8*), ABISELECT(136,72), "S536C1");
    /*is_ambiguous_... S536C1::S536C8 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C3*)(S536C8*), ABISELECT(144,76), "S536C1");
    /*is_ambiguous_... S536C1::S536C8 */ AMB_check_base_class_offset(lv, (S536C3*)(S536C8*), ABISELECT(136,72), "S536C1");
    check_base_class_offset(lv, (S536C8*)(S536C9*), ABISELECT(136,72), "S536C1");
    check_base_class_offset(lv, (S536C6*)(S536C9*), ABISELECT(176,92), "S536C1");
    /*is_ambiguous_... S536C9::S536C5 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C9*), ABISELECT(128,68), "S536C1");
    check_base_class_offset(lv, (S536C9*), ABISELECT(128,68), "S536C1");
    /*is_ambiguous_... S536C1::S536C4 */ AMB_check_base_class_offset(lv, (S536C5*)(S536C4*), ABISELECT(96,52), "S536C1");
    /*is_ambiguous_... S536C1::S536C4 */ AMB_check_base_class_offset(lv, (S536C4*), ABISELECT(96,52), "S536C1");
    check_field_offset(lv, s536c1f0, ABISELECT(104,56), "S536C1.s536c1f0");
    test_class_info(&lv, &cd_S536C1);
    dp->~S536C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS536C1(Test_S536C1, "S536C1", ABISELECT(200,108));

#else // __cplusplus

extern void _ZN6S536C1C1Ev();
extern void _ZN6S536C1D2Ev();
Name_Map name_map_S536C1[] = {
  NSPAIR(_ZN6S536C1C1Ev),
  NSPAIR(_ZN6S536C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C4;
extern VTBL_ENTRY _ZTI6S536C4[];
extern  VTBL_ENTRY _ZTV6S536C4[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C3;
extern VTBL_ENTRY _ZTI6S536C3[];
extern  VTBL_ENTRY _ZTV6S536C3[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C4;
extern VTBL_ENTRY _ZTI6S536C4[];
extern  VTBL_ENTRY _ZTV6S536C4[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C3;
extern VTBL_ENTRY _ZTI6S536C3[];
extern  VTBL_ENTRY _ZTV6S536C3[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C4;
extern VTBL_ENTRY _ZTI6S536C4[];
extern  VTBL_ENTRY _ZTV6S536C4[];
extern Class_Descriptor cd_S536C6;
extern VTBL_ENTRY _ZTI6S536C6[];
extern  VTBL_ENTRY _ZTV6S536C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S536C6[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C2;
extern VTBL_ENTRY _ZTI6S536C2[];
extern  VTBL_ENTRY _ZTV6S536C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S536C2[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C4;
extern VTBL_ENTRY _ZTI6S536C4[];
extern  VTBL_ENTRY _ZTV6S536C4[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C3;
extern VTBL_ENTRY _ZTI6S536C3[];
extern  VTBL_ENTRY _ZTV6S536C3[];
extern Class_Descriptor cd_S536C8;
extern VTBL_ENTRY _ZTI6S536C8[];
extern  VTBL_ENTRY _ZTV6S536C8[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C4;
extern VTBL_ENTRY _ZTI6S536C4[];
extern  VTBL_ENTRY _ZTV6S536C4[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C3;
extern VTBL_ENTRY _ZTI6S536C3[];
extern  VTBL_ENTRY _ZTV6S536C3[];
extern Class_Descriptor cd_S536C8;
extern VTBL_ENTRY _ZTI6S536C8[];
extern  VTBL_ENTRY _ZTV6S536C8[];
extern Class_Descriptor cd_S536C6;
extern VTBL_ENTRY _ZTI6S536C6[];
extern  VTBL_ENTRY _ZTV6S536C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S536C6[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C9;
extern VTBL_ENTRY _ZTI6S536C9[];
extern  VTBL_ENTRY _ZTV6S536C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S536C9[];
extern Class_Descriptor cd_S536C5;
extern VTBL_ENTRY _ZTI6S536C5[];
extern  VTBL_ENTRY _ZTV6S536C5[];
extern Class_Descriptor cd_S536C4;
extern VTBL_ENTRY _ZTI6S536C4[];
extern  VTBL_ENTRY _ZTV6S536C4[];
static Base_Class bases_S536C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S536C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    1, //immediately_derived
  0, 0},
  {&cd_S536C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S536C5,    ABISELECT(8,4), //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
    17, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S536C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S536C5,    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
    5, //immediately_derived
  0, 0},
  {&cd_S536C4,    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
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S536C5,    ABISELECT(120,64), //bcp->offset
    82, //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
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S536C3,    ABISELECT(112,60), //bcp->offset
    69, //bcp->virtual_function_table_offset
    7, //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
    10, //immediately_derived
  0, 1},
  {&cd_S536C5,    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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S536C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    10, //immediately_derived
  0, 1},
  {&cd_S536C6,    ABISELECT(16,8), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S536C5,    ABISELECT(40,24), //bcp->offset
    40, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S536C2,    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
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S536C5,    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
    22, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S536C4,    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
    23, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S536C5,    ABISELECT(64,36), //bcp->offset
    58, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S536C3,    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
    25, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S536C8,    ABISELECT(56,32), //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
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S536C5,    ABISELECT(136,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
    7, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S536C4,    ABISELECT(136,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
    8, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S536C5,    ABISELECT(144,76), //bcp->offset
    128, //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
    9, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S536C3,    ABISELECT(136,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
    10, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S536C8,    ABISELECT(136,72), //bcp->offset
    105, //bcp->virtual_function_table_offset
    12, //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
    25, //immediately_derived
  0, 1},
  {&cd_S536C6,    ABISELECT(176,92), //bcp->offset
    133, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S536C5,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S536C9,    ABISELECT(128,68), //bcp->offset
    87, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S536C5,    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
    27, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S536C4,    ABISELECT(96,52), //bcp->offset
    63, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S536C1[];
extern void _ZN6S536C1D1Ev();
extern void _ZN6S536C1D0Ev();
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
extern void _ZN6S536C23v13Ev();
extern void _ZN6S536C23v14Ev();
extern void _ZN6S536C12v1Ev();
extern void _ZN6S536C12v2Ev();
extern void ABISELECT(_ZThn8_N6S536C1D1Ev,_ZThn4_N6S536C1D1Ev)();
extern void ABISELECT(_ZThn8_N6S536C1D0Ev,_ZThn4_N6S536C1D0Ev)();
extern void _ZN6S536C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N6S536C1D1Ev,_ZTv0_n12_N6S536C1D1Ev)();
extern void ABISELECT(_ZThn16_N6S536C1D1Ev,_ZThn8_N6S536C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C1D0Ev,_ZTv0_n12_N6S536C1D0Ev)();
extern void ABISELECT(_ZThn16_N6S536C1D0Ev,_ZThn8_N6S536C1D0Ev)() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C62v7Ev();
extern void _ZN6S536C62v8Ev();
extern void _ZN6S536C62v9Ev();
extern void _ZN6S536C63v10Ev();
extern void _ZN6S536C63v11Ev();
extern void _ZN6S536C63v12Ev();
extern void ABISELECT(_ZThn40_N6S536C1D1Ev,_ZThn24_N6S536C1D1Ev)();
extern void ABISELECT(_ZThn40_N6S536C1D0Ev,_ZThn24_N6S536C1D0Ev)();
extern void _ZN6S536C52v3Ev();
extern void ABISELECT(_ZThn56_N6S536C1D1Ev,_ZThn32_N6S536C1D1Ev)();
extern void ABISELECT(_ZThn56_N6S536C1D0Ev,_ZThn32_N6S536C1D0Ev)();
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
extern void _ZN6S536C83v15Ev();
extern void _ZN6S536C83v16Ev();
extern void _ZN6S536C83v17Ev();
extern void _ZN6S536C83v18Ev();
extern void _ZN6S536C83v19Ev();
extern void ABISELECT(_ZThn64_N6S536C1D1Ev,_ZThn36_N6S536C1D1Ev)();
extern void ABISELECT(_ZThn64_N6S536C1D0Ev,_ZThn36_N6S536C1D0Ev)();
extern void _ZN6S536C52v3Ev();
extern void ABISELECT(_ZThn96_N6S536C1D1Ev,_ZThn52_N6S536C1D1Ev)();
extern void ABISELECT(_ZThn96_N6S536C1D0Ev,_ZThn52_N6S536C1D0Ev)();
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void ABISELECT(_ZTv0_n24_N6S536C1D1Ev,_ZTv0_n12_N6S536C1D1Ev)();
extern void ABISELECT(_ZThn112_N6S536C1D1Ev,_ZThn60_N6S536C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C1D0Ev,_ZTv0_n12_N6S536C1D0Ev)();
extern void ABISELECT(_ZThn112_N6S536C1D0Ev,_ZThn60_N6S536C1D0Ev)() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
extern void ABISELECT(_ZTvn8_n24_N6S536C1D1Ev,_ZTvn4_n12_N6S536C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N6S536C1D0Ev,_ZTvn4_n12_N6S536C1D0Ev)();
extern void _ZN6S536C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N6S536C1D1Ev,_ZTv0_n12_N6S536C1D1Ev)();
extern void ABISELECT(_ZThn128_N6S536C1D1Ev,_ZThn68_N6S536C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C1D0Ev,_ZTv0_n12_N6S536C1D0Ev)();
extern void ABISELECT(_ZThn128_N6S536C1D0Ev,_ZThn68_N6S536C1D0Ev)() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C93v20Ev();
extern void _ZN6S536C93v21Ev();
extern void _ZN6S536C93v22Ev();
extern void ABISELECT(_ZTv0_n24_N6S536C1D1Ev,_ZTv0_n12_N6S536C1D1Ev)();
extern void ABISELECT(_ZThn136_N6S536C1D1Ev,_ZThn72_N6S536C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C1D0Ev,_ZTv0_n12_N6S536C1D0Ev)();
extern void ABISELECT(_ZThn136_N6S536C1D0Ev,_ZThn72_N6S536C1D0Ev)() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
extern void _ZN6S536C83v15Ev();
extern void _ZN6S536C83v16Ev();
extern void _ZN6S536C83v17Ev();
extern void _ZN6S536C83v18Ev();
extern void _ZN6S536C83v19Ev();
extern void ABISELECT(_ZTvn8_n24_N6S536C1D1Ev,_ZTvn4_n12_N6S536C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N6S536C1D0Ev,_ZTvn4_n12_N6S536C1D0Ev)();
extern void _ZN6S536C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N6S536C1D1Ev,_ZTv0_n12_N6S536C1D1Ev)();
extern void ABISELECT(_ZThn176_N6S536C1D1Ev,_ZThn92_N6S536C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C1D0Ev,_ZTv0_n12_N6S536C1D0Ev)();
extern void ABISELECT(_ZThn176_N6S536C1D0Ev,_ZThn92_N6S536C1D0Ev)() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C62v7Ev();
extern void _ZN6S536C62v8Ev();
extern void _ZN6S536C62v9Ev();
extern void _ZN6S536C63v10Ev();
extern void _ZN6S536C63v11Ev();
extern void _ZN6S536C63v12Ev();
static  VTBL_ENTRY vtc_S536C1[] = {
  ABISELECT(128,68),
  ABISELECT(176,92),
  ABISELECT(136,72),
  ABISELECT(128,68),
  ABISELECT(16,8),
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI6S536C1[0]),
  (VTBL_ENTRY)&_ZN6S536C1D1Ev,
  (VTBL_ENTRY)&_ZN6S536C1D0Ev,
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
  (VTBL_ENTRY)&_ZN6S536C23v13Ev,
  (VTBL_ENTRY)&_ZN6S536C23v14Ev,
  (VTBL_ENTRY)&_ZN6S536C12v1Ev,
  (VTBL_ENTRY)&_ZN6S536C12v2Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S536C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S536C1D1Ev,_ZThn4_N6S536C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S536C1D0Ev,_ZThn4_N6S536C1D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  0,
  ABISELECT(96,52),
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI6S536C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C1D1Ev,_ZTv0_n12_N6S536C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C1D0Ev,_ZTv0_n12_N6S536C1D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C62v7Ev,
  (VTBL_ENTRY)&_ZN6S536C62v8Ev,
  (VTBL_ENTRY)&_ZN6S536C62v9Ev,
  (VTBL_ENTRY)&_ZN6S536C63v10Ev,
  (VTBL_ENTRY)&_ZN6S536C63v11Ev,
  (VTBL_ENTRY)&_ZN6S536C63v12Ev,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI6S536C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N6S536C1D1Ev,_ZThn24_N6S536C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N6S536C1D0Ev,_ZThn24_N6S536C1D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI6S536C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N6S536C1D1Ev,_ZThn32_N6S536C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N6S536C1D0Ev,_ZThn32_N6S536C1D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
  (VTBL_ENTRY)&_ZN6S536C83v15Ev,
  (VTBL_ENTRY)&_ZN6S536C83v16Ev,
  (VTBL_ENTRY)&_ZN6S536C83v17Ev,
  (VTBL_ENTRY)&_ZN6S536C83v18Ev,
  (VTBL_ENTRY)&_ZN6S536C83v19Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI6S536C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N6S536C1D1Ev,_ZThn36_N6S536C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N6S536C1D0Ev,_ZThn36_N6S536C1D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI6S536C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N6S536C1D1Ev,_ZThn52_N6S536C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N6S536C1D0Ev,_ZThn52_N6S536C1D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI6S536C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C1D1Ev,_ZTv0_n12_N6S536C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C1D0Ev,_ZTv0_n12_N6S536C1D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI6S536C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C1D1Ev,_ZTvn4_n12_N6S536C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C1D0Ev,_ZTvn4_n12_N6S536C1D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  ABISELECT(8,4),
  ABISELECT(-112,-60),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI6S536C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C1D1Ev,_ZTv0_n12_N6S536C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C1D0Ev,_ZTv0_n12_N6S536C1D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C93v20Ev,
  (VTBL_ENTRY)&_ZN6S536C93v21Ev,
  (VTBL_ENTRY)&_ZN6S536C93v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-72),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI6S536C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C1D1Ev,_ZTv0_n12_N6S536C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C1D0Ev,_ZTv0_n12_N6S536C1D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
  (VTBL_ENTRY)&_ZN6S536C83v15Ev,
  (VTBL_ENTRY)&_ZN6S536C83v16Ev,
  (VTBL_ENTRY)&_ZN6S536C83v17Ev,
  (VTBL_ENTRY)&_ZN6S536C83v18Ev,
  (VTBL_ENTRY)&_ZN6S536C83v19Ev,
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI6S536C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C1D1Ev,_ZTvn4_n12_N6S536C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C1D0Ev,_ZTvn4_n12_N6S536C1D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  ABISELECT(-64,-32),
  ABISELECT(-160,-84),
  ABISELECT(-160,-84),
  ABISELECT(-176,-92),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI6S536C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C1D1Ev,_ZTv0_n12_N6S536C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C1D0Ev,_ZTv0_n12_N6S536C1D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C62v7Ev,
  (VTBL_ENTRY)&_ZN6S536C62v8Ev,
  (VTBL_ENTRY)&_ZN6S536C62v9Ev,
  (VTBL_ENTRY)&_ZN6S536C63v10Ev,
  (VTBL_ENTRY)&_ZN6S536C63v11Ev,
  (VTBL_ENTRY)&_ZN6S536C63v12Ev,
};
extern VTBL_ENTRY _ZTV6S536C1[];
extern void _ZN6S536C2D1Ev();
extern void _ZN6S536C2D0Ev();
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
extern void _ZN6S536C23v13Ev();
extern void _ZN6S536C23v14Ev();
static  VTBL_ENTRY _tg__ZTV6S536C2__6S536C1[] = {
  ABISELECT(16,8),
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI6S536C2[0]),
  (VTBL_ENTRY)&_ZN6S536C2D1Ev,
  (VTBL_ENTRY)&_ZN6S536C2D0Ev,
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
  (VTBL_ENTRY)&_ZN6S536C23v13Ev,
  (VTBL_ENTRY)&_ZN6S536C23v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev)();
extern void _ZN6S536C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev)();
extern void _ZN6S536C6D0Ev() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C62v7Ev();
extern void _ZN6S536C62v8Ev();
extern void _ZN6S536C62v9Ev();
extern void _ZN6S536C63v10Ev();
extern void _ZN6S536C63v11Ev();
extern void _ZN6S536C63v12Ev();
static  VTBL_ENTRY _tg__ZTV6S536C66S536C2__6S536C1[] = {
  0,
  ABISELECT(96,52),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI6S536C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C62v7Ev,
  (VTBL_ENTRY)&_ZN6S536C62v8Ev,
  (VTBL_ENTRY)&_ZN6S536C62v9Ev,
  (VTBL_ENTRY)&_ZN6S536C63v10Ev,
  (VTBL_ENTRY)&_ZN6S536C63v11Ev,
  (VTBL_ENTRY)&_ZN6S536C63v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev)();
extern void ABISELECT(_ZThn96_N6S536C6D1Ev,_ZThn52_N6S536C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev)();
extern void ABISELECT(_ZThn96_N6S536C6D0Ev,_ZThn52_N6S536C6D0Ev)() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
static  VTBL_ENTRY _tg__ZTV6S536C3__6S536C66S536C2__6S536C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI6S536C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
};
extern void ABISELECT(_ZTvn8_n24_N6S536C6D1Ev,_ZTvn4_n12_N6S536C6D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N6S536C6D0Ev,_ZTvn4_n12_N6S536C6D0Ev)();
extern void _ZN6S536C52v3Ev();
static  VTBL_ENTRY _tg__ZTV6S536C56S536C3__A1__6S536C66S536C2__6S536C1[] = {
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI6S536C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C6D1Ev,_ZTvn4_n12_N6S536C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C6D0Ev,_ZTvn4_n12_N6S536C6D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N6S536C2D1Ev,_ZTv0_n12_N6S536C2D1Ev)();
extern void ABISELECT(_ZThn16_N6S536C2D1Ev,_ZThn8_N6S536C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C2D0Ev,_ZTv0_n12_N6S536C2D0Ev)();
extern void ABISELECT(_ZThn16_N6S536C2D0Ev,_ZThn8_N6S536C2D0Ev)() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C62v7Ev();
extern void _ZN6S536C62v8Ev();
extern void _ZN6S536C62v9Ev();
extern void _ZN6S536C63v10Ev();
extern void _ZN6S536C63v11Ev();
extern void _ZN6S536C63v12Ev();
static  VTBL_ENTRY _tg__ZTV6S536C6__6S536C2__6S536C1[] = {
  0,
  ABISELECT(96,52),
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI6S536C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C2D1Ev,_ZTv0_n12_N6S536C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C2D0Ev,_ZTv0_n12_N6S536C2D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C62v7Ev,
  (VTBL_ENTRY)&_ZN6S536C62v8Ev,
  (VTBL_ENTRY)&_ZN6S536C62v9Ev,
  (VTBL_ENTRY)&_ZN6S536C63v10Ev,
  (VTBL_ENTRY)&_ZN6S536C63v11Ev,
  (VTBL_ENTRY)&_ZN6S536C63v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N6S536C2D1Ev,_ZTv0_n12_N6S536C2D1Ev)();
extern void ABISELECT(_ZThn112_N6S536C2D1Ev,_ZThn60_N6S536C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C2D0Ev,_ZTv0_n12_N6S536C2D0Ev)();
extern void ABISELECT(_ZThn112_N6S536C2D0Ev,_ZThn60_N6S536C2D0Ev)() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
static  VTBL_ENTRY _tg__ZTV6S536C3__A1__6S536C2__6S536C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI6S536C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C2D1Ev,_ZTv0_n12_N6S536C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C2D0Ev,_ZTv0_n12_N6S536C2D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
};
extern void ABISELECT(_ZTvn8_n24_N6S536C2D1Ev,_ZTvn4_n12_N6S536C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N6S536C2D0Ev,_ZTvn4_n12_N6S536C2D0Ev)();
extern void _ZN6S536C52v3Ev();
static  VTBL_ENTRY _tg__ZTV6S536C56S536C3__A3__6S536C2__6S536C1[] = {
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI6S536C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C2D1Ev,_ZTvn4_n12_N6S536C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C2D0Ev,_ZTvn4_n12_N6S536C2D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev)();
extern void _ZN6S536C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev)();
extern void _ZN6S536C9D0Ev() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C93v20Ev();
extern void _ZN6S536C93v21Ev();
extern void _ZN6S536C93v22Ev();
static  VTBL_ENTRY _tg__ZTV6S536C9__6S536C1[] = {
  0,
  ABISELECT(48,24),
  ABISELECT(8,4),
  ABISELECT(-112,-60),
  ABISELECT(-16,-8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI6S536C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C93v20Ev,
  (VTBL_ENTRY)&_ZN6S536C93v21Ev,
  (VTBL_ENTRY)&_ZN6S536C93v22Ev,
};
extern void ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev)();
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
static  VTBL_ENTRY _tg__ZTV6S536C3__6S536C9__6S536C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI6S536C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
};
extern void ABISELECT(_ZTvn8_n24_N6S536C9D1Ev,_ZTvn4_n12_N6S536C9D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N6S536C9D0Ev,_ZTvn4_n12_N6S536C9D0Ev)();
extern void _ZN6S536C52v3Ev();
static  VTBL_ENTRY _tg__ZTV6S536C56S536C3__A1__6S536C9__6S536C1[] = {
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI6S536C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C9D1Ev,_ZTvn4_n12_N6S536C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C9D0Ev,_ZTvn4_n12_N6S536C9D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev)();
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
static  VTBL_ENTRY _tg__ZTV6S536C4__A1__6S536C9__6S536C1[] = {
  0,
  0,
  ABISELECT(112,60),
  ABISELECT(112,60),
  (VTBL_ENTRY)&(_ZTI6S536C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev)();
extern void ABISELECT(_ZThn8_N6S536C9D1Ev,_ZThn4_N6S536C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev)();
extern void ABISELECT(_ZThn8_N6S536C9D0Ev,_ZThn4_N6S536C9D0Ev)() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
extern void _ZN6S536C83v15Ev();
extern void _ZN6S536C83v16Ev();
extern void _ZN6S536C83v17Ev();
extern void _ZN6S536C83v18Ev();
extern void _ZN6S536C83v19Ev();
static  VTBL_ENTRY _tg__ZTV6S536C8__6S536C9__6S536C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S536C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
  (VTBL_ENTRY)&_ZN6S536C83v15Ev,
  (VTBL_ENTRY)&_ZN6S536C83v16Ev,
  (VTBL_ENTRY)&_ZN6S536C83v17Ev,
  (VTBL_ENTRY)&_ZN6S536C83v18Ev,
  (VTBL_ENTRY)&_ZN6S536C83v19Ev,
};
extern void ABISELECT(_ZTvn8_n24_N6S536C9D1Ev,_ZTvn4_n12_N6S536C9D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N6S536C9D0Ev,_ZTvn4_n12_N6S536C9D0Ev)();
extern void _ZN6S536C52v3Ev();
static  VTBL_ENTRY _tg__ZTV6S536C56S536C36S536C8__A4__6S536C9__6S536C1[] = {
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI6S536C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C9D1Ev,_ZTvn4_n12_N6S536C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C9D0Ev,_ZTvn4_n12_N6S536C9D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev)();
extern void ABISELECT(_ZThn48_N6S536C9D1Ev,_ZThn24_N6S536C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev)();
extern void ABISELECT(_ZThn48_N6S536C9D0Ev,_ZThn24_N6S536C9D0Ev)() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C62v7Ev();
extern void _ZN6S536C62v8Ev();
extern void _ZN6S536C62v9Ev();
extern void _ZN6S536C63v10Ev();
extern void _ZN6S536C63v11Ev();
extern void _ZN6S536C63v12Ev();
static  VTBL_ENTRY _tg__ZTV6S536C6__6S536C9__6S536C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  ABISELECT(-64,-32),
  ABISELECT(-160,-84),
  ABISELECT(-160,-84),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI6S536C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C62v7Ev,
  (VTBL_ENTRY)&_ZN6S536C62v8Ev,
  (VTBL_ENTRY)&_ZN6S536C62v9Ev,
  (VTBL_ENTRY)&_ZN6S536C63v10Ev,
  (VTBL_ENTRY)&_ZN6S536C63v11Ev,
  (VTBL_ENTRY)&_ZN6S536C63v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev)();
extern void _ZN6S536C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev)();
extern void _ZN6S536C6D0Ev() __attribute__((weak));
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C62v7Ev();
extern void _ZN6S536C62v8Ev();
extern void _ZN6S536C62v9Ev();
extern void _ZN6S536C63v10Ev();
extern void _ZN6S536C63v11Ev();
extern void _ZN6S536C63v12Ev();
static  VTBL_ENTRY _tg__ZTV6S536C6__A1__6S536C1[] = {
  ABISELECT(-160,-84),
  ABISELECT(-64,-32),
  ABISELECT(-160,-84),
  ABISELECT(-160,-84),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI6S536C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C62v7Ev,
  (VTBL_ENTRY)&_ZN6S536C62v8Ev,
  (VTBL_ENTRY)&_ZN6S536C62v9Ev,
  (VTBL_ENTRY)&_ZN6S536C63v10Ev,
  (VTBL_ENTRY)&_ZN6S536C63v11Ev,
  (VTBL_ENTRY)&_ZN6S536C63v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev)();
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
extern void _ZN6S536C32v5Ev();
extern void _ZN6S536C32v6Ev();
static  VTBL_ENTRY _tg__ZTV6S536C3__6S536C6__A1__6S536C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI6S536C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
  (VTBL_ENTRY)&_ZN6S536C32v5Ev,
  (VTBL_ENTRY)&_ZN6S536C32v6Ev,
};
extern void ABISELECT(_ZTvn8_n24_N6S536C6D1Ev,_ZTvn4_n12_N6S536C6D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N6S536C6D0Ev,_ZTvn4_n12_N6S536C6D0Ev)();
extern void _ZN6S536C52v3Ev();
static  VTBL_ENTRY _tg__ZTV6S536C56S536C3__A1__6S536C6__A1__6S536C1[] = {
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI6S536C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C6D1Ev,_ZTvn4_n12_N6S536C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N6S536C6D0Ev,_ZTvn4_n12_N6S536C6D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev)();
extern void _ZN6S536C52v3Ev();
extern void _ZN6S536C42v4Ev();
static  VTBL_ENTRY _tg__ZTV6S536C4__A1__6S536C6__A1__6S536C1[] = {
  0,
  0,
  ABISELECT(160,84),
  ABISELECT(160,84),
  (VTBL_ENTRY)&(_ZTI6S536C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev),
  (VTBL_ENTRY)&_ZN6S536C52v3Ev,
  (VTBL_ENTRY)&_ZN6S536C42v4Ev,
};
static  VTT_ENTRY vtt_S536C1[] = {
  {&(_ZTV6S536C1[8]),  8,156},
  {&(_tg__ZTV6S536C2__6S536C1[4]),  4,12},
  {&(_tg__ZTV6S536C66S536C2__6S536C1[7]),  7,17},
  {&(_tg__ZTV6S536C3__6S536C66S536C2__6S536C1[7]),  7,13},
  {&(_tg__ZTV6S536C56S536C3__A1__6S536C66S536C2__6S536C1[2]),  2,5},
  {&(_tg__ZTV6S536C66S536C2__6S536C1[7]),  7,17},
  {&(_tg__ZTV6S536C6__6S536C2__6S536C1[7]),  7,17},
  {&(_tg__ZTV6S536C3__A1__6S536C2__6S536C1[7]),  7,13},
  {&(_tg__ZTV6S536C56S536C3__A3__6S536C2__6S536C1[2]),  2,5},
  {&(_tg__ZTV6S536C6__6S536C2__6S536C1[7]),  7,17},
  {&(_ZTV6S536C1[30]),  30,156},
  {&(_ZTV6S536C1[76]),  76,156},
  {&(_ZTV6S536C1[84]),  84,156},
  {&(_ZTV6S536C1[30]),  30,156},
  {&(_ZTV6S536C1[99]),  99,156},
  {&(_ZTV6S536C1[117]),  117,156},
  {&(_ZTV6S536C1[130]),  130,156},
  {&(_ZTV6S536C1[146]),  146,156},
  {&(_ZTV6S536C1[99]),  99,156},
  {&(_tg__ZTV6S536C9__6S536C1[9]),  9,15},
  {&(_tg__ZTV6S536C3__6S536C9__6S536C1[7]),  7,13},
  {&(_tg__ZTV6S536C56S536C3__A1__6S536C9__6S536C1[2]),  2,5},
  {&(_tg__ZTV6S536C4__A1__6S536C9__6S536C1[5]),  5,9},
  {&(_tg__ZTV6S536C8__6S536C9__6S536C1[12]),  12,23},
  {&(_tg__ZTV6S536C56S536C36S536C8__A4__6S536C9__6S536C1[2]),  2,5},
  {&(_tg__ZTV6S536C6__6S536C9__6S536C1[13]),  13,23},
  {&(_tg__ZTV6S536C9__6S536C1[9]),  9,15},
  {&(_tg__ZTV6S536C6__A1__6S536C1[7]),  7,17},
  {&(_tg__ZTV6S536C3__6S536C6__A1__6S536C1[7]),  7,13},
  {&(_tg__ZTV6S536C56S536C3__A1__6S536C6__A1__6S536C1[2]),  2,5},
  {&(_tg__ZTV6S536C4__A1__6S536C6__A1__6S536C1[5]),  5,9},
};
extern VTBL_ENTRY _ZTI6S536C1[];
extern  VTBL_ENTRY _ZTV6S536C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S536C1[];
static VTBL_ENTRY alt_thunk_names97[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S536C9D0Ev,_ZTv0_n12_N6S536C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N6S536C9D0Ev,_ZThn24_N6S536C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N6S536C9D0Ev,_ZThn4_N6S536C9D0Ev),
  (VTBL_ENTRY)_ZN6S536C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S536C9D1Ev,_ZTv0_n12_N6S536C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N6S536C9D1Ev,_ZThn24_N6S536C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N6S536C9D1Ev,_ZThn4_N6S536C9D1Ev),
  (VTBL_ENTRY)_ZN6S536C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S536C2D0Ev,_ZTv0_n12_N6S536C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N6S536C2D0Ev,_ZThn60_N6S536C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N6S536C2D0Ev,_ZThn8_N6S536C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S536C2D1Ev,_ZTv0_n12_N6S536C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N6S536C2D1Ev,_ZThn60_N6S536C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N6S536C2D1Ev,_ZThn8_N6S536C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S536C6D0Ev,_ZTv0_n12_N6S536C6D0Ev), // 
  (VTBL_ENTRY)_ZN6S536C6D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn96_N6S536C6D0Ev,_ZThn52_N6S536C6D0Ev),
  (VTBL_ENTRY)_ZN6S536C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S536C6D1Ev,_ZTv0_n12_N6S536C6D1Ev), // 
  (VTBL_ENTRY)_ZN6S536C6D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn96_N6S536C6D1Ev,_ZThn52_N6S536C6D1Ev),
  (VTBL_ENTRY)_ZN6S536C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S536C1D0Ev,_ZTv0_n12_N6S536C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N6S536C1D0Ev,_ZThn92_N6S536C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N6S536C1D0Ev,_ZThn72_N6S536C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N6S536C1D0Ev,_ZThn68_N6S536C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N6S536C1D0Ev,_ZThn60_N6S536C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N6S536C1D0Ev,_ZThn8_N6S536C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S536C1D1Ev,_ZTv0_n12_N6S536C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N6S536C1D1Ev,_ZThn92_N6S536C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N6S536C1D1Ev,_ZThn72_N6S536C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N6S536C1D1Ev,_ZThn68_N6S536C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N6S536C1D1Ev,_ZThn60_N6S536C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N6S536C1D1Ev,_ZThn8_N6S536C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S536C1 = {  "S536C1", // class name
  bases_S536C1, 28,
  &(vtc_S536C1[0]), // expected_vtbl_contents
  &(vtt_S536C1[0]), // expected_vtt_contents
  ABISELECT(200,108), // object size
  NSPAIRA(_ZTI6S536C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV6S536C1),156, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S536C1),31, //virtual table table var
  28, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names97,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20684C2  : virtual S3600C29_nt , S3600C19 {
  ~S20684C2(); // tgen
  S20684C2(); // tgen
};
//SIG(-1 S20684C2) C1{ VBC2{ m Fp} BC3{ m}}


S20684C2 ::~S20684C2(){ note_dtor("S20684C2", this);} // tgen
S20684C2 ::S20684C2(){ note_ctor("S20684C2", this);} // tgen

static void Test_S20684C2()
{
  extern Class_Descriptor cd_S20684C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20684C2, buf);
    S20684C2 *dp, &lv = *(dp=new (buf) S20684C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20684C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20684C2)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20684C2");
    check_base_class_offset(lv, (S3600C19*), 0, "S20684C2");
    test_class_info(&lv, &cd_S20684C2);
    dp->~S20684C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20684C2(Test_S20684C2, "S20684C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20684C2C1Ev();
extern void _ZN8S20684C2D1Ev();
Name_Map name_map_S20684C2[] = {
  NSPAIR(_ZN8S20684C2C1Ev),
  NSPAIR(_ZN8S20684C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S20684C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S20684C2[];
static  VTBL_ENTRY vtc_S20684C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C2[0]),
};
extern VTBL_ENTRY _ZTV8S20684C2[];
static  VTT_ENTRY vtt_S20684C2[] = {
  {&(_ZTV8S20684C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20684C2[];
extern  VTBL_ENTRY _ZTV8S20684C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C2[];
Class_Descriptor cd_S20684C2 = {  "S20684C2", // class name
  bases_S20684C2, 2,
  &(vtc_S20684C2[0]), // expected_vtbl_contents
  &(vtt_S20684C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20684C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20684C2),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20684C2),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  S20684C8  {
  virtual void  v1(); // _ZN8S20684C82v1Ev
  ~S20684C8(); // tgen
  S20684C8(); // tgen
};
//SIG(-1 S20684C8) C1{ v1}


void  S20684C8 ::v1(){vfunc_called(this, "_ZN8S20684C82v1Ev");}
S20684C8 ::~S20684C8(){ note_dtor("S20684C8", this);} // tgen
S20684C8 ::S20684C8(){ note_ctor("S20684C8", this);} // tgen

static void Test_S20684C8()
{
  extern Class_Descriptor cd_S20684C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20684C8, buf);
    S20684C8 *dp, &lv = *(dp=new (buf) S20684C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20684C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20684C8)");
    test_class_info(&lv, &cd_S20684C8);
    dp->~S20684C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20684C8(Test_S20684C8, "S20684C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20684C8C1Ev();
extern void _ZN8S20684C8D1Ev();
Name_Map name_map_S20684C8[] = {
  NSPAIR(_ZN8S20684C8C1Ev),
  NSPAIR(_ZN8S20684C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20684C8[];
extern void _ZN8S20684C82v1Ev();
static  VTBL_ENTRY vtc_S20684C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C8[0]),
  (VTBL_ENTRY)&_ZN8S20684C82v1Ev,
};
extern VTBL_ENTRY _ZTI8S20684C8[];
extern  VTBL_ENTRY _ZTV8S20684C8[];
Class_Descriptor cd_S20684C8 = {  "S20684C8", // class name
  0,0,//no base classes
  &(vtc_S20684C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20684C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20684C8),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  S20684C11  : S3600C29_nt , virtual S3600C19 {
  ::S19426C9_nt s20684c11f0;
  ~S20684C11(); // tgen
  S20684C11(); // tgen
};
//SIG(-1 S20684C11) C1{ BC2{ m Fp} VBC3{ m} FU4{ m}}


S20684C11 ::~S20684C11(){ note_dtor("S20684C11", this);} // tgen
S20684C11 ::S20684C11(){ note_ctor("S20684C11", this);} // tgen

static void Test_S20684C11()
{
  extern Class_Descriptor cd_S20684C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20684C11, buf);
    S20684C11 *dp, &lv = *(dp=new (buf) S20684C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20684C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20684C11)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20684C11");
    check_base_class_offset(lv, (S3600C19*), 0, "S20684C11");
    check_field_offset(lv, s20684c11f0, ABISELECT(16,8), "S20684C11.s20684c11f0");
    test_class_info(&lv, &cd_S20684C11);
    dp->~S20684C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20684C11(Test_S20684C11, "S20684C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S20684C11C1Ev();
extern void _ZN9S20684C11D1Ev();
Name_Map name_map_S20684C11[] = {
  NSPAIR(_ZN9S20684C11C1Ev),
  NSPAIR(_ZN9S20684C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S20684C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S20684C11[];
static  VTBL_ENTRY vtc_S20684C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C11[0]),
};
extern VTBL_ENTRY _ZTV9S20684C11[];
static  VTT_ENTRY vtt_S20684C11[] = {
  {&(_ZTV9S20684C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20684C11[];
extern  VTBL_ENTRY _ZTV9S20684C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C11[];
Class_Descriptor cd_S20684C11 = {  "S20684C11", // class name
  bases_S20684C11, 2,
  &(vtc_S20684C11[0]), // expected_vtbl_contents
  &(vtt_S20684C11[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S20684C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20684C11),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20684C11),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  S20684C10  : virtual S3600C19 , virtual S20684C11 {
  int s20684c10f0;
  ~S20684C10(); // tgen
  S20684C10(); // tgen
};
//SIG(-1 S20684C10) C1{ VBC2{ m} VBC3{ BC4{ m Fp} VBC2 FU5{ m}} Fi}


S20684C10 ::~S20684C10(){ note_dtor("S20684C10", this);} // tgen
S20684C10 ::S20684C10(){ note_ctor("S20684C10", this);} // tgen

static void Test_S20684C10()
{
  extern Class_Descriptor cd_S20684C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20684C10, buf);
    S20684C10 *dp, &lv = *(dp=new (buf) S20684C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20684C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20684C10)");
    check_base_class_offset(lv, (S3600C19*), 0, "S20684C10");
    check_base_class_offset(lv, (S3600C19*)(S20684C11*), 0, "S20684C10");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C11*), ABISELECT(24,12), "S20684C10");
    check_base_class_offset(lv, (S20684C11*), ABISELECT(16,8), "S20684C10");
    check_field_offset(lv, s20684c10f0, ABISELECT(8,4), "S20684C10.s20684c10f0");
    test_class_info(&lv, &cd_S20684C10);
    dp->~S20684C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20684C10(Test_S20684C10, "S20684C10", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S20684C10C1Ev();
extern void _ZN9S20684C10D1Ev();
Name_Map name_map_S20684C10[] = {
  NSPAIR(_ZN9S20684C10C1Ev),
  NSPAIR(_ZN9S20684C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20684C11;
extern VTBL_ENTRY _ZTI9S20684C11[];
extern  VTBL_ENTRY _ZTV9S20684C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C11[];
static Base_Class bases_S20684C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20684C11,    ABISELECT(16,8), //bcp->offset
    4, //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 _ZTI9S20684C10[];
static  VTBL_ENTRY vtc_S20684C10[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C10[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20684C10[0]),
};
extern VTBL_ENTRY _ZTV9S20684C10[];
static  VTBL_ENTRY _tg__ZTV9S20684C11__9S20684C10[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C11[0]),
};
static  VTT_ENTRY vtt_S20684C10[] = {
  {&(_ZTV9S20684C10[4]),  4,7},
  {&(_ZTV9S20684C10[7]),  7,7},
  {&(_tg__ZTV9S20684C11__9S20684C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20684C10[];
extern  VTBL_ENTRY _ZTV9S20684C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C10[];
Class_Descriptor cd_S20684C10 = {  "S20684C10", // class name
  bases_S20684C10, 3,
  &(vtc_S20684C10[0]), // expected_vtbl_contents
  &(vtt_S20684C10[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S20684C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20684C10),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20684C10),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  S20684C9  : S20684C10 , S20684C2 {
  ::S3600C19 s20684c9f0;
  ~S20684C9(); // tgen
  S20684C9(); // tgen
};
//SIG(-1 S20684C9) C1{ BC2{ VBC3{ m} VBC4{ BC5{ m Fp} VBC3 FU6{ m}} Fi} BC7{ VBC5 BC3} FC3}


S20684C9 ::~S20684C9(){ note_dtor("S20684C9", this);} // tgen
S20684C9 ::S20684C9(){ note_ctor("S20684C9", this);} // tgen

static void Test_S20684C9()
{
  extern Class_Descriptor cd_S20684C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20684C9, buf);
    S20684C9 *dp, &lv = *(dp=new (buf) S20684C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20684C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20684C9)");
    check_base_class_offset(lv, (S3600C19*)(S20684C10*), 0, "S20684C9");
    check_base_class_offset(lv, (S3600C19*)(S20684C11*), 0, "S20684C9");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C11*), ABISELECT(40,20), "S20684C9");
    check_base_class_offset(lv, (S20684C11*)(S20684C10*), ABISELECT(32,16), "S20684C9");
    check_base_class_offset(lv, (S20684C10*), 0, "S20684C9");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C2*), ABISELECT(56,28), "S20684C9");
    check_base_class_offset(lv, (S3600C19*)(S20684C2*), ABISELECT(16,8), "S20684C9");
    check_base_class_offset(lv, (S20684C2*), ABISELECT(16,8), "S20684C9");
    check_field_offset(lv, s20684c9f0, ABISELECT(24,12), "S20684C9.s20684c9f0");
    test_class_info(&lv, &cd_S20684C9);
    dp->~S20684C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20684C9(Test_S20684C9, "S20684C9", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20684C9C1Ev();
extern void _ZN8S20684C9D1Ev();
Name_Map name_map_S20684C9[] = {
  NSPAIR(_ZN8S20684C9C1Ev),
  NSPAIR(_ZN8S20684C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20684C11;
extern VTBL_ENTRY _ZTI9S20684C11[];
extern  VTBL_ENTRY _ZTV9S20684C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C11[];
extern Class_Descriptor cd_S20684C10;
extern VTBL_ENTRY _ZTI9S20684C10[];
extern  VTBL_ENTRY _ZTV9S20684C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20684C2;
extern VTBL_ENTRY _ZTI8S20684C2[];
extern  VTBL_ENTRY _ZTV8S20684C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C2[];
static Base_Class bases_S20684C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20684C11,    ABISELECT(32,16), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20684C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C29_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S20684C2,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI8S20684C9[];
static  VTBL_ENTRY vtc_S20684C9[] = {
  ABISELECT(56,28),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
extern VTBL_ENTRY _ZTV8S20684C9[];
static  VTBL_ENTRY _tg__ZTV9S20684C10__8S20684C9[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__9S20684C10__8S20684C9[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20684C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C2__8S20684C9[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C2[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__8S20684C9[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C11[0]),
};
static  VTT_ENTRY vtt_S20684C9[] = {
  {&(_ZTV8S20684C9[5]),  5,11},
  {&(_tg__ZTV9S20684C10__8S20684C9[4]),  4,4},
  {&(_tg__ZTV9S20684C11__9S20684C10__8S20684C9[3]),  3,3},
  {&(_tg__ZTV8S20684C2__8S20684C9[3]),  3,3},
  {&(_ZTV8S20684C9[11]),  11,11},
  {&(_ZTV8S20684C9[8]),  8,11},
  {&(_tg__ZTV9S20684C11__8S20684C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20684C9[];
extern  VTBL_ENTRY _ZTV8S20684C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C9[];
Class_Descriptor cd_S20684C9 = {  "S20684C9", // class name
  bases_S20684C9, 7,
  &(vtc_S20684C9[0]), // expected_vtbl_contents
  &(vtt_S20684C9[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20684C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20684C9),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20684C9),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  S20684C7  : virtual S20684C8 , S20684C9 , virtual S3600C6_nt {
  ~S20684C7(); // tgen
  S20684C7(); // tgen
};
//SIG(-1 S20684C7) C1{ VBC2{ v1} BC3{ BC4{ VBC5{ m} VBC6{ BC7{ m Fp} VBC5 FU8{ m}} Fi} BC9{ VBC7 BC5} FC5} VBC10{ m}}


S20684C7 ::~S20684C7(){ note_dtor("S20684C7", this);} // tgen
S20684C7 ::S20684C7(){ note_ctor("S20684C7", this);} // tgen

static void Test_S20684C7()
{
  extern Class_Descriptor cd_S20684C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S20684C7, buf);
    S20684C7 *dp, &lv = *(dp=new (buf) S20684C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S20684C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20684C7)");
    check_base_class_offset(lv, (S20684C8*), ABISELECT(32,16), "S20684C7");
    check_base_class_offset(lv, (S3600C19*)(S20684C10*)(S20684C9*), 0, "S20684C7");
    check_base_class_offset(lv, (S3600C19*)(S20684C11*), 0, "S20684C7");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C11*), ABISELECT(48,24), "S20684C7");
    check_base_class_offset(lv, (S20684C11*)(S20684C10*)(S20684C9*), ABISELECT(40,20), "S20684C7");
    check_base_class_offset(lv, (S20684C10*)(S20684C9*), 0, "S20684C7");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C2*)(S20684C9*), ABISELECT(64,32), "S20684C7");
    check_base_class_offset(lv, (S3600C19*)(S20684C2*)(S20684C9*), ABISELECT(16,8), "S20684C7");
    check_base_class_offset(lv, (S20684C2*)(S20684C9*), ABISELECT(16,8), "S20684C7");
    check_base_class_offset(lv, (S20684C9*), 0, "S20684C7");
    check_base_class_offset(lv, (S3600C6_nt*), 0, "S20684C7");
    test_class_info(&lv, &cd_S20684C7);
    dp->~S20684C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20684C7(Test_S20684C7, "S20684C7", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S20684C7C1Ev();
extern void _ZN8S20684C7D1Ev();
Name_Map name_map_S20684C7[] = {
  NSPAIR(_ZN8S20684C7C1Ev),
  NSPAIR(_ZN8S20684C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20684C8;
extern VTBL_ENTRY _ZTI8S20684C8[];
extern  VTBL_ENTRY _ZTV8S20684C8[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20684C11;
extern VTBL_ENTRY _ZTI9S20684C11[];
extern  VTBL_ENTRY _ZTV9S20684C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C11[];
extern Class_Descriptor cd_S20684C10;
extern VTBL_ENTRY _ZTI9S20684C10[];
extern  VTBL_ENTRY _ZTV9S20684C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20684C2;
extern VTBL_ENTRY _ZTI8S20684C2[];
extern  VTBL_ENTRY _ZTV8S20684C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C2[];
extern Class_Descriptor cd_S20684C9;
extern VTBL_ENTRY _ZTI8S20684C9[];
extern  VTBL_ENTRY _ZTV8S20684C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C9[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
static Base_Class bases_S20684C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20684C8,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20684C11,    ABISELECT(40,20), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20684C10,    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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S20684C2,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20684C9,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C6_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20684C7[];
extern void _ZN8S20684C82v1Ev();
static  VTBL_ENTRY vtc_S20684C7[] = {
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C7[0]),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20684C7[0]),
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20684C7[0]),
  (VTBL_ENTRY)&_ZN8S20684C82v1Ev,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20684C7[0]),
};
extern VTBL_ENTRY _ZTV8S20684C7[];
static  VTBL_ENTRY _tg__ZTV8S20684C9__8S20684C7[] = {
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C108S20684C9__8S20684C7[] = {
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__9S20684C108S20684C9__8S20684C7[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20684C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C28S20684C9__8S20684C7[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C2[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__8S20684C9__8S20684C7[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C2__8S20684C9__8S20684C7[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__8S20684C7[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C11[0]),
};
static  VTT_ENTRY vtt_S20684C7[] = {
  {&(_ZTV8S20684C7[7]),  7,17},
  {&(_tg__ZTV8S20684C9__8S20684C7[5]),  5,5},
  {&(_tg__ZTV9S20684C108S20684C9__8S20684C7[4]),  4,4},
  {&(_tg__ZTV9S20684C11__9S20684C108S20684C9__8S20684C7[3]),  3,3},
  {&(_tg__ZTV8S20684C28S20684C9__8S20684C7[3]),  3,3},
  {&(_tg__ZTV9S20684C11__8S20684C9__8S20684C7[3]),  3,3},
  {&(_tg__ZTV8S20684C2__8S20684C9__8S20684C7[3]),  3,3},
  {&(_ZTV8S20684C7[13]),  13,17},
  {&(_ZTV8S20684C7[17]),  17,17},
  {&(_ZTV8S20684C7[10]),  10,17},
  {&(_tg__ZTV9S20684C11__8S20684C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20684C7[];
extern  VTBL_ENTRY _ZTV8S20684C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C7[];
Class_Descriptor cd_S20684C7 = {  "S20684C7", // class name
  bases_S20684C7, 10,
  &(vtc_S20684C7[0]), // expected_vtbl_contents
  &(vtt_S20684C7[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S20684C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20684C7),17, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20684C7),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  S20684C14  : S3600C19 , S3600C29_nt {
};
//SIG(-1 S20684C14) C1{ BC2{ m} BC3{ m Fp}}



static void Test_S20684C14()
{
  extern Class_Descriptor cd_S20684C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20684C14, buf);
    S20684C14 &lv = *(new (buf) S20684C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20684C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20684C14)");
    check_base_class_offset(lv, (S3600C19*), 0, "S20684C14");
    check_base_class_offset(lv, (S3600C29_nt*), 0, "S20684C14");
    test_class_info(&lv, &cd_S20684C14);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20684C14(Test_S20684C14, "S20684C14", ABISELECT(8,4));

#else // __cplusplus

extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S20684C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3600C29_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 _ZTI9S20684C14[];
Class_Descriptor cd_S20684C14 = {  "S20684C14", // class name
  bases_S20684C14, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S20684C14),ABISELECT(56,32), //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  S20684C15  : virtual S20684C14 , virtual S20684C2 , S3600C29_nt {
  __tsi64 s20684c15f0[8];
  ~S20684C15(); // tgen
  S20684C15(); // tgen
};
//SIG(-1 S20684C15) C1{ VBC2{ BC3{ m} BC4{ m Fp}} VBC5{ VBC4 BC3} BC4 FL[8]}


S20684C15 ::~S20684C15(){ note_dtor("S20684C15", this);} // tgen
S20684C15 ::S20684C15(){ note_ctor("S20684C15", this);} // tgen

static void Test_S20684C15()
{
  extern Class_Descriptor cd_S20684C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,21)];
    init_test(&cd_S20684C15, buf);
    S20684C15 *dp, &lv = *(dp=new (buf) S20684C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,80), "sizeof(S20684C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20684C15)");
    check_base_class_offset(lv, (S3600C19*)(S20684C14*), ABISELECT(80,72), "S20684C15");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C14*), ABISELECT(80,72), "S20684C15");
    check_base_class_offset(lv, (S20684C14*), ABISELECT(80,72), "S20684C15");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C2*), ABISELECT(88,76), "S20684C15");
    check_base_class_offset(lv, (S3600C19*)(S20684C2*), 0, "S20684C15");
    check_base_class_offset(lv, (S20684C2*), 0, "S20684C15");
    /*is_ambiguous_... S20684C15::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20684C15");
    check_field_offset(lv, s20684c15f0, ABISELECT(16,8), "S20684C15.s20684c15f0");
    test_class_info(&lv, &cd_S20684C15);
    dp->~S20684C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20684C15(Test_S20684C15, "S20684C15", ABISELECT(96,80));

#else // __cplusplus

extern void _ZN9S20684C15C1Ev();
extern void _ZN9S20684C15D1Ev();
Name_Map name_map_S20684C15[] = {
  NSPAIR(_ZN9S20684C15C1Ev),
  NSPAIR(_ZN9S20684C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20684C14;
extern VTBL_ENTRY _ZTI9S20684C14[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20684C2;
extern VTBL_ENTRY _ZTI8S20684C2[];
extern  VTBL_ENTRY _ZTV8S20684C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C2[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S20684C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S20684C14,    ABISELECT(80,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_S3600C29_nt,    ABISELECT(88,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20684C2,    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},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20684C15[];
static  VTBL_ENTRY vtc_S20684C15[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C15[0]),
};
extern VTBL_ENTRY _ZTV9S20684C15[];
static  VTBL_ENTRY _tg__ZTV8S20684C2__9S20684C15[] = {
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C2[0]),
};
static  VTT_ENTRY vtt_S20684C15[] = {
  {&(_ZTV9S20684C15[5]),  5,5},
  {&(_ZTV9S20684C15[5]),  5,5},
  {&(_tg__ZTV8S20684C2__9S20684C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20684C15[];
extern  VTBL_ENTRY _ZTV9S20684C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C15[];
Class_Descriptor cd_S20684C15 = {  "S20684C15", // class name
  bases_S20684C15, 7,
  &(vtc_S20684C15[0]), // expected_vtbl_contents
  &(vtt_S20684C15[0]), // expected_vtt_contents
  ABISELECT(96,80), // object size
  NSPAIRA(_ZTI9S20684C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20684C15),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20684C15),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  S20684C6  : virtual S20684C7 , S20684C9 , virtual S20684C14 , virtual S20684C15 {
  int s20684c6f0[6];
  ~S20684C6(); // tgen
  S20684C6(); // tgen
};
//SIG(-1 S20684C6) C1{ VBC2{ VBC3{ v1} BC4{ BC5{ VBC6{ m} VBC7{ BC8{ m Fp} VBC6 FU9{ m}} Fi} BC10{ VBC8 BC6} FC6} VBC11{ m}} BC4 VBC12{ BC6 BC8} VBC13{ VBC12 VBC10 BC8 FL[8]} Fi[6]}


S20684C6 ::~S20684C6(){ note_dtor("S20684C6", this);} // tgen
S20684C6 ::S20684C6(){ note_ctor("S20684C6", this);} // tgen

static void Test_S20684C6()
{
  extern Class_Descriptor cd_S20684C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,39)];
    init_test(&cd_S20684C6, buf);
    S20684C6 *dp, &lv = *(dp=new (buf) S20684C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,152), "sizeof(S20684C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20684C6)");
    check_base_class_offset(lv, (S20684C8*)(S20684C7*), ABISELECT(88,56), "S20684C6");
    check_base_class_offset(lv, (S3600C19*)(S20684C10*)(S20684C9*)(S20684C7*), 0, "S20684C6");
    check_base_class_offset(lv, (S3600C19*)(S20684C11*), 0, "S20684C6");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20684C10*)(S20684C9*), 0, "S20684C6");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C11*), ABISELECT(104,64), "S20684C6");
    check_base_class_offset(lv, (S20684C11*)(S20684C10*)(S20684C9*)(S20684C7*), ABISELECT(96,60), "S20684C6");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S20684C11*)(S20684C10*)(S20684C9*), ABISELECT(96,60), "S20684C6");
    check_base_class_offset(lv, (S20684C10*)(S20684C9*)(S20684C7*), ABISELECT(56,40), "S20684C6");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C2*)(S20684C9*)(S20684C7*), ABISELECT(120,72), "S20684C6");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20684C2*)(S20684C9*), ABISELECT(120,72), "S20684C6");
    /*is_ambiguous_... S20684C6::S20684C2 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20684C2*), ABISELECT(120,72), "S20684C6");
    check_base_class_offset(lv, (S3600C19*)(S20684C2*)(S20684C9*)(S20684C7*), ABISELECT(72,48), "S20684C6");
    check_base_class_offset(lv, (S20684C2*)(S20684C9*)(S20684C7*), ABISELECT(72,48), "S20684C6");
    check_base_class_offset(lv, (S20684C9*)(S20684C7*), ABISELECT(56,40), "S20684C6");
    check_base_class_offset(lv, (S3600C6_nt*)(S20684C7*), 0, "S20684C6");
    check_base_class_offset(lv, (S20684C7*), ABISELECT(56,40), "S20684C6");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S20684C10*)(S20684C9*), 0, "S20684C6");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20684C2*)(S20684C9*), ABISELECT(16,8), "S20684C6");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S20684C2*)(S20684C9*), ABISELECT(16,8), "S20684C6");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S20684C9*), 0, "S20684C6");
    check_base_class_offset(lv, (S3600C19*)(S20684C14*), ABISELECT(128,76), "S20684C6");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C14*), ABISELECT(128,76), "S20684C6");
    check_base_class_offset(lv, (S20684C14*), ABISELECT(128,76), "S20684C6");
    check_base_class_offset(lv, (S20684C14*)(S20684C15*), ABISELECT(128,76), "S20684C6");
    /*is_ambiguous_... S20684C6::S20684C2 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20684C2*), ABISELECT(136,80), "S20684C6");
    check_base_class_offset(lv, (S20684C2*)(S20684C15*), ABISELECT(136,80), "S20684C6");
    /*is_ambiguous_... S20684C15::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20684C15*), ABISELECT(144,84), "S20684C6");
    check_base_class_offset(lv, (S20684C15*), ABISELECT(136,80), "S20684C6");
    check_field_offset(lv, s20684c6f0, ABISELECT(28,16), "S20684C6.s20684c6f0");
    test_class_info(&lv, &cd_S20684C6);
    dp->~S20684C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20684C6(Test_S20684C6, "S20684C6", ABISELECT(216,152));

#else // __cplusplus

extern void _ZN8S20684C6C1Ev();
extern void _ZN8S20684C6D1Ev();
Name_Map name_map_S20684C6[] = {
  NSPAIR(_ZN8S20684C6C1Ev),
  NSPAIR(_ZN8S20684C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20684C8;
extern VTBL_ENTRY _ZTI8S20684C8[];
extern  VTBL_ENTRY _ZTV8S20684C8[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20684C11;
extern VTBL_ENTRY _ZTI9S20684C11[];
extern  VTBL_ENTRY _ZTV9S20684C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C11[];
extern Class_Descriptor cd_S20684C10;
extern VTBL_ENTRY _ZTI9S20684C10[];
extern  VTBL_ENTRY _ZTV9S20684C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20684C2;
extern VTBL_ENTRY _ZTI8S20684C2[];
extern  VTBL_ENTRY _ZTV8S20684C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C2[];
extern Class_Descriptor cd_S20684C9;
extern VTBL_ENTRY _ZTI8S20684C9[];
extern  VTBL_ENTRY _ZTV8S20684C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C9[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
extern Class_Descriptor cd_S20684C7;
extern VTBL_ENTRY _ZTI8S20684C7[];
extern  VTBL_ENTRY _ZTV8S20684C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C7[];
extern Class_Descriptor cd_S20684C10;
extern VTBL_ENTRY _ZTI9S20684C10[];
extern  VTBL_ENTRY _ZTV9S20684C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20684C2;
extern VTBL_ENTRY _ZTI8S20684C2[];
extern  VTBL_ENTRY _ZTV8S20684C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C2[];
extern Class_Descriptor cd_S20684C9;
extern VTBL_ENTRY _ZTI8S20684C9[];
extern  VTBL_ENTRY _ZTV8S20684C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C9[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20684C14;
extern VTBL_ENTRY _ZTI9S20684C14[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20684C2;
extern VTBL_ENTRY _ZTI8S20684C2[];
extern  VTBL_ENTRY _ZTV8S20684C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C2[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20684C15;
extern VTBL_ENTRY _ZTI9S20684C15[];
extern  VTBL_ENTRY _ZTV9S20684C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C15[];
static Base_Class bases_S20684C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20684C8,    ABISELECT(88,56), //bcp->offset
    24, //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
    10, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(104,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
    3, //immediately_derived
  0, 0},
  {&cd_S20684C11,    ABISELECT(96,60), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20684C10,    ABISELECT(56,40), //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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(120,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
    7, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(72,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, 0},
  {&cd_S20684C2,    ABISELECT(72,48), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20684C9,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3600C6_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
    10, //immediately_derived
  0, 1},
  {&cd_S20684C7,    ABISELECT(56,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20684C10,    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
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    13, //immediately_derived
  0, 0},
  {&cd_S20684C2,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20684C9,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(128,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
    17, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(128,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
    17, //immediately_derived
  0, 0},
  {&cd_S20684C14,    ABISELECT(128,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_S3600C19,    ABISELECT(136,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
    19, //immediately_derived
  0, 0},
  {&cd_S20684C2,    ABISELECT(136,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(144,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
    21, //immediately_derived
  0, 0},
  {&cd_S20684C15,    ABISELECT(136,80), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20684C6[];
extern void _ZN8S20684C82v1Ev();
static  VTBL_ENTRY vtc_S20684C6[] = {
  ABISELECT(136,80),
  ABISELECT(136,80),
  ABISELECT(128,76),
  0,
  ABISELECT(88,56),
  ABISELECT(56,40),
  ABISELECT(120,72),
  ABISELECT(96,60),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
  ABISELECT(104,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
  ABISELECT(-56,-40),
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(40,20),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
  ABISELECT(48,24),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
  (VTBL_ENTRY)&_ZN8S20684C82v1Ev,
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
};
extern VTBL_ENTRY _ZTV8S20684C6[];
static  VTBL_ENTRY _tg__ZTV8S20684C9__A1__8S20684C6[] = {
  ABISELECT(120,72),
  ABISELECT(96,60),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C108S20684C9__A1__8S20684C6[] = {
  ABISELECT(96,60),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__9S20684C108S20684C9__A1__8S20684C6[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI9S20684C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C28S20684C9__A1__8S20684C6[] = {
  ABISELECT(104,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C2[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__8S20684C9__A1__8S20684C6[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C2__8S20684C9__A1__8S20684C6[] = {
  ABISELECT(104,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C7__8S20684C6[] = {
  ABISELECT(-56,-40),
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(40,20),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C98S20684C7__8S20684C6[] = {
  ABISELECT(64,32),
  ABISELECT(40,20),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C108S20684C98S20684C7__8S20684C6[] = {
  ABISELECT(40,20),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__9S20684C108S20684C98S20684C7__8S20684C6[] = {
  ABISELECT(-96,-60),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20684C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C28S20684C98S20684C7__8S20684C6[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C2[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__8S20684C98S20684C7__8S20684C6[] = {
  ABISELECT(-96,-60),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C2__8S20684C98S20684C7__8S20684C6[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
extern void _ZN8S20684C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20684C8__8S20684C7__8S20684C6[] = {
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20684C7[0]),
  (VTBL_ENTRY)&_ZN8S20684C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__8S20684C7__8S20684C6[] = {
  ABISELECT(-96,-60),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20684C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C28S20684C9__8S20684C7__8S20684C6[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20684C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__8S20684C6[] = {
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C15__8S20684C6[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C2__A2__8S20684C6[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C2[0]),
};
static  VTT_ENTRY vtt_S20684C6[] = {
  {&(_ZTV8S20684C6[11]),  11,36},
  {&(_tg__ZTV8S20684C9__A1__8S20684C6[5]),  5,5},
  {&(_tg__ZTV9S20684C108S20684C9__A1__8S20684C6[4]),  4,4},
  {&(_tg__ZTV9S20684C11__9S20684C108S20684C9__A1__8S20684C6[3]),  3,3},
  {&(_tg__ZTV8S20684C28S20684C9__A1__8S20684C6[3]),  3,3},
  {&(_tg__ZTV9S20684C11__8S20684C9__A1__8S20684C6[3]),  3,3},
  {&(_tg__ZTV8S20684C2__8S20684C9__A1__8S20684C6[3]),  3,3},
  {&(_ZTV8S20684C6[21]),  21,36},
  {&(_ZTV8S20684C6[27]),  27,36},
  {&(_ZTV8S20684C6[31]),  31,36},
  {&(_ZTV8S20684C6[24]),  24,36},
  {&(_ZTV8S20684C6[14]),  14,36},
  {&(_ZTV8S20684C6[36]),  36,36},
  {&(_ZTV8S20684C6[36]),  36,36},
  {&(_tg__ZTV8S20684C7__8S20684C6[7]),  7,7},
  {&(_tg__ZTV8S20684C98S20684C7__8S20684C6[5]),  5,5},
  {&(_tg__ZTV9S20684C108S20684C98S20684C7__8S20684C6[4]),  4,4},
  {&(_tg__ZTV9S20684C11__9S20684C108S20684C98S20684C7__8S20684C6[3]),  3,3},
  {&(_tg__ZTV8S20684C28S20684C98S20684C7__8S20684C6[3]),  3,3},
  {&(_tg__ZTV9S20684C11__8S20684C98S20684C7__8S20684C6[3]),  3,3},
  {&(_tg__ZTV8S20684C2__8S20684C98S20684C7__8S20684C6[3]),  3,3},
  {&(_tg__ZTV8S20684C8__8S20684C7__8S20684C6[3]),  3,4},
  {&(_tg__ZTV9S20684C11__8S20684C7__8S20684C6[3]),  3,3},
  {&(_tg__ZTV8S20684C28S20684C9__8S20684C7__8S20684C6[3]),  3,3},
  {&(_tg__ZTV9S20684C11__8S20684C6[3]),  3,3},
  {&(_tg__ZTV9S20684C15__8S20684C6[5]),  5,5},
  {&(_tg__ZTV9S20684C15__8S20684C6[5]),  5,5},
  {&(_tg__ZTV8S20684C2__A2__8S20684C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20684C6[];
extern  VTBL_ENTRY _ZTV8S20684C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C6[];
Class_Descriptor cd_S20684C6 = {  "S20684C6", // class name
  bases_S20684C6, 22,
  &(vtc_S20684C6[0]), // expected_vtbl_contents
  &(vtt_S20684C6[0]), // expected_vtt_contents
  ABISELECT(216,152), // object size
  NSPAIRA(_ZTI8S20684C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20684C6),36, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20684C6),28, //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  S20684C17  : virtual S20684C15 {
  short s20684c17f0;
  virtual  ~S20684C17(); // _ZN9S20684C17D2Ev
  S20684C17(); // tgen
};
//SIG(-1 S20684C17) C1{ VBC2{ VBC3{ BC4{ m} BC5{ m Fp}} VBC6{ VBC5 BC4} BC5 FL[8]} vd Fs}


 S20684C17 ::~S20684C17(){ note_dtor("S20684C17", this);}
S20684C17 ::S20684C17(){ note_ctor("S20684C17", this);} // tgen

static void Test_S20684C17()
{
  extern Class_Descriptor cd_S20684C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,23)];
    init_test(&cd_S20684C17, buf);
    S20684C17 *dp, &lv = *(dp=new (buf) S20684C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,88), "sizeof(S20684C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20684C17)");
    check_base_class_offset(lv, (S3600C19*)(S20684C14*), ABISELECT(96,80), "S20684C17");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C14*), ABISELECT(96,80), "S20684C17");
    check_base_class_offset(lv, (S20684C14*)(S20684C15*), ABISELECT(96,80), "S20684C17");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C2*), ABISELECT(104,84), "S20684C17");
    check_base_class_offset(lv, (S3600C19*)(S20684C2*), 0, "S20684C17");
    check_base_class_offset(lv, (S20684C2*)(S20684C15*), 0, "S20684C17");
    /*is_ambiguous_... S20684C15::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20684C15*), ABISELECT(24,12), "S20684C17");
    check_base_class_offset(lv, (S20684C15*), ABISELECT(16,8), "S20684C17");
    check_field_offset(lv, s20684c17f0, ABISELECT(8,4), "S20684C17.s20684c17f0");
    test_class_info(&lv, &cd_S20684C17);
    dp->~S20684C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20684C17(Test_S20684C17, "S20684C17", ABISELECT(112,88));

#else // __cplusplus

extern void _ZN9S20684C17C1Ev();
extern void _ZN9S20684C17D2Ev();
Name_Map name_map_S20684C17[] = {
  NSPAIR(_ZN9S20684C17C1Ev),
  NSPAIR(_ZN9S20684C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20684C14;
extern VTBL_ENTRY _ZTI9S20684C14[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20684C2;
extern VTBL_ENTRY _ZTI8S20684C2[];
extern  VTBL_ENTRY _ZTV8S20684C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C2[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20684C15;
extern VTBL_ENTRY _ZTI9S20684C15[];
extern  VTBL_ENTRY _ZTV9S20684C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C15[];
static Base_Class bases_S20684C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(96,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
    2, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(96,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
    2, //immediately_derived
  0, 0},
  {&cd_S20684C14,    ABISELECT(96,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
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(104,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20684C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20684C15,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20684C17[];
extern void _ZN9S20684C17D1Ev();
extern void _ZN9S20684C17D0Ev();
static  VTBL_ENTRY vtc_S20684C17[] = {
  0,
  ABISELECT(96,80),
  ABISELECT(16,8),
  ABISELECT(104,84),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C17[0]),
  (VTBL_ENTRY)&_ZN9S20684C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20684C17D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20684C17[0]),
};
extern VTBL_ENTRY _ZTV9S20684C17[];
static  VTBL_ENTRY _tg__ZTV9S20684C15__9S20684C17[] = {
  ABISELECT(-16,-8),
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C2__9S20684C15__9S20684C17[] = {
  ABISELECT(104,84),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20684C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C2__9S20684C17[] = {
  ABISELECT(104,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C2[0]),
};
static  VTT_ENTRY vtt_S20684C17[] = {
  {&(_ZTV9S20684C17[6]),  6,13},
  {&(_ZTV9S20684C17[13]),  13,13},
  {&(_ZTV9S20684C17[6]),  6,13},
  {&(_tg__ZTV9S20684C15__9S20684C17[5]),  5,5},
  {&(_tg__ZTV8S20684C2__9S20684C15__9S20684C17[3]),  3,3},
  {&(_tg__ZTV8S20684C2__9S20684C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20684C17[];
extern  VTBL_ENTRY _ZTV9S20684C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C17[];
Class_Descriptor cd_S20684C17 = {  "S20684C17", // class name
  bases_S20684C17, 8,
  &(vtc_S20684C17[0]), // expected_vtbl_contents
  &(vtt_S20684C17[0]), // expected_vtt_contents
  ABISELECT(112,88), // object size
  NSPAIRA(_ZTI9S20684C17),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20684C17),13, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20684C17),6, //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  S20684C16  : S20684C17 , virtual S3600C6_nt {
  char s20684c16f0[9];
  virtual  ~S20684C16(); // _ZN9S20684C16D2Ev
  virtual void  v2(); // _ZN9S20684C162v2Ev
  S20684C16(); // tgen
};
//SIG(-1 S20684C16) C1{ BC2{ VBC3{ VBC4{ BC5{ m} BC6{ m Fp}} VBC7{ VBC6 BC5} BC6 FL[8]} vd Fs} VBC8{ m} vd v1 Fc[9]}


 S20684C16 ::~S20684C16(){ note_dtor("S20684C16", this);}
void  S20684C16 ::v2(){vfunc_called(this, "_ZN9S20684C162v2Ev");}
S20684C16 ::S20684C16(){ note_ctor("S20684C16", this);} // tgen

static void Test_S20684C16()
{
  extern Class_Descriptor cd_S20684C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,25)];
    init_test(&cd_S20684C16, buf);
    S20684C16 *dp, &lv = *(dp=new (buf) S20684C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,96), "sizeof(S20684C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20684C16)");
    check_base_class_offset(lv, (S3600C19*)(S20684C14*), ABISELECT(104,88), "S20684C16");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C14*), ABISELECT(104,88), "S20684C16");
    check_base_class_offset(lv, (S20684C14*)(S20684C15*), ABISELECT(104,88), "S20684C16");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C2*), ABISELECT(112,92), "S20684C16");
    check_base_class_offset(lv, (S3600C19*)(S20684C2*), 0, "S20684C16");
    check_base_class_offset(lv, (S20684C2*)(S20684C15*), 0, "S20684C16");
    /*is_ambiguous_... S20684C15::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20684C15*), ABISELECT(32,20), "S20684C16");
    check_base_class_offset(lv, (S20684C15*)(S20684C17*), ABISELECT(24,16), "S20684C16");
    check_base_class_offset(lv, (S20684C17*), 0, "S20684C16");
    check_base_class_offset(lv, (S3600C6_nt*), 0, "S20684C16");
    check_field_offset(lv, s20684c16f0, ABISELECT(10,6), "S20684C16.s20684c16f0");
    test_class_info(&lv, &cd_S20684C16);
    dp->~S20684C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20684C16(Test_S20684C16, "S20684C16", ABISELECT(120,96));

#else // __cplusplus

extern void _ZN9S20684C16C1Ev();
extern void _ZN9S20684C16D2Ev();
Name_Map name_map_S20684C16[] = {
  NSPAIR(_ZN9S20684C16C1Ev),
  NSPAIR(_ZN9S20684C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20684C14;
extern VTBL_ENTRY _ZTI9S20684C14[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20684C2;
extern VTBL_ENTRY _ZTI8S20684C2[];
extern  VTBL_ENTRY _ZTV8S20684C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C2[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20684C15;
extern VTBL_ENTRY _ZTI9S20684C15[];
extern  VTBL_ENTRY _ZTV9S20684C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C15[];
extern Class_Descriptor cd_S20684C17;
extern VTBL_ENTRY _ZTI9S20684C17[];
extern  VTBL_ENTRY _ZTV9S20684C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C17[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
static Base_Class bases_S20684C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(104,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_S3600C29_nt,    ABISELECT(104,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_S20684C14,    ABISELECT(104,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
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(112,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20684C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    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
    7, //immediately_derived
  0, 0},
  {&cd_S20684C15,    ABISELECT(24,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20684C17,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C6_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20684C16[];
extern void _ZN9S20684C16D1Ev();
extern void _ZN9S20684C16D0Ev();
extern void _ZN9S20684C162v2Ev();
static  VTBL_ENTRY vtc_S20684C16[] = {
  0,
  0,
  ABISELECT(104,88),
  ABISELECT(24,16),
  ABISELECT(112,92),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C16[0]),
  (VTBL_ENTRY)&_ZN9S20684C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20684C16D0Ev,
  (VTBL_ENTRY)&_ZN9S20684C162v2Ev,
  ABISELECT(-24,-16),
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S20684C16[0]),
};
extern VTBL_ENTRY _ZTV9S20684C16[];
extern void _ZN9S20684C17D1Ev();
extern void _ZN9S20684C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20684C17__9S20684C16[] = {
  0,
  ABISELECT(104,88),
  ABISELECT(24,16),
  ABISELECT(112,92),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C17[0]),
  (VTBL_ENTRY)&_ZN9S20684C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20684C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20684C15__9S20684C17__9S20684C16[] = {
  ABISELECT(-24,-16),
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S20684C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C15__9S20684C16[] = {
  ABISELECT(-24,-16),
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C2__9S20684C15__9S20684C16[] = {
  ABISELECT(112,92),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S20684C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C2__9S20684C16[] = {
  ABISELECT(112,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C2[0]),
};
static  VTT_ENTRY vtt_S20684C16[] = {
  {&(_ZTV9S20684C16[7]),  7,15},
  {&(_tg__ZTV9S20684C17__9S20684C16[6]),  6,8},
  {&(_tg__ZTV9S20684C15__9S20684C17__9S20684C16[5]),  5,5},
  {&(_tg__ZTV9S20684C17__9S20684C16[6]),  6,8},
  {&(_ZTV9S20684C16[15]),  15,15},
  {&(_ZTV9S20684C16[7]),  7,15},
  {&(_tg__ZTV9S20684C15__9S20684C16[5]),  5,5},
  {&(_tg__ZTV8S20684C2__9S20684C15__9S20684C16[3]),  3,3},
  {&(_tg__ZTV8S20684C2__9S20684C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20684C16[];
extern  VTBL_ENTRY _ZTV9S20684C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C16[];
Class_Descriptor cd_S20684C16 = {  "S20684C16", // class name
  bases_S20684C16, 10,
  &(vtc_S20684C16[0]), // expected_vtbl_contents
  &(vtt_S20684C16[0]), // expected_vtt_contents
  ABISELECT(120,96), // object size
  NSPAIRA(_ZTI9S20684C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20684C16),15, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20684C16),9, //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  S20684C5  : S3600C29_nt , S20684C2 , S20684C6 , S20684C16 {
  ~S20684C5(); // tgen
  S20684C5(); // tgen
};
//SIG(-1 S20684C5) C1{ BC2{ m Fp} BC3{ VBC2 BC4{ m}} BC5{ VBC6{ VBC7{ v1} BC8{ BC9{ VBC4 VBC10{ BC2 VBC4 FU11{ m}} Fi} BC3 FC4} VBC12{ m}} BC8 VBC13{ BC4 BC2} VBC14{ VBC13 VBC3 BC2 FL[8]} Fi[6]} BC15{ BC16{ VBC14 vd Fs} VBC12 vd v2 Fc[9]}}


S20684C5 ::~S20684C5(){ note_dtor("S20684C5", this);} // tgen
S20684C5 ::S20684C5(){ note_ctor("S20684C5", this);} // tgen

static void Test_S20684C5()
{
  extern Class_Descriptor cd_S20684C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,45)];
    init_test(&cd_S20684C5, buf);
    S20684C5 *dp, &lv = *(dp=new (buf) S20684C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,176), "sizeof(S20684C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20684C5)");
    /*is_ambiguous_... S20684C5::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20684C5");
    /*is_ambiguous_... S20684C5::S20684C2 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20684C2*), ABISELECT(96,64), "S20684C5");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C2*)(S20684C9*)(S20684C7*), ABISELECT(96,64), "S20684C5");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20684C2*)(S20684C9*)(S20684C6*), ABISELECT(96,64), "S20684C5");
    /*is_ambiguous_... S20684C5::S20684C2 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20684C2*), ABISELECT(96,64), "S20684C5");
    /*is_ambiguous_... S20684C5::S20684C2 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20684C2*), 0, "S20684C5");
    /*is_ambiguous_... S20684C5::S20684C2 */ AMB_check_base_class_offset(lv, (S20684C2*), 0, "S20684C5");
    check_base_class_offset(lv, (S20684C8*)(S20684C7*), ABISELECT(136,84), "S20684C5");
    check_base_class_offset(lv, (S3600C19*)(S20684C10*)(S20684C9*)(S20684C7*), ABISELECT(144,88), "S20684C5");
    check_base_class_offset(lv, (S3600C19*)(S20684C11*), ABISELECT(144,88), "S20684C5");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20684C10*)(S20684C9*)(S20684C6*), ABISELECT(144,88), "S20684C5");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C11*), ABISELECT(152,92), "S20684C5");
    check_base_class_offset(lv, (S20684C11*)(S20684C10*)(S20684C9*)(S20684C7*), ABISELECT(144,88), "S20684C5");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S20684C11*)(S20684C10*)(S20684C9*)(S20684C6*), ABISELECT(144,88), "S20684C5");
    check_base_class_offset(lv, (S20684C10*)(S20684C9*)(S20684C7*), ABISELECT(104,68), "S20684C5");
    check_base_class_offset(lv, (S3600C19*)(S20684C2*)(S20684C9*)(S20684C7*), ABISELECT(120,76), "S20684C5");
    check_base_class_offset(lv, (S20684C2*)(S20684C9*)(S20684C7*), ABISELECT(120,76), "S20684C5");
    check_base_class_offset(lv, (S20684C9*)(S20684C7*), ABISELECT(104,68), "S20684C5");
    check_base_class_offset(lv, (S3600C6_nt*)(S20684C7*), 0, "S20684C5");
    check_base_class_offset(lv, (S3600C6_nt*)(S20684C16*), 0, "S20684C5");
    check_base_class_offset(lv, (S20684C7*)(S20684C6*), ABISELECT(104,68), "S20684C5");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S20684C10*)(S20684C9*)(S20684C6*), ABISELECT(16,8), "S20684C5");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20684C2*)(S20684C9*)(S20684C6*), ABISELECT(32,16), "S20684C5");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S20684C2*)(S20684C9*)(S20684C6*), ABISELECT(32,16), "S20684C5");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S20684C9*)(S20684C6*), ABISELECT(16,8), "S20684C5");
    check_base_class_offset(lv, (S3600C19*)(S20684C14*), ABISELECT(168,100), "S20684C5");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C14*), ABISELECT(168,100), "S20684C5");
    check_base_class_offset(lv, (S20684C14*)(S20684C6*), ABISELECT(168,100), "S20684C5");
    check_base_class_offset(lv, (S20684C14*)(S20684C15*), ABISELECT(168,100), "S20684C5");
    /*is_ambiguous_... S20684C5::S20684C2 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20684C2*), ABISELECT(176,104), "S20684C5");
    check_base_class_offset(lv, (S20684C2*)(S20684C15*), ABISELECT(176,104), "S20684C5");
    /*is_ambiguous_... S20684C15::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20684C15*), ABISELECT(184,108), "S20684C5");
    check_base_class_offset(lv, (S20684C15*)(S20684C6*), ABISELECT(176,104), "S20684C5");
    check_base_class_offset(lv, (S20684C15*)(S20684C17*)(S20684C16*), ABISELECT(176,104), "S20684C5");
    check_base_class_offset(lv, (S20684C6*), ABISELECT(16,8), "S20684C5");
    check_base_class_offset(lv, (S20684C17*)(S20684C16*), ABISELECT(72,48), "S20684C5");
    check_base_class_offset(lv, (S20684C16*), ABISELECT(72,48), "S20684C5");
    test_class_info(&lv, &cd_S20684C5);
    dp->~S20684C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20684C5(Test_S20684C5, "S20684C5", ABISELECT(256,176));

#else // __cplusplus

extern void _ZN8S20684C5C1Ev();
extern void _ZN8S20684C5D1Ev();
Name_Map name_map_S20684C5[] = {
  NSPAIR(_ZN8S20684C5C1Ev),
  NSPAIR(_ZN8S20684C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20684C2;
extern VTBL_ENTRY _ZTI8S20684C2[];
extern  VTBL_ENTRY _ZTV8S20684C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C2[];
extern Class_Descriptor cd_S20684C8;
extern VTBL_ENTRY _ZTI8S20684C8[];
extern  VTBL_ENTRY _ZTV8S20684C8[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20684C11;
extern VTBL_ENTRY _ZTI9S20684C11[];
extern  VTBL_ENTRY _ZTV9S20684C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C11[];
extern Class_Descriptor cd_S20684C10;
extern VTBL_ENTRY _ZTI9S20684C10[];
extern  VTBL_ENTRY _ZTV9S20684C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20684C2;
extern VTBL_ENTRY _ZTI8S20684C2[];
extern  VTBL_ENTRY _ZTV8S20684C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C2[];
extern Class_Descriptor cd_S20684C9;
extern VTBL_ENTRY _ZTI8S20684C9[];
extern  VTBL_ENTRY _ZTV8S20684C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C9[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
extern Class_Descriptor cd_S20684C7;
extern VTBL_ENTRY _ZTI8S20684C7[];
extern  VTBL_ENTRY _ZTV8S20684C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C7[];
extern Class_Descriptor cd_S20684C10;
extern VTBL_ENTRY _ZTI9S20684C10[];
extern  VTBL_ENTRY _ZTV9S20684C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20684C2;
extern VTBL_ENTRY _ZTI8S20684C2[];
extern  VTBL_ENTRY _ZTV8S20684C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C2[];
extern Class_Descriptor cd_S20684C9;
extern VTBL_ENTRY _ZTI8S20684C9[];
extern  VTBL_ENTRY _ZTV8S20684C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C9[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20684C14;
extern VTBL_ENTRY _ZTI9S20684C14[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20684C2;
extern VTBL_ENTRY _ZTI8S20684C2[];
extern  VTBL_ENTRY _ZTV8S20684C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C2[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20684C15;
extern VTBL_ENTRY _ZTI9S20684C15[];
extern  VTBL_ENTRY _ZTV9S20684C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C15[];
extern Class_Descriptor cd_S20684C6;
extern VTBL_ENTRY _ZTI8S20684C6[];
extern  VTBL_ENTRY _ZTV8S20684C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C6[];
extern Class_Descriptor cd_S20684C17;
extern VTBL_ENTRY _ZTI9S20684C17[];
extern  VTBL_ENTRY _ZTV9S20684C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C17[];
extern Class_Descriptor cd_S20684C16;
extern VTBL_ENTRY _ZTI9S20684C16[];
extern  VTBL_ENTRY _ZTV9S20684C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C16[];
static Base_Class bases_S20684C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C29_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20684C2,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20684C8,    ABISELECT(136,84), //bcp->offset
    47, //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
    13, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(144,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
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(152,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
    7, //immediately_derived
  0, 0},
  {&cd_S20684C11,    ABISELECT(144,88), //bcp->offset
    51, //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
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20684C10,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    11, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(120,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
    10, //immediately_derived
  0, 0},
  {&cd_S20684C2,    ABISELECT(120,76), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20684C9,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3600C6_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
    13, //immediately_derived
  0, 1},
  {&cd_S20684C7,    ABISELECT(104,68), //bcp->offset
    37, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S20684C10,    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
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    16, //immediately_derived
  0, 0},
  {&cd_S20684C2,    ABISELECT(32,16), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20684C9,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    25, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(168,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
    20, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(168,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
    20, //immediately_derived
  0, 0},
  {&cd_S20684C14,    ABISELECT(168,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
    24, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20684C2,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20684C15,    ABISELECT(176,104), //bcp->offset
    54, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S20684C6,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20684C17,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20684C16,    ABISELECT(72,48), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20684C5[];
extern void _ZN8S20684C5D1Ev();
extern void _ZN8S20684C5D0Ev();
extern void ABISELECT(_ZThn72_N8S20684C5D1Ev,_ZThn48_N8S20684C5D1Ev)();
extern void ABISELECT(_ZThn72_N8S20684C5D0Ev,_ZThn48_N8S20684C5D0Ev)();
extern void _ZN9S20684C162v2Ev();
extern void _ZN8S20684C82v1Ev();
static  VTBL_ENTRY vtc_S20684C5[] = {
  ABISELECT(176,104),
  ABISELECT(176,104),
  ABISELECT(168,100),
  0,
  ABISELECT(144,88),
  ABISELECT(144,88),
  ABISELECT(136,84),
  ABISELECT(104,68),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C5[0]),
  (VTBL_ENTRY)&_ZN8S20684C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20684C5D0Ev,
  ABISELECT(160,96),
  ABISELECT(160,96),
  ABISELECT(152,92),
  ABISELECT(-16,-8),
  ABISELECT(120,76),
  ABISELECT(88,60),
  ABISELECT(80,56),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20684C5[0]),
  ABISELECT(64,48),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20684C5[0]),
  ABISELECT(-72,-48),
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(104,56),
  ABISELECT(24,16),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S20684C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N8S20684C5D1Ev,_ZThn48_N8S20684C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N8S20684C5D0Ev,_ZThn48_N8S20684C5D0Ev),
  (VTBL_ENTRY)&_ZN9S20684C162v2Ev,
  ABISELECT(-104,-68),
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20684C5[0]),
  ABISELECT(-24,-12),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S20684C5[0]),
  0,
  ABISELECT(-136,-84),
  (VTBL_ENTRY)&(_ZTI8S20684C5[0]),
  (VTBL_ENTRY)&_ZN8S20684C82v1Ev,
  0,
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI8S20684C5[0]),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S20684C5[0]),
};
extern VTBL_ENTRY _ZTV8S20684C5[];
static  VTBL_ENTRY _tg__ZTV8S20684C2__A__8S20684C5[] = {
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C6__8S20684C5[] = {
  ABISELECT(160,96),
  ABISELECT(160,96),
  ABISELECT(152,92),
  ABISELECT(-16,-8),
  ABISELECT(120,76),
  ABISELECT(88,60),
  ABISELECT(80,56),
  ABISELECT(128,80),
  ABISELECT(128,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C98S20684C6__A1__8S20684C5[] = {
  ABISELECT(80,56),
  ABISELECT(128,80),
  ABISELECT(128,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C108S20684C98S20684C6__A1__8S20684C5[] = {
  ABISELECT(128,80),
  ABISELECT(128,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__9S20684C108S20684C98S20684C6__A1__8S20684C5[] = {
  0,
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI9S20684C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C28S20684C98S20684C6__A2__8S20684C5[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C2[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__8S20684C98S20684C6__A1__8S20684C5[] = {
  0,
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C2__8S20684C98S20684C6__A1__8S20684C5[] = {
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C7__8S20684C6__8S20684C5[] = {
  ABISELECT(-104,-68),
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
};
extern void _ZN8S20684C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20684C8__8S20684C6__8S20684C5[] = {
  0,
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
  (VTBL_ENTRY)&_ZN8S20684C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__8S20684C6__8S20684C5[] = {
  0,
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C28S20684C98S20684C7__8S20684C6__8S20684C5[] = {
  ABISELECT(-24,-12),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C28S20684C9__A1__8S20684C6__8S20684C5[] = {
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C15__8S20684C6__8S20684C5[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
};
extern void _ZN9S20684C16D1Ev();
extern void _ZN9S20684C16D0Ev();
extern void _ZN9S20684C162v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20684C16__8S20684C5[] = {
  ABISELECT(-72,-48),
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(104,56),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C16[0]),
  (VTBL_ENTRY)&_ZN9S20684C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20684C16D0Ev,
  (VTBL_ENTRY)&_ZN9S20684C162v2Ev,
};
extern void _ZN9S20684C17D1Ev();
extern void _ZN9S20684C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20684C179S20684C16__8S20684C5[] = {
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(104,56),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C17[0]),
  (VTBL_ENTRY)&_ZN9S20684C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20684C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20684C15__9S20684C179S20684C16__8S20684C5[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S20684C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C15__9S20684C16__8S20684C5[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S20684C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C7__8S20684C5[] = {
  ABISELECT(-104,-68),
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C98S20684C7__8S20684C5[] = {
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C108S20684C98S20684C7__8S20684C5[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__9S20684C108S20684C98S20684C7__8S20684C5[] = {
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20684C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C28S20684C98S20684C7__A1__8S20684C5[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C2[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__8S20684C98S20684C7__8S20684C5[] = {
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C2__8S20684C98S20684C7__8S20684C5[] = {
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
extern void _ZN8S20684C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20684C8__8S20684C7__8S20684C5[] = {
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20684C7[0]),
  (VTBL_ENTRY)&_ZN8S20684C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__8S20684C7__8S20684C5[] = {
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20684C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C28S20684C9__8S20684C7__8S20684C5[] = {
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20684C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__8S20684C5[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C15__8S20684C5[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C2__A3__8S20684C5[] = {
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C2[0]),
};
static  VTT_ENTRY vtt_S20684C5[] = {
  {&(_ZTV8S20684C5[11]),  11,59},
  {&(_tg__ZTV8S20684C2__A__8S20684C5[3]),  3,3},
  {&(_tg__ZTV8S20684C6__8S20684C5[11]),  11,11},
  {&(_tg__ZTV8S20684C98S20684C6__A1__8S20684C5[5]),  5,5},
  {&(_tg__ZTV9S20684C108S20684C98S20684C6__A1__8S20684C5[4]),  4,4},
  {&(_tg__ZTV9S20684C11__9S20684C108S20684C98S20684C6__A1__8S20684C5[3]),  3,3},
  {&(_tg__ZTV8S20684C28S20684C98S20684C6__A2__8S20684C5[3]),  3,3},
  {&(_tg__ZTV9S20684C11__8S20684C98S20684C6__A1__8S20684C5[3]),  3,3},
  {&(_tg__ZTV8S20684C2__8S20684C98S20684C6__A1__8S20684C5[3]),  3,3},
  {&(_tg__ZTV8S20684C7__8S20684C6__8S20684C5[7]),  7,7},
  {&(_tg__ZTV8S20684C8__8S20684C6__8S20684C5[3]),  3,4},
  {&(_tg__ZTV9S20684C11__8S20684C6__8S20684C5[3]),  3,3},
  {&(_tg__ZTV8S20684C28S20684C98S20684C7__8S20684C6__8S20684C5[3]),  3,3},
  {&(_tg__ZTV8S20684C28S20684C9__A1__8S20684C6__8S20684C5[3]),  3,3},
  {&(_tg__ZTV9S20684C15__8S20684C6__8S20684C5[5]),  5,5},
  {&(_tg__ZTV9S20684C15__8S20684C6__8S20684C5[5]),  5,5},
  {&(_tg__ZTV9S20684C16__8S20684C5[7]),  7,10},
  {&(_tg__ZTV9S20684C179S20684C16__8S20684C5[6]),  6,8},
  {&(_tg__ZTV9S20684C15__9S20684C179S20684C16__8S20684C5[5]),  5,5},
  {&(_tg__ZTV9S20684C15__9S20684C179S20684C16__8S20684C5[5]),  5,5},
  {&(_tg__ZTV9S20684C15__9S20684C16__8S20684C5[5]),  5,5},
  {&(_tg__ZTV9S20684C15__9S20684C16__8S20684C5[5]),  5,5},
  {&(_ZTV8S20684C5[24]),  24,59},
  {&(_ZTV8S20684C5[44]),  44,59},
  {&(_ZTV8S20684C5[50]),  50,59},
  {&(_ZTV8S20684C5[54]),  54,59},
  {&(_ZTV8S20684C5[47]),  47,59},
  {&(_ZTV8S20684C5[27]),  27,59},
  {&(_ZTV8S20684C5[59]),  59,59},
  {&(_ZTV8S20684C5[59]),  59,59},
  {&(_ZTV8S20684C5[34]),  34,59},
  {&(_tg__ZTV8S20684C7__8S20684C5[7]),  7,7},
  {&(_tg__ZTV8S20684C98S20684C7__8S20684C5[5]),  5,5},
  {&(_tg__ZTV9S20684C108S20684C98S20684C7__8S20684C5[4]),  4,4},
  {&(_tg__ZTV9S20684C11__9S20684C108S20684C98S20684C7__8S20684C5[3]),  3,3},
  {&(_tg__ZTV8S20684C28S20684C98S20684C7__A1__8S20684C5[3]),  3,3},
  {&(_tg__ZTV9S20684C11__8S20684C98S20684C7__8S20684C5[3]),  3,3},
  {&(_tg__ZTV8S20684C2__8S20684C98S20684C7__8S20684C5[3]),  3,3},
  {&(_tg__ZTV8S20684C8__8S20684C7__8S20684C5[3]),  3,4},
  {&(_tg__ZTV9S20684C11__8S20684C7__8S20684C5[3]),  3,3},
  {&(_tg__ZTV8S20684C28S20684C9__8S20684C7__8S20684C5[3]),  3,3},
  {&(_tg__ZTV9S20684C11__8S20684C5[3]),  3,3},
  {&(_tg__ZTV9S20684C15__8S20684C5[5]),  5,5},
  {&(_tg__ZTV9S20684C15__8S20684C5[5]),  5,5},
  {&(_tg__ZTV8S20684C2__A3__8S20684C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20684C5[];
extern  VTBL_ENTRY _ZTV8S20684C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C5[];
Class_Descriptor cd_S20684C5 = {  "S20684C5", // class name
  bases_S20684C5, 28,
  &(vtc_S20684C5[0]), // expected_vtbl_contents
  &(vtt_S20684C5[0]), // expected_vtt_contents
  ABISELECT(256,176), // object size
  NSPAIRA(_ZTI8S20684C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20684C5),59, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20684C5),45, //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  S20684C1  : virtual S20684C2 , S20684C5 {
  virtual  ~S20684C1(); // _ZN8S20684C1D2Ev
  S20684C1(); // tgen
};
//SIG(1 S20684C1) C1{ VBC2{ VBC3{ m Fp} BC4{ m}} BC5{ BC3 BC2 BC6{ VBC7{ VBC8{ v1} BC9{ BC10{ VBC4 VBC11{ BC3 VBC4 FU12{ m}} Fi} BC2 FC4} VBC13{ m}} BC9 VBC14{ BC4 BC3} VBC15{ VBC14 VBC2 BC3 FL[8]} Fi[6]} BC16{ BC17{ VBC15 vd Fs} VBC13 vd v2 Fc[9]}} vd}


 S20684C1 ::~S20684C1(){ note_dtor("S20684C1", this);}
S20684C1 ::S20684C1(){ note_ctor("S20684C1", this);} // tgen

static void Test_S20684C1()
{
  extern Class_Descriptor cd_S20684C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,45)];
    init_test(&cd_S20684C1, buf);
    S20684C1 *dp, &lv = *(dp=new (buf) S20684C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,176), "sizeof(S20684C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20684C1)");
    /*is_ambiguous_... S20684C1::S20684C2 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20684C2*), ABISELECT(96,64), "S20684C1");
    /*is_ambiguous_... S20684C5::S20684C2 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20684C2*)(S20684C5*), ABISELECT(96,64), "S20684C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C2*)(S20684C9*)(S20684C7*), ABISELECT(96,64), "S20684C1");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20684C2*)(S20684C9*)(S20684C6*)(S20684C5*), ABISELECT(96,64), "S20684C1");
    /*is_ambiguous_... S20684C1::S20684C2 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20684C2*), ABISELECT(176,104), "S20684C1");
    /*is_ambiguous_... S20684C1::S20684C2 */ AMB_check_base_class_offset(lv, (S20684C2*), ABISELECT(176,104), "S20684C1");
    check_base_class_offset(lv, (S20684C2*)(S20684C15*), ABISELECT(176,104), "S20684C1");
    /*is_ambiguous_... S20684C5::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20684C5*), ABISELECT(8,4), "S20684C1");
    /*is_ambiguous_... S20684C5::S20684C2 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20684C2*)(S20684C5*), 0, "S20684C1");
    /*is_ambiguous_... S20684C5::S20684C2 */ AMB_check_base_class_offset(lv, (S20684C2*)(S20684C5*), 0, "S20684C1");
    check_base_class_offset(lv, (S20684C8*)(S20684C7*), ABISELECT(136,84), "S20684C1");
    check_base_class_offset(lv, (S3600C19*)(S20684C10*)(S20684C9*)(S20684C7*), ABISELECT(144,88), "S20684C1");
    check_base_class_offset(lv, (S3600C19*)(S20684C11*), ABISELECT(144,88), "S20684C1");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20684C10*)(S20684C9*)(S20684C6*)(S20684C5*), ABISELECT(144,88), "S20684C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C11*), ABISELECT(152,92), "S20684C1");
    check_base_class_offset(lv, (S20684C11*)(S20684C10*)(S20684C9*)(S20684C7*), ABISELECT(144,88), "S20684C1");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S20684C11*)(S20684C10*)(S20684C9*)(S20684C6*)(S20684C5*), ABISELECT(144,88), "S20684C1");
    check_base_class_offset(lv, (S20684C10*)(S20684C9*)(S20684C7*), ABISELECT(104,68), "S20684C1");
    check_base_class_offset(lv, (S3600C19*)(S20684C2*)(S20684C9*)(S20684C7*), ABISELECT(120,76), "S20684C1");
    check_base_class_offset(lv, (S20684C2*)(S20684C9*)(S20684C7*), ABISELECT(120,76), "S20684C1");
    check_base_class_offset(lv, (S20684C9*)(S20684C7*), ABISELECT(104,68), "S20684C1");
    check_base_class_offset(lv, (S3600C6_nt*)(S20684C7*), 0, "S20684C1");
    check_base_class_offset(lv, (S3600C6_nt*)(S20684C16*)(S20684C5*), 0, "S20684C1");
    check_base_class_offset(lv, (S20684C7*)(S20684C6*)(S20684C5*), ABISELECT(104,68), "S20684C1");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S20684C10*)(S20684C9*)(S20684C6*)(S20684C5*), ABISELECT(16,8), "S20684C1");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20684C2*)(S20684C9*)(S20684C6*)(S20684C5*), ABISELECT(32,16), "S20684C1");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S20684C2*)(S20684C9*)(S20684C6*)(S20684C5*), ABISELECT(32,16), "S20684C1");
    /*is_ambiguous_... S20684C6::S20684C9 */ AMB_check_base_class_offset(lv, (S20684C9*)(S20684C6*)(S20684C5*), ABISELECT(16,8), "S20684C1");
    check_base_class_offset(lv, (S3600C19*)(S20684C14*), ABISELECT(168,100), "S20684C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S20684C14*), ABISELECT(168,100), "S20684C1");
    check_base_class_offset(lv, (S20684C14*)(S20684C6*)(S20684C5*), ABISELECT(168,100), "S20684C1");
    check_base_class_offset(lv, (S20684C14*)(S20684C15*), ABISELECT(168,100), "S20684C1");
    /*is_ambiguous_... S20684C15::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20684C15*), ABISELECT(184,108), "S20684C1");
    check_base_class_offset(lv, (S20684C15*)(S20684C6*)(S20684C5*), ABISELECT(176,104), "S20684C1");
    check_base_class_offset(lv, (S20684C15*)(S20684C17*)(S20684C16*)(S20684C5*), ABISELECT(176,104), "S20684C1");
    check_base_class_offset(lv, (S20684C6*)(S20684C5*), ABISELECT(16,8), "S20684C1");
    check_base_class_offset(lv, (S20684C17*)(S20684C16*)(S20684C5*), ABISELECT(72,48), "S20684C1");
    check_base_class_offset(lv, (S20684C16*)(S20684C5*), ABISELECT(72,48), "S20684C1");
    check_base_class_offset(lv, (S20684C5*), 0, "S20684C1");
    test_class_info(&lv, &cd_S20684C1);
    dp->~S20684C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20684C1(Test_S20684C1, "S20684C1", ABISELECT(256,176));

#else // __cplusplus

extern void _ZN8S20684C1C1Ev();
extern void _ZN8S20684C1D2Ev();
Name_Map name_map_S20684C1[] = {
  NSPAIR(_ZN8S20684C1C1Ev),
  NSPAIR(_ZN8S20684C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20684C2;
extern VTBL_ENTRY _ZTI8S20684C2[];
extern  VTBL_ENTRY _ZTV8S20684C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C2[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20684C2;
extern VTBL_ENTRY _ZTI8S20684C2[];
extern  VTBL_ENTRY _ZTV8S20684C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C2[];
extern Class_Descriptor cd_S20684C8;
extern VTBL_ENTRY _ZTI8S20684C8[];
extern  VTBL_ENTRY _ZTV8S20684C8[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20684C11;
extern VTBL_ENTRY _ZTI9S20684C11[];
extern  VTBL_ENTRY _ZTV9S20684C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C11[];
extern Class_Descriptor cd_S20684C10;
extern VTBL_ENTRY _ZTI9S20684C10[];
extern  VTBL_ENTRY _ZTV9S20684C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20684C2;
extern VTBL_ENTRY _ZTI8S20684C2[];
extern  VTBL_ENTRY _ZTV8S20684C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C2[];
extern Class_Descriptor cd_S20684C9;
extern VTBL_ENTRY _ZTI8S20684C9[];
extern  VTBL_ENTRY _ZTV8S20684C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C9[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
extern Class_Descriptor cd_S20684C7;
extern VTBL_ENTRY _ZTI8S20684C7[];
extern  VTBL_ENTRY _ZTV8S20684C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C7[];
extern Class_Descriptor cd_S20684C10;
extern VTBL_ENTRY _ZTI9S20684C10[];
extern  VTBL_ENTRY _ZTV9S20684C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20684C2;
extern VTBL_ENTRY _ZTI8S20684C2[];
extern  VTBL_ENTRY _ZTV8S20684C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C2[];
extern Class_Descriptor cd_S20684C9;
extern VTBL_ENTRY _ZTI8S20684C9[];
extern  VTBL_ENTRY _ZTV8S20684C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C9[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20684C14;
extern VTBL_ENTRY _ZTI9S20684C14[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20684C15;
extern VTBL_ENTRY _ZTI9S20684C15[];
extern  VTBL_ENTRY _ZTV9S20684C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C15[];
extern Class_Descriptor cd_S20684C6;
extern VTBL_ENTRY _ZTI8S20684C6[];
extern  VTBL_ENTRY _ZTV8S20684C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C6[];
extern Class_Descriptor cd_S20684C17;
extern VTBL_ENTRY _ZTI9S20684C17[];
extern  VTBL_ENTRY _ZTV9S20684C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C17[];
extern Class_Descriptor cd_S20684C16;
extern VTBL_ENTRY _ZTI9S20684C16[];
extern  VTBL_ENTRY _ZTV9S20684C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20684C16[];
extern Class_Descriptor cd_S20684C5;
extern VTBL_ENTRY _ZTI8S20684C5[];
extern  VTBL_ENTRY _ZTV8S20684C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C5[];
static Base_Class bases_S20684C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20684C2,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20684C2,    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
    9, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20684C8,    ABISELECT(136,84), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(144,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
    9, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(152,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
    9, //immediately_derived
  0, 0},
  {&cd_S20684C11,    ABISELECT(144,88), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20684C10,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(120,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
    12, //immediately_derived
  0, 0},
  {&cd_S20684C2,    ABISELECT(120,76), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20684C9,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3600C6_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
    15, //immediately_derived
  0, 1},
  {&cd_S20684C7,    ABISELECT(104,68), //bcp->offset
    37, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S20684C10,    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
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    18, //immediately_derived
  0, 0},
  {&cd_S20684C2,    ABISELECT(32,16), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20684C9,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(168,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
    22, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(168,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
    22, //immediately_derived
  0, 0},
  {&cd_S20684C14,    ABISELECT(168,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
    24, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20684C15,    ABISELECT(176,104), //bcp->offset
    54, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S20684C6,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20684C17,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20684C16,    ABISELECT(72,48), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20684C5,    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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20684C1[];
extern void _ZN8S20684C1D1Ev();
extern void _ZN8S20684C1D0Ev();
extern void ABISELECT(_ZThn72_N8S20684C1D1Ev,_ZThn48_N8S20684C1D1Ev)();
extern void ABISELECT(_ZThn72_N8S20684C1D0Ev,_ZThn48_N8S20684C1D0Ev)();
extern void _ZN9S20684C162v2Ev();
extern void _ZN8S20684C82v1Ev();
static  VTBL_ENTRY vtc_S20684C1[] = {
  ABISELECT(176,104),
  ABISELECT(176,104),
  ABISELECT(168,100),
  0,
  ABISELECT(144,88),
  ABISELECT(144,88),
  ABISELECT(136,84),
  ABISELECT(104,68),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C1[0]),
  (VTBL_ENTRY)&_ZN8S20684C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20684C1D0Ev,
  ABISELECT(160,96),
  ABISELECT(160,96),
  ABISELECT(152,92),
  ABISELECT(-16,-8),
  ABISELECT(120,76),
  ABISELECT(88,60),
  ABISELECT(80,56),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20684C1[0]),
  ABISELECT(64,48),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20684C1[0]),
  ABISELECT(-72,-48),
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(104,56),
  ABISELECT(24,16),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S20684C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N8S20684C1D1Ev,_ZThn48_N8S20684C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N8S20684C1D0Ev,_ZThn48_N8S20684C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20684C162v2Ev,
  ABISELECT(-104,-68),
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20684C1[0]),
  ABISELECT(-24,-12),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S20684C1[0]),
  0,
  ABISELECT(-136,-84),
  (VTBL_ENTRY)&(_ZTI8S20684C1[0]),
  (VTBL_ENTRY)&_ZN8S20684C82v1Ev,
  0,
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI8S20684C1[0]),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S20684C1[0]),
};
extern VTBL_ENTRY _ZTV8S20684C1[];
extern void _ZN8S20684C5D1Ev();
extern void _ZN8S20684C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20684C5__8S20684C1[] = {
  ABISELECT(176,104),
  ABISELECT(176,104),
  ABISELECT(168,100),
  0,
  ABISELECT(144,88),
  ABISELECT(144,88),
  ABISELECT(136,84),
  ABISELECT(104,68),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C5[0]),
  (VTBL_ENTRY)&_ZN8S20684C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20684C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20684C28S20684C5__A1__8S20684C1[] = {
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C68S20684C5__8S20684C1[] = {
  ABISELECT(160,96),
  ABISELECT(160,96),
  ABISELECT(152,92),
  ABISELECT(-16,-8),
  ABISELECT(120,76),
  ABISELECT(88,60),
  ABISELECT(80,56),
  ABISELECT(128,80),
  ABISELECT(128,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C98S20684C68S20684C5__A1__8S20684C1[] = {
  ABISELECT(80,56),
  ABISELECT(128,80),
  ABISELECT(128,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C108S20684C98S20684C68S20684C5__A1__8S20684C1[] = {
  ABISELECT(128,80),
  ABISELECT(128,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__9S20684C108S20684C98S20684C68S20684C5__A1__8S20684C1[] = {
  0,
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI9S20684C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C28S20684C98S20684C68S20684C5__A3__8S20684C1[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C2[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__8S20684C98S20684C68S20684C5__A1__8S20684C1[] = {
  0,
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C2__8S20684C98S20684C68S20684C5__A1__8S20684C1[] = {
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C7__8S20684C68S20684C5__8S20684C1[] = {
  ABISELECT(-104,-68),
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
};
extern void _ZN8S20684C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20684C8__8S20684C68S20684C5__8S20684C1[] = {
  0,
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
  (VTBL_ENTRY)&_ZN8S20684C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__8S20684C68S20684C5__8S20684C1[] = {
  0,
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C28S20684C98S20684C7__8S20684C68S20684C5__8S20684C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C28S20684C9__A1__8S20684C68S20684C5__8S20684C1[] = {
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C15__8S20684C68S20684C5__8S20684C1[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI8S20684C6[0]),
};
extern void _ZN9S20684C16D1Ev();
extern void _ZN9S20684C16D0Ev();
extern void _ZN9S20684C162v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20684C168S20684C5__8S20684C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(104,56),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C16[0]),
  (VTBL_ENTRY)&_ZN9S20684C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20684C16D0Ev,
  (VTBL_ENTRY)&_ZN9S20684C162v2Ev,
};
extern void _ZN9S20684C17D1Ev();
extern void _ZN9S20684C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20684C179S20684C168S20684C5__8S20684C1[] = {
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(104,56),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C17[0]),
  (VTBL_ENTRY)&_ZN9S20684C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20684C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20684C15__9S20684C179S20684C168S20684C5__8S20684C1[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S20684C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C15__9S20684C168S20684C5__8S20684C1[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S20684C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C6__8S20684C5__8S20684C1[] = {
  ABISELECT(160,96),
  ABISELECT(160,96),
  ABISELECT(152,92),
  ABISELECT(-16,-8),
  ABISELECT(120,76),
  ABISELECT(88,60),
  ABISELECT(80,56),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20684C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C7__8S20684C5__8S20684C1[] = {
  ABISELECT(-104,-68),
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20684C5[0]),
};
extern void _ZN8S20684C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20684C8__8S20684C5__8S20684C1[] = {
  0,
  ABISELECT(-136,-84),
  (VTBL_ENTRY)&(_ZTI8S20684C5[0]),
  (VTBL_ENTRY)&_ZN8S20684C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__8S20684C5__8S20684C1[] = {
  0,
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI8S20684C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C28S20684C98S20684C7__A1__8S20684C5__8S20684C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S20684C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C28S20684C98S20684C6__A2__8S20684C5__8S20684C1[] = {
  ABISELECT(64,48),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20684C5[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C15__8S20684C5__8S20684C1[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S20684C5[0]),
};
extern void ABISELECT(_ZThn72_N8S20684C5D1Ev,_ZThn48_N8S20684C5D1Ev)();
extern void ABISELECT(_ZThn72_N8S20684C5D0Ev,_ZThn48_N8S20684C5D0Ev)();
extern void _ZN9S20684C162v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20684C16__8S20684C5__8S20684C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(104,56),
  ABISELECT(24,16),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S20684C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N8S20684C5D1Ev,_ZThn48_N8S20684C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N8S20684C5D0Ev,_ZThn48_N8S20684C5D0Ev),
  (VTBL_ENTRY)&_ZN9S20684C162v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20684C2__8S20684C1[] = {
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C7__8S20684C1[] = {
  ABISELECT(-104,-68),
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C98S20684C7__8S20684C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C108S20684C98S20684C7__8S20684C1[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__9S20684C108S20684C98S20684C7__8S20684C1[] = {
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20684C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C28S20684C98S20684C7__A2__8S20684C1[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20684C2[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__8S20684C98S20684C7__8S20684C1[] = {
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C2__8S20684C98S20684C7__8S20684C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20684C9[0]),
};
extern void _ZN8S20684C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20684C8__8S20684C7__8S20684C1[] = {
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20684C7[0]),
  (VTBL_ENTRY)&_ZN8S20684C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__8S20684C7__8S20684C1[] = {
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20684C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20684C28S20684C9__8S20684C7__8S20684C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20684C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C11__8S20684C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20684C15__8S20684C1[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S20684C15[0]),
};
static  VTT_ENTRY vtt_S20684C1[] = {
  {&(_ZTV8S20684C1[11]),  11,59},
  {&(_tg__ZTV8S20684C5__8S20684C1[11]),  11,13},
  {&(_tg__ZTV8S20684C28S20684C5__A1__8S20684C1[3]),  3,3},
  {&(_tg__ZTV8S20684C68S20684C5__8S20684C1[11]),  11,11},
  {&(_tg__ZTV8S20684C98S20684C68S20684C5__A1__8S20684C1[5]),  5,5},
  {&(_tg__ZTV9S20684C108S20684C98S20684C68S20684C5__A1__8S20684C1[4]),  4,4},
  {&(_tg__ZTV9S20684C11__9S20684C108S20684C98S20684C68S20684C5__A1__8S20684C1[3]),  3,3},
  {&(_tg__ZTV8S20684C28S20684C98S20684C68S20684C5__A3__8S20684C1[3]),  3,3},
  {&(_tg__ZTV9S20684C11__8S20684C98S20684C68S20684C5__A1__8S20684C1[3]),  3,3},
  {&(_tg__ZTV8S20684C2__8S20684C98S20684C68S20684C5__A1__8S20684C1[3]),  3,3},
  {&(_tg__ZTV8S20684C7__8S20684C68S20684C5__8S20684C1[7]),  7,7},
  {&(_tg__ZTV8S20684C8__8S20684C68S20684C5__8S20684C1[3]),  3,4},
  {&(_tg__ZTV9S20684C11__8S20684C68S20684C5__8S20684C1[3]),  3,3},
  {&(_tg__ZTV8S20684C28S20684C98S20684C7__8S20684C68S20684C5__8S20684C1[3]),  3,3},
  {&(_tg__ZTV8S20684C28S20684C9__A1__8S20684C68S20684C5__8S20684C1[3]),  3,3},
  {&(_tg__ZTV9S20684C15__8S20684C68S20684C5__8S20684C1[5]),  5,5},
  {&(_tg__ZTV9S20684C15__8S20684C68S20684C5__8S20684C1[5]),  5,5},
  {&(_tg__ZTV9S20684C168S20684C5__8S20684C1[7]),  7,10},
  {&(_tg__ZTV9S20684C179S20684C168S20684C5__8S20684C1[6]),  6,8},
  {&(_tg__ZTV9S20684C15__9S20684C179S20684C168S20684C5__8S20684C1[5]),  5,5},
  {&(_tg__ZTV9S20684C15__9S20684C179S20684C168S20684C5__8S20684C1[5]),  5,5},
  {&(_tg__ZTV9S20684C15__9S20684C168S20684C5__8S20684C1[5]),  5,5},
  {&(_tg__ZTV9S20684C15__9S20684C168S20684C5__8S20684C1[5]),  5,5},
  {&(_tg__ZTV8S20684C6__8S20684C5__8S20684C1[11]),  11,11},
  {&(_tg__ZTV8S20684C7__8S20684C5__8S20684C1[7]),  7,7},
  {&(_tg__ZTV8S20684C8__8S20684C5__8S20684C1[3]),  3,4},
  {&(_tg__ZTV9S20684C11__8S20684C5__8S20684C1[3]),  3,3},
  {&(_tg__ZTV8S20684C28S20684C98S20684C7__A1__8S20684C5__8S20684C1[3]),  3,3},
  {&(_tg__ZTV8S20684C28S20684C98S20684C6__A2__8S20684C5__8S20684C1[3]),  3,3},
  {&(_tg__ZTV9S20684C15__8S20684C5__8S20684C1[5]),  5,5},
  {&(_tg__ZTV9S20684C15__8S20684C5__8S20684C1[5]),  5,5},
  {&(_tg__ZTV9S20684C16__8S20684C5__8S20684C1[7]),  7,10},
  {&(_ZTV8S20684C1[59]),  59,59},
  {&(_ZTV8S20684C1[24]),  24,59},
  {&(_ZTV8S20684C1[44]),  44,59},
  {&(_ZTV8S20684C1[50]),  50,59},
  {&(_ZTV8S20684C1[54]),  54,59},
  {&(_ZTV8S20684C1[47]),  47,59},
  {&(_ZTV8S20684C1[27]),  27,59},
  {&(_ZTV8S20684C1[59]),  59,59},
  {&(_ZTV8S20684C1[34]),  34,59},
  {&(_tg__ZTV8S20684C2__8S20684C1[3]),  3,3},
  {&(_tg__ZTV8S20684C7__8S20684C1[7]),  7,7},
  {&(_tg__ZTV8S20684C98S20684C7__8S20684C1[5]),  5,5},
  {&(_tg__ZTV9S20684C108S20684C98S20684C7__8S20684C1[4]),  4,4},
  {&(_tg__ZTV9S20684C11__9S20684C108S20684C98S20684C7__8S20684C1[3]),  3,3},
  {&(_tg__ZTV8S20684C28S20684C98S20684C7__A2__8S20684C1[3]),  3,3},
  {&(_tg__ZTV9S20684C11__8S20684C98S20684C7__8S20684C1[3]),  3,3},
  {&(_tg__ZTV8S20684C2__8S20684C98S20684C7__8S20684C1[3]),  3,3},
  {&(_tg__ZTV8S20684C8__8S20684C7__8S20684C1[3]),  3,4},
  {&(_tg__ZTV9S20684C11__8S20684C7__8S20684C1[3]),  3,3},
  {&(_tg__ZTV8S20684C28S20684C9__8S20684C7__8S20684C1[3]),  3,3},
  {&(_tg__ZTV9S20684C11__8S20684C1[3]),  3,3},
  {&(_tg__ZTV9S20684C15__8S20684C1[5]),  5,5},
  {&(_tg__ZTV9S20684C15__8S20684C1[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S20684C1[];
extern  VTBL_ENTRY _ZTV8S20684C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20684C1[];
Class_Descriptor cd_S20684C1 = {  "S20684C1", // class name
  bases_S20684C1, 29,
  &(vtc_S20684C1[0]), // expected_vtbl_contents
  &(vtt_S20684C1[0]), // expected_vtt_contents
  ABISELECT(256,176), // object size
  NSPAIRA(_ZTI8S20684C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20684C1),59, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20684C1),55, //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  S10210C2  {
  int s10210c2f0[28];
  virtual  ~S10210C2(); // _ZN8S10210C2D1Ev
  virtual void  v8(); // _ZN8S10210C22v8Ev
  virtual void  v9(); // _ZN8S10210C22v9Ev
  virtual void  v10(); // _ZN8S10210C23v10Ev
  virtual void  v11(); // _ZN8S10210C23v11Ev
  virtual void  v12(); // _ZN8S10210C23v12Ev
  virtual void  v13(); // _ZN8S10210C23v13Ev
  virtual void  v14(); // _ZN8S10210C23v14Ev
  virtual void  v15(); // _ZN8S10210C23v15Ev
  virtual void  v16(); // _ZN8S10210C23v16Ev
  virtual void  v17(); // _ZN8S10210C23v17Ev
  virtual void  v18(); // _ZN8S10210C23v18Ev
  virtual void  v19(); // _ZN8S10210C23v19Ev
  virtual void  v20(); // _ZN8S10210C23v20Ev
  virtual void  v21(); // _ZN8S10210C23v21Ev
  virtual void  v22(); // _ZN8S10210C23v22Ev
  virtual void  v23(); // _ZN8S10210C23v23Ev
  virtual void  v24(); // _ZN8S10210C23v24Ev
  virtual void  v25(); // _ZN8S10210C23v25Ev
  virtual void  v26(); // _ZN8S10210C23v26Ev
  virtual void  v27(); // _ZN8S10210C23v27Ev
  virtual void  v28(); // _ZN8S10210C23v28Ev
  virtual void  v29(); // _ZN8S10210C23v29Ev
  virtual void  v30(); // _ZN8S10210C23v30Ev
  virtual void  v31(); // _ZN8S10210C23v31Ev
  virtual void  v32(); // _ZN8S10210C23v32Ev
  S10210C2(); // tgen
};
//SIG(-1 S10210C2) 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 Fi[28]}


 S10210C2 ::~S10210C2(){ note_dtor("S10210C2", this);}
void  S10210C2 ::v8(){vfunc_called(this, "_ZN8S10210C22v8Ev");}
void  S10210C2 ::v9(){vfunc_called(this, "_ZN8S10210C22v9Ev");}
void  S10210C2 ::v10(){vfunc_called(this, "_ZN8S10210C23v10Ev");}
void  S10210C2 ::v11(){vfunc_called(this, "_ZN8S10210C23v11Ev");}
void  S10210C2 ::v12(){vfunc_called(this, "_ZN8S10210C23v12Ev");}
void  S10210C2 ::v13(){vfunc_called(this, "_ZN8S10210C23v13Ev");}
void  S10210C2 ::v14(){vfunc_called(this, "_ZN8S10210C23v14Ev");}
void  S10210C2 ::v15(){vfunc_called(this, "_ZN8S10210C23v15Ev");}
void  S10210C2 ::v16(){vfunc_called(this, "_ZN8S10210C23v16Ev");}
void  S10210C2 ::v17(){vfunc_called(this, "_ZN8S10210C23v17Ev");}
void  S10210C2 ::v18(){vfunc_called(this, "_ZN8S10210C23v18Ev");}
void  S10210C2 ::v19(){vfunc_called(this, "_ZN8S10210C23v19Ev");}
void  S10210C2 ::v20(){vfunc_called(this, "_ZN8S10210C23v20Ev");}
void  S10210C2 ::v21(){vfunc_called(this, "_ZN8S10210C23v21Ev");}
void  S10210C2 ::v22(){vfunc_called(this, "_ZN8S10210C23v22Ev");}
void  S10210C2 ::v23(){vfunc_called(this, "_ZN8S10210C23v23Ev");}
void  S10210C2 ::v24(){vfunc_called(this, "_ZN8S10210C23v24Ev");}
void  S10210C2 ::v25(){vfunc_called(this, "_ZN8S10210C23v25Ev");}
void  S10210C2 ::v26(){vfunc_called(this, "_ZN8S10210C23v26Ev");}
void  S10210C2 ::v27(){vfunc_called(this, "_ZN8S10210C23v27Ev");}
void  S10210C2 ::v28(){vfunc_called(this, "_ZN8S10210C23v28Ev");}
void  S10210C2 ::v29(){vfunc_called(this, "_ZN8S10210C23v29Ev");}
void  S10210C2 ::v30(){vfunc_called(this, "_ZN8S10210C23v30Ev");}
void  S10210C2 ::v31(){vfunc_called(this, "_ZN8S10210C23v31Ev");}
void  S10210C2 ::v32(){vfunc_called(this, "_ZN8S10210C23v32Ev");}
S10210C2 ::S10210C2(){ note_ctor("S10210C2", this);} // tgen

static void Test_S10210C2()
{
  extern Class_Descriptor cd_S10210C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S10210C2, buf);
    S10210C2 *dp, &lv = *(dp=new (buf) S10210C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S10210C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10210C2)");
    check_field_offset(lv, s10210c2f0, ABISELECT(8,4), "S10210C2.s10210c2f0");
    test_class_info(&lv, &cd_S10210C2);
    dp->~S10210C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10210C2(Test_S10210C2, "S10210C2", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN8S10210C2C1Ev();
extern void _ZN8S10210C2D1Ev();
Name_Map name_map_S10210C2[] = {
  NSPAIR(_ZN8S10210C2C1Ev),
  NSPAIR(_ZN8S10210C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10210C2[];
extern void _ZN8S10210C2D1Ev();
extern void _ZN8S10210C2D0Ev();
extern void _ZN8S10210C22v8Ev();
extern void _ZN8S10210C22v9Ev();
extern void _ZN8S10210C23v10Ev();
extern void _ZN8S10210C23v11Ev();
extern void _ZN8S10210C23v12Ev();
extern void _ZN8S10210C23v13Ev();
extern void _ZN8S10210C23v14Ev();
extern void _ZN8S10210C23v15Ev();
extern void _ZN8S10210C23v16Ev();
extern void _ZN8S10210C23v17Ev();
extern void _ZN8S10210C23v18Ev();
extern void _ZN8S10210C23v19Ev();
extern void _ZN8S10210C23v20Ev();
extern void _ZN8S10210C23v21Ev();
extern void _ZN8S10210C23v22Ev();
extern void _ZN8S10210C23v23Ev();
extern void _ZN8S10210C23v24Ev();
extern void _ZN8S10210C23v25Ev();
extern void _ZN8S10210C23v26Ev();
extern void _ZN8S10210C23v27Ev();
extern void _ZN8S10210C23v28Ev();
extern void _ZN8S10210C23v29Ev();
extern void _ZN8S10210C23v30Ev();
extern void _ZN8S10210C23v31Ev();
extern void _ZN8S10210C23v32Ev();
static  VTBL_ENTRY vtc_S10210C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10210C2[0]),
  (VTBL_ENTRY)&_ZN8S10210C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10210C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10210C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10210C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v20Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v21Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v22Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v23Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v24Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v25Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v26Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v27Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v28Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v29Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v30Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v31Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v32Ev,
};
extern VTBL_ENTRY _ZTI8S10210C2[];
extern  VTBL_ENTRY _ZTV8S10210C2[];
Class_Descriptor cd_S10210C2 = {  "S10210C2", // class name
  0,0,//no base classes
  &(vtc_S10210C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI8S10210C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10210C2),29, //virtual function table var
  2, // 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  S10210C1  : S10210C2 {
  ::S1566C9 s10210c1f0;
  int s10210c1f1[7];
  void *s10210c1f2[2];
  ::S1537C9_nt s10210c1f3[2];
  void *s10210c1f4;
  int s10210c1f5[2];
  virtual  ~S10210C1(); // _ZN8S10210C1D1Ev
  virtual void  v1(); // _ZN8S10210C12v1Ev
  virtual void  v2(); // _ZN8S10210C12v2Ev
  virtual void  v3(); // _ZN8S10210C12v3Ev
  virtual void  v4(); // _ZN8S10210C12v4Ev
  virtual void  v5(); // _ZN8S10210C12v5Ev
  virtual void  v6(); // _ZN8S10210C12v6Ev
  virtual void  v7(); // _ZN8S10210C12v7Ev
  S10210C1(); // tgen
};
//SIG(1 S10210C1) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fi[28]} vd v1 v2 v3 v4 v5 v6 v7 FC3{ BC4{ BC5{ m Fp Fi[2]}}} Fi[7] Fp[2] FC6{ m Fi}[2] Fp Fi[2]}


 S10210C1 ::~S10210C1(){ note_dtor("S10210C1", this);}
void  S10210C1 ::v1(){vfunc_called(this, "_ZN8S10210C12v1Ev");}
void  S10210C1 ::v2(){vfunc_called(this, "_ZN8S10210C12v2Ev");}
void  S10210C1 ::v3(){vfunc_called(this, "_ZN8S10210C12v3Ev");}
void  S10210C1 ::v4(){vfunc_called(this, "_ZN8S10210C12v4Ev");}
void  S10210C1 ::v5(){vfunc_called(this, "_ZN8S10210C12v5Ev");}
void  S10210C1 ::v6(){vfunc_called(this, "_ZN8S10210C12v6Ev");}
void  S10210C1 ::v7(){vfunc_called(this, "_ZN8S10210C12v7Ev");}
S10210C1 ::S10210C1(){ note_ctor("S10210C1", this);} // tgen

static void Test_S10210C1()
{
  extern Class_Descriptor cd_S10210C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,47)];
    init_test(&cd_S10210C1, buf);
    S10210C1 *dp, &lv = *(dp=new (buf) S10210C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,184), "sizeof(S10210C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10210C1)");
    check_base_class_offset(lv, (S10210C2*), 0, "S10210C1");
    check_field_offset(lv, s10210c1f0, ABISELECT(120,116), "S10210C1.s10210c1f0");
    check_field_offset(lv, s10210c1f1, ABISELECT(136,128), "S10210C1.s10210c1f1");
    check_field_offset(lv, s10210c1f2, ABISELECT(168,156), "S10210C1.s10210c1f2");
    check_field_offset(lv, s10210c1f3, ABISELECT(184,164), "S10210C1.s10210c1f3");
    check_field_offset(lv, s10210c1f4, ABISELECT(192,172), "S10210C1.s10210c1f4");
    check_field_offset(lv, s10210c1f5, ABISELECT(200,176), "S10210C1.s10210c1f5");
    test_class_info(&lv, &cd_S10210C1);
    dp->~S10210C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10210C1(Test_S10210C1, "S10210C1", ABISELECT(208,184));

#else // __cplusplus

extern void _ZN8S10210C1C1Ev();
extern void _ZN8S10210C1D1Ev();
Name_Map name_map_S10210C1[] = {
  NSPAIR(_ZN8S10210C1C1Ev),
  NSPAIR(_ZN8S10210C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10210C2;
extern VTBL_ENTRY _ZTI8S10210C2[];
extern  VTBL_ENTRY _ZTV8S10210C2[];
static Base_Class bases_S10210C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10210C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10210C1[];
extern void _ZN8S10210C1D1Ev();
extern void _ZN8S10210C1D0Ev();
extern void _ZN8S10210C22v8Ev();
extern void _ZN8S10210C22v9Ev();
extern void _ZN8S10210C23v10Ev();
extern void _ZN8S10210C23v11Ev();
extern void _ZN8S10210C23v12Ev();
extern void _ZN8S10210C23v13Ev();
extern void _ZN8S10210C23v14Ev();
extern void _ZN8S10210C23v15Ev();
extern void _ZN8S10210C23v16Ev();
extern void _ZN8S10210C23v17Ev();
extern void _ZN8S10210C23v18Ev();
extern void _ZN8S10210C23v19Ev();
extern void _ZN8S10210C23v20Ev();
extern void _ZN8S10210C23v21Ev();
extern void _ZN8S10210C23v22Ev();
extern void _ZN8S10210C23v23Ev();
extern void _ZN8S10210C23v24Ev();
extern void _ZN8S10210C23v25Ev();
extern void _ZN8S10210C23v26Ev();
extern void _ZN8S10210C23v27Ev();
extern void _ZN8S10210C23v28Ev();
extern void _ZN8S10210C23v29Ev();
extern void _ZN8S10210C23v30Ev();
extern void _ZN8S10210C23v31Ev();
extern void _ZN8S10210C23v32Ev();
extern void _ZN8S10210C12v1Ev();
extern void _ZN8S10210C12v2Ev();
extern void _ZN8S10210C12v3Ev();
extern void _ZN8S10210C12v4Ev();
extern void _ZN8S10210C12v5Ev();
extern void _ZN8S10210C12v6Ev();
extern void _ZN8S10210C12v7Ev();
static  VTBL_ENTRY vtc_S10210C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10210C1[0]),
  (VTBL_ENTRY)&_ZN8S10210C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10210C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10210C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10210C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v20Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v21Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v22Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v23Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v24Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v25Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v26Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v27Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v28Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v29Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v30Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v31Ev,
  (VTBL_ENTRY)&_ZN8S10210C23v32Ev,
  (VTBL_ENTRY)&_ZN8S10210C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10210C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10210C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10210C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10210C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10210C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10210C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S10210C1[];
extern  VTBL_ENTRY _ZTV8S10210C1[];
Class_Descriptor cd_S10210C1 = {  "S10210C1", // class name
  bases_S10210C1, 1,
  &(vtc_S10210C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,184), // object size
  NSPAIRA(_ZTI8S10210C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10210C1),36, //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  S7522C3  {
  virtual void  v1(); // _ZN7S7522C32v1Ev
  ~S7522C3(); // tgen
  S7522C3(); // tgen
};
//SIG(-1 S7522C3) C1{ v1}


void  S7522C3 ::v1(){vfunc_called(this, "_ZN7S7522C32v1Ev");}
S7522C3 ::~S7522C3(){ note_dtor("S7522C3", this);} // tgen
S7522C3 ::S7522C3(){ note_ctor("S7522C3", this);} // tgen

static void Test_S7522C3()
{
  extern Class_Descriptor cd_S7522C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7522C3, buf);
    S7522C3 *dp, &lv = *(dp=new (buf) S7522C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7522C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7522C3)");
    test_class_info(&lv, &cd_S7522C3);
    dp->~S7522C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7522C3(Test_S7522C3, "S7522C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7522C3C1Ev();
extern void _ZN7S7522C3D1Ev();
Name_Map name_map_S7522C3[] = {
  NSPAIR(_ZN7S7522C3C1Ev),
  NSPAIR(_ZN7S7522C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7522C3[];
extern void _ZN7S7522C32v1Ev();
static  VTBL_ENTRY vtc_S7522C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C3[0]),
  (VTBL_ENTRY)&_ZN7S7522C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S7522C3[];
extern  VTBL_ENTRY _ZTV7S7522C3[];
Class_Descriptor cd_S7522C3 = {  "S7522C3", // class name
  0,0,//no base classes
  &(vtc_S7522C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7522C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7522C3),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  S7522C7  : S3600C29_nt , virtual S3600C19 {
  ::S19426C9_nt s7522c7f0;
  ~S7522C7(); // tgen
  S7522C7(); // tgen
};
//SIG(-1 S7522C7) C1{ BC2{ m Fp} VBC3{ m} FU4{ m}}


S7522C7 ::~S7522C7(){ note_dtor("S7522C7", this);} // tgen
S7522C7 ::S7522C7(){ note_ctor("S7522C7", this);} // tgen

static void Test_S7522C7()
{
  extern Class_Descriptor cd_S7522C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7522C7, buf);
    S7522C7 *dp, &lv = *(dp=new (buf) S7522C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7522C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7522C7)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S7522C7");
    check_base_class_offset(lv, (S3600C19*), 0, "S7522C7");
    check_field_offset(lv, s7522c7f0, ABISELECT(16,8), "S7522C7.s7522c7f0");
    test_class_info(&lv, &cd_S7522C7);
    dp->~S7522C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7522C7(Test_S7522C7, "S7522C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7522C7C1Ev();
extern void _ZN7S7522C7D1Ev();
Name_Map name_map_S7522C7[] = {
  NSPAIR(_ZN7S7522C7C1Ev),
  NSPAIR(_ZN7S7522C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S7522C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7522C7[];
static  VTBL_ENTRY vtc_S7522C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C7[0]),
};
extern VTBL_ENTRY _ZTV7S7522C7[];
static  VTT_ENTRY vtt_S7522C7[] = {
  {&(_ZTV7S7522C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7522C7[];
extern  VTBL_ENTRY _ZTV7S7522C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C7[];
Class_Descriptor cd_S7522C7 = {  "S7522C7", // class name
  bases_S7522C7, 2,
  &(vtc_S7522C7[0]), // expected_vtbl_contents
  &(vtt_S7522C7[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7522C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7522C7),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7522C7),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  S7522C5  : virtual S3600C19 , virtual S7522C7 {
  int s7522c5f0;
  ~S7522C5(); // tgen
  S7522C5(); // tgen
};
//SIG(-1 S7522C5) C1{ VBC2{ m} VBC3{ BC4{ m Fp} VBC2 FU5{ m}} Fi}


S7522C5 ::~S7522C5(){ note_dtor("S7522C5", this);} // tgen
S7522C5 ::S7522C5(){ note_ctor("S7522C5", this);} // tgen

static void Test_S7522C5()
{
  extern Class_Descriptor cd_S7522C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7522C5, buf);
    S7522C5 *dp, &lv = *(dp=new (buf) S7522C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7522C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7522C5)");
    check_base_class_offset(lv, (S3600C19*), 0, "S7522C5");
    check_base_class_offset(lv, (S3600C19*)(S7522C7*), 0, "S7522C5");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C7*), ABISELECT(24,12), "S7522C5");
    check_base_class_offset(lv, (S7522C7*), ABISELECT(16,8), "S7522C5");
    check_field_offset(lv, s7522c5f0, ABISELECT(8,4), "S7522C5.s7522c5f0");
    test_class_info(&lv, &cd_S7522C5);
    dp->~S7522C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7522C5(Test_S7522C5, "S7522C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7522C5C1Ev();
extern void _ZN7S7522C5D1Ev();
Name_Map name_map_S7522C5[] = {
  NSPAIR(_ZN7S7522C5C1Ev),
  NSPAIR(_ZN7S7522C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7522C7;
extern VTBL_ENTRY _ZTI7S7522C7[];
extern  VTBL_ENTRY _ZTV7S7522C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C7[];
static Base_Class bases_S7522C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7522C7,    ABISELECT(16,8), //bcp->offset
    4, //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 _ZTI7S7522C5[];
static  VTBL_ENTRY vtc_S7522C5[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C5[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7522C5[0]),
};
extern VTBL_ENTRY _ZTV7S7522C5[];
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C5[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C7[0]),
};
static  VTT_ENTRY vtt_S7522C5[] = {
  {&(_ZTV7S7522C5[4]),  4,7},
  {&(_ZTV7S7522C5[7]),  7,7},
  {&(_tg__ZTV7S7522C7__7S7522C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7522C5[];
extern  VTBL_ENTRY _ZTV7S7522C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C5[];
Class_Descriptor cd_S7522C5 = {  "S7522C5", // class name
  bases_S7522C5, 3,
  &(vtc_S7522C5[0]), // expected_vtbl_contents
  &(vtt_S7522C5[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7522C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7522C5),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7522C5),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  S7522C10  : virtual S3600C29_nt , S3600C19 {
  ~S7522C10(); // tgen
  S7522C10(); // tgen
};
//SIG(-1 S7522C10) C1{ VBC2{ m Fp} BC3{ m}}


S7522C10 ::~S7522C10(){ note_dtor("S7522C10", this);} // tgen
S7522C10 ::S7522C10(){ note_ctor("S7522C10", this);} // tgen

static void Test_S7522C10()
{
  extern Class_Descriptor cd_S7522C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7522C10, buf);
    S7522C10 *dp, &lv = *(dp=new (buf) S7522C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7522C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7522C10)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S7522C10");
    check_base_class_offset(lv, (S3600C19*), 0, "S7522C10");
    test_class_info(&lv, &cd_S7522C10);
    dp->~S7522C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7522C10(Test_S7522C10, "S7522C10", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7522C10C1Ev();
extern void _ZN8S7522C10D1Ev();
Name_Map name_map_S7522C10[] = {
  NSPAIR(_ZN8S7522C10C1Ev),
  NSPAIR(_ZN8S7522C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S7522C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S7522C10[];
static  VTBL_ENTRY vtc_S7522C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C10[0]),
};
extern VTBL_ENTRY _ZTV8S7522C10[];
static  VTT_ENTRY vtt_S7522C10[] = {
  {&(_ZTV8S7522C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7522C10[];
extern  VTBL_ENTRY _ZTV8S7522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C10[];
Class_Descriptor cd_S7522C10 = {  "S7522C10", // class name
  bases_S7522C10, 2,
  &(vtc_S7522C10[0]), // expected_vtbl_contents
  &(vtt_S7522C10[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7522C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7522C10),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7522C10),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  S7522C4  : S7522C5 , S7522C10 {
  ::S3600C19 s7522c4f0;
  ~S7522C4(); // tgen
  S7522C4(); // tgen
};
//SIG(-1 S7522C4) C1{ BC2{ VBC3{ m} VBC4{ BC5{ m Fp} VBC3 FU6{ m}} Fi} BC7{ VBC5 BC3} FC3}


S7522C4 ::~S7522C4(){ note_dtor("S7522C4", this);} // tgen
S7522C4 ::S7522C4(){ note_ctor("S7522C4", this);} // tgen

static void Test_S7522C4()
{
  extern Class_Descriptor cd_S7522C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7522C4, buf);
    S7522C4 *dp, &lv = *(dp=new (buf) S7522C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7522C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7522C4)");
    check_base_class_offset(lv, (S3600C19*)(S7522C5*), 0, "S7522C4");
    check_base_class_offset(lv, (S3600C19*)(S7522C7*), 0, "S7522C4");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C7*), ABISELECT(40,20), "S7522C4");
    check_base_class_offset(lv, (S7522C7*)(S7522C5*), ABISELECT(32,16), "S7522C4");
    check_base_class_offset(lv, (S7522C5*), 0, "S7522C4");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C10*), ABISELECT(56,28), "S7522C4");
    check_base_class_offset(lv, (S3600C19*)(S7522C10*), ABISELECT(16,8), "S7522C4");
    check_base_class_offset(lv, (S7522C10*), ABISELECT(16,8), "S7522C4");
    check_field_offset(lv, s7522c4f0, ABISELECT(24,12), "S7522C4.s7522c4f0");
    test_class_info(&lv, &cd_S7522C4);
    dp->~S7522C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7522C4(Test_S7522C4, "S7522C4", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S7522C4C1Ev();
extern void _ZN7S7522C4D1Ev();
Name_Map name_map_S7522C4[] = {
  NSPAIR(_ZN7S7522C4C1Ev),
  NSPAIR(_ZN7S7522C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7522C7;
extern VTBL_ENTRY _ZTI7S7522C7[];
extern  VTBL_ENTRY _ZTV7S7522C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C7[];
extern Class_Descriptor cd_S7522C5;
extern VTBL_ENTRY _ZTI7S7522C5[];
extern  VTBL_ENTRY _ZTV7S7522C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C5[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7522C10;
extern VTBL_ENTRY _ZTI8S7522C10[];
extern  VTBL_ENTRY _ZTV8S7522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C10[];
static Base_Class bases_S7522C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7522C7,    ABISELECT(32,16), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7522C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C29_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S7522C10,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI7S7522C4[];
static  VTBL_ENTRY vtc_S7522C4[] = {
  ABISELECT(56,28),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
extern VTBL_ENTRY _ZTV7S7522C4[];
static  VTBL_ENTRY _tg__ZTV7S7522C5__7S7522C4[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C5__7S7522C4[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7522C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C10__7S7522C4[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C4[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C7[0]),
};
static  VTT_ENTRY vtt_S7522C4[] = {
  {&(_ZTV7S7522C4[5]),  5,11},
  {&(_tg__ZTV7S7522C5__7S7522C4[4]),  4,4},
  {&(_tg__ZTV7S7522C7__7S7522C5__7S7522C4[3]),  3,3},
  {&(_tg__ZTV8S7522C10__7S7522C4[3]),  3,3},
  {&(_ZTV7S7522C4[11]),  11,11},
  {&(_ZTV7S7522C4[8]),  8,11},
  {&(_tg__ZTV7S7522C7__7S7522C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7522C4[];
extern  VTBL_ENTRY _ZTV7S7522C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C4[];
Class_Descriptor cd_S7522C4 = {  "S7522C4", // class name
  bases_S7522C4, 7,
  &(vtc_S7522C4[0]), // expected_vtbl_contents
  &(vtt_S7522C4[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S7522C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7522C4),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7522C4),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  S7522C2  : virtual S7522C3 , S7522C4 , virtual S3600C6_nt {
  ~S7522C2(); // tgen
  S7522C2(); // tgen
};
//SIG(-1 S7522C2) C1{ VBC2{ v1} BC3{ BC4{ VBC5{ m} VBC6{ BC7{ m Fp} VBC5 FU8{ m}} Fi} BC9{ VBC7 BC5} FC5} VBC10{ m}}


S7522C2 ::~S7522C2(){ note_dtor("S7522C2", this);} // tgen
S7522C2 ::S7522C2(){ note_ctor("S7522C2", this);} // tgen

static void Test_S7522C2()
{
  extern Class_Descriptor cd_S7522C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S7522C2, buf);
    S7522C2 *dp, &lv = *(dp=new (buf) S7522C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S7522C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7522C2)");
    check_base_class_offset(lv, (S7522C3*), ABISELECT(32,16), "S7522C2");
    check_base_class_offset(lv, (S3600C19*)(S7522C5*)(S7522C4*), 0, "S7522C2");
    check_base_class_offset(lv, (S3600C19*)(S7522C7*), 0, "S7522C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C7*), ABISELECT(48,24), "S7522C2");
    check_base_class_offset(lv, (S7522C7*)(S7522C5*)(S7522C4*), ABISELECT(40,20), "S7522C2");
    check_base_class_offset(lv, (S7522C5*)(S7522C4*), 0, "S7522C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C10*)(S7522C4*), ABISELECT(64,32), "S7522C2");
    check_base_class_offset(lv, (S3600C19*)(S7522C10*)(S7522C4*), ABISELECT(16,8), "S7522C2");
    check_base_class_offset(lv, (S7522C10*)(S7522C4*), ABISELECT(16,8), "S7522C2");
    check_base_class_offset(lv, (S7522C4*), 0, "S7522C2");
    check_base_class_offset(lv, (S3600C6_nt*), 0, "S7522C2");
    test_class_info(&lv, &cd_S7522C2);
    dp->~S7522C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7522C2(Test_S7522C2, "S7522C2", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S7522C2C1Ev();
extern void _ZN7S7522C2D1Ev();
Name_Map name_map_S7522C2[] = {
  NSPAIR(_ZN7S7522C2C1Ev),
  NSPAIR(_ZN7S7522C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7522C3;
extern VTBL_ENTRY _ZTI7S7522C3[];
extern  VTBL_ENTRY _ZTV7S7522C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7522C7;
extern VTBL_ENTRY _ZTI7S7522C7[];
extern  VTBL_ENTRY _ZTV7S7522C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C7[];
extern Class_Descriptor cd_S7522C5;
extern VTBL_ENTRY _ZTI7S7522C5[];
extern  VTBL_ENTRY _ZTV7S7522C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C5[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7522C10;
extern VTBL_ENTRY _ZTI8S7522C10[];
extern  VTBL_ENTRY _ZTV8S7522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C10[];
extern Class_Descriptor cd_S7522C4;
extern VTBL_ENTRY _ZTI7S7522C4[];
extern  VTBL_ENTRY _ZTV7S7522C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C4[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
static Base_Class bases_S7522C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7522C3,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7522C7,    ABISELECT(40,20), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7522C5,    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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S7522C10,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7522C4,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C6_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7522C2[];
extern void _ZN7S7522C32v1Ev();
static  VTBL_ENTRY vtc_S7522C2[] = {
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C2[0]),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7522C2[0]),
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7522C2[0]),
  (VTBL_ENTRY)&_ZN7S7522C32v1Ev,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7522C2[0]),
};
extern VTBL_ENTRY _ZTV7S7522C2[];
static  VTBL_ENTRY _tg__ZTV7S7522C4__7S7522C2[] = {
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C57S7522C4__7S7522C2[] = {
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C57S7522C4__7S7522C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7522C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C107S7522C4__7S7522C2[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C4__7S7522C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C10__7S7522C4__7S7522C2[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C2[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C7[0]),
};
static  VTT_ENTRY vtt_S7522C2[] = {
  {&(_ZTV7S7522C2[7]),  7,17},
  {&(_tg__ZTV7S7522C4__7S7522C2[5]),  5,5},
  {&(_tg__ZTV7S7522C57S7522C4__7S7522C2[4]),  4,4},
  {&(_tg__ZTV7S7522C7__7S7522C57S7522C4__7S7522C2[3]),  3,3},
  {&(_tg__ZTV8S7522C107S7522C4__7S7522C2[3]),  3,3},
  {&(_tg__ZTV7S7522C7__7S7522C4__7S7522C2[3]),  3,3},
  {&(_tg__ZTV8S7522C10__7S7522C4__7S7522C2[3]),  3,3},
  {&(_ZTV7S7522C2[13]),  13,17},
  {&(_ZTV7S7522C2[17]),  17,17},
  {&(_ZTV7S7522C2[10]),  10,17},
  {&(_tg__ZTV7S7522C7__7S7522C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7522C2[];
extern  VTBL_ENTRY _ZTV7S7522C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C2[];
Class_Descriptor cd_S7522C2 = {  "S7522C2", // class name
  bases_S7522C2, 10,
  &(vtc_S7522C2[0]), // expected_vtbl_contents
  &(vtt_S7522C2[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S7522C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7522C2),17, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7522C2),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  S7522C15  : S3600C19 , S3600C29_nt {
};
//SIG(-1 S7522C15) C1{ BC2{ m} BC3{ m Fp}}



static void Test_S7522C15()
{
  extern Class_Descriptor cd_S7522C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7522C15, buf);
    S7522C15 &lv = *(new (buf) S7522C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7522C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7522C15)");
    check_base_class_offset(lv, (S3600C19*), 0, "S7522C15");
    check_base_class_offset(lv, (S3600C29_nt*), 0, "S7522C15");
    test_class_info(&lv, &cd_S7522C15);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7522C15(Test_S7522C15, "S7522C15", ABISELECT(8,4));

#else // __cplusplus

extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S7522C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3600C29_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 _ZTI8S7522C15[];
Class_Descriptor cd_S7522C15 = {  "S7522C15", // class name
  bases_S7522C15, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7522C15),ABISELECT(56,32), //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  S7522C14  : virtual S7522C15 , virtual S7522C10 , S3600C29_nt {
  __tsi64 s7522c14f0[8];
  ~S7522C14(); // tgen
  S7522C14(); // tgen
};
//SIG(-1 S7522C14) C1{ VBC2{ BC3{ m} BC4{ m Fp}} VBC5{ VBC4 BC3} BC4 FL[8]}


S7522C14 ::~S7522C14(){ note_dtor("S7522C14", this);} // tgen
S7522C14 ::S7522C14(){ note_ctor("S7522C14", this);} // tgen

static void Test_S7522C14()
{
  extern Class_Descriptor cd_S7522C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,21)];
    init_test(&cd_S7522C14, buf);
    S7522C14 *dp, &lv = *(dp=new (buf) S7522C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,80), "sizeof(S7522C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7522C14)");
    check_base_class_offset(lv, (S3600C19*)(S7522C15*), ABISELECT(80,72), "S7522C14");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C15*), ABISELECT(80,72), "S7522C14");
    check_base_class_offset(lv, (S7522C15*), ABISELECT(80,72), "S7522C14");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C10*), ABISELECT(88,76), "S7522C14");
    check_base_class_offset(lv, (S3600C19*)(S7522C10*), 0, "S7522C14");
    check_base_class_offset(lv, (S7522C10*), 0, "S7522C14");
    /*is_ambiguous_... S7522C14::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S7522C14");
    check_field_offset(lv, s7522c14f0, ABISELECT(16,8), "S7522C14.s7522c14f0");
    test_class_info(&lv, &cd_S7522C14);
    dp->~S7522C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7522C14(Test_S7522C14, "S7522C14", ABISELECT(96,80));

#else // __cplusplus

extern void _ZN8S7522C14C1Ev();
extern void _ZN8S7522C14D1Ev();
Name_Map name_map_S7522C14[] = {
  NSPAIR(_ZN8S7522C14C1Ev),
  NSPAIR(_ZN8S7522C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7522C15;
extern VTBL_ENTRY _ZTI8S7522C15[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7522C10;
extern VTBL_ENTRY _ZTI8S7522C10[];
extern  VTBL_ENTRY _ZTV8S7522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S7522C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S7522C15,    ABISELECT(80,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_S3600C29_nt,    ABISELECT(88,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7522C10,    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},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7522C14[];
static  VTBL_ENTRY vtc_S7522C14[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C14[0]),
};
extern VTBL_ENTRY _ZTV8S7522C14[];
static  VTBL_ENTRY _tg__ZTV8S7522C10__8S7522C14[] = {
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C10[0]),
};
static  VTT_ENTRY vtt_S7522C14[] = {
  {&(_ZTV8S7522C14[5]),  5,5},
  {&(_ZTV8S7522C14[5]),  5,5},
  {&(_tg__ZTV8S7522C10__8S7522C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7522C14[];
extern  VTBL_ENTRY _ZTV8S7522C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C14[];
Class_Descriptor cd_S7522C14 = {  "S7522C14", // class name
  bases_S7522C14, 7,
  &(vtc_S7522C14[0]), // expected_vtbl_contents
  &(vtt_S7522C14[0]), // expected_vtt_contents
  ABISELECT(96,80), // object size
  NSPAIRA(_ZTI8S7522C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7522C14),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7522C14),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  S7522C13  : virtual S3600C19 , S7522C4 , S7522C10 , virtual S7522C14 {
  virtual  ~S7522C13(); // _ZN8S7522C13D2Ev
  S7522C13(); // tgen
};
//SIG(-1 S7522C13) C1{ VBC2{ m} BC3{ BC4{ VBC2 VBC5{ BC6{ m Fp} VBC2 FU7{ m}} Fi} BC8{ VBC6 BC2} FC2} BC8 VBC9{ VBC10{ BC2 BC6} VBC8 BC6 FL[8]} vd}


 S7522C13 ::~S7522C13(){ note_dtor("S7522C13", this);}
S7522C13 ::S7522C13(){ note_ctor("S7522C13", this);} // tgen

static void Test_S7522C13()
{
  extern Class_Descriptor cd_S7522C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S7522C13, buf);
    S7522C13 *dp, &lv = *(dp=new (buf) S7522C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S7522C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7522C13)");
    /*is_ambiguous_... S7522C13::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), 0, "S7522C13");
    check_base_class_offset(lv, (S3600C19*)(S7522C5*)(S7522C4*), 0, "S7522C13");
    check_base_class_offset(lv, (S3600C19*)(S7522C7*), 0, "S7522C13");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C7*), ABISELECT(48,24), "S7522C13");
    check_base_class_offset(lv, (S7522C7*)(S7522C5*)(S7522C4*), ABISELECT(40,20), "S7522C13");
    check_base_class_offset(lv, (S7522C5*)(S7522C4*), 0, "S7522C13");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C10*)(S7522C4*), ABISELECT(64,32), "S7522C13");
    /*is_ambiguous_... S7522C13::S7522C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S7522C10*), ABISELECT(64,32), "S7522C13");
    /*is_ambiguous_... S7522C13::S7522C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S7522C10*), ABISELECT(64,32), "S7522C13");
    check_base_class_offset(lv, (S3600C19*)(S7522C10*)(S7522C4*), ABISELECT(16,8), "S7522C13");
    check_base_class_offset(lv, (S7522C10*)(S7522C4*), ABISELECT(16,8), "S7522C13");
    check_base_class_offset(lv, (S7522C4*), 0, "S7522C13");
    /*is_ambiguous_... S7522C13::S7522C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7522C10*), ABISELECT(32,16), "S7522C13");
    /*is_ambiguous_... S7522C13::S7522C10 */ AMB_check_base_class_offset(lv, (S7522C10*), ABISELECT(32,16), "S7522C13");
    check_base_class_offset(lv, (S3600C19*)(S7522C15*), ABISELECT(152,108), "S7522C13");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C15*), ABISELECT(152,108), "S7522C13");
    check_base_class_offset(lv, (S7522C15*)(S7522C14*), ABISELECT(152,108), "S7522C13");
    /*is_ambiguous_... S7522C13::S7522C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7522C10*), ABISELECT(72,36), "S7522C13");
    check_base_class_offset(lv, (S7522C10*)(S7522C14*), ABISELECT(72,36), "S7522C13");
    /*is_ambiguous_... S7522C14::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S7522C14*), ABISELECT(80,40), "S7522C13");
    check_base_class_offset(lv, (S7522C14*), ABISELECT(72,36), "S7522C13");
    test_class_info(&lv, &cd_S7522C13);
    dp->~S7522C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7522C13(Test_S7522C13, "S7522C13", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN8S7522C13C1Ev();
extern void _ZN8S7522C13D2Ev();
Name_Map name_map_S7522C13[] = {
  NSPAIR(_ZN8S7522C13C1Ev),
  NSPAIR(_ZN8S7522C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7522C7;
extern VTBL_ENTRY _ZTI7S7522C7[];
extern  VTBL_ENTRY _ZTV7S7522C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C7[];
extern Class_Descriptor cd_S7522C5;
extern VTBL_ENTRY _ZTI7S7522C5[];
extern  VTBL_ENTRY _ZTV7S7522C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C5[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7522C10;
extern VTBL_ENTRY _ZTI8S7522C10[];
extern  VTBL_ENTRY _ZTV8S7522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C10[];
extern Class_Descriptor cd_S7522C4;
extern VTBL_ENTRY _ZTI7S7522C4[];
extern  VTBL_ENTRY _ZTV7S7522C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C4[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7522C10;
extern VTBL_ENTRY _ZTI8S7522C10[];
extern  VTBL_ENTRY _ZTV8S7522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7522C15;
extern VTBL_ENTRY _ZTI8S7522C15[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7522C10;
extern VTBL_ENTRY _ZTI8S7522C10[];
extern  VTBL_ENTRY _ZTV8S7522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7522C14;
extern VTBL_ENTRY _ZTI8S7522C14[];
extern  VTBL_ENTRY _ZTV8S7522C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C14[];
static Base_Class bases_S7522C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7522C7,    ABISELECT(40,20), //bcp->offset
    16, //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
    3, //immediately_derived
  0, 1},
  {&cd_S7522C5,    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
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S7522C10,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7522C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7522C10,    ABISELECT(32,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7522C15,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7522C10,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7522C14,    ABISELECT(72,36), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7522C13[];
extern void _ZN8S7522C13D1Ev();
extern void _ZN8S7522C13D0Ev();
static  VTBL_ENTRY vtc_S7522C13[] = {
  ABISELECT(72,36),
  ABISELECT(152,108),
  ABISELECT(72,36),
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C13[0]),
  (VTBL_ENTRY)&_ZN8S7522C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7522C13D0Ev,
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7522C13[0]),
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7522C13[0]),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S7522C13[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S7522C13[0]),
};
extern VTBL_ENTRY _ZTV8S7522C13[];
static  VTBL_ENTRY _tg__ZTV7S7522C4__8S7522C13[] = {
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C57S7522C4__8S7522C13[] = {
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C57S7522C4__8S7522C13[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7522C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C107S7522C4__8S7522C13[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C4__8S7522C13[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C10__7S7522C4__8S7522C13[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C10__A__8S7522C13[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__8S7522C13[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C14__8S7522C13[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C10__A2__8S7522C13[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C10[0]),
};
static  VTT_ENTRY vtt_S7522C13[] = {
  {&(_ZTV8S7522C13[8]),  8,24},
  {&(_tg__ZTV7S7522C4__8S7522C13[5]),  5,5},
  {&(_tg__ZTV7S7522C57S7522C4__8S7522C13[4]),  4,4},
  {&(_tg__ZTV7S7522C7__7S7522C57S7522C4__8S7522C13[3]),  3,3},
  {&(_tg__ZTV8S7522C107S7522C4__8S7522C13[3]),  3,3},
  {&(_tg__ZTV7S7522C7__7S7522C4__8S7522C13[3]),  3,3},
  {&(_tg__ZTV8S7522C10__7S7522C4__8S7522C13[3]),  3,3},
  {&(_tg__ZTV8S7522C10__A__8S7522C13[3]),  3,3},
  {&(_ZTV8S7522C13[19]),  19,24},
  {&(_ZTV8S7522C13[13]),  13,24},
  {&(_ZTV8S7522C13[16]),  16,24},
  {&(_ZTV8S7522C13[24]),  24,24},
  {&(_ZTV8S7522C13[24]),  24,24},
  {&(_tg__ZTV7S7522C7__8S7522C13[3]),  3,3},
  {&(_tg__ZTV8S7522C14__8S7522C13[5]),  5,5},
  {&(_tg__ZTV8S7522C14__8S7522C13[5]),  5,5},
  {&(_tg__ZTV8S7522C10__A2__8S7522C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7522C13[];
extern  VTBL_ENTRY _ZTV8S7522C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C13[];
Class_Descriptor cd_S7522C13 = {  "S7522C13", // class name
  bases_S7522C13, 17,
  &(vtc_S7522C13[0]), // expected_vtbl_contents
  &(vtt_S7522C13[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S7522C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7522C13),24, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7522C13),17, //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  S7522C16  : virtual S7522C7 , S7522C15 {
  ~S7522C16(); // tgen
  S7522C16(); // tgen
};
//SIG(-1 S7522C16) C1{ VBC2{ BC3{ m Fp} VBC4{ m} FU5{ m}} BC6{ BC4 BC3}}


S7522C16 ::~S7522C16(){ note_dtor("S7522C16", this);} // tgen
S7522C16 ::S7522C16(){ note_ctor("S7522C16", this);} // tgen

static void Test_S7522C16()
{
  extern Class_Descriptor cd_S7522C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7522C16, buf);
    S7522C16 *dp, &lv = *(dp=new (buf) S7522C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7522C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7522C16)");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C7*), ABISELECT(24,12), "S7522C16");
    check_base_class_offset(lv, (S3600C19*)(S7522C7*), 0, "S7522C16");
    check_base_class_offset(lv, (S7522C7*), ABISELECT(16,8), "S7522C16");
    check_base_class_offset(lv, (S3600C19*)(S7522C15*), ABISELECT(8,4), "S7522C16");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C15*), ABISELECT(8,4), "S7522C16");
    check_base_class_offset(lv, (S7522C15*), ABISELECT(8,4), "S7522C16");
    test_class_info(&lv, &cd_S7522C16);
    dp->~S7522C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7522C16(Test_S7522C16, "S7522C16", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S7522C16C1Ev();
extern void _ZN8S7522C16D1Ev();
Name_Map name_map_S7522C16[] = {
  NSPAIR(_ZN8S7522C16C1Ev),
  NSPAIR(_ZN8S7522C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7522C7;
extern VTBL_ENTRY _ZTI7S7522C7[];
extern  VTBL_ENTRY _ZTV7S7522C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C7[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7522C15;
extern VTBL_ENTRY _ZTI8S7522C15[];
static Base_Class bases_S7522C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7522C7,    ABISELECT(16,8), //bcp->offset
    4, //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},
  {&cd_S3600C19,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7522C15,    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 _ZTI8S7522C16[];
static  VTBL_ENTRY vtc_S7522C16[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C16[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7522C16[0]),
};
extern VTBL_ENTRY _ZTV8S7522C16[];
static  VTBL_ENTRY _tg__ZTV7S7522C7__8S7522C16[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C7[0]),
};
static  VTT_ENTRY vtt_S7522C16[] = {
  {&(_ZTV8S7522C16[4]),  4,7},
  {&(_ZTV8S7522C16[7]),  7,7},
  {&(_tg__ZTV7S7522C7__8S7522C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7522C16[];
extern  VTBL_ENTRY _ZTV8S7522C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C16[];
Class_Descriptor cd_S7522C16 = {  "S7522C16", // class name
  bases_S7522C16, 6,
  &(vtc_S7522C16[0]), // expected_vtbl_contents
  &(vtt_S7522C16[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S7522C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7522C16),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7522C16),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  S7522C12  : virtual S7522C13 , S7522C10 , virtual S7522C16 , S3600C29_nt , virtual S7522C4 {
  virtual  ~S7522C12(); // _ZN8S7522C12D2Ev
  S7522C12(); // tgen
};
//SIG(-1 S7522C12) C1{ VBC2{ VBC3{ m} BC4{ BC5{ VBC3 VBC6{ BC7{ m Fp} VBC3 FU8{ m}} Fi} BC9{ VBC7 BC3} FC3} BC9 VBC10{ VBC11{ BC3 BC7} VBC9 BC7 FL[8]} vd} BC9 VBC12{ VBC6 BC11} BC7 VBC4 vd}


 S7522C12 ::~S7522C12(){ note_dtor("S7522C12", this);}
S7522C12 ::S7522C12(){ note_ctor("S7522C12", this);} // tgen

static void Test_S7522C12()
{
  extern Class_Descriptor cd_S7522C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,37)];
    init_test(&cd_S7522C12, buf);
    S7522C12 *dp, &lv = *(dp=new (buf) S7522C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,144), "sizeof(S7522C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7522C12)");
    /*is_ambiguous_... S7522C13::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7522C13*), ABISELECT(56,28), "S7522C12");
    check_base_class_offset(lv, (S3600C19*)(S7522C5*)(S7522C4*)(S7522C13*), ABISELECT(56,28), "S7522C12");
    check_base_class_offset(lv, (S3600C19*)(S7522C7*), ABISELECT(56,28), "S7522C12");
    /*is_ambiguous_... S7522C12::S7522C4 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7522C5*)(S7522C4*), ABISELECT(56,28), "S7522C12");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C7*), ABISELECT(64,32), "S7522C12");
    check_base_class_offset(lv, (S7522C7*)(S7522C5*)(S7522C4*)(S7522C13*), ABISELECT(56,28), "S7522C12");
    check_base_class_offset(lv, (S7522C7*)(S7522C16*), ABISELECT(56,28), "S7522C12");
    /*is_ambiguous_... S7522C12::S7522C4 */ AMB_check_base_class_offset(lv, (S7522C7*)(S7522C5*)(S7522C4*), ABISELECT(56,28), "S7522C12");
    check_base_class_offset(lv, (S7522C5*)(S7522C4*)(S7522C13*), ABISELECT(16,8), "S7522C12");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C10*)(S7522C4*)(S7522C13*), ABISELECT(80,40), "S7522C12");
    /*is_ambiguous_... S7522C13::S7522C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S7522C10*)(S7522C13*), ABISELECT(80,40), "S7522C12");
    /*is_ambiguous_... S7522C12::S7522C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S7522C10*), ABISELECT(80,40), "S7522C12");
    /*is_ambiguous_... S7522C12::S7522C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S7522C10*), ABISELECT(80,40), "S7522C12");
    /*is_ambiguous_... S7522C12::S7522C4 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S7522C10*)(S7522C4*), ABISELECT(80,40), "S7522C12");
    check_base_class_offset(lv, (S3600C19*)(S7522C10*)(S7522C4*)(S7522C13*), ABISELECT(32,16), "S7522C12");
    check_base_class_offset(lv, (S7522C10*)(S7522C4*)(S7522C13*), ABISELECT(32,16), "S7522C12");
    check_base_class_offset(lv, (S7522C4*)(S7522C13*), ABISELECT(16,8), "S7522C12");
    /*is_ambiguous_... S7522C13::S7522C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7522C10*)(S7522C13*), ABISELECT(48,24), "S7522C12");
    /*is_ambiguous_... S7522C13::S7522C10 */ AMB_check_base_class_offset(lv, (S7522C10*)(S7522C13*), ABISELECT(48,24), "S7522C12");
    /*is_ambiguous_... S7522C12::S7522C15 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7522C15*), ABISELECT(168,116), "S7522C12");
    /*is_ambiguous_... S7522C12::S7522C15 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S7522C15*), ABISELECT(168,116), "S7522C12");
    check_base_class_offset(lv, (S7522C15*)(S7522C14*), ABISELECT(168,116), "S7522C12");
    /*is_ambiguous_... S7522C12::S7522C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7522C10*), ABISELECT(88,44), "S7522C12");
    check_base_class_offset(lv, (S7522C10*)(S7522C14*), ABISELECT(88,44), "S7522C12");
    /*is_ambiguous_... S7522C14::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S7522C14*), ABISELECT(96,48), "S7522C12");
    check_base_class_offset(lv, (S7522C14*)(S7522C13*), ABISELECT(88,44), "S7522C12");
    check_base_class_offset(lv, (S7522C13*), ABISELECT(16,8), "S7522C12");
    /*is_ambiguous_... S7522C12::S7522C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7522C10*), 0, "S7522C12");
    /*is_ambiguous_... S7522C12::S7522C10 */ AMB_check_base_class_offset(lv, (S7522C10*), 0, "S7522C12");
    check_base_class_offset(lv, (S3600C19*)(S7522C15*)(S7522C16*), ABISELECT(184,124), "S7522C12");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C15*)(S7522C16*), ABISELECT(184,124), "S7522C12");
    check_base_class_offset(lv, (S7522C15*)(S7522C16*), ABISELECT(184,124), "S7522C12");
    check_base_class_offset(lv, (S7522C16*), ABISELECT(176,120), "S7522C12");
    /*is_ambiguous_... S7522C12::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S7522C12");
    /*is_ambiguous_... S7522C12::S7522C4 */ AMB_check_base_class_offset(lv, (S7522C5*)(S7522C4*), ABISELECT(192,128), "S7522C12");
    /*is_ambiguous_... S7522C12::S7522C4 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7522C10*)(S7522C4*), ABISELECT(208,136), "S7522C12");
    /*is_ambiguous_... S7522C12::S7522C4 */ AMB_check_base_class_offset(lv, (S7522C10*)(S7522C4*), ABISELECT(208,136), "S7522C12");
    /*is_ambiguous_... S7522C12::S7522C4 */ AMB_check_base_class_offset(lv, (S7522C4*), ABISELECT(192,128), "S7522C12");
    test_class_info(&lv, &cd_S7522C12);
    dp->~S7522C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7522C12(Test_S7522C12, "S7522C12", ABISELECT(224,144));

#else // __cplusplus

extern void _ZN8S7522C12C1Ev();
extern void _ZN8S7522C12D2Ev();
Name_Map name_map_S7522C12[] = {
  NSPAIR(_ZN8S7522C12C1Ev),
  NSPAIR(_ZN8S7522C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7522C7;
extern VTBL_ENTRY _ZTI7S7522C7[];
extern  VTBL_ENTRY _ZTV7S7522C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C7[];
extern Class_Descriptor cd_S7522C5;
extern VTBL_ENTRY _ZTI7S7522C5[];
extern  VTBL_ENTRY _ZTV7S7522C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C5[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7522C10;
extern VTBL_ENTRY _ZTI8S7522C10[];
extern  VTBL_ENTRY _ZTV8S7522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C10[];
extern Class_Descriptor cd_S7522C4;
extern VTBL_ENTRY _ZTI7S7522C4[];
extern  VTBL_ENTRY _ZTV7S7522C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C4[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7522C10;
extern VTBL_ENTRY _ZTI8S7522C10[];
extern  VTBL_ENTRY _ZTV8S7522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7522C15;
extern VTBL_ENTRY _ZTI8S7522C15[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7522C10;
extern VTBL_ENTRY _ZTI8S7522C10[];
extern  VTBL_ENTRY _ZTV8S7522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7522C14;
extern VTBL_ENTRY _ZTI8S7522C14[];
extern  VTBL_ENTRY _ZTV8S7522C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C14[];
extern Class_Descriptor cd_S7522C13;
extern VTBL_ENTRY _ZTI8S7522C13[];
extern  VTBL_ENTRY _ZTV8S7522C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C13[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7522C10;
extern VTBL_ENTRY _ZTI8S7522C10[];
extern  VTBL_ENTRY _ZTV8S7522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7522C15;
extern VTBL_ENTRY _ZTI8S7522C15[];
extern Class_Descriptor cd_S7522C16;
extern VTBL_ENTRY _ZTI8S7522C16[];
extern  VTBL_ENTRY _ZTV8S7522C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C16[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7522C5;
extern VTBL_ENTRY _ZTI7S7522C5[];
extern  VTBL_ENTRY _ZTV7S7522C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C5[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7522C10;
extern VTBL_ENTRY _ZTI8S7522C10[];
extern  VTBL_ENTRY _ZTV8S7522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C10[];
extern Class_Descriptor cd_S7522C4;
extern VTBL_ENTRY _ZTI7S7522C4[];
extern  VTBL_ENTRY _ZTV7S7522C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C4[];
static Base_Class bases_S7522C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7522C7,    ABISELECT(56,28), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7522C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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
    6, //immediately_derived
  0, 0},
  {&cd_S7522C10,    ABISELECT(32,16), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7522C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    17, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7522C10,    ABISELECT(48,24), //bcp->offset
    27, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    12, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    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
    12, //immediately_derived
  0, 0},
  {&cd_S7522C15,    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
    16, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7522C10,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7522C14,    ABISELECT(88,44), //bcp->offset
    33, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7522C13,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7522C10,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(184,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
    22, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(184,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
    22, //immediately_derived
  0, 0},
  {&cd_S7522C15,    ABISELECT(184,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
    23, //immediately_derived
  0, 0},
  {&cd_S7522C16,    ABISELECT(176,120), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7522C5,    ABISELECT(192,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(208,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
    27, //immediately_derived
  0, 0},
  {&cd_S7522C10,    ABISELECT(208,136), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7522C4,    ABISELECT(192,128), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7522C12[];
extern void _ZN8S7522C12D1Ev();
extern void _ZN8S7522C12D0Ev();
extern void ABISELECT(_ZTv0_n72_N8S7522C12D1Ev,_ZTv0_n36_N8S7522C12D1Ev)();
extern void ABISELECT(_ZThn16_N8S7522C12D1Ev,_ZThn8_N8S7522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S7522C12D0Ev,_ZTv0_n36_N8S7522C12D0Ev)();
extern void ABISELECT(_ZThn16_N8S7522C12D0Ev,_ZThn8_N8S7522C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7522C12[] = {
  ABISELECT(192,128),
  ABISELECT(176,120),
  ABISELECT(88,44),
  ABISELECT(168,116),
  ABISELECT(88,44),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C12[0]),
  (VTBL_ENTRY)&_ZN8S7522C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7522C12D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  ABISELECT(152,108),
  ABISELECT(72,36),
  ABISELECT(64,32),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7522C12D1Ev,_ZTv0_n36_N8S7522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7522C12D0Ev,_ZTv0_n36_N8S7522C12D0Ev),
  ABISELECT(48,24),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7522C12[0]),
  ABISELECT(32,16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7522C12[0]),
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S7522C12[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S7522C12[0]),
  ABISELECT(-120,-92),
  ABISELECT(-120,-92),
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI8S7522C12[0]),
  ABISELECT(-112,-88),
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI8S7522C12[0]),
  ABISELECT(-128,-96),
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI8S7522C12[0]),
};
extern VTBL_ENTRY _ZTV8S7522C12[];
static  VTBL_ENTRY _tg__ZTV8S7522C10__A__8S7522C12[] = {
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C10[0]),
};
extern void _ZN8S7522C13D1Ev();
extern void _ZN8S7522C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7522C13__8S7522C12[] = {
  ABISELECT(72,36),
  ABISELECT(152,108),
  ABISELECT(72,36),
  ABISELECT(64,32),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C13[0]),
  (VTBL_ENTRY)&_ZN8S7522C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7522C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7522C48S7522C13__8S7522C12[] = {
  ABISELECT(64,32),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C57S7522C48S7522C13__8S7522C12[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C57S7522C48S7522C13__8S7522C12[] = {
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7522C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C107S7522C48S7522C13__8S7522C12[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C48S7522C13__8S7522C12[] = {
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C10__7S7522C48S7522C13__8S7522C12[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C108S7522C13__A1__8S7522C12[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__8S7522C13__8S7522C12[] = {
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S7522C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C107S7522C4__8S7522C13__8S7522C12[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7522C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C10__A__8S7522C13__8S7522C12[] = {
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7522C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C14__8S7522C13__8S7522C12[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S7522C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__8S7522C12[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C14__8S7522C12[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C10__A2__8S7522C12[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C16__8S7522C12[] = {
  ABISELECT(-120,-92),
  ABISELECT(-120,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__8S7522C16__8S7522C12[] = {
  0,
  ABISELECT(120,92),
  (VTBL_ENTRY)&(_ZTI8S7522C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C4__A1__8S7522C12[] = {
  ABISELECT(-112,-88),
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C57S7522C4__A1__8S7522C12[] = {
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C57S7522C4__A1__8S7522C12[] = {
  0,
  ABISELECT(136,100),
  (VTBL_ENTRY)&(_ZTI7S7522C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C107S7522C4__A4__8S7522C12[] = {
  ABISELECT(-128,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C4__A1__8S7522C12[] = {
  0,
  ABISELECT(136,100),
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C10__7S7522C4__A1__8S7522C12[] = {
  ABISELECT(-128,-96),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTT_ENTRY vtt_S7522C12[] = {
  {&(_ZTV8S7522C12[11]),  11,50},
  {&(_tg__ZTV8S7522C10__A__8S7522C12[3]),  3,3},
  {&(_ZTV8S7522C12[22]),  22,50},
  {&(_ZTV8S7522C12[33]),  33,50},
  {&(_ZTV8S7522C12[27]),  27,50},
  {&(_ZTV8S7522C12[30]),  30,50},
  {&(_ZTV8S7522C12[38]),  38,50},
  {&(_ZTV8S7522C12[38]),  38,50},
  {&(_ZTV8S7522C12[42]),  42,50},
  {&(_ZTV8S7522C12[47]),  47,50},
  {&(_ZTV8S7522C12[50]),  50,50},
  {&(_tg__ZTV8S7522C13__8S7522C12[8]),  8,10},
  {&(_tg__ZTV7S7522C48S7522C13__8S7522C12[5]),  5,5},
  {&(_tg__ZTV7S7522C57S7522C48S7522C13__8S7522C12[4]),  4,4},
  {&(_tg__ZTV7S7522C7__7S7522C57S7522C48S7522C13__8S7522C12[3]),  3,3},
  {&(_tg__ZTV8S7522C107S7522C48S7522C13__8S7522C12[3]),  3,3},
  {&(_tg__ZTV7S7522C7__7S7522C48S7522C13__8S7522C12[3]),  3,3},
  {&(_tg__ZTV8S7522C10__7S7522C48S7522C13__8S7522C12[3]),  3,3},
  {&(_tg__ZTV8S7522C108S7522C13__A1__8S7522C12[3]),  3,3},
  {&(_tg__ZTV7S7522C7__8S7522C13__8S7522C12[3]),  3,3},
  {&(_tg__ZTV8S7522C107S7522C4__8S7522C13__8S7522C12[3]),  3,3},
  {&(_tg__ZTV8S7522C10__A__8S7522C13__8S7522C12[3]),  3,3},
  {&(_tg__ZTV8S7522C14__8S7522C13__8S7522C12[5]),  5,5},
  {&(_tg__ZTV8S7522C14__8S7522C13__8S7522C12[5]),  5,5},
  {&(_tg__ZTV7S7522C7__8S7522C12[3]),  3,3},
  {&(_tg__ZTV8S7522C14__8S7522C12[5]),  5,5},
  {&(_tg__ZTV8S7522C14__8S7522C12[5]),  5,5},
  {&(_tg__ZTV8S7522C10__A2__8S7522C12[3]),  3,3},
  {&(_tg__ZTV8S7522C16__8S7522C12[4]),  4,4},
  {&(_tg__ZTV7S7522C7__8S7522C16__8S7522C12[3]),  3,3},
  {&(_tg__ZTV7S7522C4__A1__8S7522C12[5]),  5,5},
  {&(_tg__ZTV7S7522C57S7522C4__A1__8S7522C12[4]),  4,4},
  {&(_tg__ZTV7S7522C7__7S7522C57S7522C4__A1__8S7522C12[3]),  3,3},
  {&(_tg__ZTV8S7522C107S7522C4__A4__8S7522C12[3]),  3,3},
  {&(_tg__ZTV7S7522C7__7S7522C4__A1__8S7522C12[3]),  3,3},
  {&(_tg__ZTV8S7522C10__7S7522C4__A1__8S7522C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7522C12[];
extern  VTBL_ENTRY _ZTV8S7522C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C12[];
static VTBL_ENTRY alt_thunk_names98[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7522C12D0Ev,_ZTv0_n36_N8S7522C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7522C12D0Ev,_ZThn8_N8S7522C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7522C12D1Ev,_ZTv0_n36_N8S7522C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7522C12D1Ev,_ZThn8_N8S7522C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7522C12 = {  "S7522C12", // class name
  bases_S7522C12, 29,
  &(vtc_S7522C12[0]), // expected_vtbl_contents
  &(vtt_S7522C12[0]), // expected_vtt_contents
  ABISELECT(224,144), // object size
  NSPAIRA(_ZTI8S7522C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7522C12),50, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7522C12),36, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names98,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7522C1  : S7522C2 , virtual S7522C12 , S3600C19 {
  int s7522c1f0[2];
  ~S7522C1(); // tgen
  S7522C1(); // tgen
};
//SIG(1 S7522C1) C1{ BC2{ VBC3{ v1} BC4{ BC5{ VBC6{ m} VBC7{ BC8{ m Fp} VBC6 FU9{ m}} Fi} BC10{ VBC8 BC6} FC6} VBC11{ m}} VBC12{ VBC13{ VBC6 BC4 BC10 VBC14{ VBC15{ BC6 BC8} VBC10 BC8 FL[8]} vd} BC10 VBC16{ VBC7 BC15} BC8 VBC4 vd} BC6 Fi[2]}


S7522C1 ::~S7522C1(){ note_dtor("S7522C1", this);} // tgen
S7522C1 ::S7522C1(){ note_ctor("S7522C1", this);} // tgen

static void Test_S7522C1()
{
  extern Class_Descriptor cd_S7522C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,44)];
    init_test(&cd_S7522C1, buf);
    S7522C1 *dp, &lv = *(dp=new (buf) S7522C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,172), "sizeof(S7522C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7522C1)");
    check_base_class_offset(lv, (S7522C3*)(S7522C2*), ABISELECT(40,24), "S7522C1");
    check_base_class_offset(lv, (S3600C19*)(S7522C5*)(S7522C4*)(S7522C2*), ABISELECT(48,28), "S7522C1");
    check_base_class_offset(lv, (S3600C19*)(S7522C7*), ABISELECT(48,28), "S7522C1");
    /*is_ambiguous_... S7522C13::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7522C13*), ABISELECT(48,28), "S7522C1");
    check_base_class_offset(lv, (S3600C19*)(S7522C5*)(S7522C4*)(S7522C13*), ABISELECT(48,28), "S7522C1");
    /*is_ambiguous_... S7522C1::S7522C4 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7522C5*)(S7522C4*), ABISELECT(48,28), "S7522C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C7*), ABISELECT(56,32), "S7522C1");
    check_base_class_offset(lv, (S7522C7*)(S7522C5*)(S7522C4*)(S7522C2*), ABISELECT(48,28), "S7522C1");
    check_base_class_offset(lv, (S7522C7*)(S7522C5*)(S7522C4*)(S7522C13*), ABISELECT(48,28), "S7522C1");
    check_base_class_offset(lv, (S7522C7*)(S7522C16*), ABISELECT(48,28), "S7522C1");
    /*is_ambiguous_... S7522C1::S7522C4 */ AMB_check_base_class_offset(lv, (S7522C7*)(S7522C5*)(S7522C4*), ABISELECT(48,28), "S7522C1");
    check_base_class_offset(lv, (S7522C5*)(S7522C4*)(S7522C2*), 0, "S7522C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C10*)(S7522C4*)(S7522C2*), ABISELECT(72,40), "S7522C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C10*)(S7522C4*)(S7522C13*), ABISELECT(72,40), "S7522C1");
    /*is_ambiguous_... S7522C13::S7522C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S7522C10*)(S7522C13*), ABISELECT(72,40), "S7522C1");
    /*is_ambiguous_... S7522C1::S7522C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S7522C10*), ABISELECT(72,40), "S7522C1");
    /*is_ambiguous_... S7522C12::S7522C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S7522C10*)(S7522C12*), ABISELECT(72,40), "S7522C1");
    /*is_ambiguous_... S7522C1::S7522C4 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S7522C10*)(S7522C4*), ABISELECT(72,40), "S7522C1");
    check_base_class_offset(lv, (S3600C19*)(S7522C10*)(S7522C4*)(S7522C2*), ABISELECT(16,8), "S7522C1");
    check_base_class_offset(lv, (S7522C10*)(S7522C4*)(S7522C2*), ABISELECT(16,8), "S7522C1");
    check_base_class_offset(lv, (S7522C4*)(S7522C2*), 0, "S7522C1");
    check_base_class_offset(lv, (S3600C6_nt*)(S7522C2*), 0, "S7522C1");
    check_base_class_offset(lv, (S7522C2*), 0, "S7522C1");
    check_base_class_offset(lv, (S7522C5*)(S7522C4*)(S7522C13*), ABISELECT(96,52), "S7522C1");
    check_base_class_offset(lv, (S3600C19*)(S7522C10*)(S7522C4*)(S7522C13*), ABISELECT(112,60), "S7522C1");
    check_base_class_offset(lv, (S7522C10*)(S7522C4*)(S7522C13*), ABISELECT(112,60), "S7522C1");
    check_base_class_offset(lv, (S7522C4*)(S7522C13*), ABISELECT(96,52), "S7522C1");
    /*is_ambiguous_... S7522C13::S7522C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7522C10*)(S7522C13*), ABISELECT(128,68), "S7522C1");
    /*is_ambiguous_... S7522C13::S7522C10 */ AMB_check_base_class_offset(lv, (S7522C10*)(S7522C13*), ABISELECT(128,68), "S7522C1");
    /*is_ambiguous_... S7522C1::S7522C15 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7522C15*), ABISELECT(216,144), "S7522C1");
    /*is_ambiguous_... S7522C1::S7522C15 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S7522C15*), ABISELECT(216,144), "S7522C1");
    check_base_class_offset(lv, (S7522C15*)(S7522C14*), ABISELECT(216,144), "S7522C1");
    /*is_ambiguous_... S7522C1::S7522C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7522C10*), ABISELECT(136,72), "S7522C1");
    check_base_class_offset(lv, (S7522C10*)(S7522C14*), ABISELECT(136,72), "S7522C1");
    /*is_ambiguous_... S7522C14::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S7522C14*), ABISELECT(144,76), "S7522C1");
    check_base_class_offset(lv, (S7522C14*)(S7522C13*), ABISELECT(136,72), "S7522C1");
    check_base_class_offset(lv, (S7522C13*)(S7522C12*), ABISELECT(96,52), "S7522C1");
    /*is_ambiguous_... S7522C12::S7522C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7522C10*)(S7522C12*), ABISELECT(80,44), "S7522C1");
    /*is_ambiguous_... S7522C12::S7522C10 */ AMB_check_base_class_offset(lv, (S7522C10*)(S7522C12*), ABISELECT(80,44), "S7522C1");
    check_base_class_offset(lv, (S3600C19*)(S7522C15*)(S7522C16*), ABISELECT(232,152), "S7522C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S7522C15*)(S7522C16*), ABISELECT(232,152), "S7522C1");
    check_base_class_offset(lv, (S7522C15*)(S7522C16*), ABISELECT(232,152), "S7522C1");
    check_base_class_offset(lv, (S7522C16*)(S7522C12*), ABISELECT(224,148), "S7522C1");
    /*is_ambiguous_... S7522C12::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S7522C12*), ABISELECT(88,48), "S7522C1");
    /*is_ambiguous_... S7522C1::S7522C4 */ AMB_check_base_class_offset(lv, (S7522C5*)(S7522C4*), ABISELECT(240,156), "S7522C1");
    /*is_ambiguous_... S7522C1::S7522C4 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7522C10*)(S7522C4*), ABISELECT(256,164), "S7522C1");
    /*is_ambiguous_... S7522C1::S7522C4 */ AMB_check_base_class_offset(lv, (S7522C10*)(S7522C4*), ABISELECT(256,164), "S7522C1");
    /*is_ambiguous_... S7522C12::S7522C4 */ AMB_check_base_class_offset(lv, (S7522C4*)(S7522C12*), ABISELECT(240,156), "S7522C1");
    check_base_class_offset(lv, (S7522C12*), ABISELECT(80,44), "S7522C1");
    /*is_ambiguous_... S7522C1::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), 0, "S7522C1");
    check_field_offset(lv, s7522c1f0, ABISELECT(28,16), "S7522C1.s7522c1f0");
    test_class_info(&lv, &cd_S7522C1);
    dp->~S7522C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7522C1(Test_S7522C1, "S7522C1", ABISELECT(272,172));

#else // __cplusplus

extern void _ZN7S7522C1C1Ev();
extern void _ZN7S7522C1D1Ev();
Name_Map name_map_S7522C1[] = {
  NSPAIR(_ZN7S7522C1C1Ev),
  NSPAIR(_ZN7S7522C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7522C3;
extern VTBL_ENTRY _ZTI7S7522C3[];
extern  VTBL_ENTRY _ZTV7S7522C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7522C7;
extern VTBL_ENTRY _ZTI7S7522C7[];
extern  VTBL_ENTRY _ZTV7S7522C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C7[];
extern Class_Descriptor cd_S7522C5;
extern VTBL_ENTRY _ZTI7S7522C5[];
extern  VTBL_ENTRY _ZTV7S7522C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C5[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7522C10;
extern VTBL_ENTRY _ZTI8S7522C10[];
extern  VTBL_ENTRY _ZTV8S7522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C10[];
extern Class_Descriptor cd_S7522C4;
extern VTBL_ENTRY _ZTI7S7522C4[];
extern  VTBL_ENTRY _ZTV7S7522C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C4[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
extern Class_Descriptor cd_S7522C2;
extern VTBL_ENTRY _ZTI7S7522C2[];
extern  VTBL_ENTRY _ZTV7S7522C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C2[];
extern Class_Descriptor cd_S7522C5;
extern VTBL_ENTRY _ZTI7S7522C5[];
extern  VTBL_ENTRY _ZTV7S7522C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C5[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7522C10;
extern VTBL_ENTRY _ZTI8S7522C10[];
extern  VTBL_ENTRY _ZTV8S7522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C10[];
extern Class_Descriptor cd_S7522C4;
extern VTBL_ENTRY _ZTI7S7522C4[];
extern  VTBL_ENTRY _ZTV7S7522C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C4[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7522C10;
extern VTBL_ENTRY _ZTI8S7522C10[];
extern  VTBL_ENTRY _ZTV8S7522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7522C15;
extern VTBL_ENTRY _ZTI8S7522C15[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7522C10;
extern VTBL_ENTRY _ZTI8S7522C10[];
extern  VTBL_ENTRY _ZTV8S7522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7522C14;
extern VTBL_ENTRY _ZTI8S7522C14[];
extern  VTBL_ENTRY _ZTV8S7522C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C14[];
extern Class_Descriptor cd_S7522C13;
extern VTBL_ENTRY _ZTI8S7522C13[];
extern  VTBL_ENTRY _ZTV8S7522C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C13[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7522C10;
extern VTBL_ENTRY _ZTI8S7522C10[];
extern  VTBL_ENTRY _ZTV8S7522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7522C15;
extern VTBL_ENTRY _ZTI8S7522C15[];
extern Class_Descriptor cd_S7522C16;
extern VTBL_ENTRY _ZTI8S7522C16[];
extern  VTBL_ENTRY _ZTV8S7522C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C16[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7522C5;
extern VTBL_ENTRY _ZTI7S7522C5[];
extern  VTBL_ENTRY _ZTV7S7522C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C5[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7522C10;
extern VTBL_ENTRY _ZTI8S7522C10[];
extern  VTBL_ENTRY _ZTV8S7522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C10[];
extern Class_Descriptor cd_S7522C4;
extern VTBL_ENTRY _ZTI7S7522C4[];
extern  VTBL_ENTRY _ZTV7S7522C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C4[];
extern Class_Descriptor cd_S7522C12;
extern VTBL_ENTRY _ZTI8S7522C12[];
extern  VTBL_ENTRY _ZTV8S7522C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7522C12[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S7522C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7522C3,    ABISELECT(40,24), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //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
    10, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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
    3, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7522C7,    ABISELECT(48,28), //bcp->offset
    23, //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
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7522C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    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
    7, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S7522C10,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7522C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3600C6_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
    10, //immediately_derived
  0, 1},
  {&cd_S7522C2,    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
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7522C5,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7522C10,    ABISELECT(112,60), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7522C4,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7522C10,    ABISELECT(128,68), //bcp->offset
    54, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(216,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
    19, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(216,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
    19, //immediately_derived
  0, 0},
  {&cd_S7522C15,    ABISELECT(216,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
    23, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(136,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
    21, //immediately_derived
  0, 0},
  {&cd_S7522C10,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    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
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7522C14,    ABISELECT(136,72), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S7522C13,    ABISELECT(96,52), //bcp->offset
    40, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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
    26, //immediately_derived
  0, 0},
  {&cd_S7522C10,    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
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(232,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(232,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S7522C15,    ABISELECT(232,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7522C16,    ABISELECT(224,148), //bcp->offset
    62, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7522C5,    ABISELECT(240,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(256,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7522C10,    ABISELECT(256,164), //bcp->offset
    71, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S7522C4,    ABISELECT(240,156), //bcp->offset
    66, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S7522C12,    ABISELECT(80,44), //bcp->offset
    26, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S7522C1[];
extern void _ZN7S7522C1D1Ev();
extern void _ZN7S7522C1D0Ev();
extern void _ZN7S7522C32v1Ev();
extern void ABISELECT(_ZTv0_n96_N7S7522C1D1Ev,_ZTv0_n48_N7S7522C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S7522C1D1Ev,_ZThn44_N7S7522C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7522C1D0Ev,_ZTv0_n48_N7S7522C1D0Ev)();
extern void ABISELECT(_ZThn80_N7S7522C1D0Ev,_ZThn44_N7S7522C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7522C1D1Ev,_ZTv0_n36_N7S7522C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S7522C1D1Ev,_ZThn52_N7S7522C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7522C1D0Ev,_ZTv0_n36_N7S7522C1D0Ev)();
extern void ABISELECT(_ZThn96_N7S7522C1D0Ev,_ZThn52_N7S7522C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7522C1[] = {
  ABISELECT(240,156),
  ABISELECT(224,148),
  ABISELECT(136,72),
  ABISELECT(216,144),
  ABISELECT(136,72),
  ABISELECT(96,52),
  ABISELECT(80,44),
  0,
  ABISELECT(40,24),
  ABISELECT(72,40),
  ABISELECT(48,28),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C1[0]),
  (VTBL_ENTRY)&_ZN7S7522C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7522C1D0Ev,
  ABISELECT(56,32),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7522C1[0]),
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7522C1[0]),
  (VTBL_ENTRY)&_ZN7S7522C32v1Ev,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7522C1[0]),
  ABISELECT(-80,-44),
  ABISELECT(160,112),
  ABISELECT(144,104),
  ABISELECT(56,28),
  ABISELECT(136,100),
  ABISELECT(56,28),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S7522C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7522C1D1Ev,_ZTv0_n48_N7S7522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7522C1D0Ev,_ZTv0_n48_N7S7522C1D0Ev),
  ABISELECT(-96,-52),
  ABISELECT(40,20),
  ABISELECT(120,92),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7522C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7522C1D1Ev,_ZTv0_n36_N7S7522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7522C1D0Ev,_ZTv0_n36_N7S7522C1D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7522C1[0]),
  ABISELECT(-56,-28),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S7522C1[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-64,-32),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI7S7522C1[0]),
  ABISELECT(-176,-120),
  ABISELECT(-176,-120),
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI7S7522C1[0]),
  ABISELECT(-168,-116),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-240,-156),
  (VTBL_ENTRY)&(_ZTI7S7522C1[0]),
  ABISELECT(-184,-124),
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI7S7522C1[0]),
};
extern VTBL_ENTRY _ZTV7S7522C1[];
static  VTBL_ENTRY _tg__ZTV7S7522C2__7S7522C1[] = {
  0,
  ABISELECT(40,24),
  ABISELECT(72,40),
  ABISELECT(48,28),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C47S7522C2__7S7522C1[] = {
  ABISELECT(72,40),
  ABISELECT(48,28),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C57S7522C47S7522C2__7S7522C1[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C57S7522C47S7522C2__7S7522C1[] = {
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7522C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C107S7522C47S7522C2__7S7522C1[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C47S7522C2__7S7522C1[] = {
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C10__7S7522C47S7522C2__7S7522C1[] = {
  ABISELECT(56,32),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
extern void _ZN7S7522C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7522C3__7S7522C2__7S7522C1[] = {
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7522C2[0]),
  (VTBL_ENTRY)&_ZN7S7522C32v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C2__7S7522C1[] = {
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7522C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C107S7522C4__7S7522C2__7S7522C1[] = {
  ABISELECT(56,32),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7522C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C7[0]),
};
extern void _ZN8S7522C12D1Ev();
extern void _ZN8S7522C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7522C12__7S7522C1[] = {
  ABISELECT(160,112),
  ABISELECT(144,104),
  ABISELECT(56,28),
  ABISELECT(136,100),
  ABISELECT(56,28),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C12[0]),
  (VTBL_ENTRY)&_ZN8S7522C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7522C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7522C108S7522C12__A4__7S7522C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C10[0]),
};
extern void ABISELECT(_ZTv0_n72_N8S7522C12D1Ev,_ZTv0_n36_N8S7522C12D1Ev)();
extern void ABISELECT(_ZThn16_N8S7522C12D1Ev,_ZThn8_N8S7522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S7522C12D0Ev,_ZTv0_n36_N8S7522C12D0Ev)();
extern void ABISELECT(_ZThn16_N8S7522C12D0Ev,_ZThn8_N8S7522C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7522C13__8S7522C12__7S7522C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(40,20),
  ABISELECT(120,92),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7522C12D1Ev,_ZTv0_n36_N8S7522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7522C12D0Ev,_ZTv0_n36_N8S7522C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__8S7522C12__7S7522C1[] = {
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7522C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C107S7522C48S7522C13__8S7522C12__7S7522C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7522C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C108S7522C13__A1__8S7522C12__7S7522C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7522C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C14__8S7522C12__7S7522C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-64,-32),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S7522C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C16__8S7522C12__7S7522C1[] = {
  ABISELECT(-176,-120),
  ABISELECT(-176,-120),
  ABISELECT(-144,-104),
  (VTBL_ENTRY)&(_ZTI8S7522C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C4__A1__8S7522C12__7S7522C1[] = {
  ABISELECT(-168,-116),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S7522C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C107S7522C4__A4__8S7522C12__7S7522C1[] = {
  ABISELECT(-184,-124),
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI8S7522C12[0]),
};
extern void _ZN8S7522C13D1Ev();
extern void _ZN8S7522C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7522C13__7S7522C1[] = {
  ABISELECT(40,20),
  ABISELECT(120,92),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C13[0]),
  (VTBL_ENTRY)&_ZN8S7522C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7522C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7522C48S7522C13__A1__7S7522C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C57S7522C48S7522C13__A1__7S7522C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C57S7522C48S7522C13__A1__7S7522C1[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI7S7522C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C107S7522C48S7522C13__A1__7S7522C1[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C48S7522C13__A1__7S7522C1[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C10__7S7522C48S7522C13__A1__7S7522C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C108S7522C13__A2__7S7522C1[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__8S7522C13__7S7522C1[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S7522C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C107S7522C4__8S7522C13__7S7522C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7522C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C10__A__8S7522C13__7S7522C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7522C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C14__8S7522C13__7S7522C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S7522C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C14__7S7522C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C10__A3__7S7522C1[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C16__7S7522C1[] = {
  ABISELECT(-176,-120),
  ABISELECT(-176,-120),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__8S7522C16__7S7522C1[] = {
  0,
  ABISELECT(176,120),
  (VTBL_ENTRY)&(_ZTI8S7522C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C4__A2__7S7522C1[] = {
  ABISELECT(-168,-116),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C57S7522C4__A2__7S7522C1[] = {
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7522C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C57S7522C4__A2__7S7522C1[] = {
  0,
  ABISELECT(192,128),
  (VTBL_ENTRY)&(_ZTI7S7522C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C107S7522C4__A5__7S7522C1[] = {
  ABISELECT(-184,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S7522C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7522C7__7S7522C4__A2__7S7522C1[] = {
  0,
  ABISELECT(192,128),
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7522C10__7S7522C4__A2__7S7522C1[] = {
  ABISELECT(-184,-124),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7522C4[0]),
};
static  VTT_ENTRY vtt_S7522C1[] = {
  {&(_ZTV7S7522C1[14]),  14,74},
  {&(_tg__ZTV7S7522C2__7S7522C1[7]),  7,7},
  {&(_tg__ZTV7S7522C47S7522C2__7S7522C1[5]),  5,5},
  {&(_tg__ZTV7S7522C57S7522C47S7522C2__7S7522C1[4]),  4,4},
  {&(_tg__ZTV7S7522C7__7S7522C57S7522C47S7522C2__7S7522C1[3]),  3,3},
  {&(_tg__ZTV8S7522C107S7522C47S7522C2__7S7522C1[3]),  3,3},
  {&(_tg__ZTV7S7522C7__7S7522C47S7522C2__7S7522C1[3]),  3,3},
  {&(_tg__ZTV8S7522C10__7S7522C47S7522C2__7S7522C1[3]),  3,3},
  {&(_tg__ZTV7S7522C3__7S7522C2__7S7522C1[3]),  3,4},
  {&(_tg__ZTV7S7522C7__7S7522C2__7S7522C1[3]),  3,3},
  {&(_tg__ZTV8S7522C107S7522C4__7S7522C2__7S7522C1[3]),  3,3},
  {&(_ZTV7S7522C1[22]),  22,74},
  {&(_ZTV7S7522C1[26]),  26,74},
  {&(_ZTV7S7522C1[19]),  19,74},
  {&(_ZTV7S7522C1[38]),  38,74},
  {&(_ZTV7S7522C1[49]),  49,74},
  {&(_ZTV7S7522C1[54]),  54,74},
  {&(_ZTV7S7522C1[57]),  57,74},
  {&(_ZTV7S7522C1[62]),  62,74},
  {&(_ZTV7S7522C1[62]),  62,74},
  {&(_ZTV7S7522C1[66]),  66,74},
  {&(_ZTV7S7522C1[71]),  71,74},
  {&(_ZTV7S7522C1[74]),  74,74},
  {&(_tg__ZTV7S7522C7__7S7522C1[3]),  3,3},
  {&(_tg__ZTV8S7522C12__7S7522C1[11]),  11,13},
  {&(_tg__ZTV8S7522C108S7522C12__A4__7S7522C1[3]),  3,3},
  {&(_tg__ZTV8S7522C13__8S7522C12__7S7522C1[9]),  9,11},
  {&(_tg__ZTV7S7522C7__8S7522C12__7S7522C1[3]),  3,3},
  {&(_tg__ZTV8S7522C107S7522C48S7522C13__8S7522C12__7S7522C1[3]),  3,3},
  {&(_tg__ZTV8S7522C108S7522C13__A1__8S7522C12__7S7522C1[3]),  3,3},
  {&(_tg__ZTV8S7522C14__8S7522C12__7S7522C1[5]),  5,5},
  {&(_tg__ZTV8S7522C14__8S7522C12__7S7522C1[5]),  5,5},
  {&(_tg__ZTV8S7522C16__8S7522C12__7S7522C1[4]),  4,4},
  {&(_tg__ZTV7S7522C4__A1__8S7522C12__7S7522C1[5]),  5,5},
  {&(_tg__ZTV8S7522C107S7522C4__A4__8S7522C12__7S7522C1[3]),  3,3},
  {&(_tg__ZTV8S7522C13__7S7522C1[8]),  8,10},
  {&(_tg__ZTV7S7522C48S7522C13__A1__7S7522C1[5]),  5,5},
  {&(_tg__ZTV7S7522C57S7522C48S7522C13__A1__7S7522C1[4]),  4,4},
  {&(_tg__ZTV7S7522C7__7S7522C57S7522C48S7522C13__A1__7S7522C1[3]),  3,3},
  {&(_tg__ZTV8S7522C107S7522C48S7522C13__A1__7S7522C1[3]),  3,3},
  {&(_tg__ZTV7S7522C7__7S7522C48S7522C13__A1__7S7522C1[3]),  3,3},
  {&(_tg__ZTV8S7522C10__7S7522C48S7522C13__A1__7S7522C1[3]),  3,3},
  {&(_tg__ZTV8S7522C108S7522C13__A2__7S7522C1[3]),  3,3},
  {&(_tg__ZTV7S7522C7__8S7522C13__7S7522C1[3]),  3,3},
  {&(_tg__ZTV8S7522C107S7522C4__8S7522C13__7S7522C1[3]),  3,3},
  {&(_tg__ZTV8S7522C10__A__8S7522C13__7S7522C1[3]),  3,3},
  {&(_tg__ZTV8S7522C14__8S7522C13__7S7522C1[5]),  5,5},
  {&(_tg__ZTV8S7522C14__8S7522C13__7S7522C1[5]),  5,5},
  {&(_tg__ZTV8S7522C14__7S7522C1[5]),  5,5},
  {&(_tg__ZTV8S7522C14__7S7522C1[5]),  5,5},
  {&(_tg__ZTV8S7522C10__A3__7S7522C1[3]),  3,3},
  {&(_tg__ZTV8S7522C16__7S7522C1[4]),  4,4},
  {&(_tg__ZTV7S7522C7__8S7522C16__7S7522C1[3]),  3,3},
  {&(_tg__ZTV7S7522C4__A2__7S7522C1[5]),  5,5},
  {&(_tg__ZTV7S7522C57S7522C4__A2__7S7522C1[4]),  4,4},
  {&(_tg__ZTV7S7522C7__7S7522C57S7522C4__A2__7S7522C1[3]),  3,3},
  {&(_tg__ZTV8S7522C107S7522C4__A5__7S7522C1[3]),  3,3},
  {&(_tg__ZTV7S7522C7__7S7522C4__A2__7S7522C1[3]),  3,3},
  {&(_tg__ZTV8S7522C10__7S7522C4__A2__7S7522C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7522C1[];
extern  VTBL_ENTRY _ZTV7S7522C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7522C1[];
static VTBL_ENTRY alt_thunk_names99[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7522C12D0Ev,_ZTv0_n36_N8S7522C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7522C12D0Ev,_ZThn8_N8S7522C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7522C12D1Ev,_ZTv0_n36_N8S7522C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7522C12D1Ev,_ZThn8_N8S7522C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7522C1D0Ev,_ZTv0_n36_N7S7522C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7522C1D0Ev,_ZThn52_N7S7522C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7522C1D1Ev,_ZTv0_n36_N7S7522C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7522C1D1Ev,_ZThn52_N7S7522C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7522C1D0Ev,_ZTv0_n48_N7S7522C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7522C1D0Ev,_ZThn44_N7S7522C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7522C1D1Ev,_ZTv0_n48_N7S7522C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7522C1D1Ev,_ZThn44_N7S7522C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7522C1 = {  "S7522C1", // class name
  bases_S7522C1, 38,
  &(vtc_S7522C1[0]), // expected_vtbl_contents
  &(vtt_S7522C1[0]), // expected_vtt_contents
  ABISELECT(272,172), // object size
  NSPAIRA(_ZTI7S7522C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7522C1),74, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7522C1),59, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names99,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4949C3  {
  int s4949c3f0[28];
  virtual  ~S4949C3(); // _ZN7S4949C3D1Ev
  virtual void  v3(); // _ZN7S4949C32v3Ev
  virtual void  v4(); // _ZN7S4949C32v4Ev
  virtual void  v5(); // _ZN7S4949C32v5Ev
  virtual void  v6(); // _ZN7S4949C32v6Ev
  virtual void  v7(); // _ZN7S4949C32v7Ev
  virtual void  v8(); // _ZN7S4949C32v8Ev
  virtual void  v9(); // _ZN7S4949C32v9Ev
  virtual void  v10(); // _ZN7S4949C33v10Ev
  virtual void  v11(); // _ZN7S4949C33v11Ev
  virtual void  v12(); // _ZN7S4949C33v12Ev
  virtual void  v13(); // _ZN7S4949C33v13Ev
  virtual void  v14(); // _ZN7S4949C33v14Ev
  virtual void  v15(); // _ZN7S4949C33v15Ev
  virtual void  v16(); // _ZN7S4949C33v16Ev
  virtual void  v17(); // _ZN7S4949C33v17Ev
  virtual void  v18(); // _ZN7S4949C33v18Ev
  virtual void  v19(); // _ZN7S4949C33v19Ev
  virtual void  v20(); // _ZN7S4949C33v20Ev
  virtual void  v21(); // _ZN7S4949C33v21Ev
  virtual void  v22(); // _ZN7S4949C33v22Ev
  virtual void  v23(); // _ZN7S4949C33v23Ev
  virtual void  v24(); // _ZN7S4949C33v24Ev
  virtual void  v25(); // _ZN7S4949C33v25Ev
  virtual void  v26(); // _ZN7S4949C33v26Ev
  virtual void  v27(); // _ZN7S4949C33v27Ev
  S4949C3(); // tgen
};
//SIG(-1 S4949C3) 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 Fi[28]}


 S4949C3 ::~S4949C3(){ note_dtor("S4949C3", this);}
void  S4949C3 ::v3(){vfunc_called(this, "_ZN7S4949C32v3Ev");}
void  S4949C3 ::v4(){vfunc_called(this, "_ZN7S4949C32v4Ev");}
void  S4949C3 ::v5(){vfunc_called(this, "_ZN7S4949C32v5Ev");}
void  S4949C3 ::v6(){vfunc_called(this, "_ZN7S4949C32v6Ev");}
void  S4949C3 ::v7(){vfunc_called(this, "_ZN7S4949C32v7Ev");}
void  S4949C3 ::v8(){vfunc_called(this, "_ZN7S4949C32v8Ev");}
void  S4949C3 ::v9(){vfunc_called(this, "_ZN7S4949C32v9Ev");}
void  S4949C3 ::v10(){vfunc_called(this, "_ZN7S4949C33v10Ev");}
void  S4949C3 ::v11(){vfunc_called(this, "_ZN7S4949C33v11Ev");}
void  S4949C3 ::v12(){vfunc_called(this, "_ZN7S4949C33v12Ev");}
void  S4949C3 ::v13(){vfunc_called(this, "_ZN7S4949C33v13Ev");}
void  S4949C3 ::v14(){vfunc_called(this, "_ZN7S4949C33v14Ev");}
void  S4949C3 ::v15(){vfunc_called(this, "_ZN7S4949C33v15Ev");}
void  S4949C3 ::v16(){vfunc_called(this, "_ZN7S4949C33v16Ev");}
void  S4949C3 ::v17(){vfunc_called(this, "_ZN7S4949C33v17Ev");}
void  S4949C3 ::v18(){vfunc_called(this, "_ZN7S4949C33v18Ev");}
void  S4949C3 ::v19(){vfunc_called(this, "_ZN7S4949C33v19Ev");}
void  S4949C3 ::v20(){vfunc_called(this, "_ZN7S4949C33v20Ev");}
void  S4949C3 ::v21(){vfunc_called(this, "_ZN7S4949C33v21Ev");}
void  S4949C3 ::v22(){vfunc_called(this, "_ZN7S4949C33v22Ev");}
void  S4949C3 ::v23(){vfunc_called(this, "_ZN7S4949C33v23Ev");}
void  S4949C3 ::v24(){vfunc_called(this, "_ZN7S4949C33v24Ev");}
void  S4949C3 ::v25(){vfunc_called(this, "_ZN7S4949C33v25Ev");}
void  S4949C3 ::v26(){vfunc_called(this, "_ZN7S4949C33v26Ev");}
void  S4949C3 ::v27(){vfunc_called(this, "_ZN7S4949C33v27Ev");}
S4949C3 ::S4949C3(){ note_ctor("S4949C3", this);} // tgen

static void Test_S4949C3()
{
  extern Class_Descriptor cd_S4949C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S4949C3, buf);
    S4949C3 *dp, &lv = *(dp=new (buf) S4949C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S4949C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4949C3)");
    check_field_offset(lv, s4949c3f0, ABISELECT(8,4), "S4949C3.s4949c3f0");
    test_class_info(&lv, &cd_S4949C3);
    dp->~S4949C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4949C3(Test_S4949C3, "S4949C3", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN7S4949C3C1Ev();
extern void _ZN7S4949C3D1Ev();
Name_Map name_map_S4949C3[] = {
  NSPAIR(_ZN7S4949C3C1Ev),
  NSPAIR(_ZN7S4949C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4949C3[];
extern void _ZN7S4949C3D1Ev();
extern void _ZN7S4949C3D0Ev();
extern void _ZN7S4949C32v3Ev();
extern void _ZN7S4949C32v4Ev();
extern void _ZN7S4949C32v5Ev();
extern void _ZN7S4949C32v6Ev();
extern void _ZN7S4949C32v7Ev();
extern void _ZN7S4949C32v8Ev();
extern void _ZN7S4949C32v9Ev();
extern void _ZN7S4949C33v10Ev();
extern void _ZN7S4949C33v11Ev();
extern void _ZN7S4949C33v12Ev();
extern void _ZN7S4949C33v13Ev();
extern void _ZN7S4949C33v14Ev();
extern void _ZN7S4949C33v15Ev();
extern void _ZN7S4949C33v16Ev();
extern void _ZN7S4949C33v17Ev();
extern void _ZN7S4949C33v18Ev();
extern void _ZN7S4949C33v19Ev();
extern void _ZN7S4949C33v20Ev();
extern void _ZN7S4949C33v21Ev();
extern void _ZN7S4949C33v22Ev();
extern void _ZN7S4949C33v23Ev();
extern void _ZN7S4949C33v24Ev();
extern void _ZN7S4949C33v25Ev();
extern void _ZN7S4949C33v26Ev();
extern void _ZN7S4949C33v27Ev();
static  VTBL_ENTRY vtc_S4949C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4949C3[0]),
  (VTBL_ENTRY)&_ZN7S4949C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4949C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v27Ev,
};
extern VTBL_ENTRY _ZTI7S4949C3[];
extern  VTBL_ENTRY _ZTV7S4949C3[];
Class_Descriptor cd_S4949C3 = {  "S4949C3", // class name
  0,0,//no base classes
  &(vtc_S4949C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI7S4949C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4949C3),29, //virtual function table var
  2, // 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  S4949C2  : S4949C3 {
  void *s4949c2f0;
  int s4949c2f1[3];
  virtual  ~S4949C2(); // _ZN7S4949C2D1Ev
  virtual void  v28(); // _ZN7S4949C23v28Ev
  virtual void  v29(); // _ZN7S4949C23v29Ev
  virtual void  v30(); // _ZN7S4949C23v30Ev
  virtual void  v31(); // _ZN7S4949C23v31Ev
  virtual void  v32(); // _ZN7S4949C23v32Ev
  virtual void  v33(); // _ZN7S4949C23v33Ev
  virtual void  v34(); // _ZN7S4949C23v34Ev
  S4949C2(); // tgen
};
//SIG(-1 S4949C2) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fi[28]} vd v1 v2 v3 v4 v5 v6 v7 Fp Fi[3]}


 S4949C2 ::~S4949C2(){ note_dtor("S4949C2", this);}
void  S4949C2 ::v28(){vfunc_called(this, "_ZN7S4949C23v28Ev");}
void  S4949C2 ::v29(){vfunc_called(this, "_ZN7S4949C23v29Ev");}
void  S4949C2 ::v30(){vfunc_called(this, "_ZN7S4949C23v30Ev");}
void  S4949C2 ::v31(){vfunc_called(this, "_ZN7S4949C23v31Ev");}
void  S4949C2 ::v32(){vfunc_called(this, "_ZN7S4949C23v32Ev");}
void  S4949C2 ::v33(){vfunc_called(this, "_ZN7S4949C23v33Ev");}
void  S4949C2 ::v34(){vfunc_called(this, "_ZN7S4949C23v34Ev");}
S4949C2 ::S4949C2(){ note_ctor("S4949C2", this);} // tgen

static void Test_S4949C2()
{
  extern Class_Descriptor cd_S4949C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,34)];
    init_test(&cd_S4949C2, buf);
    S4949C2 *dp, &lv = *(dp=new (buf) S4949C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,132), "sizeof(S4949C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4949C2)");
    check_base_class_offset(lv, (S4949C3*), 0, "S4949C2");
    check_field_offset(lv, s4949c2f0, ABISELECT(120,116), "S4949C2.s4949c2f0");
    check_field_offset(lv, s4949c2f1, ABISELECT(128,120), "S4949C2.s4949c2f1");
    test_class_info(&lv, &cd_S4949C2);
    dp->~S4949C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4949C2(Test_S4949C2, "S4949C2", ABISELECT(144,132));

#else // __cplusplus

extern void _ZN7S4949C2C1Ev();
extern void _ZN7S4949C2D1Ev();
Name_Map name_map_S4949C2[] = {
  NSPAIR(_ZN7S4949C2C1Ev),
  NSPAIR(_ZN7S4949C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4949C3;
extern VTBL_ENTRY _ZTI7S4949C3[];
extern  VTBL_ENTRY _ZTV7S4949C3[];
static Base_Class bases_S4949C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4949C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4949C2[];
extern void _ZN7S4949C2D1Ev();
extern void _ZN7S4949C2D0Ev();
extern void _ZN7S4949C32v3Ev();
extern void _ZN7S4949C32v4Ev();
extern void _ZN7S4949C32v5Ev();
extern void _ZN7S4949C32v6Ev();
extern void _ZN7S4949C32v7Ev();
extern void _ZN7S4949C32v8Ev();
extern void _ZN7S4949C32v9Ev();
extern void _ZN7S4949C33v10Ev();
extern void _ZN7S4949C33v11Ev();
extern void _ZN7S4949C33v12Ev();
extern void _ZN7S4949C33v13Ev();
extern void _ZN7S4949C33v14Ev();
extern void _ZN7S4949C33v15Ev();
extern void _ZN7S4949C33v16Ev();
extern void _ZN7S4949C33v17Ev();
extern void _ZN7S4949C33v18Ev();
extern void _ZN7S4949C33v19Ev();
extern void _ZN7S4949C33v20Ev();
extern void _ZN7S4949C33v21Ev();
extern void _ZN7S4949C33v22Ev();
extern void _ZN7S4949C33v23Ev();
extern void _ZN7S4949C33v24Ev();
extern void _ZN7S4949C33v25Ev();
extern void _ZN7S4949C33v26Ev();
extern void _ZN7S4949C33v27Ev();
extern void _ZN7S4949C23v28Ev();
extern void _ZN7S4949C23v29Ev();
extern void _ZN7S4949C23v30Ev();
extern void _ZN7S4949C23v31Ev();
extern void _ZN7S4949C23v32Ev();
extern void _ZN7S4949C23v33Ev();
extern void _ZN7S4949C23v34Ev();
static  VTBL_ENTRY vtc_S4949C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4949C2[0]),
  (VTBL_ENTRY)&_ZN7S4949C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4949C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4949C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4949C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4949C23v30Ev,
  (VTBL_ENTRY)&_ZN7S4949C23v31Ev,
  (VTBL_ENTRY)&_ZN7S4949C23v32Ev,
  (VTBL_ENTRY)&_ZN7S4949C23v33Ev,
  (VTBL_ENTRY)&_ZN7S4949C23v34Ev,
};
extern VTBL_ENTRY _ZTI7S4949C2[];
extern  VTBL_ENTRY _ZTV7S4949C2[];
Class_Descriptor cd_S4949C2 = {  "S4949C2", // class name
  bases_S4949C2, 1,
  &(vtc_S4949C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,132), // object size
  NSPAIRA(_ZTI7S4949C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4949C2),36, //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  S4949C1  : S4949C2 {
  ::S1566C9 s4949c1f0;
  int s4949c1f1;
  virtual  ~S4949C1(); // _ZN7S4949C1D1Ev
  virtual void  v1(); // _ZN7S4949C12v1Ev
  virtual void  v2(); // _ZN7S4949C12v2Ev
  S4949C1(); // tgen
};
//SIG(1 S4949C1) C1{ BC2{ BC3{ 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 Fi[28]} vd v28 v29 v30 v31 v32 v33 v34 Fp Fi[3]} vd v1 v2 FC4{ BC5{ BC6{ m Fp Fi[2]}}} Fi}


 S4949C1 ::~S4949C1(){ note_dtor("S4949C1", this);}
void  S4949C1 ::v1(){vfunc_called(this, "_ZN7S4949C12v1Ev");}
void  S4949C1 ::v2(){vfunc_called(this, "_ZN7S4949C12v2Ev");}
S4949C1 ::S4949C1(){ note_ctor("S4949C1", this);} // tgen

static void Test_S4949C1()
{
  extern Class_Descriptor cd_S4949C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,38)];
    init_test(&cd_S4949C1, buf);
    S4949C1 *dp, &lv = *(dp=new (buf) S4949C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,148), "sizeof(S4949C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4949C1)");
    check_base_class_offset(lv, (S4949C3*)(S4949C2*), 0, "S4949C1");
    check_base_class_offset(lv, (S4949C2*), 0, "S4949C1");
    check_field_offset(lv, s4949c1f0, ABISELECT(144,132), "S4949C1.s4949c1f0");
    check_field_offset(lv, s4949c1f1, ABISELECT(160,144), "S4949C1.s4949c1f1");
    test_class_info(&lv, &cd_S4949C1);
    dp->~S4949C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4949C1(Test_S4949C1, "S4949C1", ABISELECT(168,148));

#else // __cplusplus

extern void _ZN7S4949C1C1Ev();
extern void _ZN7S4949C1D1Ev();
Name_Map name_map_S4949C1[] = {
  NSPAIR(_ZN7S4949C1C1Ev),
  NSPAIR(_ZN7S4949C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4949C3;
extern VTBL_ENTRY _ZTI7S4949C3[];
extern  VTBL_ENTRY _ZTV7S4949C3[];
extern Class_Descriptor cd_S4949C2;
extern VTBL_ENTRY _ZTI7S4949C2[];
extern  VTBL_ENTRY _ZTV7S4949C2[];
static Base_Class bases_S4949C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4949C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4949C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4949C1[];
extern void _ZN7S4949C1D1Ev();
extern void _ZN7S4949C1D0Ev();
extern void _ZN7S4949C32v3Ev();
extern void _ZN7S4949C32v4Ev();
extern void _ZN7S4949C32v5Ev();
extern void _ZN7S4949C32v6Ev();
extern void _ZN7S4949C32v7Ev();
extern void _ZN7S4949C32v8Ev();
extern void _ZN7S4949C32v9Ev();
extern void _ZN7S4949C33v10Ev();
extern void _ZN7S4949C33v11Ev();
extern void _ZN7S4949C33v12Ev();
extern void _ZN7S4949C33v13Ev();
extern void _ZN7S4949C33v14Ev();
extern void _ZN7S4949C33v15Ev();
extern void _ZN7S4949C33v16Ev();
extern void _ZN7S4949C33v17Ev();
extern void _ZN7S4949C33v18Ev();
extern void _ZN7S4949C33v19Ev();
extern void _ZN7S4949C33v20Ev();
extern void _ZN7S4949C33v21Ev();
extern void _ZN7S4949C33v22Ev();
extern void _ZN7S4949C33v23Ev();
extern void _ZN7S4949C33v24Ev();
extern void _ZN7S4949C33v25Ev();
extern void _ZN7S4949C33v26Ev();
extern void _ZN7S4949C33v27Ev();
extern void _ZN7S4949C23v28Ev();
extern void _ZN7S4949C23v29Ev();
extern void _ZN7S4949C23v30Ev();
extern void _ZN7S4949C23v31Ev();
extern void _ZN7S4949C23v32Ev();
extern void _ZN7S4949C23v33Ev();
extern void _ZN7S4949C23v34Ev();
extern void _ZN7S4949C12v1Ev();
extern void _ZN7S4949C12v2Ev();
static  VTBL_ENTRY vtc_S4949C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4949C1[0]),
  (VTBL_ENTRY)&_ZN7S4949C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4949C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4949C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4949C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4949C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4949C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4949C23v30Ev,
  (VTBL_ENTRY)&_ZN7S4949C23v31Ev,
  (VTBL_ENTRY)&_ZN7S4949C23v32Ev,
  (VTBL_ENTRY)&_ZN7S4949C23v33Ev,
  (VTBL_ENTRY)&_ZN7S4949C23v34Ev,
  (VTBL_ENTRY)&_ZN7S4949C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4949C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4949C1[];
extern  VTBL_ENTRY _ZTV7S4949C1[];
Class_Descriptor cd_S4949C1 = {  "S4949C1", // class name
  bases_S4949C1, 2,
  &(vtc_S4949C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,148), // object size
  NSPAIRA(_ZTI7S4949C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4949C1),38, //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  S4948C3  {
  int s4948c3f0[28];
  virtual  ~S4948C3(); // _ZN7S4948C3D1Ev
  virtual void  v3(); // _ZN7S4948C32v3Ev
  virtual void  v4(); // _ZN7S4948C32v4Ev
  virtual void  v5(); // _ZN7S4948C32v5Ev
  virtual void  v6(); // _ZN7S4948C32v6Ev
  virtual void  v7(); // _ZN7S4948C32v7Ev
  virtual void  v8(); // _ZN7S4948C32v8Ev
  virtual void  v9(); // _ZN7S4948C32v9Ev
  virtual void  v10(); // _ZN7S4948C33v10Ev
  virtual void  v11(); // _ZN7S4948C33v11Ev
  virtual void  v12(); // _ZN7S4948C33v12Ev
  virtual void  v13(); // _ZN7S4948C33v13Ev
  virtual void  v14(); // _ZN7S4948C33v14Ev
  virtual void  v15(); // _ZN7S4948C33v15Ev
  virtual void  v16(); // _ZN7S4948C33v16Ev
  virtual void  v17(); // _ZN7S4948C33v17Ev
  virtual void  v18(); // _ZN7S4948C33v18Ev
  virtual void  v19(); // _ZN7S4948C33v19Ev
  virtual void  v20(); // _ZN7S4948C33v20Ev
  virtual void  v21(); // _ZN7S4948C33v21Ev
  virtual void  v22(); // _ZN7S4948C33v22Ev
  virtual void  v23(); // _ZN7S4948C33v23Ev
  virtual void  v24(); // _ZN7S4948C33v24Ev
  virtual void  v25(); // _ZN7S4948C33v25Ev
  virtual void  v26(); // _ZN7S4948C33v26Ev
  virtual void  v27(); // _ZN7S4948C33v27Ev
  S4948C3(); // tgen
};
//SIG(-1 S4948C3) 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 Fi[28]}


 S4948C3 ::~S4948C3(){ note_dtor("S4948C3", this);}
void  S4948C3 ::v3(){vfunc_called(this, "_ZN7S4948C32v3Ev");}
void  S4948C3 ::v4(){vfunc_called(this, "_ZN7S4948C32v4Ev");}
void  S4948C3 ::v5(){vfunc_called(this, "_ZN7S4948C32v5Ev");}
void  S4948C3 ::v6(){vfunc_called(this, "_ZN7S4948C32v6Ev");}
void  S4948C3 ::v7(){vfunc_called(this, "_ZN7S4948C32v7Ev");}
void  S4948C3 ::v8(){vfunc_called(this, "_ZN7S4948C32v8Ev");}
void  S4948C3 ::v9(){vfunc_called(this, "_ZN7S4948C32v9Ev");}
void  S4948C3 ::v10(){vfunc_called(this, "_ZN7S4948C33v10Ev");}
void  S4948C3 ::v11(){vfunc_called(this, "_ZN7S4948C33v11Ev");}
void  S4948C3 ::v12(){vfunc_called(this, "_ZN7S4948C33v12Ev");}
void  S4948C3 ::v13(){vfunc_called(this, "_ZN7S4948C33v13Ev");}
void  S4948C3 ::v14(){vfunc_called(this, "_ZN7S4948C33v14Ev");}
void  S4948C3 ::v15(){vfunc_called(this, "_ZN7S4948C33v15Ev");}
void  S4948C3 ::v16(){vfunc_called(this, "_ZN7S4948C33v16Ev");}
void  S4948C3 ::v17(){vfunc_called(this, "_ZN7S4948C33v17Ev");}
void  S4948C3 ::v18(){vfunc_called(this, "_ZN7S4948C33v18Ev");}
void  S4948C3 ::v19(){vfunc_called(this, "_ZN7S4948C33v19Ev");}
void  S4948C3 ::v20(){vfunc_called(this, "_ZN7S4948C33v20Ev");}
void  S4948C3 ::v21(){vfunc_called(this, "_ZN7S4948C33v21Ev");}
void  S4948C3 ::v22(){vfunc_called(this, "_ZN7S4948C33v22Ev");}
void  S4948C3 ::v23(){vfunc_called(this, "_ZN7S4948C33v23Ev");}
void  S4948C3 ::v24(){vfunc_called(this, "_ZN7S4948C33v24Ev");}
void  S4948C3 ::v25(){vfunc_called(this, "_ZN7S4948C33v25Ev");}
void  S4948C3 ::v26(){vfunc_called(this, "_ZN7S4948C33v26Ev");}
void  S4948C3 ::v27(){vfunc_called(this, "_ZN7S4948C33v27Ev");}
S4948C3 ::S4948C3(){ note_ctor("S4948C3", this);} // tgen

static void Test_S4948C3()
{
  extern Class_Descriptor cd_S4948C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S4948C3, buf);
    S4948C3 *dp, &lv = *(dp=new (buf) S4948C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S4948C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4948C3)");
    check_field_offset(lv, s4948c3f0, ABISELECT(8,4), "S4948C3.s4948c3f0");
    test_class_info(&lv, &cd_S4948C3);
    dp->~S4948C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4948C3(Test_S4948C3, "S4948C3", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN7S4948C3C1Ev();
extern void _ZN7S4948C3D1Ev();
Name_Map name_map_S4948C3[] = {
  NSPAIR(_ZN7S4948C3C1Ev),
  NSPAIR(_ZN7S4948C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4948C3[];
extern void _ZN7S4948C3D1Ev();
extern void _ZN7S4948C3D0Ev();
extern void _ZN7S4948C32v3Ev();
extern void _ZN7S4948C32v4Ev();
extern void _ZN7S4948C32v5Ev();
extern void _ZN7S4948C32v6Ev();
extern void _ZN7S4948C32v7Ev();
extern void _ZN7S4948C32v8Ev();
extern void _ZN7S4948C32v9Ev();
extern void _ZN7S4948C33v10Ev();
extern void _ZN7S4948C33v11Ev();
extern void _ZN7S4948C33v12Ev();
extern void _ZN7S4948C33v13Ev();
extern void _ZN7S4948C33v14Ev();
extern void _ZN7S4948C33v15Ev();
extern void _ZN7S4948C33v16Ev();
extern void _ZN7S4948C33v17Ev();
extern void _ZN7S4948C33v18Ev();
extern void _ZN7S4948C33v19Ev();
extern void _ZN7S4948C33v20Ev();
extern void _ZN7S4948C33v21Ev();
extern void _ZN7S4948C33v22Ev();
extern void _ZN7S4948C33v23Ev();
extern void _ZN7S4948C33v24Ev();
extern void _ZN7S4948C33v25Ev();
extern void _ZN7S4948C33v26Ev();
extern void _ZN7S4948C33v27Ev();
static  VTBL_ENTRY vtc_S4948C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4948C3[0]),
  (VTBL_ENTRY)&_ZN7S4948C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4948C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v27Ev,
};
extern VTBL_ENTRY _ZTI7S4948C3[];
extern  VTBL_ENTRY _ZTV7S4948C3[];
Class_Descriptor cd_S4948C3 = {  "S4948C3", // class name
  0,0,//no base classes
  &(vtc_S4948C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI7S4948C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4948C3),29, //virtual function table var
  2, // 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  S4948C2  : S4948C3 {
  ::S1566C29 s4948c2f0;
  int s4948c2f1[2];
  virtual void  v28(); // _ZN7S4948C23v28Ev
  virtual void  v29(); // _ZN7S4948C23v29Ev
  virtual void  v30(); // _ZN7S4948C23v30Ev
  virtual void  v31(); // _ZN7S4948C23v31Ev
  ~S4948C2(); // tgen
  S4948C2(); // tgen
};
//SIG(-1 S4948C2) C1{ BC2{ 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 Fi[28]} v1 v2 v3 v4 FC3{ BC4{ m Fp Fi[2]}} Fi[2]}


void  S4948C2 ::v28(){vfunc_called(this, "_ZN7S4948C23v28Ev");}
void  S4948C2 ::v29(){vfunc_called(this, "_ZN7S4948C23v29Ev");}
void  S4948C2 ::v30(){vfunc_called(this, "_ZN7S4948C23v30Ev");}
void  S4948C2 ::v31(){vfunc_called(this, "_ZN7S4948C23v31Ev");}
S4948C2 ::~S4948C2(){ note_dtor("S4948C2", this);} // tgen
S4948C2 ::S4948C2(){ note_ctor("S4948C2", this);} // tgen

static void Test_S4948C2()
{
  extern Class_Descriptor cd_S4948C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,35)];
    init_test(&cd_S4948C2, buf);
    S4948C2 *dp, &lv = *(dp=new (buf) S4948C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,136), "sizeof(S4948C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4948C2)");
    check_base_class_offset(lv, (S4948C3*), 0, "S4948C2");
    check_field_offset(lv, s4948c2f0, ABISELECT(120,116), "S4948C2.s4948c2f0");
    check_field_offset(lv, s4948c2f1, ABISELECT(136,128), "S4948C2.s4948c2f1");
    test_class_info(&lv, &cd_S4948C2);
    dp->~S4948C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4948C2(Test_S4948C2, "S4948C2", ABISELECT(144,136));

#else // __cplusplus

extern void _ZN7S4948C2C1Ev();
extern void _ZN7S4948C2D1Ev();
Name_Map name_map_S4948C2[] = {
  NSPAIR(_ZN7S4948C2C1Ev),
  NSPAIR(_ZN7S4948C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4948C3;
extern VTBL_ENTRY _ZTI7S4948C3[];
extern  VTBL_ENTRY _ZTV7S4948C3[];
static Base_Class bases_S4948C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4948C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4948C2[];
extern void _ZN7S4948C2D1Ev();
extern void _ZN7S4948C2D0Ev();
extern void _ZN7S4948C32v3Ev();
extern void _ZN7S4948C32v4Ev();
extern void _ZN7S4948C32v5Ev();
extern void _ZN7S4948C32v6Ev();
extern void _ZN7S4948C32v7Ev();
extern void _ZN7S4948C32v8Ev();
extern void _ZN7S4948C32v9Ev();
extern void _ZN7S4948C33v10Ev();
extern void _ZN7S4948C33v11Ev();
extern void _ZN7S4948C33v12Ev();
extern void _ZN7S4948C33v13Ev();
extern void _ZN7S4948C33v14Ev();
extern void _ZN7S4948C33v15Ev();
extern void _ZN7S4948C33v16Ev();
extern void _ZN7S4948C33v17Ev();
extern void _ZN7S4948C33v18Ev();
extern void _ZN7S4948C33v19Ev();
extern void _ZN7S4948C33v20Ev();
extern void _ZN7S4948C33v21Ev();
extern void _ZN7S4948C33v22Ev();
extern void _ZN7S4948C33v23Ev();
extern void _ZN7S4948C33v24Ev();
extern void _ZN7S4948C33v25Ev();
extern void _ZN7S4948C33v26Ev();
extern void _ZN7S4948C33v27Ev();
extern void _ZN7S4948C23v28Ev();
extern void _ZN7S4948C23v29Ev();
extern void _ZN7S4948C23v30Ev();
extern void _ZN7S4948C23v31Ev();
static  VTBL_ENTRY vtc_S4948C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4948C2[0]),
  (VTBL_ENTRY)&_ZN7S4948C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4948C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4948C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4948C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4948C23v30Ev,
  (VTBL_ENTRY)&_ZN7S4948C23v31Ev,
};
extern VTBL_ENTRY _ZTI7S4948C2[];
extern  VTBL_ENTRY _ZTV7S4948C2[];
Class_Descriptor cd_S4948C2 = {  "S4948C2", // class name
  bases_S4948C2, 1,
  &(vtc_S4948C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,136), // object size
  NSPAIRA(_ZTI7S4948C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4948C2),33, //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  S4948C1  : S4948C2 {
  int s4948c1f0;
  void *s4948c1f1[2];
  int s4948c1f2[3];
  char s4948c1f3[3];
  virtual void  v1(); // _ZN7S4948C12v1Ev
  virtual void  v2(); // _ZN7S4948C12v2Ev
  ~S4948C1(); // tgen
  S4948C1(); // tgen
};
//SIG(1 S4948C1) C1{ BC2{ BC3{ 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 Fi[28]} v28 v29 v30 v31 FC4{ BC5{ m Fp Fi[2]}} Fi[2]} v1 v2 Fi Fp[2] Fi[3] Fc[3]}


void  S4948C1 ::v1(){vfunc_called(this, "_ZN7S4948C12v1Ev");}
void  S4948C1 ::v2(){vfunc_called(this, "_ZN7S4948C12v2Ev");}
S4948C1 ::~S4948C1(){ note_dtor("S4948C1", this);} // tgen
S4948C1 ::S4948C1(){ note_ctor("S4948C1", this);} // tgen

static void Test_S4948C1()
{
  extern Class_Descriptor cd_S4948C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,42)];
    init_test(&cd_S4948C1, buf);
    S4948C1 *dp, &lv = *(dp=new (buf) S4948C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,164), "sizeof(S4948C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4948C1)");
    check_base_class_offset(lv, (S4948C3*)(S4948C2*), 0, "S4948C1");
    check_base_class_offset(lv, (S4948C2*), 0, "S4948C1");
    check_field_offset(lv, s4948c1f0, ABISELECT(144,136), "S4948C1.s4948c1f0");
    check_field_offset(lv, s4948c1f1, ABISELECT(152,140), "S4948C1.s4948c1f1");
    check_field_offset(lv, s4948c1f2, ABISELECT(168,148), "S4948C1.s4948c1f2");
    check_field_offset(lv, s4948c1f3, ABISELECT(180,160), "S4948C1.s4948c1f3");
    test_class_info(&lv, &cd_S4948C1);
    dp->~S4948C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4948C1(Test_S4948C1, "S4948C1", ABISELECT(184,164));

#else // __cplusplus

extern void _ZN7S4948C1C1Ev();
extern void _ZN7S4948C1D1Ev();
Name_Map name_map_S4948C1[] = {
  NSPAIR(_ZN7S4948C1C1Ev),
  NSPAIR(_ZN7S4948C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4948C3;
extern VTBL_ENTRY _ZTI7S4948C3[];
extern  VTBL_ENTRY _ZTV7S4948C3[];
extern Class_Descriptor cd_S4948C2;
extern VTBL_ENTRY _ZTI7S4948C2[];
extern  VTBL_ENTRY _ZTV7S4948C2[];
static Base_Class bases_S4948C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4948C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4948C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4948C1[];
extern void _ZN7S4948C1D1Ev();
extern void _ZN7S4948C1D0Ev();
extern void _ZN7S4948C32v3Ev();
extern void _ZN7S4948C32v4Ev();
extern void _ZN7S4948C32v5Ev();
extern void _ZN7S4948C32v6Ev();
extern void _ZN7S4948C32v7Ev();
extern void _ZN7S4948C32v8Ev();
extern void _ZN7S4948C32v9Ev();
extern void _ZN7S4948C33v10Ev();
extern void _ZN7S4948C33v11Ev();
extern void _ZN7S4948C33v12Ev();
extern void _ZN7S4948C33v13Ev();
extern void _ZN7S4948C33v14Ev();
extern void _ZN7S4948C33v15Ev();
extern void _ZN7S4948C33v16Ev();
extern void _ZN7S4948C33v17Ev();
extern void _ZN7S4948C33v18Ev();
extern void _ZN7S4948C33v19Ev();
extern void _ZN7S4948C33v20Ev();
extern void _ZN7S4948C33v21Ev();
extern void _ZN7S4948C33v22Ev();
extern void _ZN7S4948C33v23Ev();
extern void _ZN7S4948C33v24Ev();
extern void _ZN7S4948C33v25Ev();
extern void _ZN7S4948C33v26Ev();
extern void _ZN7S4948C33v27Ev();
extern void _ZN7S4948C23v28Ev();
extern void _ZN7S4948C23v29Ev();
extern void _ZN7S4948C23v30Ev();
extern void _ZN7S4948C23v31Ev();
extern void _ZN7S4948C12v1Ev();
extern void _ZN7S4948C12v2Ev();
static  VTBL_ENTRY vtc_S4948C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4948C1[0]),
  (VTBL_ENTRY)&_ZN7S4948C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4948C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4948C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4948C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4948C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4948C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4948C23v30Ev,
  (VTBL_ENTRY)&_ZN7S4948C23v31Ev,
  (VTBL_ENTRY)&_ZN7S4948C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4948C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4948C1[];
extern  VTBL_ENTRY _ZTV7S4948C1[];
Class_Descriptor cd_S4948C1 = {  "S4948C1", // class name
  bases_S4948C1, 2,
  &(vtc_S4948C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,164), // object size
  NSPAIRA(_ZTI7S4948C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4948C1),35, //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  S1152C7_nt  : virtual S1537C9_nt , S4304C8_nt , S3600C19 {
  ::S19426C9_nt s1152c7f0;
  ~S1152C7_nt(); // tgen
  S1152C7_nt(); // tgen
};
//SIG(-1 S1152C7_nt) C1{ VBC2{ m Fi} BC3{ m Fp Fi} BC4{ m} FU5{ m}}


S1152C7_nt ::~S1152C7_nt(){ note_dtor("S1152C7_nt", this);} // tgen
S1152C7_nt ::S1152C7_nt(){ note_ctor("S1152C7_nt", this);} // tgen

//skip512 S1152C7_nt

#else // __cplusplus

extern void _ZN10S1152C7_ntC1Ev();
extern void _ZN10S1152C7_ntD1Ev();
Name_Map name_map_S1152C7_nt[] = {
  NSPAIR(_ZN10S1152C7_ntC1Ev),
  NSPAIR(_ZN10S1152C7_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S1152C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C9_nt,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S4304C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI10S1152C7_nt[];
static  VTBL_ENTRY vtc_S1152C7_nt[] = {
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C7_nt[0]),
};
extern VTBL_ENTRY _ZTV10S1152C7_nt[];
static  VTT_ENTRY vtt_S1152C7_nt[] = {
  {&(_ZTV10S1152C7_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI10S1152C7_nt[];
VTBL_ENTRY *P__ZTI10S1152C7_nt = _ZTI10S1152C7_nt; 
extern  VTBL_ENTRY _ZTV10S1152C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C7_nt[];
Class_Descriptor cd_S1152C7_nt = {  "S1152C7_nt", // class name
  bases_S1152C7_nt, 3,
  &(vtc_S1152C7_nt[0]), // expected_vtbl_contents
  &(vtt_S1152C7_nt[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI10S1152C7_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV10S1152C7_nt),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S1152C7_nt),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1152C3_nt  : S3600C19 , S4304C8_nt , S1537C9_nt , S1152C7_nt {
  ~S1152C3_nt(); // tgen
  S1152C3_nt(); // tgen
};
//SIG(-1 S1152C3_nt) C1{ BC2{ m} BC3{ m Fp Fi} BC4{ m Fi} BC5{ VBC4 BC3 BC2 FU6{ m}}}


S1152C3_nt ::~S1152C3_nt(){ note_dtor("S1152C3_nt", this);} // tgen
S1152C3_nt ::S1152C3_nt(){ note_ctor("S1152C3_nt", this);} // tgen

//skip512 S1152C3_nt

#else // __cplusplus

extern void _ZN10S1152C3_ntC1Ev();
extern void _ZN10S1152C3_ntD1Ev();
Name_Map name_map_S1152C3_nt[] = {
  NSPAIR(_ZN10S1152C3_ntC1Ev),
  NSPAIR(_ZN10S1152C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1152C7_nt;
extern VTBL_ENTRY _ZTI10S1152C7_nt[];
extern  VTBL_ENTRY _ZTV10S1152C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C7_nt[];
static Base_Class bases_S1152C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(25,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4304C8_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1537C9_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1537C9_nt,    ABISELECT(52,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
    6, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1152C7_nt,    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 _ZTI10S1152C3_nt[];
static  VTBL_ENTRY vtc_S1152C3_nt[] = {
  ABISELECT(52,28),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C3_nt[0]),
};
extern VTBL_ENTRY _ZTV10S1152C3_nt[];
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__10S1152C3_nt[] = {
  ABISELECT(52,28),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C7_nt[0]),
};
static  VTT_ENTRY vtt_S1152C3_nt[] = {
  {&(_ZTV10S1152C3_nt[3]),  3,3},
  {&(_tg__ZTV10S1152C7_nt__10S1152C3_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI10S1152C3_nt[];
VTBL_ENTRY *P__ZTI10S1152C3_nt = _ZTI10S1152C3_nt; 
extern  VTBL_ENTRY _ZTV10S1152C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C3_nt[];
Class_Descriptor cd_S1152C3_nt = {  "S1152C3_nt", // class name
  bases_S1152C3_nt, 7,
  &(vtc_S1152C3_nt[0]), // expected_vtbl_contents
  &(vtt_S1152C3_nt[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI10S1152C3_nt),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV10S1152C3_nt),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S1152C3_nt),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1152C9_nt  : virtual S3600C19 {
  ~S1152C9_nt(); // tgen
  S1152C9_nt(); // tgen
};
//SIG(-1 S1152C9_nt) C1{ VBC2{ m}}


S1152C9_nt ::~S1152C9_nt(){ note_dtor("S1152C9_nt", this);} // tgen
S1152C9_nt ::S1152C9_nt(){ note_ctor("S1152C9_nt", this);} // tgen

//skip512 S1152C9_nt

#else // __cplusplus

extern void _ZN10S1152C9_ntC1Ev();
extern void _ZN10S1152C9_ntD1Ev();
Name_Map name_map_S1152C9_nt[] = {
  NSPAIR(_ZN10S1152C9_ntC1Ev),
  NSPAIR(_ZN10S1152C9_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S1152C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI10S1152C9_nt[];
static  VTBL_ENTRY vtc_S1152C9_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C9_nt[0]),
};
extern VTBL_ENTRY _ZTV10S1152C9_nt[];
static  VTT_ENTRY vtt_S1152C9_nt[] = {
  {&(_ZTV10S1152C9_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI10S1152C9_nt[];
VTBL_ENTRY *P__ZTI10S1152C9_nt = _ZTI10S1152C9_nt; 
extern  VTBL_ENTRY _ZTV10S1152C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C9_nt[];
Class_Descriptor cd_S1152C9_nt = {  "S1152C9_nt", // class name
  bases_S1152C9_nt, 1,
  &(vtc_S1152C9_nt[0]), // expected_vtbl_contents
  &(vtt_S1152C9_nt[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S1152C9_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV10S1152C9_nt),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S1152C9_nt),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1152C10_nt  : virtual S4304C8_nt , virtual S1152C7_nt , virtual S3600C19 {
  ~S1152C10_nt(); // tgen
  S1152C10_nt(); // tgen
};
//SIG(-1 S1152C10_nt) C1{ VBC2{ m Fp Fi} VBC3{ VBC4{ m Fi} BC2 BC5{ m} FU6{ m}} VBC5}


S1152C10_nt ::~S1152C10_nt(){ note_dtor("S1152C10_nt", this);} // tgen
S1152C10_nt ::S1152C10_nt(){ note_ctor("S1152C10_nt", this);} // tgen

//skip512 S1152C10_nt

#else // __cplusplus

extern void _ZN11S1152C10_ntC1Ev();
extern void _ZN11S1152C10_ntD1Ev();
Name_Map name_map_S1152C10_nt[] = {
  NSPAIR(_ZN11S1152C10_ntC1Ev),
  NSPAIR(_ZN11S1152C10_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1152C7_nt;
extern VTBL_ENTRY _ZTI10S1152C7_nt[];
extern  VTBL_ENTRY _ZTV10S1152C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C7_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S1152C10_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4304C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1537C9_nt,    ABISELECT(52,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1152C7_nt,    ABISELECT(24,12), //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},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI11S1152C10_nt[];
static  VTBL_ENTRY vtc_S1152C10_nt[] = {
  0,
  ABISELECT(52,28),
  ABISELECT(24,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C10_nt[0]),
  ABISELECT(28,16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI11S1152C10_nt[0]),
};
extern VTBL_ENTRY _ZTV11S1152C10_nt[];
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__11S1152C10_nt[] = {
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C7_nt[0]),
};
static  VTT_ENTRY vtt_S1152C10_nt[] = {
  {&(_ZTV11S1152C10_nt[6]),  6,9},
  {&(_ZTV11S1152C10_nt[9]),  9,9},
  {&(_tg__ZTV10S1152C7_nt__11S1152C10_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S1152C10_nt[];
VTBL_ENTRY *P__ZTI11S1152C10_nt = _ZTI11S1152C10_nt; 
extern  VTBL_ENTRY _ZTV11S1152C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C10_nt[];
Class_Descriptor cd_S1152C10_nt = {  "S1152C10_nt", // class name
  bases_S1152C10_nt, 6,
  &(vtc_S1152C10_nt[0]), // expected_vtbl_contents
  &(vtt_S1152C10_nt[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI11S1152C10_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV11S1152C10_nt),9, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S1152C10_nt),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  S1152C12_nt  : virtual S1152C7_nt , S1152C10_nt , virtual S1152C9_nt , virtual S1152C3_nt {
  int s1152c12f0;
  virtual  ~S1152C12_nt(); // _ZN11S1152C12_ntD2Ev
  S1152C12_nt(); // tgen
};
//SIG(-1 S1152C12_nt) C1{ VBC2{ VBC3{ m Fi} BC4{ m Fp Fi} BC5{ m} FU6{ m}} BC7{ VBC4 VBC2 VBC5} VBC8{ VBC5} VBC9{ BC5 BC4 BC3 BC2} vd Fi}


 S1152C12_nt ::~S1152C12_nt(){ note_dtor("S1152C12_nt", this);}
S1152C12_nt ::S1152C12_nt(){ note_ctor("S1152C12_nt", this);} // tgen

//skip512 S1152C12_nt

#else // __cplusplus

extern void _ZN11S1152C12_ntC1Ev();
extern void _ZN11S1152C12_ntD2Ev();
Name_Map name_map_S1152C12_nt[] = {
  NSPAIR(_ZN11S1152C12_ntC1Ev),
  NSPAIR(_ZN11S1152C12_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1152C7_nt;
extern VTBL_ENTRY _ZTI10S1152C7_nt[];
extern  VTBL_ENTRY _ZTV10S1152C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C7_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1152C10_nt;
extern VTBL_ENTRY _ZTI11S1152C10_nt[];
extern  VTBL_ENTRY _ZTV11S1152C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C10_nt[];
extern Class_Descriptor cd_S1152C9_nt;
extern VTBL_ENTRY _ZTI10S1152C9_nt[];
extern  VTBL_ENTRY _ZTV10S1152C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C9_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1152C7_nt;
extern VTBL_ENTRY _ZTI10S1152C7_nt[];
extern  VTBL_ENTRY _ZTV10S1152C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C7_nt[];
extern Class_Descriptor cd_S1152C3_nt;
extern VTBL_ENTRY _ZTI10S1152C3_nt[];
extern  VTBL_ENTRY _ZTV10S1152C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C3_nt[];
static Base_Class bases_S1152C12_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C9_nt,    ABISELECT(44,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1152C7_nt,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S4304C8_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1152C10_nt,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1152C9_nt,    ABISELECT(64,36), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    ABISELECT(97,53), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4304C8_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1537C9_nt,    ABISELECT(120,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_S4304C8_nt,    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
    13, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    13, //immediately_derived
  0, 0},
  {&cd_S1152C7_nt,    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
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1152C3_nt,    ABISELECT(72,40), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S1152C12_nt[];
extern void _ZN11S1152C12_ntD1Ev();
extern void _ZN11S1152C12_ntD0Ev();
static  VTBL_ENTRY vtc_S1152C12_nt[] = {
  ABISELECT(72,40),
  ABISELECT(64,36),
  0,
  ABISELECT(44,24),
  ABISELECT(16,8),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
  (VTBL_ENTRY)&_ZN11S1152C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1152C12_ntD0Ev,
  ABISELECT(28,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
  ABISELECT(-28,-16),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
};
extern VTBL_ENTRY _ZTV11S1152C12_nt[];
static  VTBL_ENTRY _tg__ZTV11S1152C10_nt__11S1152C12_nt[] = {
  0,
  ABISELECT(44,24),
  ABISELECT(16,8),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C10_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__11S1152C10_nt__11S1152C12_nt[] = {
  ABISELECT(28,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI11S1152C10_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__11S1152C12_nt[] = {
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C9_nt__11S1152C12_nt[] = {
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C3_nt__11S1152C12_nt[] = {
  ABISELECT(-28,-16),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C3_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt10S1152C3_nt__A1__11S1152C12_nt[] = {
  ABISELECT(-28,-16),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C7_nt[0]),
};
static  VTT_ENTRY vtt_S1152C12_nt[] = {
  {&(_ZTV11S1152C12_nt[8]),  8,19},
  {&(_tg__ZTV11S1152C10_nt__11S1152C12_nt[6]),  6,6},
  {&(_tg__ZTV10S1152C7_nt__11S1152C10_nt__11S1152C12_nt[3]),  3,3},
  {&(_ZTV11S1152C12_nt[13]),  13,19},
  {&(_ZTV11S1152C12_nt[16]),  16,19},
  {&(_ZTV11S1152C12_nt[19]),  19,19},
  {&(_tg__ZTV10S1152C7_nt__11S1152C12_nt[3]),  3,3},
  {&(_tg__ZTV10S1152C9_nt__11S1152C12_nt[3]),  3,3},
  {&(_tg__ZTV10S1152C3_nt__11S1152C12_nt[3]),  3,3},
  {&(_tg__ZTV10S1152C7_nt10S1152C3_nt__A1__11S1152C12_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S1152C12_nt[];
VTBL_ENTRY *P__ZTI11S1152C12_nt = _ZTI11S1152C12_nt; 
extern  VTBL_ENTRY _ZTV11S1152C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C12_nt[];
Class_Descriptor cd_S1152C12_nt = {  "S1152C12_nt", // class name
  bases_S1152C12_nt, 15,
  &(vtc_S1152C12_nt[0]), // expected_vtbl_contents
  &(vtt_S1152C12_nt[0]), // expected_vtt_contents
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI11S1152C12_nt),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV11S1152C12_nt),19, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S1152C12_nt),10, //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  S1152C13_nt  : S3600C19 , S4304C8_nt , virtual S1152C3_nt {
  int s1152c13f0;
  ~S1152C13_nt(); // tgen
  S1152C13_nt(); // tgen
};
//SIG(-1 S1152C13_nt) C1{ BC2{ m} BC3{ m Fp Fi} VBC4{ BC2 BC3 BC5{ m Fi} BC6{ VBC5 BC3 BC2 FU7{ m}}} Fi}


S1152C13_nt ::~S1152C13_nt(){ note_dtor("S1152C13_nt", this);} // tgen
S1152C13_nt ::S1152C13_nt(){ note_ctor("S1152C13_nt", this);} // tgen

//skip512 S1152C13_nt

#else // __cplusplus

extern void _ZN11S1152C13_ntC1Ev();
extern void _ZN11S1152C13_ntD1Ev();
Name_Map name_map_S1152C13_nt[] = {
  NSPAIR(_ZN11S1152C13_ntC1Ev),
  NSPAIR(_ZN11S1152C13_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1152C7_nt;
extern VTBL_ENTRY _ZTI10S1152C7_nt[];
extern  VTBL_ENTRY _ZTV10S1152C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C7_nt[];
extern Class_Descriptor cd_S1152C3_nt;
extern VTBL_ENTRY _ZTI10S1152C3_nt[];
extern  VTBL_ENTRY _ZTV10S1152C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C3_nt[];
static Base_Class bases_S1152C13_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S4304C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(57,29), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4304C8_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S1537C9_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S1537C9_nt,    ABISELECT(84,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, 1},
  {&cd_S4304C8_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    8, //immediately_derived
  0, 0},
  {&cd_S1152C7_nt,    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
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S1152C3_nt,    ABISELECT(32,16), //bcp->offset
    4, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S1152C13_nt[];
static  VTBL_ENTRY vtc_S1152C13_nt[] = {
  ABISELECT(84,44),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C13_nt[0]),
  ABISELECT(52,28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI11S1152C13_nt[0]),
};
extern VTBL_ENTRY _ZTV11S1152C13_nt[];
static  VTBL_ENTRY _tg__ZTV10S1152C3_nt__11S1152C13_nt[] = {
  ABISELECT(52,28),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C3_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt10S1152C3_nt__11S1152C13_nt[] = {
  ABISELECT(52,28),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C7_nt[0]),
};
static  VTT_ENTRY vtt_S1152C13_nt[] = {
  {&(_ZTV11S1152C13_nt[4]),  4,7},
  {&(_ZTV11S1152C13_nt[7]),  7,7},
  {&(_tg__ZTV10S1152C3_nt__11S1152C13_nt[3]),  3,3},
  {&(_tg__ZTV10S1152C7_nt10S1152C3_nt__11S1152C13_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S1152C13_nt[];
VTBL_ENTRY *P__ZTI11S1152C13_nt = _ZTI11S1152C13_nt; 
extern  VTBL_ENTRY _ZTV11S1152C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C13_nt[];
Class_Descriptor cd_S1152C13_nt = {  "S1152C13_nt", // class name
  bases_S1152C13_nt, 10,
  &(vtc_S1152C13_nt[0]), // expected_vtbl_contents
  &(vtt_S1152C13_nt[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI11S1152C13_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV11S1152C13_nt),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S1152C13_nt),4, //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  S1152C11_nt  : S1152C12_nt , S1152C13_nt {
  virtual  ~S1152C11_nt(); // _ZN11S1152C11_ntD2Ev
  S1152C11_nt(); // tgen
};
//SIG(-1 S1152C11_nt) C1{ BC2{ VBC3{ VBC4{ m Fi} BC5{ m Fp Fi} BC6{ m} FU7{ m}} BC8{ VBC5 VBC3 VBC6} VBC9{ VBC6} VBC10{ BC6 BC5 BC4 BC3} vd Fi} BC11{ BC6 BC5 VBC10 Fi} vd}


 S1152C11_nt ::~S1152C11_nt(){ note_dtor("S1152C11_nt", this);}
S1152C11_nt ::S1152C11_nt(){ note_ctor("S1152C11_nt", this);} // tgen

//skip512 S1152C11_nt

#else // __cplusplus

extern void _ZN11S1152C11_ntC1Ev();
extern void _ZN11S1152C11_ntD2Ev();
Name_Map name_map_S1152C11_nt[] = {
  NSPAIR(_ZN11S1152C11_ntC1Ev),
  NSPAIR(_ZN11S1152C11_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1152C7_nt;
extern VTBL_ENTRY _ZTI10S1152C7_nt[];
extern  VTBL_ENTRY _ZTV10S1152C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C7_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1152C10_nt;
extern VTBL_ENTRY _ZTI11S1152C10_nt[];
extern  VTBL_ENTRY _ZTV11S1152C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C10_nt[];
extern Class_Descriptor cd_S1152C9_nt;
extern VTBL_ENTRY _ZTI10S1152C9_nt[];
extern  VTBL_ENTRY _ZTV10S1152C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C9_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1152C7_nt;
extern VTBL_ENTRY _ZTI10S1152C7_nt[];
extern  VTBL_ENTRY _ZTV10S1152C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C7_nt[];
extern Class_Descriptor cd_S1152C3_nt;
extern VTBL_ENTRY _ZTI10S1152C3_nt[];
extern  VTBL_ENTRY _ZTV10S1152C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C3_nt[];
extern Class_Descriptor cd_S1152C12_nt;
extern VTBL_ENTRY _ZTI11S1152C12_nt[];
extern  VTBL_ENTRY _ZTV11S1152C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C12_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1152C13_nt;
extern VTBL_ENTRY _ZTI11S1152C13_nt[];
extern  VTBL_ENTRY _ZTV11S1152C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C13_nt[];
static Base_Class bases_S1152C11_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C9_nt,    ABISELECT(76,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
    3, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1152C7_nt,    ABISELECT(48,24), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    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
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1152C10_nt,    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
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1152C9_nt,    ABISELECT(96,52), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(129,69), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4304C8_nt,    ABISELECT(136,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_S1537C9_nt,    ABISELECT(152,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_S4304C8_nt,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S1152C7_nt,    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
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1152C3_nt,    ABISELECT(104,56), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S1152C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    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
    18, //immediately_derived
  0, 0},
  {&cd_S4304C8_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S1152C13_nt,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S1152C11_nt[];
extern void _ZN11S1152C11_ntD1Ev();
extern void _ZN11S1152C11_ntD0Ev();
static  VTBL_ENTRY vtc_S1152C11_nt[] = {
  ABISELECT(104,56),
  ABISELECT(96,52),
  0,
  ABISELECT(76,40),
  ABISELECT(48,24),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C11_nt[0]),
  (VTBL_ENTRY)&_ZN11S1152C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1152C11_ntD0Ev,
  ABISELECT(60,32),
  ABISELECT(88,48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI11S1152C11_nt[0]),
  ABISELECT(28,16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI11S1152C11_nt[0]),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI11S1152C11_nt[0]),
  ABISELECT(-28,-16),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI11S1152C11_nt[0]),
};
extern VTBL_ENTRY _ZTV11S1152C11_nt[];
extern void _ZN11S1152C12_ntD1Ev();
extern void _ZN11S1152C12_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S1152C12_nt__11S1152C11_nt[] = {
  ABISELECT(104,56),
  ABISELECT(96,52),
  0,
  ABISELECT(76,40),
  ABISELECT(48,24),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
  (VTBL_ENTRY)&_ZN11S1152C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1152C12_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S1152C10_nt11S1152C12_nt__11S1152C11_nt[] = {
  0,
  ABISELECT(76,40),
  ABISELECT(48,24),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C10_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__11S1152C10_nt11S1152C12_nt__11S1152C11_nt[] = {
  ABISELECT(28,16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI11S1152C10_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__11S1152C12_nt__11S1152C11_nt[] = {
  ABISELECT(28,16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C9_nt__11S1152C12_nt__11S1152C11_nt[] = {
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C3_nt__11S1152C12_nt__11S1152C11_nt[] = {
  ABISELECT(-28,-16),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S1152C13_nt__11S1152C11_nt[] = {
  ABISELECT(60,32),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C3_nt__11S1152C13_nt__11S1152C11_nt[] = {
  ABISELECT(-28,-16),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI11S1152C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__11S1152C11_nt[] = {
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C9_nt__11S1152C11_nt[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C3_nt__11S1152C11_nt[] = {
  ABISELECT(-28,-16),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C3_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt10S1152C3_nt__A1__11S1152C11_nt[] = {
  ABISELECT(-28,-16),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C7_nt[0]),
};
static  VTT_ENTRY vtt_S1152C11_nt[] = {
  {&(_ZTV11S1152C11_nt[8]),  8,23},
  {&(_tg__ZTV11S1152C12_nt__11S1152C11_nt[8]),  8,10},
  {&(_tg__ZTV11S1152C10_nt11S1152C12_nt__11S1152C11_nt[6]),  6,6},
  {&(_tg__ZTV10S1152C7_nt__11S1152C10_nt11S1152C12_nt__11S1152C11_nt[3]),  3,3},
  {&(_tg__ZTV10S1152C7_nt__11S1152C12_nt__11S1152C11_nt[3]),  3,3},
  {&(_tg__ZTV10S1152C9_nt__11S1152C12_nt__11S1152C11_nt[3]),  3,3},
  {&(_tg__ZTV10S1152C3_nt__11S1152C12_nt__11S1152C11_nt[3]),  3,3},
  {&(_tg__ZTV11S1152C13_nt__11S1152C11_nt[4]),  4,4},
  {&(_tg__ZTV10S1152C3_nt__11S1152C13_nt__11S1152C11_nt[3]),  3,3},
  {&(_ZTV11S1152C11_nt[17]),  17,23},
  {&(_ZTV11S1152C11_nt[20]),  20,23},
  {&(_ZTV11S1152C11_nt[23]),  23,23},
  {&(_ZTV11S1152C11_nt[14]),  14,23},
  {&(_tg__ZTV10S1152C7_nt__11S1152C11_nt[3]),  3,3},
  {&(_tg__ZTV10S1152C9_nt__11S1152C11_nt[3]),  3,3},
  {&(_tg__ZTV10S1152C3_nt__11S1152C11_nt[3]),  3,3},
  {&(_tg__ZTV10S1152C7_nt10S1152C3_nt__A1__11S1152C11_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S1152C11_nt[];
VTBL_ENTRY *P__ZTI11S1152C11_nt = _ZTI11S1152C11_nt; 
extern  VTBL_ENTRY _ZTV11S1152C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C11_nt[];
Class_Descriptor cd_S1152C11_nt = {  "S1152C11_nt", // class name
  bases_S1152C11_nt, 19,
  &(vtc_S1152C11_nt[0]), // expected_vtbl_contents
  &(vtt_S1152C11_nt[0]), // expected_vtt_contents
  ABISELECT(160,84), // object size
  NSPAIRA(_ZTI11S1152C11_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV11S1152C11_nt),23, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S1152C11_nt),17, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1152C2  : S1152C3_nt , virtual S1152C9_nt , S1152C10_nt , S1152C11_nt {
  int s1152c2f0;
  virtual  ~S1152C2(); // _ZN7S1152C2D2Ev
  S1152C2(); // tgen
};
//SIG(-1 S1152C2) C1{ BC2{ BC3{ m} BC4{ m Fp Fi} BC5{ m Fi} BC6{ VBC5 BC4 BC3 FU7{ m}}} VBC8{ VBC3} BC9{ VBC4 VBC6 VBC3} BC10{ BC11{ VBC6 BC9 VBC8 VBC2 vd Fi} BC12{ BC3 BC4 VBC2 Fi} vd} vd Fi}


 S1152C2 ::~S1152C2(){ note_dtor("S1152C2", this);}
S1152C2 ::S1152C2(){ note_ctor("S1152C2", this);} // tgen

static void Test_S1152C2()
{
  extern Class_Descriptor cd_S1152C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,31)];
    init_test(&cd_S1152C2, buf);
    S1152C2 *dp, &lv = *(dp=new (buf) S1152C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,120), "sizeof(S1152C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1152C2)");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S3600C19*)(S1152C3_nt*), ABISELECT(25,13), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S1152C3_nt*), ABISELECT(32,16), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S1152C3_nt*), ABISELECT(48,24), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S1152C7_nt*)(S1152C3_nt*), ABISELECT(112,60), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C7_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S1152C7_nt*), ABISELECT(112,60), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S1152C7_nt*)(S1152C3_nt*), ABISELECT(112,60), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S1152C7_nt*)(S1152C3_nt*), ABISELECT(8,4), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S3600C19*)(S1152C7_nt*)(S1152C3_nt*), 0, "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S1152C7_nt*)(S1152C3_nt*), 0, "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S1152C3_nt*), 0, "S1152C2");
    check_base_class_offset(lv, (S3600C19*)(S1152C9_nt*), ABISELECT(128,68), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C10_nt */ AMB_check_base_class_offset(lv, (S3600C19*)(S1152C10_nt*), ABISELECT(128,68), "S1152C2");
    /*is_ambiguous_... S1152C10_nt::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S1152C10_nt*)(S1152C12_nt*)(S1152C11_nt*), ABISELECT(128,68), "S1152C2");
    check_base_class_offset(lv, (S1152C9_nt*), ABISELECT(120,64), "S1152C2");
    check_base_class_offset(lv, (S1152C9_nt*)(S1152C12_nt*)(S1152C11_nt*), ABISELECT(120,64), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C10_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S1152C10_nt*), ABISELECT(128,68), "S1152C2");
    /*is_ambiguous_... S1152C10_nt::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S1152C10_nt*)(S1152C12_nt*)(S1152C11_nt*), ABISELECT(128,68), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C7_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S1152C7_nt*), ABISELECT(152,80), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C7_nt */ AMB_check_base_class_offset(lv, (S3600C19*)(S1152C7_nt*), ABISELECT(144,76), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C10_nt */ AMB_check_base_class_offset(lv, (S1152C7_nt*)(S1152C10_nt*), ABISELECT(144,76), "S1152C2");
    /*is_ambiguous_... S1152C12_nt::S1152C7_nt */ AMB_check_base_class_offset(lv, (S1152C7_nt*)(S1152C12_nt*)(S1152C11_nt*), ABISELECT(144,76), "S1152C2");
    check_base_class_offset(lv, (S1152C7_nt*)(S1152C10_nt*)(S1152C12_nt*)(S1152C11_nt*), ABISELECT(144,76), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C10_nt */ AMB_check_base_class_offset(lv, (S1152C10_nt*), ABISELECT(56,28), "S1152C2");
    check_base_class_offset(lv, (S1152C10_nt*)(S1152C12_nt*)(S1152C11_nt*), ABISELECT(64,32), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S3600C19*)(S1152C3_nt*), ABISELECT(201,105), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S1152C3_nt*), ABISELECT(208,108), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S1152C3_nt*), ABISELECT(224,116), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S1152C7_nt*)(S1152C3_nt*), ABISELECT(184,96), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S3600C19*)(S1152C7_nt*)(S1152C3_nt*), ABISELECT(176,92), "S1152C2");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S1152C7_nt*)(S1152C3_nt*), ABISELECT(176,92), "S1152C2");
    check_base_class_offset(lv, (S1152C3_nt*)(S1152C12_nt*)(S1152C11_nt*), ABISELECT(176,92), "S1152C2");
    check_base_class_offset(lv, (S1152C3_nt*)(S1152C13_nt*)(S1152C11_nt*), ABISELECT(176,92), "S1152C2");
    check_base_class_offset(lv, (S1152C12_nt*)(S1152C11_nt*), ABISELECT(64,32), "S1152C2");
    /*is_ambiguous_... S1152C13_nt::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S1152C13_nt*)(S1152C11_nt*), ABISELECT(80,40), "S1152C2");
    /*is_ambiguous_... S1152C13_nt::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S1152C13_nt*)(S1152C11_nt*), ABISELECT(88,44), "S1152C2");
    check_base_class_offset(lv, (S1152C13_nt*)(S1152C11_nt*), ABISELECT(80,40), "S1152C2");
    check_base_class_offset(lv, (S1152C11_nt*), ABISELECT(64,32), "S1152C2");
    check_field_offset(lv, s1152c2f0, ABISELECT(108,56), "S1152C2.s1152c2f0");
    test_class_info(&lv, &cd_S1152C2);
    dp->~S1152C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1152C2(Test_S1152C2, "S1152C2", ABISELECT(232,120));

#else // __cplusplus

extern void _ZN7S1152C2C1Ev();
extern void _ZN7S1152C2D2Ev();
Name_Map name_map_S1152C2[] = {
  NSPAIR(_ZN7S1152C2C1Ev),
  NSPAIR(_ZN7S1152C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1152C7_nt;
extern VTBL_ENTRY _ZTI10S1152C7_nt[];
extern  VTBL_ENTRY _ZTV10S1152C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C7_nt[];
extern Class_Descriptor cd_S1152C3_nt;
extern VTBL_ENTRY _ZTI10S1152C3_nt[];
extern  VTBL_ENTRY _ZTV10S1152C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C3_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1152C9_nt;
extern VTBL_ENTRY _ZTI10S1152C9_nt[];
extern  VTBL_ENTRY _ZTV10S1152C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1152C7_nt;
extern VTBL_ENTRY _ZTI10S1152C7_nt[];
extern  VTBL_ENTRY _ZTV10S1152C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C7_nt[];
extern Class_Descriptor cd_S1152C10_nt;
extern VTBL_ENTRY _ZTI11S1152C10_nt[];
extern  VTBL_ENTRY _ZTV11S1152C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C10_nt[];
extern Class_Descriptor cd_S1152C10_nt;
extern VTBL_ENTRY _ZTI11S1152C10_nt[];
extern  VTBL_ENTRY _ZTV11S1152C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C10_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1152C7_nt;
extern VTBL_ENTRY _ZTI10S1152C7_nt[];
extern  VTBL_ENTRY _ZTV10S1152C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C7_nt[];
extern Class_Descriptor cd_S1152C3_nt;
extern VTBL_ENTRY _ZTI10S1152C3_nt[];
extern  VTBL_ENTRY _ZTV10S1152C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C3_nt[];
extern Class_Descriptor cd_S1152C12_nt;
extern VTBL_ENTRY _ZTI11S1152C12_nt[];
extern  VTBL_ENTRY _ZTV11S1152C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C12_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1152C13_nt;
extern VTBL_ENTRY _ZTI11S1152C13_nt[];
extern  VTBL_ENTRY _ZTV11S1152C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C13_nt[];
extern Class_Descriptor cd_S1152C11_nt;
extern VTBL_ENTRY _ZTI11S1152C11_nt[];
extern  VTBL_ENTRY _ZTV11S1152C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C11_nt[];
static Base_Class bases_S1152C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(25,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S4304C8_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1537C9_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1537C9_nt,    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
    6, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1152C7_nt,    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
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1152C3_nt,    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_S3600C19,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S1152C9_nt,    ABISELECT(120,64), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S4304C8_nt,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(152,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
    13, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S1152C7_nt,    ABISELECT(144,76), //bcp->offset
    33, //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
    2, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1152C10_nt,    ABISELECT(56,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1152C10_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(201,105), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4304C8_nt,    ABISELECT(208,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S1537C9_nt,    ABISELECT(224,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
    22, //immediately_derived
  0, 0},
  {&cd_S4304C8_nt,    ABISELECT(184,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(176,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S1152C7_nt,    ABISELECT(176,92), //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
    3, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S1152C3_nt,    ABISELECT(176,92), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S1152C12_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S4304C8_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S1152C13_nt,    ABISELECT(80,40), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S1152C11_nt,    ABISELECT(64,32), //bcp->offset
    16, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1152C2[];
extern void _ZN7S1152C2D1Ev();
extern void _ZN7S1152C2D0Ev();
extern void ABISELECT(_ZThn64_N7S1152C2D1Ev,_ZThn32_N7S1152C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S1152C2D0Ev,_ZThn32_N7S1152C2D0Ev)();
static  VTBL_ENTRY vtc_S1152C2[] = {
  ABISELECT(176,92),
  ABISELECT(144,76),
  ABISELECT(128,68),
  ABISELECT(128,68),
  ABISELECT(120,64),
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S1152C2[0]),
  (VTBL_ENTRY)&_ZN7S1152C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1152C2D0Ev,
  ABISELECT(72,40),
  ABISELECT(56,32),
  ABISELECT(88,48),
  ABISELECT(72,40),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S1152C2[0]),
  ABISELECT(112,60),
  ABISELECT(56,32),
  ABISELECT(64,36),
  ABISELECT(48,28),
  ABISELECT(80,44),
  ABISELECT(64,36),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S1152C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S1152C2D1Ev,_ZThn32_N7S1152C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S1152C2D0Ev,_ZThn32_N7S1152C2D0Ev),
  ABISELECT(32,20),
  ABISELECT(96,52),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S1152C2[0]),
  ABISELECT(8,4),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S1152C2[0]),
  ABISELECT(-32,-16),
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI7S1152C2[0]),
  ABISELECT(-64,-32),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI7S1152C2[0]),
};
extern VTBL_ENTRY _ZTV7S1152C2[];
static  VTBL_ENTRY _tg__ZTV10S1152C3_nt__A__7S1152C2[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C3_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt10S1152C3_nt__7S1152C2[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S1152C10_nt__7S1152C2[] = {
  ABISELECT(72,40),
  ABISELECT(56,32),
  ABISELECT(88,48),
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C10_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__11S1152C10_nt__7S1152C2[] = {
  ABISELECT(-32,-16),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI11S1152C10_nt[0]),
};
extern void _ZN11S1152C11_ntD1Ev();
extern void _ZN11S1152C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S1152C11_nt__7S1152C2[] = {
  ABISELECT(112,60),
  ABISELECT(56,32),
  ABISELECT(64,36),
  ABISELECT(48,28),
  ABISELECT(80,44),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C11_nt[0]),
  (VTBL_ENTRY)&_ZN11S1152C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1152C11_ntD0Ev,
};
extern void _ZN11S1152C12_ntD1Ev();
extern void _ZN11S1152C12_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S1152C12_nt11S1152C11_nt__7S1152C2[] = {
  ABISELECT(112,60),
  ABISELECT(56,32),
  ABISELECT(64,36),
  ABISELECT(48,28),
  ABISELECT(80,44),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
  (VTBL_ENTRY)&_ZN11S1152C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1152C12_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S1152C10_nt11S1152C12_nt11S1152C11_nt__A1__7S1152C2[] = {
  ABISELECT(64,36),
  ABISELECT(48,28),
  ABISELECT(80,44),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C10_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__11S1152C10_nt11S1152C12_nt11S1152C11_nt__A1__7S1152C2[] = {
  ABISELECT(-32,-16),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI11S1152C10_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__11S1152C12_nt11S1152C11_nt__7S1152C2[] = {
  ABISELECT(-32,-16),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C9_nt__11S1152C12_nt11S1152C11_nt__7S1152C2[] = {
  ABISELECT(8,4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C3_nt__11S1152C12_nt11S1152C11_nt__7S1152C2[] = {
  ABISELECT(-64,-32),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S1152C13_nt11S1152C11_nt__7S1152C2[] = {
  ABISELECT(32,20),
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C3_nt__11S1152C13_nt11S1152C11_nt__7S1152C2[] = {
  ABISELECT(-64,-32),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI11S1152C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__11S1152C11_nt__7S1152C2[] = {
  ABISELECT(-32,-16),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI11S1152C11_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C9_nt__11S1152C11_nt__7S1152C2[] = {
  ABISELECT(8,4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI11S1152C11_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C3_nt__11S1152C11_nt__7S1152C2[] = {
  ABISELECT(-64,-32),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI11S1152C11_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S1152C13_nt__11S1152C11_nt__7S1152C2[] = {
  ABISELECT(32,20),
  ABISELECT(96,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI11S1152C11_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C9_nt__7S1152C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__A1__7S1152C2[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C3_nt__A1__7S1152C2[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C3_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt10S1152C3_nt__A2__7S1152C2[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C7_nt[0]),
};
static  VTT_ENTRY vtt_S1152C2[] = {
  {&(_ZTV7S1152C2[8]),  8,39},
  {&(_tg__ZTV10S1152C3_nt__A__7S1152C2[3]),  3,3},
  {&(_tg__ZTV10S1152C7_nt10S1152C3_nt__7S1152C2[3]),  3,3},
  {&(_tg__ZTV11S1152C10_nt__7S1152C2[6]),  6,6},
  {&(_tg__ZTV10S1152C7_nt__11S1152C10_nt__7S1152C2[3]),  3,3},
  {&(_tg__ZTV11S1152C11_nt__7S1152C2[8]),  8,10},
  {&(_tg__ZTV11S1152C12_nt11S1152C11_nt__7S1152C2[8]),  8,10},
  {&(_tg__ZTV11S1152C10_nt11S1152C12_nt11S1152C11_nt__A1__7S1152C2[6]),  6,6},
  {&(_tg__ZTV10S1152C7_nt__11S1152C10_nt11S1152C12_nt11S1152C11_nt__A1__7S1152C2[3]),  3,3},
  {&(_tg__ZTV10S1152C7_nt__11S1152C12_nt11S1152C11_nt__7S1152C2[3]),  3,3},
  {&(_tg__ZTV10S1152C9_nt__11S1152C12_nt11S1152C11_nt__7S1152C2[3]),  3,3},
  {&(_tg__ZTV10S1152C3_nt__11S1152C12_nt11S1152C11_nt__7S1152C2[3]),  3,3},
  {&(_tg__ZTV11S1152C13_nt11S1152C11_nt__7S1152C2[4]),  4,4},
  {&(_tg__ZTV10S1152C3_nt__11S1152C13_nt11S1152C11_nt__7S1152C2[3]),  3,3},
  {&(_tg__ZTV10S1152C7_nt__11S1152C11_nt__7S1152C2[3]),  3,3},
  {&(_tg__ZTV10S1152C9_nt__11S1152C11_nt__7S1152C2[3]),  3,3},
  {&(_tg__ZTV10S1152C3_nt__11S1152C11_nt__7S1152C2[3]),  3,3},
  {&(_tg__ZTV11S1152C13_nt__11S1152C11_nt__7S1152C2[4]),  4,4},
  {&(_ZTV7S1152C2[33]),  33,39},
  {&(_ZTV7S1152C2[16]),  16,39},
  {&(_ZTV7S1152C2[36]),  36,39},
  {&(_ZTV7S1152C2[24]),  24,39},
  {&(_ZTV7S1152C2[39]),  39,39},
  {&(_ZTV7S1152C2[30]),  30,39},
  {&(_tg__ZTV10S1152C9_nt__7S1152C2[3]),  3,3},
  {&(_tg__ZTV10S1152C7_nt__A1__7S1152C2[3]),  3,3},
  {&(_tg__ZTV10S1152C3_nt__A1__7S1152C2[3]),  3,3},
  {&(_tg__ZTV10S1152C7_nt10S1152C3_nt__A2__7S1152C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S1152C2[];
extern  VTBL_ENTRY _ZTV7S1152C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1152C2[];
Class_Descriptor cd_S1152C2 = {  "S1152C2", // class name
  bases_S1152C2, 28,
  &(vtc_S1152C2[0]), // expected_vtbl_contents
  &(vtt_S1152C2[0]), // expected_vtt_contents
  ABISELECT(232,120), // object size
  NSPAIRA(_ZTI7S1152C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S1152C2),39, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1152C2),28, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1152C1  : S1152C2 , virtual S1152C12_nt , S3600C19 , S3600C6_nt {
  virtual  ~S1152C1(); // _ZN7S1152C1D2Ev
  S1152C1(); // tgen
};
//SIG(1 S1152C1) C1{ BC2{ BC3{ BC4{ m} BC5{ m Fp Fi} BC6{ m Fi} BC7{ VBC6 BC5 BC4 FU8{ m}}} VBC9{ VBC4} BC10{ VBC5 VBC7 VBC4} BC11{ BC12{ VBC7 BC10 VBC9 VBC3 vd Fi} BC13{ BC4 BC5 VBC3 Fi} vd} vd Fi} VBC12 BC4 BC14{ m} vd}


 S1152C1 ::~S1152C1(){ note_dtor("S1152C1", this);}
S1152C1 ::S1152C1(){ note_ctor("S1152C1", this);} // tgen

static void Test_S1152C1()
{
  extern Class_Descriptor cd_S1152C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,33)];
    init_test(&cd_S1152C1, buf);
    S1152C1 *dp, &lv = *(dp=new (buf) S1152C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,128), "sizeof(S1152C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1152C1)");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S3600C19*)(S1152C3_nt*)(S1152C2*), ABISELECT(25,13), "S1152C1");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S1152C3_nt*)(S1152C2*), ABISELECT(32,16), "S1152C1");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S1152C3_nt*)(S1152C2*), ABISELECT(48,24), "S1152C1");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S1152C7_nt*)(S1152C3_nt*)(S1152C2*), ABISELECT(112,60), "S1152C1");
    /*is_ambiguous_... S1152C1::S1152C7_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S1152C7_nt*), ABISELECT(112,60), "S1152C1");
    /*is_ambiguous_... S1152C1::S1152C3_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S1152C7_nt*)(S1152C3_nt*), ABISELECT(112,60), "S1152C1");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S1152C7_nt*)(S1152C3_nt*)(S1152C2*), ABISELECT(8,4), "S1152C1");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S3600C19*)(S1152C7_nt*)(S1152C3_nt*)(S1152C2*), 0, "S1152C1");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S1152C7_nt*)(S1152C3_nt*)(S1152C2*), 0, "S1152C1");
    /*is_ambiguous_... S1152C2::S1152C3_nt */ AMB_check_base_class_offset(lv, (S1152C3_nt*)(S1152C2*), 0, "S1152C1");
    check_base_class_offset(lv, (S3600C19*)(S1152C9_nt*), ABISELECT(128,68), "S1152C1");
    /*is_ambiguous_... S1152C2::S1152C10_nt */ AMB_check_base_class_offset(lv, (S3600C19*)(S1152C10_nt*)(S1152C2*), ABISELECT(128,68), "S1152C1");
    /*is_ambiguous_... S1152C10_nt::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S1152C10_nt*)(S1152C12_nt*)(S1152C11_nt*)(S1152C2*), ABISELECT(128,68), "S1152C1");
    /*is_ambiguous_... S1152C1::S1152C12_nt */ AMB_check_base_class_offset(lv, (S3600C19*)(S1152C10_nt*)(S1152C12_nt*), ABISELECT(128,68), "S1152C1");
    check_base_class_offset(lv, (S1152C9_nt*)(S1152C2*), ABISELECT(120,64), "S1152C1");
    check_base_class_offset(lv, (S1152C9_nt*)(S1152C12_nt*)(S1152C11_nt*)(S1152C2*), ABISELECT(120,64), "S1152C1");
    /*is_ambiguous_... S1152C1::S1152C12_nt */ AMB_check_base_class_offset(lv, (S1152C9_nt*)(S1152C12_nt*), ABISELECT(120,64), "S1152C1");
    /*is_ambiguous_... S1152C2::S1152C10_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S1152C10_nt*)(S1152C2*), ABISELECT(128,68), "S1152C1");
    /*is_ambiguous_... S1152C10_nt::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S1152C10_nt*)(S1152C12_nt*)(S1152C11_nt*)(S1152C2*), ABISELECT(128,68), "S1152C1");
    /*is_ambiguous_... S1152C1::S1152C12_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S1152C10_nt*)(S1152C12_nt*), ABISELECT(128,68), "S1152C1");
    /*is_ambiguous_... S1152C1::S1152C7_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S1152C7_nt*), ABISELECT(152,80), "S1152C1");
    /*is_ambiguous_... S1152C1::S1152C7_nt */ AMB_check_base_class_offset(lv, (S3600C19*)(S1152C7_nt*), ABISELECT(144,76), "S1152C1");
    /*is_ambiguous_... S1152C2::S1152C10_nt */ AMB_check_base_class_offset(lv, (S1152C7_nt*)(S1152C10_nt*)(S1152C2*), ABISELECT(144,76), "S1152C1");
    /*is_ambiguous_... S1152C12_nt::S1152C7_nt */ AMB_check_base_class_offset(lv, (S1152C7_nt*)(S1152C12_nt*)(S1152C11_nt*)(S1152C2*), ABISELECT(144,76), "S1152C1");
    check_base_class_offset(lv, (S1152C7_nt*)(S1152C10_nt*)(S1152C12_nt*)(S1152C11_nt*)(S1152C2*), ABISELECT(144,76), "S1152C1");
    /*is_ambiguous_... S1152C1::S1152C12_nt */ AMB_check_base_class_offset(lv, (S1152C7_nt*)(S1152C12_nt*), ABISELECT(144,76), "S1152C1");
    /*is_ambiguous_... S1152C1::S1152C12_nt */ AMB_check_base_class_offset(lv, (S1152C7_nt*)(S1152C10_nt*)(S1152C12_nt*), ABISELECT(144,76), "S1152C1");
    /*is_ambiguous_... S1152C2::S1152C10_nt */ AMB_check_base_class_offset(lv, (S1152C10_nt*)(S1152C2*), ABISELECT(56,28), "S1152C1");
    check_base_class_offset(lv, (S1152C10_nt*)(S1152C12_nt*)(S1152C11_nt*)(S1152C2*), ABISELECT(64,32), "S1152C1");
    /*is_ambiguous_... S1152C1::S1152C3_nt */ AMB_check_base_class_offset(lv, (S3600C19*)(S1152C3_nt*), ABISELECT(201,105), "S1152C1");
    /*is_ambiguous_... S1152C1::S1152C3_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S1152C3_nt*), ABISELECT(208,108), "S1152C1");
    /*is_ambiguous_... S1152C1::S1152C3_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S1152C3_nt*), ABISELECT(224,116), "S1152C1");
    /*is_ambiguous_... S1152C1::S1152C3_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S1152C7_nt*)(S1152C3_nt*), ABISELECT(184,96), "S1152C1");
    /*is_ambiguous_... S1152C1::S1152C3_nt */ AMB_check_base_class_offset(lv, (S3600C19*)(S1152C7_nt*)(S1152C3_nt*), ABISELECT(176,92), "S1152C1");
    /*is_ambiguous_... S1152C1::S1152C3_nt */ AMB_check_base_class_offset(lv, (S1152C7_nt*)(S1152C3_nt*), ABISELECT(176,92), "S1152C1");
    check_base_class_offset(lv, (S1152C3_nt*)(S1152C12_nt*)(S1152C11_nt*)(S1152C2*), ABISELECT(176,92), "S1152C1");
    check_base_class_offset(lv, (S1152C3_nt*)(S1152C13_nt*)(S1152C11_nt*)(S1152C2*), ABISELECT(176,92), "S1152C1");
    /*is_ambiguous_... S1152C1::S1152C12_nt */ AMB_check_base_class_offset(lv, (S1152C3_nt*)(S1152C12_nt*), ABISELECT(176,92), "S1152C1");
    check_base_class_offset(lv, (S1152C12_nt*)(S1152C11_nt*)(S1152C2*), ABISELECT(64,32), "S1152C1");
    /*is_ambiguous_... S1152C13_nt::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S1152C13_nt*)(S1152C11_nt*)(S1152C2*), ABISELECT(80,40), "S1152C1");
    /*is_ambiguous_... S1152C13_nt::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S1152C13_nt*)(S1152C11_nt*)(S1152C2*), ABISELECT(88,44), "S1152C1");
    check_base_class_offset(lv, (S1152C13_nt*)(S1152C11_nt*)(S1152C2*), ABISELECT(80,40), "S1152C1");
    check_base_class_offset(lv, (S1152C11_nt*)(S1152C2*), ABISELECT(64,32), "S1152C1");
    check_base_class_offset(lv, (S1152C2*), 0, "S1152C1");
    /*is_ambiguous_... S1152C1::S1152C12_nt */ AMB_check_base_class_offset(lv, (S1152C10_nt*)(S1152C12_nt*), ABISELECT(232,120), "S1152C1");
    /*is_ambiguous_... S1152C1::S1152C12_nt */ AMB_check_base_class_offset(lv, (S1152C12_nt*), ABISELECT(232,120), "S1152C1");
    /*is_ambiguous_... S1152C1::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), ABISELECT(112,60), "S1152C1");
    check_base_class_offset(lv, (S3600C6_nt*), 0, "S1152C1");
    test_class_info(&lv, &cd_S1152C1);
    dp->~S1152C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1152C1(Test_S1152C1, "S1152C1", ABISELECT(248,128));

#else // __cplusplus

extern void _ZN7S1152C1C1Ev();
extern void _ZN7S1152C1D2Ev();
Name_Map name_map_S1152C1[] = {
  NSPAIR(_ZN7S1152C1C1Ev),
  NSPAIR(_ZN7S1152C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1152C7_nt;
extern VTBL_ENTRY _ZTI10S1152C7_nt[];
extern  VTBL_ENTRY _ZTV10S1152C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C7_nt[];
extern Class_Descriptor cd_S1152C3_nt;
extern VTBL_ENTRY _ZTI10S1152C3_nt[];
extern  VTBL_ENTRY _ZTV10S1152C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C3_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1152C9_nt;
extern VTBL_ENTRY _ZTI10S1152C9_nt[];
extern  VTBL_ENTRY _ZTV10S1152C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1152C7_nt;
extern VTBL_ENTRY _ZTI10S1152C7_nt[];
extern  VTBL_ENTRY _ZTV10S1152C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C7_nt[];
extern Class_Descriptor cd_S1152C10_nt;
extern VTBL_ENTRY _ZTI11S1152C10_nt[];
extern  VTBL_ENTRY _ZTV11S1152C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C10_nt[];
extern Class_Descriptor cd_S1152C10_nt;
extern VTBL_ENTRY _ZTI11S1152C10_nt[];
extern  VTBL_ENTRY _ZTV11S1152C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C10_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1152C7_nt;
extern VTBL_ENTRY _ZTI10S1152C7_nt[];
extern  VTBL_ENTRY _ZTV10S1152C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C7_nt[];
extern Class_Descriptor cd_S1152C3_nt;
extern VTBL_ENTRY _ZTI10S1152C3_nt[];
extern  VTBL_ENTRY _ZTV10S1152C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1152C3_nt[];
extern Class_Descriptor cd_S1152C12_nt;
extern VTBL_ENTRY _ZTI11S1152C12_nt[];
extern  VTBL_ENTRY _ZTV11S1152C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C12_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1152C13_nt;
extern VTBL_ENTRY _ZTI11S1152C13_nt[];
extern  VTBL_ENTRY _ZTV11S1152C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C13_nt[];
extern Class_Descriptor cd_S1152C11_nt;
extern VTBL_ENTRY _ZTI11S1152C11_nt[];
extern  VTBL_ENTRY _ZTV11S1152C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C11_nt[];
extern Class_Descriptor cd_S1152C2;
extern VTBL_ENTRY _ZTI7S1152C2[];
extern  VTBL_ENTRY _ZTV7S1152C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1152C2[];
extern Class_Descriptor cd_S1152C10_nt;
extern VTBL_ENTRY _ZTI11S1152C10_nt[];
extern  VTBL_ENTRY _ZTV11S1152C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C10_nt[];
extern Class_Descriptor cd_S1152C12_nt;
extern VTBL_ENTRY _ZTI11S1152C12_nt[];
extern  VTBL_ENTRY _ZTV11S1152C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1152C12_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
static Base_Class bases_S1152C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(25,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S4304C8_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1537C9_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1537C9_nt,    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
    6, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1152C7_nt,    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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1152C3_nt,    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
    8, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S1152C9_nt,    ABISELECT(120,64), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(152,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
    13, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S1152C7_nt,    ABISELECT(144,76), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1152C10_nt,    ABISELECT(56,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S1152C10_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(201,105), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4304C8_nt,    ABISELECT(208,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S1537C9_nt,    ABISELECT(224,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
    22, //immediately_derived
  0, 0},
  {&cd_S4304C8_nt,    ABISELECT(184,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(176,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S1152C7_nt,    ABISELECT(176,92), //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
    3, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S1152C3_nt,    ABISELECT(176,92), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S1152C12_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S4304C8_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S1152C13_nt,    ABISELECT(80,40), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S1152C11_nt,    ABISELECT(64,32), //bcp->offset
    17, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S1152C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1152C10_nt,    ABISELECT(232,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S1152C12_nt,    ABISELECT(232,120), //bcp->offset
    40, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C6_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 _ZTI7S1152C1[];
extern void _ZN7S1152C1D1Ev();
extern void _ZN7S1152C1D0Ev();
extern void ABISELECT(_ZThn64_N7S1152C1D1Ev,_ZThn32_N7S1152C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S1152C1D0Ev,_ZThn32_N7S1152C1D0Ev)();
extern void ABISELECT(_ZTv0_n72_N7S1152C1D1Ev,_ZTv0_n36_N7S1152C1D1Ev)();
extern void ABISELECT(_ZThn232_N7S1152C1D1Ev,_ZThn120_N7S1152C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1152C1D0Ev,_ZTv0_n36_N7S1152C1D0Ev)();
extern void ABISELECT(_ZThn232_N7S1152C1D0Ev,_ZThn120_N7S1152C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S1152C1[] = {
  ABISELECT(232,120),
  ABISELECT(176,92),
  ABISELECT(144,76),
  ABISELECT(128,68),
  ABISELECT(128,68),
  ABISELECT(120,64),
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S1152C1[0]),
  (VTBL_ENTRY)&_ZN7S1152C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1152C1D0Ev,
  ABISELECT(72,40),
  ABISELECT(56,32),
  ABISELECT(88,48),
  ABISELECT(72,40),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S1152C1[0]),
  ABISELECT(112,60),
  ABISELECT(56,32),
  ABISELECT(64,36),
  ABISELECT(48,28),
  ABISELECT(80,44),
  ABISELECT(64,36),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S1152C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S1152C1D1Ev,_ZThn32_N7S1152C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S1152C1D0Ev,_ZThn32_N7S1152C1D0Ev),
  ABISELECT(32,20),
  ABISELECT(96,52),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S1152C1[0]),
  ABISELECT(8,4),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S1152C1[0]),
  ABISELECT(-32,-16),
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI7S1152C1[0]),
  ABISELECT(-64,-32),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI7S1152C1[0]),
  ABISELECT(-232,-120),
  ABISELECT(-56,-28),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-120,-60),
  ABISELECT(-88,-44),
  ABISELECT(-104,-52),
  ABISELECT(-232,-120),
  (VTBL_ENTRY)&(_ZTI7S1152C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1152C1D1Ev,_ZTv0_n36_N7S1152C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1152C1D0Ev,_ZTv0_n36_N7S1152C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S1152C1[];
extern void _ZN7S1152C2D1Ev();
extern void _ZN7S1152C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1152C2__7S1152C1[] = {
  ABISELECT(176,92),
  ABISELECT(144,76),
  ABISELECT(128,68),
  ABISELECT(128,68),
  ABISELECT(120,64),
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S1152C2[0]),
  (VTBL_ENTRY)&_ZN7S1152C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1152C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV10S1152C3_nt7S1152C2__7S1152C1[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C3_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt10S1152C3_nt7S1152C2__7S1152C1[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S1152C10_nt7S1152C2__7S1152C1[] = {
  ABISELECT(72,40),
  ABISELECT(56,32),
  ABISELECT(88,48),
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C10_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__11S1152C10_nt7S1152C2__7S1152C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI11S1152C10_nt[0]),
};
extern void _ZN11S1152C11_ntD1Ev();
extern void _ZN11S1152C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S1152C11_nt7S1152C2__7S1152C1[] = {
  ABISELECT(112,60),
  ABISELECT(56,32),
  ABISELECT(64,36),
  ABISELECT(48,28),
  ABISELECT(80,44),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C11_nt[0]),
  (VTBL_ENTRY)&_ZN11S1152C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1152C11_ntD0Ev,
};
extern void _ZN11S1152C12_ntD1Ev();
extern void _ZN11S1152C12_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S1152C12_nt11S1152C11_nt7S1152C2__7S1152C1[] = {
  ABISELECT(112,60),
  ABISELECT(56,32),
  ABISELECT(64,36),
  ABISELECT(48,28),
  ABISELECT(80,44),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
  (VTBL_ENTRY)&_ZN11S1152C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1152C12_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S1152C10_nt11S1152C12_nt11S1152C11_nt7S1152C2__A1__7S1152C1[] = {
  ABISELECT(64,36),
  ABISELECT(48,28),
  ABISELECT(80,44),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C10_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__11S1152C10_nt11S1152C12_nt11S1152C11_nt7S1152C2__A1__7S1152C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI11S1152C10_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__11S1152C12_nt11S1152C11_nt7S1152C2__7S1152C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C9_nt__11S1152C12_nt11S1152C11_nt7S1152C2__7S1152C1[] = {
  ABISELECT(8,4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C3_nt__11S1152C12_nt11S1152C11_nt7S1152C2__7S1152C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S1152C13_nt11S1152C11_nt7S1152C2__7S1152C1[] = {
  ABISELECT(32,20),
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C3_nt__11S1152C13_nt11S1152C11_nt7S1152C2__7S1152C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI11S1152C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__11S1152C11_nt7S1152C2__7S1152C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI11S1152C11_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C9_nt__11S1152C11_nt7S1152C2__7S1152C1[] = {
  ABISELECT(8,4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI11S1152C11_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C3_nt__11S1152C11_nt7S1152C2__7S1152C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI11S1152C11_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S1152C13_nt__11S1152C11_nt7S1152C2__7S1152C1[] = {
  ABISELECT(32,20),
  ABISELECT(96,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI11S1152C11_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C9_nt__7S1152C2__7S1152C1[] = {
  ABISELECT(8,4),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S1152C2[0]),
};
static  VTBL_ENTRY _tg__ZTV11S1152C10_nt__7S1152C2__7S1152C1[] = {
  ABISELECT(72,40),
  ABISELECT(56,32),
  ABISELECT(88,48),
  ABISELECT(72,40),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S1152C2[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__A1__7S1152C2__7S1152C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI7S1152C2[0]),
};
extern void ABISELECT(_ZThn64_N7S1152C2D1Ev,_ZThn32_N7S1152C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S1152C2D0Ev,_ZThn32_N7S1152C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S1152C11_nt__7S1152C2__7S1152C1[] = {
  ABISELECT(112,60),
  ABISELECT(56,32),
  ABISELECT(64,36),
  ABISELECT(48,28),
  ABISELECT(80,44),
  ABISELECT(64,36),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S1152C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S1152C2D1Ev,_ZThn32_N7S1152C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S1152C2D0Ev,_ZThn32_N7S1152C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV10S1152C3_nt__A1__7S1152C2__7S1152C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI7S1152C2[0]),
};
static  VTBL_ENTRY _tg__ZTV11S1152C13_nt11S1152C11_nt__7S1152C2__7S1152C1[] = {
  ABISELECT(32,20),
  ABISELECT(96,52),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S1152C2[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C9_nt__7S1152C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__A1__7S1152C1[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C3_nt__A1__7S1152C1[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C3_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt10S1152C3_nt__A2__7S1152C1[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI10S1152C7_nt[0]),
};
extern void _ZN11S1152C12_ntD1Ev();
extern void _ZN11S1152C12_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S1152C12_nt__A1__7S1152C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-120,-60),
  ABISELECT(-88,-44),
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
  (VTBL_ENTRY)&_ZN11S1152C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1152C12_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S1152C10_nt11S1152C12_nt__A2__7S1152C1[] = {
  ABISELECT(-104,-52),
  ABISELECT(-120,-60),
  ABISELECT(-88,-44),
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI11S1152C10_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__11S1152C10_nt11S1152C12_nt__A2__7S1152C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI11S1152C10_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C7_nt__11S1152C12_nt__A1__7S1152C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C9_nt__11S1152C12_nt__A1__7S1152C1[] = {
  ABISELECT(8,4),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV10S1152C3_nt__11S1152C12_nt__A1__7S1152C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI11S1152C12_nt[0]),
};
static  VTT_ENTRY vtt_S1152C1[] = {
  {&(_ZTV7S1152C1[9]),  9,51},
  {&(_tg__ZTV7S1152C2__7S1152C1[8]),  8,10},
  {&(_tg__ZTV10S1152C3_nt7S1152C2__7S1152C1[3]),  3,3},
  {&(_tg__ZTV10S1152C7_nt10S1152C3_nt7S1152C2__7S1152C1[3]),  3,3},
  {&(_tg__ZTV11S1152C10_nt7S1152C2__7S1152C1[6]),  6,6},
  {&(_tg__ZTV10S1152C7_nt__11S1152C10_nt7S1152C2__7S1152C1[3]),  3,3},
  {&(_tg__ZTV11S1152C11_nt7S1152C2__7S1152C1[8]),  8,10},
  {&(_tg__ZTV11S1152C12_nt11S1152C11_nt7S1152C2__7S1152C1[8]),  8,10},
  {&(_tg__ZTV11S1152C10_nt11S1152C12_nt11S1152C11_nt7S1152C2__A1__7S1152C1[6]),  6,6},
  {&(_tg__ZTV10S1152C7_nt__11S1152C10_nt11S1152C12_nt11S1152C11_nt7S1152C2__A1__7S1152C1[3]),  3,3},
  {&(_tg__ZTV10S1152C7_nt__11S1152C12_nt11S1152C11_nt7S1152C2__7S1152C1[3]),  3,3},
  {&(_tg__ZTV10S1152C9_nt__11S1152C12_nt11S1152C11_nt7S1152C2__7S1152C1[3]),  3,3},
  {&(_tg__ZTV10S1152C3_nt__11S1152C12_nt11S1152C11_nt7S1152C2__7S1152C1[3]),  3,3},
  {&(_tg__ZTV11S1152C13_nt11S1152C11_nt7S1152C2__7S1152C1[4]),  4,4},
  {&(_tg__ZTV10S1152C3_nt__11S1152C13_nt11S1152C11_nt7S1152C2__7S1152C1[3]),  3,3},
  {&(_tg__ZTV10S1152C7_nt__11S1152C11_nt7S1152C2__7S1152C1[3]),  3,3},
  {&(_tg__ZTV10S1152C9_nt__11S1152C11_nt7S1152C2__7S1152C1[3]),  3,3},
  {&(_tg__ZTV10S1152C3_nt__11S1152C11_nt7S1152C2__7S1152C1[3]),  3,3},
  {&(_tg__ZTV11S1152C13_nt__11S1152C11_nt7S1152C2__7S1152C1[4]),  4,4},
  {&(_tg__ZTV10S1152C9_nt__7S1152C2__7S1152C1[3]),  3,3},
  {&(_tg__ZTV11S1152C10_nt__7S1152C2__7S1152C1[6]),  6,6},
  {&(_tg__ZTV10S1152C7_nt__A1__7S1152C2__7S1152C1[3]),  3,3},
  {&(_tg__ZTV11S1152C11_nt__7S1152C2__7S1152C1[8]),  8,10},
  {&(_tg__ZTV10S1152C3_nt__A1__7S1152C2__7S1152C1[3]),  3,3},
  {&(_tg__ZTV11S1152C13_nt11S1152C11_nt__7S1152C2__7S1152C1[4]),  4,4},
  {&(_ZTV7S1152C1[34]),  34,51},
  {&(_ZTV7S1152C1[17]),  17,51},
  {&(_ZTV7S1152C1[37]),  37,51},
  {&(_ZTV7S1152C1[25]),  25,51},
  {&(_ZTV7S1152C1[40]),  40,51},
  {&(_ZTV7S1152C1[31]),  31,51},
  {&(_ZTV7S1152C1[49]),  49,51},
  {&(_tg__ZTV10S1152C9_nt__7S1152C1[3]),  3,3},
  {&(_tg__ZTV10S1152C7_nt__A1__7S1152C1[3]),  3,3},
  {&(_tg__ZTV10S1152C3_nt__A1__7S1152C1[3]),  3,3},
  {&(_tg__ZTV10S1152C7_nt10S1152C3_nt__A2__7S1152C1[3]),  3,3},
  {&(_tg__ZTV11S1152C12_nt__A1__7S1152C1[8]),  8,10},
  {&(_tg__ZTV11S1152C10_nt11S1152C12_nt__A2__7S1152C1[6]),  6,6},
  {&(_tg__ZTV10S1152C7_nt__11S1152C10_nt11S1152C12_nt__A2__7S1152C1[3]),  3,3},
  {&(_tg__ZTV10S1152C7_nt__11S1152C12_nt__A1__7S1152C1[3]),  3,3},
  {&(_tg__ZTV10S1152C9_nt__11S1152C12_nt__A1__7S1152C1[3]),  3,3},
  {&(_tg__ZTV10S1152C3_nt__11S1152C12_nt__A1__7S1152C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S1152C1[];
extern  VTBL_ENTRY _ZTV7S1152C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1152C1[];
static VTBL_ENTRY alt_thunk_names100[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1152C1D0Ev,_ZTv0_n36_N7S1152C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S1152C1D0Ev,_ZThn120_N7S1152C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1152C1D1Ev,_ZTv0_n36_N7S1152C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S1152C1D1Ev,_ZThn120_N7S1152C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1152C1 = {  "S1152C1", // class name
  bases_S1152C1, 33,
  &(vtc_S1152C1[0]), // expected_vtbl_contents
  &(vtt_S1152C1[0]), // expected_vtt_contents
  ABISELECT(248,128), // object size
  NSPAIRA(_ZTI7S1152C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S1152C1),51, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1152C1),42, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names100,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9488C2  {
  int s9488c2f0[28];
  virtual  ~S9488C2(); // _ZN7S9488C2D1Ev
  virtual void  v3(); // _ZN7S9488C22v3Ev
  virtual void  v4(); // _ZN7S9488C22v4Ev
  virtual void  v5(); // _ZN7S9488C22v5Ev
  virtual void  v6(); // _ZN7S9488C22v6Ev
  virtual void  v7(); // _ZN7S9488C22v7Ev
  virtual void  v8(); // _ZN7S9488C22v8Ev
  virtual void  v9(); // _ZN7S9488C22v9Ev
  virtual void  v10(); // _ZN7S9488C23v10Ev
  virtual void  v11(); // _ZN7S9488C23v11Ev
  virtual void  v12(); // _ZN7S9488C23v12Ev
  virtual void  v13(); // _ZN7S9488C23v13Ev
  virtual void  v14(); // _ZN7S9488C23v14Ev
  virtual void  v15(); // _ZN7S9488C23v15Ev
  virtual void  v16(); // _ZN7S9488C23v16Ev
  virtual void  v17(); // _ZN7S9488C23v17Ev
  virtual void  v18(); // _ZN7S9488C23v18Ev
  virtual void  v19(); // _ZN7S9488C23v19Ev
  virtual void  v20(); // _ZN7S9488C23v20Ev
  virtual void  v21(); // _ZN7S9488C23v21Ev
  virtual void  v22(); // _ZN7S9488C23v22Ev
  virtual void  v23(); // _ZN7S9488C23v23Ev
  virtual void  v24(); // _ZN7S9488C23v24Ev
  virtual void  v25(); // _ZN7S9488C23v25Ev
  virtual void  v26(); // _ZN7S9488C23v26Ev
  virtual void  v27(); // _ZN7S9488C23v27Ev
  S9488C2(); // tgen
};
//SIG(-1 S9488C2) 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 Fi[28]}


 S9488C2 ::~S9488C2(){ note_dtor("S9488C2", this);}
void  S9488C2 ::v3(){vfunc_called(this, "_ZN7S9488C22v3Ev");}
void  S9488C2 ::v4(){vfunc_called(this, "_ZN7S9488C22v4Ev");}
void  S9488C2 ::v5(){vfunc_called(this, "_ZN7S9488C22v5Ev");}
void  S9488C2 ::v6(){vfunc_called(this, "_ZN7S9488C22v6Ev");}
void  S9488C2 ::v7(){vfunc_called(this, "_ZN7S9488C22v7Ev");}
void  S9488C2 ::v8(){vfunc_called(this, "_ZN7S9488C22v8Ev");}
void  S9488C2 ::v9(){vfunc_called(this, "_ZN7S9488C22v9Ev");}
void  S9488C2 ::v10(){vfunc_called(this, "_ZN7S9488C23v10Ev");}
void  S9488C2 ::v11(){vfunc_called(this, "_ZN7S9488C23v11Ev");}
void  S9488C2 ::v12(){vfunc_called(this, "_ZN7S9488C23v12Ev");}
void  S9488C2 ::v13(){vfunc_called(this, "_ZN7S9488C23v13Ev");}
void  S9488C2 ::v14(){vfunc_called(this, "_ZN7S9488C23v14Ev");}
void  S9488C2 ::v15(){vfunc_called(this, "_ZN7S9488C23v15Ev");}
void  S9488C2 ::v16(){vfunc_called(this, "_ZN7S9488C23v16Ev");}
void  S9488C2 ::v17(){vfunc_called(this, "_ZN7S9488C23v17Ev");}
void  S9488C2 ::v18(){vfunc_called(this, "_ZN7S9488C23v18Ev");}
void  S9488C2 ::v19(){vfunc_called(this, "_ZN7S9488C23v19Ev");}
void  S9488C2 ::v20(){vfunc_called(this, "_ZN7S9488C23v20Ev");}
void  S9488C2 ::v21(){vfunc_called(this, "_ZN7S9488C23v21Ev");}
void  S9488C2 ::v22(){vfunc_called(this, "_ZN7S9488C23v22Ev");}
void  S9488C2 ::v23(){vfunc_called(this, "_ZN7S9488C23v23Ev");}
void  S9488C2 ::v24(){vfunc_called(this, "_ZN7S9488C23v24Ev");}
void  S9488C2 ::v25(){vfunc_called(this, "_ZN7S9488C23v25Ev");}
void  S9488C2 ::v26(){vfunc_called(this, "_ZN7S9488C23v26Ev");}
void  S9488C2 ::v27(){vfunc_called(this, "_ZN7S9488C23v27Ev");}
S9488C2 ::S9488C2(){ note_ctor("S9488C2", this);} // tgen

static void Test_S9488C2()
{
  extern Class_Descriptor cd_S9488C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S9488C2, buf);
    S9488C2 *dp, &lv = *(dp=new (buf) S9488C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S9488C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9488C2)");
    check_field_offset(lv, s9488c2f0, ABISELECT(8,4), "S9488C2.s9488c2f0");
    test_class_info(&lv, &cd_S9488C2);
    dp->~S9488C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9488C2(Test_S9488C2, "S9488C2", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN7S9488C2C1Ev();
extern void _ZN7S9488C2D1Ev();
Name_Map name_map_S9488C2[] = {
  NSPAIR(_ZN7S9488C2C1Ev),
  NSPAIR(_ZN7S9488C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9488C2[];
extern void _ZN7S9488C2D1Ev();
extern void _ZN7S9488C2D0Ev();
extern void _ZN7S9488C22v3Ev();
extern void _ZN7S9488C22v4Ev();
extern void _ZN7S9488C22v5Ev();
extern void _ZN7S9488C22v6Ev();
extern void _ZN7S9488C22v7Ev();
extern void _ZN7S9488C22v8Ev();
extern void _ZN7S9488C22v9Ev();
extern void _ZN7S9488C23v10Ev();
extern void _ZN7S9488C23v11Ev();
extern void _ZN7S9488C23v12Ev();
extern void _ZN7S9488C23v13Ev();
extern void _ZN7S9488C23v14Ev();
extern void _ZN7S9488C23v15Ev();
extern void _ZN7S9488C23v16Ev();
extern void _ZN7S9488C23v17Ev();
extern void _ZN7S9488C23v18Ev();
extern void _ZN7S9488C23v19Ev();
extern void _ZN7S9488C23v20Ev();
extern void _ZN7S9488C23v21Ev();
extern void _ZN7S9488C23v22Ev();
extern void _ZN7S9488C23v23Ev();
extern void _ZN7S9488C23v24Ev();
extern void _ZN7S9488C23v25Ev();
extern void _ZN7S9488C23v26Ev();
extern void _ZN7S9488C23v27Ev();
static  VTBL_ENTRY vtc_S9488C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9488C2[0]),
  (VTBL_ENTRY)&_ZN7S9488C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9488C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9488C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9488C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9488C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9488C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9488C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9488C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9488C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v16Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v17Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v18Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v19Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v20Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v21Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v22Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v23Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v24Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v25Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v26Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v27Ev,
};
extern VTBL_ENTRY _ZTI7S9488C2[];
extern  VTBL_ENTRY _ZTV7S9488C2[];
Class_Descriptor cd_S9488C2 = {  "S9488C2", // class name
  0,0,//no base classes
  &(vtc_S9488C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI7S9488C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9488C2),29, //virtual function table var
  2, // 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  S9488C1  : S9488C2 {
  ::S2831C24 s9488c1f0;
  ::S2831C16_nt s9488c1f1;
  virtual void  v1(); // _ZN7S9488C12v1Ev
  virtual void  v2(); // _ZN7S9488C12v2Ev
  ~S9488C1(); // tgen
  S9488C1(); // tgen
};
//SIG(1 S9488C1) C1{ BC2{ 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 Fi[28]} v1 v2 FC3{ BC4{ m FC5{ BC6{ m Fp Fi[2]}} Fp Fi}} FC7{ BC8{ m FC9{ BC6} Fp Fi}}}


void  S9488C1 ::v1(){vfunc_called(this, "_ZN7S9488C12v1Ev");}
void  S9488C1 ::v2(){vfunc_called(this, "_ZN7S9488C12v2Ev");}
S9488C1 ::~S9488C1(){ note_dtor("S9488C1", this);} // tgen
S9488C1 ::S9488C1(){ note_ctor("S9488C1", this);} // tgen

static void Test_S9488C1()
{
  extern Class_Descriptor cd_S9488C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,40)];
    init_test(&cd_S9488C1, buf);
    S9488C1 *dp, &lv = *(dp=new (buf) S9488C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,156), "sizeof(S9488C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9488C1)");
    check_base_class_offset(lv, (S9488C2*), 0, "S9488C1");
    check_field_offset(lv, s9488c1f0, ABISELECT(120,116), "S9488C1.s9488c1f0");
    check_field_offset(lv, s9488c1f1, ABISELECT(152,136), "S9488C1.s9488c1f1");
    test_class_info(&lv, &cd_S9488C1);
    dp->~S9488C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9488C1(Test_S9488C1, "S9488C1", ABISELECT(184,156));

#else // __cplusplus

extern void _ZN7S9488C1C1Ev();
extern void _ZN7S9488C1D1Ev();
Name_Map name_map_S9488C1[] = {
  NSPAIR(_ZN7S9488C1C1Ev),
  NSPAIR(_ZN7S9488C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9488C2;
extern VTBL_ENTRY _ZTI7S9488C2[];
extern  VTBL_ENTRY _ZTV7S9488C2[];
static Base_Class bases_S9488C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9488C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9488C1[];
extern void _ZN7S9488C1D1Ev();
extern void _ZN7S9488C1D0Ev();
extern void _ZN7S9488C22v3Ev();
extern void _ZN7S9488C22v4Ev();
extern void _ZN7S9488C22v5Ev();
extern void _ZN7S9488C22v6Ev();
extern void _ZN7S9488C22v7Ev();
extern void _ZN7S9488C22v8Ev();
extern void _ZN7S9488C22v9Ev();
extern void _ZN7S9488C23v10Ev();
extern void _ZN7S9488C23v11Ev();
extern void _ZN7S9488C23v12Ev();
extern void _ZN7S9488C23v13Ev();
extern void _ZN7S9488C23v14Ev();
extern void _ZN7S9488C23v15Ev();
extern void _ZN7S9488C23v16Ev();
extern void _ZN7S9488C23v17Ev();
extern void _ZN7S9488C23v18Ev();
extern void _ZN7S9488C23v19Ev();
extern void _ZN7S9488C23v20Ev();
extern void _ZN7S9488C23v21Ev();
extern void _ZN7S9488C23v22Ev();
extern void _ZN7S9488C23v23Ev();
extern void _ZN7S9488C23v24Ev();
extern void _ZN7S9488C23v25Ev();
extern void _ZN7S9488C23v26Ev();
extern void _ZN7S9488C23v27Ev();
extern void _ZN7S9488C12v1Ev();
extern void _ZN7S9488C12v2Ev();
static  VTBL_ENTRY vtc_S9488C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9488C1[0]),
  (VTBL_ENTRY)&_ZN7S9488C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9488C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9488C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9488C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9488C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9488C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9488C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9488C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9488C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v16Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v17Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v18Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v19Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v20Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v21Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v22Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v23Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v24Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v25Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v26Ev,
  (VTBL_ENTRY)&_ZN7S9488C23v27Ev,
  (VTBL_ENTRY)&_ZN7S9488C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9488C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9488C1[];
extern  VTBL_ENTRY _ZTV7S9488C1[];
Class_Descriptor cd_S9488C1 = {  "S9488C1", // class name
  bases_S9488C1, 1,
  &(vtc_S9488C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,156), // object size
  NSPAIRA(_ZTI7S9488C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9488C1),31, //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  S7176C2  {
  void *s7176c2f0;
  short s7176c2f1;
  virtual void  v9(); // _ZN7S7176C22v9Ev
  virtual void  v10(); // _ZN7S7176C23v10Ev
  virtual void  v11(); // _ZN7S7176C23v11Ev
  virtual void  v12(); // _ZN7S7176C23v12Ev
  virtual void  v13(); // _ZN7S7176C23v13Ev
  ~S7176C2(); // tgen
  S7176C2(); // tgen
};
//SIG(-1 S7176C2) C1{ v1 v2 v3 v4 v5 Fp Fs}


void  S7176C2 ::v9(){vfunc_called(this, "_ZN7S7176C22v9Ev");}
void  S7176C2 ::v10(){vfunc_called(this, "_ZN7S7176C23v10Ev");}
void  S7176C2 ::v11(){vfunc_called(this, "_ZN7S7176C23v11Ev");}
void  S7176C2 ::v12(){vfunc_called(this, "_ZN7S7176C23v12Ev");}
void  S7176C2 ::v13(){vfunc_called(this, "_ZN7S7176C23v13Ev");}
S7176C2 ::~S7176C2(){ note_dtor("S7176C2", this);} // tgen
S7176C2 ::S7176C2(){ note_ctor("S7176C2", this);} // tgen

static void Test_S7176C2()
{
  extern Class_Descriptor cd_S7176C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7176C2, buf);
    S7176C2 *dp, &lv = *(dp=new (buf) S7176C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7176C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7176C2)");
    check_field_offset(lv, s7176c2f0, ABISELECT(8,4), "S7176C2.s7176c2f0");
    check_field_offset(lv, s7176c2f1, ABISELECT(16,8), "S7176C2.s7176c2f1");
    test_class_info(&lv, &cd_S7176C2);
    dp->~S7176C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7176C2(Test_S7176C2, "S7176C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7176C2C1Ev();
extern void _ZN7S7176C2D1Ev();
Name_Map name_map_S7176C2[] = {
  NSPAIR(_ZN7S7176C2C1Ev),
  NSPAIR(_ZN7S7176C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7176C2[];
extern void _ZN7S7176C22v9Ev();
extern void _ZN7S7176C23v10Ev();
extern void _ZN7S7176C23v11Ev();
extern void _ZN7S7176C23v12Ev();
extern void _ZN7S7176C23v13Ev();
static  VTBL_ENTRY vtc_S7176C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7176C2[0]),
  (VTBL_ENTRY)&_ZN7S7176C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7176C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7176C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7176C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7176C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S7176C2[];
extern  VTBL_ENTRY _ZTV7S7176C2[];
Class_Descriptor cd_S7176C2 = {  "S7176C2", // class name
  0,0,//no base classes
  &(vtc_S7176C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7176C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7176C2),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  S7176C4  {
  int s7176c4f0;
  ::S7707C6 s7176c4f1;
  int s7176c4f2;
  virtual  ~S7176C4(); // _ZN7S7176C4D1Ev
  virtual void  v14(); // _ZN7S7176C43v14Ev
  virtual void  v15(); // _ZN7S7176C43v15Ev
  virtual void  v16(); // _ZN7S7176C43v16Ev
  virtual void  v17(); // _ZN7S7176C43v17Ev
  virtual void  v18(); // _ZN7S7176C43v18Ev
  virtual void  v19(); // _ZN7S7176C43v19Ev
  virtual void  v20(); // _ZN7S7176C43v20Ev
  S7176C4(); // tgen
};
//SIG(-1 S7176C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 Fi FC2{ v8 Fi[6]} Fi}


 S7176C4 ::~S7176C4(){ note_dtor("S7176C4", this);}
void  S7176C4 ::v14(){vfunc_called(this, "_ZN7S7176C43v14Ev");}
void  S7176C4 ::v15(){vfunc_called(this, "_ZN7S7176C43v15Ev");}
void  S7176C4 ::v16(){vfunc_called(this, "_ZN7S7176C43v16Ev");}
void  S7176C4 ::v17(){vfunc_called(this, "_ZN7S7176C43v17Ev");}
void  S7176C4 ::v18(){vfunc_called(this, "_ZN7S7176C43v18Ev");}
void  S7176C4 ::v19(){vfunc_called(this, "_ZN7S7176C43v19Ev");}
void  S7176C4 ::v20(){vfunc_called(this, "_ZN7S7176C43v20Ev");}
S7176C4 ::S7176C4(){ note_ctor("S7176C4", this);} // tgen

static void Test_S7176C4()
{
  extern Class_Descriptor cd_S7176C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S7176C4, buf);
    S7176C4 *dp, &lv = *(dp=new (buf) S7176C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S7176C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7176C4)");
    check_field_offset(lv, s7176c4f0, ABISELECT(8,4), "S7176C4.s7176c4f0");
    check_field_offset(lv, s7176c4f1, ABISELECT(16,8), "S7176C4.s7176c4f1");
    check_field_offset(lv, s7176c4f2, ABISELECT(48,36), "S7176C4.s7176c4f2");
    test_class_info(&lv, &cd_S7176C4);
    dp->~S7176C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7176C4(Test_S7176C4, "S7176C4", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S7176C4C1Ev();
extern void _ZN7S7176C4D1Ev();
Name_Map name_map_S7176C4[] = {
  NSPAIR(_ZN7S7176C4C1Ev),
  NSPAIR(_ZN7S7176C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7176C4[];
extern void _ZN7S7176C4D1Ev();
extern void _ZN7S7176C4D0Ev();
extern void _ZN7S7176C43v14Ev();
extern void _ZN7S7176C43v15Ev();
extern void _ZN7S7176C43v16Ev();
extern void _ZN7S7176C43v17Ev();
extern void _ZN7S7176C43v18Ev();
extern void _ZN7S7176C43v19Ev();
extern void _ZN7S7176C43v20Ev();
static  VTBL_ENTRY vtc_S7176C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7176C4[0]),
  (VTBL_ENTRY)&_ZN7S7176C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7176C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v20Ev,
};
extern VTBL_ENTRY _ZTI7S7176C4[];
extern  VTBL_ENTRY _ZTV7S7176C4[];
Class_Descriptor cd_S7176C4 = {  "S7176C4", // class name
  0,0,//no base classes
  &(vtc_S7176C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S7176C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7176C4),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7176C6  : S7176C4 {
  virtual  ~S7176C6(); // _ZN7S7176C6D1Ev
  virtual void  v21(); // _ZN7S7176C63v21Ev
  S7176C6(); // tgen
};
//SIG(-1 S7176C6) C1{ BC2{ vd v2 v3 v4 v5 v6 v7 v8 Fi FC3{ v9 Fi[6]} Fi} vd v1}


 S7176C6 ::~S7176C6(){ note_dtor("S7176C6", this);}
void  S7176C6 ::v21(){vfunc_called(this, "_ZN7S7176C63v21Ev");}
S7176C6 ::S7176C6(){ note_ctor("S7176C6", this);} // tgen

static void Test_S7176C6()
{
  extern Class_Descriptor cd_S7176C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S7176C6, buf);
    S7176C6 *dp, &lv = *(dp=new (buf) S7176C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S7176C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7176C6)");
    check_base_class_offset(lv, (S7176C4*), 0, "S7176C6");
    test_class_info(&lv, &cd_S7176C6);
    dp->~S7176C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7176C6(Test_S7176C6, "S7176C6", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S7176C6C1Ev();
extern void _ZN7S7176C6D1Ev();
Name_Map name_map_S7176C6[] = {
  NSPAIR(_ZN7S7176C6C1Ev),
  NSPAIR(_ZN7S7176C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7176C4;
extern VTBL_ENTRY _ZTI7S7176C4[];
extern  VTBL_ENTRY _ZTV7S7176C4[];
static Base_Class bases_S7176C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7176C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S7176C6[];
extern void _ZN7S7176C6D1Ev();
extern void _ZN7S7176C6D0Ev();
extern void _ZN7S7176C43v14Ev();
extern void _ZN7S7176C43v15Ev();
extern void _ZN7S7176C43v16Ev();
extern void _ZN7S7176C43v17Ev();
extern void _ZN7S7176C43v18Ev();
extern void _ZN7S7176C43v19Ev();
extern void _ZN7S7176C43v20Ev();
extern void _ZN7S7176C63v21Ev();
static  VTBL_ENTRY vtc_S7176C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7176C6[0]),
  (VTBL_ENTRY)&_ZN7S7176C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7176C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7176C63v21Ev,
};
extern VTBL_ENTRY _ZTI7S7176C6[];
extern  VTBL_ENTRY _ZTV7S7176C6[];
Class_Descriptor cd_S7176C6 = {  "S7176C6", // class name
  bases_S7176C6, 1,
  &(vtc_S7176C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S7176C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7176C6),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7176C3  : S7176C4 , virtual S7176C6 {
  int s7176c3f0:10;
  ::S7707C6 s7176c3f1;
  void *s7176c3f2;
  virtual  ~S7176C3(); // _ZN7S7176C3D2Ev
  virtual void  v22(); // _ZN7S7176C33v22Ev
  virtual void  v23(); // _ZN7S7176C33v23Ev
  virtual void  v24(); // _ZN7S7176C33v24Ev
  virtual void  v25(); // _ZN7S7176C33v25Ev
  virtual void  v26(); // _ZN7S7176C33v26Ev
  virtual void  v27(); // _ZN7S7176C33v27Ev
  virtual void  v28(); // _ZN7S7176C33v28Ev
  S7176C3(); // tgen
};
//SIG(-1 S7176C3) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 Fi FC3{ v16 Fi[6]} Fi} VBC4{ BC2 vd v15} vd v1 v2 v3 v4 v5 v6 v7 Fi:10 FC3 Fp}


 S7176C3 ::~S7176C3(){ note_dtor("S7176C3", this);}
void  S7176C3 ::v22(){vfunc_called(this, "_ZN7S7176C33v22Ev");}
void  S7176C3 ::v23(){vfunc_called(this, "_ZN7S7176C33v23Ev");}
void  S7176C3 ::v24(){vfunc_called(this, "_ZN7S7176C33v24Ev");}
void  S7176C3 ::v25(){vfunc_called(this, "_ZN7S7176C33v25Ev");}
void  S7176C3 ::v26(){vfunc_called(this, "_ZN7S7176C33v26Ev");}
void  S7176C3 ::v27(){vfunc_called(this, "_ZN7S7176C33v27Ev");}
void  S7176C3 ::v28(){vfunc_called(this, "_ZN7S7176C33v28Ev");}
S7176C3 ::S7176C3(){ note_ctor("S7176C3", this);} // tgen

static void Test_S7176C3()
{
  extern Class_Descriptor cd_S7176C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,30)];
    init_test(&cd_S7176C3, buf);
    S7176C3 *dp, &lv = *(dp=new (buf) S7176C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,116), "sizeof(S7176C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7176C3)");
    /*is_ambiguous_... S7176C3::S7176C4 */ AMB_check_base_class_offset(lv, (S7176C4*), 0, "S7176C3");
    check_base_class_offset(lv, (S7176C4*)(S7176C6*), ABISELECT(96,76), "S7176C3");
    check_base_class_offset(lv, (S7176C6*), ABISELECT(96,76), "S7176C3");
    set_bf_and_test(lv, s7176c3f0, ABISELECT(52,40), 0, 10, 1, "S7176C3");
    set_bf_and_test(lv, s7176c3f0, ABISELECT(52,40), 0, 10, hide_sll(1LL<<9), "S7176C3");
    check_field_offset(lv, s7176c3f1, ABISELECT(56,44), "S7176C3.s7176c3f1");
    check_field_offset(lv, s7176c3f2, ABISELECT(88,72), "S7176C3.s7176c3f2");
    test_class_info(&lv, &cd_S7176C3);
    dp->~S7176C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7176C3(Test_S7176C3, "S7176C3", ABISELECT(152,116));

#else // __cplusplus

extern void _ZN7S7176C3C1Ev();
extern void _ZN7S7176C3D2Ev();
Name_Map name_map_S7176C3[] = {
  NSPAIR(_ZN7S7176C3C1Ev),
  NSPAIR(_ZN7S7176C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7176C4;
extern VTBL_ENTRY _ZTI7S7176C4[];
extern  VTBL_ENTRY _ZTV7S7176C4[];
extern Class_Descriptor cd_S7176C4;
extern VTBL_ENTRY _ZTI7S7176C4[];
extern  VTBL_ENTRY _ZTV7S7176C4[];
extern Class_Descriptor cd_S7176C6;
extern VTBL_ENTRY _ZTI7S7176C6[];
extern  VTBL_ENTRY _ZTV7S7176C6[];
static Base_Class bases_S7176C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7176C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7176C4,    ABISELECT(96,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
    2, //immediately_derived
  0, 0},
  {&cd_S7176C6,    ABISELECT(96,76), //bcp->offset
    19, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S7176C3[];
extern void _ZN7S7176C3D1Ev();
extern void _ZN7S7176C3D0Ev();
extern void _ZN7S7176C43v14Ev();
extern void _ZN7S7176C43v15Ev();
extern void _ZN7S7176C43v16Ev();
extern void _ZN7S7176C43v17Ev();
extern void _ZN7S7176C43v18Ev();
extern void _ZN7S7176C43v19Ev();
extern void _ZN7S7176C43v20Ev();
extern void _ZN7S7176C33v22Ev();
extern void _ZN7S7176C33v23Ev();
extern void _ZN7S7176C33v24Ev();
extern void _ZN7S7176C33v25Ev();
extern void _ZN7S7176C33v26Ev();
extern void _ZN7S7176C33v27Ev();
extern void _ZN7S7176C33v28Ev();
extern void ABISELECT(_ZTv0_n24_N7S7176C3D1Ev,_ZTv0_n12_N7S7176C3D1Ev)();
extern void ABISELECT(_ZThn96_N7S7176C3D1Ev,_ZThn76_N7S7176C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7176C3D0Ev,_ZTv0_n12_N7S7176C3D0Ev)();
extern void ABISELECT(_ZThn96_N7S7176C3D0Ev,_ZThn76_N7S7176C3D0Ev)() __attribute__((weak));
extern void _ZN7S7176C43v14Ev();
extern void _ZN7S7176C43v15Ev();
extern void _ZN7S7176C43v16Ev();
extern void _ZN7S7176C43v17Ev();
extern void _ZN7S7176C43v18Ev();
extern void _ZN7S7176C43v19Ev();
extern void _ZN7S7176C43v20Ev();
extern void _ZN7S7176C63v21Ev();
static  VTBL_ENTRY vtc_S7176C3[] = {
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7176C3[0]),
  (VTBL_ENTRY)&_ZN7S7176C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7176C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-76),
  ABISELECT(-96,-76),
  (VTBL_ENTRY)&(_ZTI7S7176C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7176C3D1Ev,_ZTv0_n12_N7S7176C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7176C3D0Ev,_ZTv0_n12_N7S7176C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7176C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7176C63v21Ev,
};
extern VTBL_ENTRY _ZTV7S7176C3[];
static  VTT_ENTRY vtt_S7176C3[] = {
  {&(_ZTV7S7176C3[3]),  3,40},
  {&(_ZTV7S7176C3[30]),  30,40},
};
extern VTBL_ENTRY _ZTI7S7176C3[];
extern  VTBL_ENTRY _ZTV7S7176C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7176C3[];
static VTBL_ENTRY alt_thunk_names101[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7176C3D0Ev,_ZTv0_n12_N7S7176C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7176C3D0Ev,_ZThn76_N7S7176C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7176C3D1Ev,_ZTv0_n12_N7S7176C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7176C3D1Ev,_ZThn76_N7S7176C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7176C3 = {  "S7176C3", // class name
  bases_S7176C3, 3,
  &(vtc_S7176C3[0]), // expected_vtbl_contents
  &(vtt_S7176C3[0]), // expected_vtt_contents
  ABISELECT(152,116), // object size
  NSPAIRA(_ZTI7S7176C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7176C3),40, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7176C3),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names101,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7176C1  : S7176C2 , virtual S7176C3 {
  void *s7176c1f0;
  virtual void  v1(); // _ZN7S7176C12v1Ev
  virtual void  v2(); // _ZN7S7176C12v2Ev
  virtual void  v3(); // _ZN7S7176C12v3Ev
  virtual void  v4(); // _ZN7S7176C12v4Ev
  virtual void  v5(); // _ZN7S7176C12v5Ev
  virtual void  v6(); // _ZN7S7176C12v6Ev
  virtual void  v7(); // _ZN7S7176C12v7Ev
  virtual void  v8(); // _ZN7S7176C12v8Ev
  ~S7176C1(); // tgen
  S7176C1(); // tgen
};
//SIG(1 S7176C1) C1{ BC2{ v9 v10 v11 v12 v13 Fp Fs} VBC3{ BC4{ vd v14 v15 v16 v17 v18 v19 v20 Fi FC5{ v29 Fi[6]} Fi} VBC6{ BC4 vd v21} vd v22 v23 v24 v25 v26 v27 v28 Fi:10 FC5 Fp} v1 v2 v3 v4 v5 v6 v7 v8 Fp}


void  S7176C1 ::v1(){vfunc_called(this, "_ZN7S7176C12v1Ev");}
void  S7176C1 ::v2(){vfunc_called(this, "_ZN7S7176C12v2Ev");}
void  S7176C1 ::v3(){vfunc_called(this, "_ZN7S7176C12v3Ev");}
void  S7176C1 ::v4(){vfunc_called(this, "_ZN7S7176C12v4Ev");}
void  S7176C1 ::v5(){vfunc_called(this, "_ZN7S7176C12v5Ev");}
void  S7176C1 ::v6(){vfunc_called(this, "_ZN7S7176C12v6Ev");}
void  S7176C1 ::v7(){vfunc_called(this, "_ZN7S7176C12v7Ev");}
void  S7176C1 ::v8(){vfunc_called(this, "_ZN7S7176C12v8Ev");}
S7176C1 ::~S7176C1(){ note_dtor("S7176C1", this);} // tgen
S7176C1 ::S7176C1(){ note_ctor("S7176C1", this);} // tgen

static void Test_S7176C1()
{
  extern Class_Descriptor cd_S7176C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,34)];
    init_test(&cd_S7176C1, buf);
    S7176C1 *dp, &lv = *(dp=new (buf) S7176C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,132), "sizeof(S7176C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7176C1)");
    check_base_class_offset(lv, (S7176C2*), 0, "S7176C1");
    /*is_ambiguous_... S7176C3::S7176C4 */ AMB_check_base_class_offset(lv, (S7176C4*)(S7176C3*), ABISELECT(32,16), "S7176C1");
    check_base_class_offset(lv, (S7176C4*)(S7176C6*), ABISELECT(128,92), "S7176C1");
    check_base_class_offset(lv, (S7176C6*)(S7176C3*), ABISELECT(128,92), "S7176C1");
    check_base_class_offset(lv, (S7176C3*), ABISELECT(32,16), "S7176C1");
    check_field_offset(lv, s7176c1f0, ABISELECT(24,12), "S7176C1.s7176c1f0");
    test_class_info(&lv, &cd_S7176C1);
    dp->~S7176C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7176C1(Test_S7176C1, "S7176C1", ABISELECT(184,132));

#else // __cplusplus

extern void _ZN7S7176C1C1Ev();
extern void _ZN7S7176C1D1Ev();
Name_Map name_map_S7176C1[] = {
  NSPAIR(_ZN7S7176C1C1Ev),
  NSPAIR(_ZN7S7176C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7176C2;
extern VTBL_ENTRY _ZTI7S7176C2[];
extern  VTBL_ENTRY _ZTV7S7176C2[];
extern Class_Descriptor cd_S7176C4;
extern VTBL_ENTRY _ZTI7S7176C4[];
extern  VTBL_ENTRY _ZTV7S7176C4[];
extern Class_Descriptor cd_S7176C4;
extern VTBL_ENTRY _ZTI7S7176C4[];
extern  VTBL_ENTRY _ZTV7S7176C4[];
extern Class_Descriptor cd_S7176C6;
extern VTBL_ENTRY _ZTI7S7176C6[];
extern  VTBL_ENTRY _ZTV7S7176C6[];
extern Class_Descriptor cd_S7176C3;
extern VTBL_ENTRY _ZTI7S7176C3[];
extern  VTBL_ENTRY _ZTV7S7176C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7176C3[];
static Base_Class bases_S7176C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7176C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7176C4,    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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7176C4,    ABISELECT(128,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
    3, //immediately_derived
  0, 0},
  {&cd_S7176C6,    ABISELECT(128,92), //bcp->offset
    53, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7176C3,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7176C1[];
extern void _ZN7S7176C22v9Ev();
extern void _ZN7S7176C23v10Ev();
extern void _ZN7S7176C23v11Ev();
extern void _ZN7S7176C23v12Ev();
extern void _ZN7S7176C23v13Ev();
extern void _ZN7S7176C12v1Ev();
extern void _ZN7S7176C12v2Ev();
extern void _ZN7S7176C12v3Ev();
extern void _ZN7S7176C12v4Ev();
extern void _ZN7S7176C12v5Ev();
extern void _ZN7S7176C12v6Ev();
extern void _ZN7S7176C12v7Ev();
extern void _ZN7S7176C12v8Ev();
extern void _ZN7S7176C1D1Ev();
extern void _ZN7S7176C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7176C1D1Ev,_ZTv0_n16_N7S7176C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7176C1D1Ev,_ZThn16_N7S7176C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7176C1D0Ev,_ZTv0_n16_N7S7176C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7176C1D0Ev,_ZThn16_N7S7176C1D0Ev)() __attribute__((weak));
extern void _ZN7S7176C43v14Ev();
extern void _ZN7S7176C43v15Ev();
extern void _ZN7S7176C43v16Ev();
extern void _ZN7S7176C43v17Ev();
extern void _ZN7S7176C43v18Ev();
extern void _ZN7S7176C43v19Ev();
extern void _ZN7S7176C43v20Ev();
extern void _ZN7S7176C33v22Ev();
extern void _ZN7S7176C33v23Ev();
extern void _ZN7S7176C33v24Ev();
extern void _ZN7S7176C33v25Ev();
extern void _ZN7S7176C33v26Ev();
extern void _ZN7S7176C33v27Ev();
extern void _ZN7S7176C33v28Ev();
extern void ABISELECT(_ZTv0_n24_N7S7176C1D1Ev,_ZTv0_n12_N7S7176C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S7176C1D1Ev,_ZThn92_N7S7176C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7176C1D0Ev,_ZTv0_n12_N7S7176C1D0Ev)();
extern void ABISELECT(_ZThn128_N7S7176C1D0Ev,_ZThn92_N7S7176C1D0Ev)() __attribute__((weak));
extern void _ZN7S7176C43v14Ev();
extern void _ZN7S7176C43v15Ev();
extern void _ZN7S7176C43v16Ev();
extern void _ZN7S7176C43v17Ev();
extern void _ZN7S7176C43v18Ev();
extern void _ZN7S7176C43v19Ev();
extern void _ZN7S7176C43v20Ev();
extern void _ZN7S7176C63v21Ev();
static  VTBL_ENTRY vtc_S7176C1[] = {
  ABISELECT(128,92),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7176C1[0]),
  (VTBL_ENTRY)&_ZN7S7176C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7176C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7176C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7176C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7176C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7176C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7176C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7176C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7176C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7176C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7176C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7176C12v7Ev,
  (VTBL_ENTRY)&_ZN7S7176C12v8Ev,
  (VTBL_ENTRY)&_ZN7S7176C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7176C1D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(96,76),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7176C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7176C1D1Ev,_ZTv0_n16_N7S7176C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7176C1D0Ev,_ZTv0_n16_N7S7176C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7176C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-92),
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI7S7176C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7176C1D1Ev,_ZTv0_n12_N7S7176C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7176C1D0Ev,_ZTv0_n12_N7S7176C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7176C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7176C63v21Ev,
};
extern VTBL_ENTRY _ZTV7S7176C1[];
extern void _ZN7S7176C3D1Ev();
extern void _ZN7S7176C3D0Ev();
extern void _ZN7S7176C43v14Ev();
extern void _ZN7S7176C43v15Ev();
extern void _ZN7S7176C43v16Ev();
extern void _ZN7S7176C43v17Ev();
extern void _ZN7S7176C43v18Ev();
extern void _ZN7S7176C43v19Ev();
extern void _ZN7S7176C43v20Ev();
extern void _ZN7S7176C33v22Ev();
extern void _ZN7S7176C33v23Ev();
extern void _ZN7S7176C33v24Ev();
extern void _ZN7S7176C33v25Ev();
extern void _ZN7S7176C33v26Ev();
extern void _ZN7S7176C33v27Ev();
extern void _ZN7S7176C33v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7176C3__7S7176C1[] = {
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7176C3[0]),
  (VTBL_ENTRY)&_ZN7S7176C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7176C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7176C33v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7176C3D1Ev,_ZTv0_n12_N7S7176C3D1Ev)();
extern void ABISELECT(_ZThn96_N7S7176C3D1Ev,_ZThn76_N7S7176C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7176C3D0Ev,_ZTv0_n12_N7S7176C3D0Ev)();
extern void ABISELECT(_ZThn96_N7S7176C3D0Ev,_ZThn76_N7S7176C3D0Ev)() __attribute__((weak));
extern void _ZN7S7176C43v14Ev();
extern void _ZN7S7176C43v15Ev();
extern void _ZN7S7176C43v16Ev();
extern void _ZN7S7176C43v17Ev();
extern void _ZN7S7176C43v18Ev();
extern void _ZN7S7176C43v19Ev();
extern void _ZN7S7176C43v20Ev();
extern void _ZN7S7176C63v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7176C6__7S7176C3__7S7176C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-76),
  ABISELECT(-96,-76),
  (VTBL_ENTRY)&(_ZTI7S7176C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7176C3D1Ev,_ZTv0_n12_N7S7176C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7176C3D0Ev,_ZTv0_n12_N7S7176C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7176C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7176C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7176C63v21Ev,
};
static  VTT_ENTRY vtt_S7176C1[] = {
  {&(_ZTV7S7176C1[4]),  4,74},
  {&(_ZTV7S7176C1[37]),  37,74},
  {&(_ZTV7S7176C1[64]),  64,74},
  {&(_tg__ZTV7S7176C3__7S7176C1[3]),  3,19},
  {&(_tg__ZTV7S7176C6__7S7176C3__7S7176C1[11]),  11,21},
};
extern VTBL_ENTRY _ZTI7S7176C1[];
extern  VTBL_ENTRY _ZTV7S7176C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7176C1[];
static VTBL_ENTRY alt_thunk_names102[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7176C3D0Ev,_ZTv0_n12_N7S7176C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7176C3D0Ev,_ZThn76_N7S7176C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7176C3D1Ev,_ZTv0_n12_N7S7176C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7176C3D1Ev,_ZThn76_N7S7176C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7176C1D0Ev,_ZTv0_n12_N7S7176C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7176C1D0Ev,_ZThn92_N7S7176C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7176C1D1Ev,_ZTv0_n12_N7S7176C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7176C1D1Ev,_ZThn92_N7S7176C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7176C1D0Ev,_ZTv0_n16_N7S7176C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7176C1D0Ev,_ZThn16_N7S7176C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7176C1D1Ev,_ZTv0_n16_N7S7176C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7176C1D1Ev,_ZThn16_N7S7176C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7176C1 = {  "S7176C1", // class name
  bases_S7176C1, 5,
  &(vtc_S7176C1[0]), // expected_vtbl_contents
  &(vtt_S7176C1[0]), // expected_vtt_contents
  ABISELECT(184,132), // object size
  NSPAIRA(_ZTI7S7176C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7176C1),74, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7176C1),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names102,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10208C2  {
  int s10208c2f0[28];
  virtual  ~S10208C2(); // _ZN8S10208C2D1Ev
  virtual void  v8(); // _ZN8S10208C22v8Ev
  virtual void  v9(); // _ZN8S10208C22v9Ev
  virtual void  v10(); // _ZN8S10208C23v10Ev
  virtual void  v11(); // _ZN8S10208C23v11Ev
  virtual void  v12(); // _ZN8S10208C23v12Ev
  virtual void  v13(); // _ZN8S10208C23v13Ev
  virtual void  v14(); // _ZN8S10208C23v14Ev
  virtual void  v15(); // _ZN8S10208C23v15Ev
  virtual void  v16(); // _ZN8S10208C23v16Ev
  virtual void  v17(); // _ZN8S10208C23v17Ev
  virtual void  v18(); // _ZN8S10208C23v18Ev
  virtual void  v19(); // _ZN8S10208C23v19Ev
  virtual void  v20(); // _ZN8S10208C23v20Ev
  virtual void  v21(); // _ZN8S10208C23v21Ev
  virtual void  v22(); // _ZN8S10208C23v22Ev
  virtual void  v23(); // _ZN8S10208C23v23Ev
  virtual void  v24(); // _ZN8S10208C23v24Ev
  virtual void  v25(); // _ZN8S10208C23v25Ev
  virtual void  v26(); // _ZN8S10208C23v26Ev
  virtual void  v27(); // _ZN8S10208C23v27Ev
  virtual void  v28(); // _ZN8S10208C23v28Ev
  virtual void  v29(); // _ZN8S10208C23v29Ev
  virtual void  v30(); // _ZN8S10208C23v30Ev
  virtual void  v31(); // _ZN8S10208C23v31Ev
  virtual void  v32(); // _ZN8S10208C23v32Ev
  S10208C2(); // tgen
};
//SIG(-1 S10208C2) 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 Fi[28]}


 S10208C2 ::~S10208C2(){ note_dtor("S10208C2", this);}
void  S10208C2 ::v8(){vfunc_called(this, "_ZN8S10208C22v8Ev");}
void  S10208C2 ::v9(){vfunc_called(this, "_ZN8S10208C22v9Ev");}
void  S10208C2 ::v10(){vfunc_called(this, "_ZN8S10208C23v10Ev");}
void  S10208C2 ::v11(){vfunc_called(this, "_ZN8S10208C23v11Ev");}
void  S10208C2 ::v12(){vfunc_called(this, "_ZN8S10208C23v12Ev");}
void  S10208C2 ::v13(){vfunc_called(this, "_ZN8S10208C23v13Ev");}
void  S10208C2 ::v14(){vfunc_called(this, "_ZN8S10208C23v14Ev");}
void  S10208C2 ::v15(){vfunc_called(this, "_ZN8S10208C23v15Ev");}
void  S10208C2 ::v16(){vfunc_called(this, "_ZN8S10208C23v16Ev");}
void  S10208C2 ::v17(){vfunc_called(this, "_ZN8S10208C23v17Ev");}
void  S10208C2 ::v18(){vfunc_called(this, "_ZN8S10208C23v18Ev");}
void  S10208C2 ::v19(){vfunc_called(this, "_ZN8S10208C23v19Ev");}
void  S10208C2 ::v20(){vfunc_called(this, "_ZN8S10208C23v20Ev");}
void  S10208C2 ::v21(){vfunc_called(this, "_ZN8S10208C23v21Ev");}
void  S10208C2 ::v22(){vfunc_called(this, "_ZN8S10208C23v22Ev");}
void  S10208C2 ::v23(){vfunc_called(this, "_ZN8S10208C23v23Ev");}
void  S10208C2 ::v24(){vfunc_called(this, "_ZN8S10208C23v24Ev");}
void  S10208C2 ::v25(){vfunc_called(this, "_ZN8S10208C23v25Ev");}
void  S10208C2 ::v26(){vfunc_called(this, "_ZN8S10208C23v26Ev");}
void  S10208C2 ::v27(){vfunc_called(this, "_ZN8S10208C23v27Ev");}
void  S10208C2 ::v28(){vfunc_called(this, "_ZN8S10208C23v28Ev");}
void  S10208C2 ::v29(){vfunc_called(this, "_ZN8S10208C23v29Ev");}
void  S10208C2 ::v30(){vfunc_called(this, "_ZN8S10208C23v30Ev");}
void  S10208C2 ::v31(){vfunc_called(this, "_ZN8S10208C23v31Ev");}
void  S10208C2 ::v32(){vfunc_called(this, "_ZN8S10208C23v32Ev");}
S10208C2 ::S10208C2(){ note_ctor("S10208C2", this);} // tgen

static void Test_S10208C2()
{
  extern Class_Descriptor cd_S10208C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S10208C2, buf);
    S10208C2 *dp, &lv = *(dp=new (buf) S10208C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S10208C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10208C2)");
    check_field_offset(lv, s10208c2f0, ABISELECT(8,4), "S10208C2.s10208c2f0");
    test_class_info(&lv, &cd_S10208C2);
    dp->~S10208C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10208C2(Test_S10208C2, "S10208C2", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN8S10208C2C1Ev();
extern void _ZN8S10208C2D1Ev();
Name_Map name_map_S10208C2[] = {
  NSPAIR(_ZN8S10208C2C1Ev),
  NSPAIR(_ZN8S10208C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10208C2[];
extern void _ZN8S10208C2D1Ev();
extern void _ZN8S10208C2D0Ev();
extern void _ZN8S10208C22v8Ev();
extern void _ZN8S10208C22v9Ev();
extern void _ZN8S10208C23v10Ev();
extern void _ZN8S10208C23v11Ev();
extern void _ZN8S10208C23v12Ev();
extern void _ZN8S10208C23v13Ev();
extern void _ZN8S10208C23v14Ev();
extern void _ZN8S10208C23v15Ev();
extern void _ZN8S10208C23v16Ev();
extern void _ZN8S10208C23v17Ev();
extern void _ZN8S10208C23v18Ev();
extern void _ZN8S10208C23v19Ev();
extern void _ZN8S10208C23v20Ev();
extern void _ZN8S10208C23v21Ev();
extern void _ZN8S10208C23v22Ev();
extern void _ZN8S10208C23v23Ev();
extern void _ZN8S10208C23v24Ev();
extern void _ZN8S10208C23v25Ev();
extern void _ZN8S10208C23v26Ev();
extern void _ZN8S10208C23v27Ev();
extern void _ZN8S10208C23v28Ev();
extern void _ZN8S10208C23v29Ev();
extern void _ZN8S10208C23v30Ev();
extern void _ZN8S10208C23v31Ev();
extern void _ZN8S10208C23v32Ev();
static  VTBL_ENTRY vtc_S10208C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10208C2[0]),
  (VTBL_ENTRY)&_ZN8S10208C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10208C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10208C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10208C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v20Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v21Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v22Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v23Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v24Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v25Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v26Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v27Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v28Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v29Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v30Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v31Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v32Ev,
};
extern VTBL_ENTRY _ZTI8S10208C2[];
extern  VTBL_ENTRY _ZTV8S10208C2[];
Class_Descriptor cd_S10208C2 = {  "S10208C2", // class name
  0,0,//no base classes
  &(vtc_S10208C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI8S10208C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10208C2),29, //virtual function table var
  2, // 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  S10208C1  : S10208C2 {
  void *s10208c1f0[2];
  int s10208c1f1;
  __tsi64 s10208c1f2[2];
  void *s10208c1f3;
  ::S1566C29 s10208c1f4;
  virtual void  v1(); // _ZN8S10208C12v1Ev
  virtual void  v2(); // _ZN8S10208C12v2Ev
  virtual void  v3(); // _ZN8S10208C12v3Ev
  virtual void  v4(); // _ZN8S10208C12v4Ev
  virtual void  v5(); // _ZN8S10208C12v5Ev
  virtual void  v6(); // _ZN8S10208C12v6Ev
  virtual void  v7(); // _ZN8S10208C12v7Ev
  ~S10208C1(); // tgen
  S10208C1(); // tgen
};
//SIG(1 S10208C1) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fi[28]} v1 v2 v3 v4 v5 v6 v7 Fp[2] Fi FL[2] Fp FC3{ BC4{ m Fp Fi[2]}}}


void  S10208C1 ::v1(){vfunc_called(this, "_ZN8S10208C12v1Ev");}
void  S10208C1 ::v2(){vfunc_called(this, "_ZN8S10208C12v2Ev");}
void  S10208C1 ::v3(){vfunc_called(this, "_ZN8S10208C12v3Ev");}
void  S10208C1 ::v4(){vfunc_called(this, "_ZN8S10208C12v4Ev");}
void  S10208C1 ::v5(){vfunc_called(this, "_ZN8S10208C12v5Ev");}
void  S10208C1 ::v6(){vfunc_called(this, "_ZN8S10208C12v6Ev");}
void  S10208C1 ::v7(){vfunc_called(this, "_ZN8S10208C12v7Ev");}
S10208C1 ::~S10208C1(){ note_dtor("S10208C1", this);} // tgen
S10208C1 ::S10208C1(){ note_ctor("S10208C1", this);} // tgen

static void Test_S10208C1()
{
  extern Class_Descriptor cd_S10208C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,41)];
    init_test(&cd_S10208C1, buf);
    S10208C1 *dp, &lv = *(dp=new (buf) S10208C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,160), "sizeof(S10208C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10208C1)");
    check_base_class_offset(lv, (S10208C2*), 0, "S10208C1");
    check_field_offset(lv, s10208c1f0, ABISELECT(120,116), "S10208C1.s10208c1f0");
    check_field_offset(lv, s10208c1f1, ABISELECT(136,124), "S10208C1.s10208c1f1");
    check_field_offset(lv, s10208c1f2, ABISELECT(144,128), "S10208C1.s10208c1f2");
    check_field_offset(lv, s10208c1f3, ABISELECT(160,144), "S10208C1.s10208c1f3");
    check_field_offset(lv, s10208c1f4, ABISELECT(168,148), "S10208C1.s10208c1f4");
    test_class_info(&lv, &cd_S10208C1);
    dp->~S10208C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10208C1(Test_S10208C1, "S10208C1", ABISELECT(184,160));

#else // __cplusplus

extern void _ZN8S10208C1C1Ev();
extern void _ZN8S10208C1D1Ev();
Name_Map name_map_S10208C1[] = {
  NSPAIR(_ZN8S10208C1C1Ev),
  NSPAIR(_ZN8S10208C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10208C2;
extern VTBL_ENTRY _ZTI8S10208C2[];
extern  VTBL_ENTRY _ZTV8S10208C2[];
static Base_Class bases_S10208C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10208C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10208C1[];
extern void _ZN8S10208C1D1Ev();
extern void _ZN8S10208C1D0Ev();
extern void _ZN8S10208C22v8Ev();
extern void _ZN8S10208C22v9Ev();
extern void _ZN8S10208C23v10Ev();
extern void _ZN8S10208C23v11Ev();
extern void _ZN8S10208C23v12Ev();
extern void _ZN8S10208C23v13Ev();
extern void _ZN8S10208C23v14Ev();
extern void _ZN8S10208C23v15Ev();
extern void _ZN8S10208C23v16Ev();
extern void _ZN8S10208C23v17Ev();
extern void _ZN8S10208C23v18Ev();
extern void _ZN8S10208C23v19Ev();
extern void _ZN8S10208C23v20Ev();
extern void _ZN8S10208C23v21Ev();
extern void _ZN8S10208C23v22Ev();
extern void _ZN8S10208C23v23Ev();
extern void _ZN8S10208C23v24Ev();
extern void _ZN8S10208C23v25Ev();
extern void _ZN8S10208C23v26Ev();
extern void _ZN8S10208C23v27Ev();
extern void _ZN8S10208C23v28Ev();
extern void _ZN8S10208C23v29Ev();
extern void _ZN8S10208C23v30Ev();
extern void _ZN8S10208C23v31Ev();
extern void _ZN8S10208C23v32Ev();
extern void _ZN8S10208C12v1Ev();
extern void _ZN8S10208C12v2Ev();
extern void _ZN8S10208C12v3Ev();
extern void _ZN8S10208C12v4Ev();
extern void _ZN8S10208C12v5Ev();
extern void _ZN8S10208C12v6Ev();
extern void _ZN8S10208C12v7Ev();
static  VTBL_ENTRY vtc_S10208C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10208C1[0]),
  (VTBL_ENTRY)&_ZN8S10208C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10208C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10208C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10208C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v20Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v21Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v22Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v23Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v24Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v25Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v26Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v27Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v28Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v29Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v30Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v31Ev,
  (VTBL_ENTRY)&_ZN8S10208C23v32Ev,
  (VTBL_ENTRY)&_ZN8S10208C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10208C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10208C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10208C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10208C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10208C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10208C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S10208C1[];
extern  VTBL_ENTRY _ZTV8S10208C1[];
Class_Descriptor cd_S10208C1 = {  "S10208C1", // class name
  bases_S10208C1, 1,
  &(vtc_S10208C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,160), // object size
  NSPAIRA(_ZTI8S10208C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10208C1),36, //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  S19781C3  : virtual S3600C29_nt , S3600C19 {
  ~S19781C3(); // tgen
  S19781C3(); // tgen
};
//SIG(-1 S19781C3) C1{ VBC2{ m Fp} BC3{ m}}


S19781C3 ::~S19781C3(){ note_dtor("S19781C3", this);} // tgen
S19781C3 ::S19781C3(){ note_ctor("S19781C3", this);} // tgen

static void Test_S19781C3()
{
  extern Class_Descriptor cd_S19781C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19781C3, buf);
    S19781C3 *dp, &lv = *(dp=new (buf) S19781C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19781C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19781C3)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S19781C3");
    check_base_class_offset(lv, (S3600C19*), 0, "S19781C3");
    test_class_info(&lv, &cd_S19781C3);
    dp->~S19781C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19781C3(Test_S19781C3, "S19781C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19781C3C1Ev();
extern void _ZN8S19781C3D1Ev();
Name_Map name_map_S19781C3[] = {
  NSPAIR(_ZN8S19781C3C1Ev),
  NSPAIR(_ZN8S19781C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S19781C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S19781C3[];
static  VTBL_ENTRY vtc_S19781C3[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C3[0]),
};
extern VTBL_ENTRY _ZTV8S19781C3[];
static  VTT_ENTRY vtt_S19781C3[] = {
  {&(_ZTV8S19781C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19781C3[];
extern  VTBL_ENTRY _ZTV8S19781C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C3[];
Class_Descriptor cd_S19781C3 = {  "S19781C3", // class name
  bases_S19781C3, 2,
  &(vtc_S19781C3[0]), // expected_vtbl_contents
  &(vtt_S19781C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19781C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19781C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19781C3),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  S19781C7  : S3600C29_nt , virtual S3600C19 {
  ::S19426C9_nt s19781c7f0;
  ~S19781C7(); // tgen
  S19781C7(); // tgen
};
//SIG(-1 S19781C7) C1{ BC2{ m Fp} VBC3{ m} FU4{ m}}


S19781C7 ::~S19781C7(){ note_dtor("S19781C7", this);} // tgen
S19781C7 ::S19781C7(){ note_ctor("S19781C7", this);} // tgen

static void Test_S19781C7()
{
  extern Class_Descriptor cd_S19781C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19781C7, buf);
    S19781C7 *dp, &lv = *(dp=new (buf) S19781C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19781C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19781C7)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S19781C7");
    check_base_class_offset(lv, (S3600C19*), 0, "S19781C7");
    check_field_offset(lv, s19781c7f0, ABISELECT(16,8), "S19781C7.s19781c7f0");
    test_class_info(&lv, &cd_S19781C7);
    dp->~S19781C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19781C7(Test_S19781C7, "S19781C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19781C7C1Ev();
extern void _ZN8S19781C7D1Ev();
Name_Map name_map_S19781C7[] = {
  NSPAIR(_ZN8S19781C7C1Ev),
  NSPAIR(_ZN8S19781C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S19781C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19781C7[];
static  VTBL_ENTRY vtc_S19781C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C7[0]),
};
extern VTBL_ENTRY _ZTV8S19781C7[];
static  VTT_ENTRY vtt_S19781C7[] = {
  {&(_ZTV8S19781C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19781C7[];
extern  VTBL_ENTRY _ZTV8S19781C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C7[];
Class_Descriptor cd_S19781C7 = {  "S19781C7", // class name
  bases_S19781C7, 2,
  &(vtc_S19781C7[0]), // expected_vtbl_contents
  &(vtt_S19781C7[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19781C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19781C7),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19781C7),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  S19781C6  : virtual S3600C19 , virtual S19781C7 {
  int s19781c6f0;
  ~S19781C6(); // tgen
  S19781C6(); // tgen
};
//SIG(-1 S19781C6) C1{ VBC2{ m} VBC3{ BC4{ m Fp} VBC2 FU5{ m}} Fi}


S19781C6 ::~S19781C6(){ note_dtor("S19781C6", this);} // tgen
S19781C6 ::S19781C6(){ note_ctor("S19781C6", this);} // tgen

static void Test_S19781C6()
{
  extern Class_Descriptor cd_S19781C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19781C6, buf);
    S19781C6 *dp, &lv = *(dp=new (buf) S19781C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19781C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19781C6)");
    check_base_class_offset(lv, (S3600C19*), 0, "S19781C6");
    check_base_class_offset(lv, (S3600C19*)(S19781C7*), 0, "S19781C6");
    check_base_class_offset(lv, (S3600C29_nt*)(S19781C7*), ABISELECT(24,12), "S19781C6");
    check_base_class_offset(lv, (S19781C7*), ABISELECT(16,8), "S19781C6");
    check_field_offset(lv, s19781c6f0, ABISELECT(8,4), "S19781C6.s19781c6f0");
    test_class_info(&lv, &cd_S19781C6);
    dp->~S19781C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19781C6(Test_S19781C6, "S19781C6", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19781C6C1Ev();
extern void _ZN8S19781C6D1Ev();
Name_Map name_map_S19781C6[] = {
  NSPAIR(_ZN8S19781C6C1Ev),
  NSPAIR(_ZN8S19781C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19781C7;
extern VTBL_ENTRY _ZTI8S19781C7[];
extern  VTBL_ENTRY _ZTV8S19781C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C7[];
static Base_Class bases_S19781C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19781C7,    ABISELECT(16,8), //bcp->offset
    4, //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 _ZTI8S19781C6[];
static  VTBL_ENTRY vtc_S19781C6[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C6[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19781C6[0]),
};
extern VTBL_ENTRY _ZTV8S19781C6[];
static  VTBL_ENTRY _tg__ZTV8S19781C7__8S19781C6[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C7[0]),
};
static  VTT_ENTRY vtt_S19781C6[] = {
  {&(_ZTV8S19781C6[4]),  4,7},
  {&(_ZTV8S19781C6[7]),  7,7},
  {&(_tg__ZTV8S19781C7__8S19781C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19781C6[];
extern  VTBL_ENTRY _ZTV8S19781C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C6[];
Class_Descriptor cd_S19781C6 = {  "S19781C6", // class name
  bases_S19781C6, 3,
  &(vtc_S19781C6[0]), // expected_vtbl_contents
  &(vtt_S19781C6[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19781C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19781C6),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19781C6),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  S19781C5  : S19781C6 , S19781C3 {
  ::S3600C19 s19781c5f0;
  ~S19781C5(); // tgen
  S19781C5(); // tgen
};
//SIG(-1 S19781C5) C1{ BC2{ VBC3{ m} VBC4{ BC5{ m Fp} VBC3 FU6{ m}} Fi} BC7{ VBC5 BC3} FC3}


S19781C5 ::~S19781C5(){ note_dtor("S19781C5", this);} // tgen
S19781C5 ::S19781C5(){ note_ctor("S19781C5", this);} // tgen

static void Test_S19781C5()
{
  extern Class_Descriptor cd_S19781C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S19781C5, buf);
    S19781C5 *dp, &lv = *(dp=new (buf) S19781C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S19781C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19781C5)");
    check_base_class_offset(lv, (S3600C19*)(S19781C6*), 0, "S19781C5");
    check_base_class_offset(lv, (S3600C19*)(S19781C7*), 0, "S19781C5");
    check_base_class_offset(lv, (S3600C29_nt*)(S19781C7*), ABISELECT(40,20), "S19781C5");
    check_base_class_offset(lv, (S19781C7*)(S19781C6*), ABISELECT(32,16), "S19781C5");
    check_base_class_offset(lv, (S19781C6*), 0, "S19781C5");
    check_base_class_offset(lv, (S3600C29_nt*)(S19781C3*), ABISELECT(56,28), "S19781C5");
    check_base_class_offset(lv, (S3600C19*)(S19781C3*), ABISELECT(16,8), "S19781C5");
    check_base_class_offset(lv, (S19781C3*), ABISELECT(16,8), "S19781C5");
    check_field_offset(lv, s19781c5f0, ABISELECT(24,12), "S19781C5.s19781c5f0");
    test_class_info(&lv, &cd_S19781C5);
    dp->~S19781C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19781C5(Test_S19781C5, "S19781C5", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S19781C5C1Ev();
extern void _ZN8S19781C5D1Ev();
Name_Map name_map_S19781C5[] = {
  NSPAIR(_ZN8S19781C5C1Ev),
  NSPAIR(_ZN8S19781C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19781C7;
extern VTBL_ENTRY _ZTI8S19781C7[];
extern  VTBL_ENTRY _ZTV8S19781C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C7[];
extern Class_Descriptor cd_S19781C6;
extern VTBL_ENTRY _ZTI8S19781C6[];
extern  VTBL_ENTRY _ZTV8S19781C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19781C3;
extern VTBL_ENTRY _ZTI8S19781C3[];
extern  VTBL_ENTRY _ZTV8S19781C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C3[];
static Base_Class bases_S19781C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19781C7,    ABISELECT(32,16), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19781C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C29_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S19781C3,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI8S19781C5[];
static  VTBL_ENTRY vtc_S19781C5[] = {
  ABISELECT(56,28),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C5[0]),
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19781C5[0]),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19781C5[0]),
};
extern VTBL_ENTRY _ZTV8S19781C5[];
static  VTBL_ENTRY _tg__ZTV8S19781C6__8S19781C5[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__8S19781C6__8S19781C5[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19781C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C3__8S19781C5[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__8S19781C5[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C7[0]),
};
static  VTT_ENTRY vtt_S19781C5[] = {
  {&(_ZTV8S19781C5[5]),  5,11},
  {&(_tg__ZTV8S19781C6__8S19781C5[4]),  4,4},
  {&(_tg__ZTV8S19781C7__8S19781C6__8S19781C5[3]),  3,3},
  {&(_tg__ZTV8S19781C3__8S19781C5[3]),  3,3},
  {&(_ZTV8S19781C5[11]),  11,11},
  {&(_ZTV8S19781C5[8]),  8,11},
  {&(_tg__ZTV8S19781C7__8S19781C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19781C5[];
extern  VTBL_ENTRY _ZTV8S19781C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C5[];
Class_Descriptor cd_S19781C5 = {  "S19781C5", // class name
  bases_S19781C5, 7,
  &(vtc_S19781C5[0]), // expected_vtbl_contents
  &(vtt_S19781C5[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S19781C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19781C5),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19781C5),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  S19781C10  : S3600C19 , S3600C29_nt {
};
//SIG(-1 S19781C10) C1{ BC2{ m} BC3{ m Fp}}



static void Test_S19781C10()
{
  extern Class_Descriptor cd_S19781C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19781C10, buf);
    S19781C10 &lv = *(new (buf) S19781C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19781C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19781C10)");
    check_base_class_offset(lv, (S3600C19*), 0, "S19781C10");
    check_base_class_offset(lv, (S3600C29_nt*), 0, "S19781C10");
    test_class_info(&lv, &cd_S19781C10);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19781C10(Test_S19781C10, "S19781C10", ABISELECT(8,4));

#else // __cplusplus

extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S19781C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3600C29_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 _ZTI9S19781C10[];
Class_Descriptor cd_S19781C10 = {  "S19781C10", // class name
  bases_S19781C10, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19781C10),ABISELECT(56,32), //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  S19781C9  : virtual S19781C7 , S19781C10 {
  ~S19781C9(); // tgen
  S19781C9(); // tgen
};
//SIG(-1 S19781C9) C1{ VBC2{ BC3{ m Fp} VBC4{ m} FU5{ m}} BC6{ BC4 BC3}}


S19781C9 ::~S19781C9(){ note_dtor("S19781C9", this);} // tgen
S19781C9 ::S19781C9(){ note_ctor("S19781C9", this);} // tgen

static void Test_S19781C9()
{
  extern Class_Descriptor cd_S19781C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19781C9, buf);
    S19781C9 *dp, &lv = *(dp=new (buf) S19781C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19781C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19781C9)");
    check_base_class_offset(lv, (S3600C29_nt*)(S19781C7*), ABISELECT(24,12), "S19781C9");
    check_base_class_offset(lv, (S3600C19*)(S19781C7*), 0, "S19781C9");
    check_base_class_offset(lv, (S19781C7*), ABISELECT(16,8), "S19781C9");
    check_base_class_offset(lv, (S3600C19*)(S19781C10*), ABISELECT(8,4), "S19781C9");
    check_base_class_offset(lv, (S3600C29_nt*)(S19781C10*), ABISELECT(8,4), "S19781C9");
    check_base_class_offset(lv, (S19781C10*), ABISELECT(8,4), "S19781C9");
    test_class_info(&lv, &cd_S19781C9);
    dp->~S19781C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19781C9(Test_S19781C9, "S19781C9", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19781C9C1Ev();
extern void _ZN8S19781C9D1Ev();
Name_Map name_map_S19781C9[] = {
  NSPAIR(_ZN8S19781C9C1Ev),
  NSPAIR(_ZN8S19781C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19781C7;
extern VTBL_ENTRY _ZTI8S19781C7[];
extern  VTBL_ENTRY _ZTV8S19781C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C7[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19781C10;
extern VTBL_ENTRY _ZTI9S19781C10[];
static Base_Class bases_S19781C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19781C7,    ABISELECT(16,8), //bcp->offset
    4, //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},
  {&cd_S3600C19,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19781C10,    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 _ZTI8S19781C9[];
static  VTBL_ENTRY vtc_S19781C9[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C9[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19781C9[0]),
};
extern VTBL_ENTRY _ZTV8S19781C9[];
static  VTBL_ENTRY _tg__ZTV8S19781C7__8S19781C9[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C7[0]),
};
static  VTT_ENTRY vtt_S19781C9[] = {
  {&(_ZTV8S19781C9[4]),  4,7},
  {&(_ZTV8S19781C9[7]),  7,7},
  {&(_tg__ZTV8S19781C7__8S19781C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19781C9[];
extern  VTBL_ENTRY _ZTV8S19781C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C9[];
Class_Descriptor cd_S19781C9 = {  "S19781C9", // class name
  bases_S19781C9, 6,
  &(vtc_S19781C9[0]), // expected_vtbl_contents
  &(vtt_S19781C9[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19781C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19781C9),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19781C9),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  S19781C13  : virtual S19781C10 , virtual S19781C3 , S3600C29_nt {
  __tsi64 s19781c13f0[8];
  ~S19781C13(); // tgen
  S19781C13(); // tgen
};
//SIG(-1 S19781C13) C1{ VBC2{ BC3{ m} BC4{ m Fp}} VBC5{ VBC4 BC3} BC4 FL[8]}


S19781C13 ::~S19781C13(){ note_dtor("S19781C13", this);} // tgen
S19781C13 ::S19781C13(){ note_ctor("S19781C13", this);} // tgen

static void Test_S19781C13()
{
  extern Class_Descriptor cd_S19781C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,21)];
    init_test(&cd_S19781C13, buf);
    S19781C13 *dp, &lv = *(dp=new (buf) S19781C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,80), "sizeof(S19781C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19781C13)");
    check_base_class_offset(lv, (S3600C19*)(S19781C10*), ABISELECT(80,72), "S19781C13");
    check_base_class_offset(lv, (S3600C29_nt*)(S19781C10*), ABISELECT(80,72), "S19781C13");
    check_base_class_offset(lv, (S19781C10*), ABISELECT(80,72), "S19781C13");
    check_base_class_offset(lv, (S3600C29_nt*)(S19781C3*), ABISELECT(88,76), "S19781C13");
    check_base_class_offset(lv, (S3600C19*)(S19781C3*), 0, "S19781C13");
    check_base_class_offset(lv, (S19781C3*), 0, "S19781C13");
    /*is_ambiguous_... S19781C13::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S19781C13");
    check_field_offset(lv, s19781c13f0, ABISELECT(16,8), "S19781C13.s19781c13f0");
    test_class_info(&lv, &cd_S19781C13);
    dp->~S19781C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19781C13(Test_S19781C13, "S19781C13", ABISELECT(96,80));

#else // __cplusplus

extern void _ZN9S19781C13C1Ev();
extern void _ZN9S19781C13D1Ev();
Name_Map name_map_S19781C13[] = {
  NSPAIR(_ZN9S19781C13C1Ev),
  NSPAIR(_ZN9S19781C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19781C10;
extern VTBL_ENTRY _ZTI9S19781C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19781C3;
extern VTBL_ENTRY _ZTI8S19781C3[];
extern  VTBL_ENTRY _ZTV8S19781C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C3[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S19781C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S19781C10,    ABISELECT(80,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_S3600C29_nt,    ABISELECT(88,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19781C3,    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},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19781C13[];
static  VTBL_ENTRY vtc_S19781C13[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19781C13[0]),
};
extern VTBL_ENTRY _ZTV9S19781C13[];
static  VTBL_ENTRY _tg__ZTV8S19781C3__9S19781C13[] = {
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C3[0]),
};
static  VTT_ENTRY vtt_S19781C13[] = {
  {&(_ZTV9S19781C13[5]),  5,5},
  {&(_ZTV9S19781C13[5]),  5,5},
  {&(_tg__ZTV8S19781C3__9S19781C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19781C13[];
extern  VTBL_ENTRY _ZTV9S19781C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19781C13[];
Class_Descriptor cd_S19781C13 = {  "S19781C13", // class name
  bases_S19781C13, 7,
  &(vtc_S19781C13[0]), // expected_vtbl_contents
  &(vtt_S19781C13[0]), // expected_vtt_contents
  ABISELECT(96,80), // object size
  NSPAIRA(_ZTI9S19781C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19781C13),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19781C13),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  S19781C12  : virtual S3600C19 , S19781C5 , S19781C3 , virtual S19781C13 {
  virtual  ~S19781C12(); // _ZN9S19781C12D2Ev
  S19781C12(); // tgen
};
//SIG(-1 S19781C12) C1{ VBC2{ m} BC3{ BC4{ VBC2 VBC5{ BC6{ m Fp} VBC2 FU7{ m}} Fi} BC8{ VBC6 BC2} FC2} BC8 VBC9{ VBC10{ BC2 BC6} VBC8 BC6 FL[8]} vd}


 S19781C12 ::~S19781C12(){ note_dtor("S19781C12", this);}
S19781C12 ::S19781C12(){ note_ctor("S19781C12", this);} // tgen

static void Test_S19781C12()
{
  extern Class_Descriptor cd_S19781C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S19781C12, buf);
    S19781C12 *dp, &lv = *(dp=new (buf) S19781C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S19781C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19781C12)");
    /*is_ambiguous_... S19781C12::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), 0, "S19781C12");
    check_base_class_offset(lv, (S3600C19*)(S19781C6*)(S19781C5*), 0, "S19781C12");
    check_base_class_offset(lv, (S3600C19*)(S19781C7*), 0, "S19781C12");
    check_base_class_offset(lv, (S3600C29_nt*)(S19781C7*), ABISELECT(48,24), "S19781C12");
    check_base_class_offset(lv, (S19781C7*)(S19781C6*)(S19781C5*), ABISELECT(40,20), "S19781C12");
    check_base_class_offset(lv, (S19781C6*)(S19781C5*), 0, "S19781C12");
    check_base_class_offset(lv, (S3600C29_nt*)(S19781C3*)(S19781C5*), ABISELECT(64,32), "S19781C12");
    /*is_ambiguous_... S19781C12::S19781C3 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C3*), ABISELECT(64,32), "S19781C12");
    /*is_ambiguous_... S19781C12::S19781C3 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C3*), ABISELECT(64,32), "S19781C12");
    check_base_class_offset(lv, (S3600C19*)(S19781C3*)(S19781C5*), ABISELECT(16,8), "S19781C12");
    check_base_class_offset(lv, (S19781C3*)(S19781C5*), ABISELECT(16,8), "S19781C12");
    check_base_class_offset(lv, (S19781C5*), 0, "S19781C12");
    /*is_ambiguous_... S19781C12::S19781C3 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C3*), ABISELECT(32,16), "S19781C12");
    /*is_ambiguous_... S19781C12::S19781C3 */ AMB_check_base_class_offset(lv, (S19781C3*), ABISELECT(32,16), "S19781C12");
    check_base_class_offset(lv, (S3600C19*)(S19781C10*), ABISELECT(152,108), "S19781C12");
    check_base_class_offset(lv, (S3600C29_nt*)(S19781C10*), ABISELECT(152,108), "S19781C12");
    check_base_class_offset(lv, (S19781C10*)(S19781C13*), ABISELECT(152,108), "S19781C12");
    /*is_ambiguous_... S19781C12::S19781C3 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C3*), ABISELECT(72,36), "S19781C12");
    check_base_class_offset(lv, (S19781C3*)(S19781C13*), ABISELECT(72,36), "S19781C12");
    /*is_ambiguous_... S19781C13::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C13*), ABISELECT(80,40), "S19781C12");
    check_base_class_offset(lv, (S19781C13*), ABISELECT(72,36), "S19781C12");
    test_class_info(&lv, &cd_S19781C12);
    dp->~S19781C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19781C12(Test_S19781C12, "S19781C12", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN9S19781C12C1Ev();
extern void _ZN9S19781C12D2Ev();
Name_Map name_map_S19781C12[] = {
  NSPAIR(_ZN9S19781C12C1Ev),
  NSPAIR(_ZN9S19781C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19781C7;
extern VTBL_ENTRY _ZTI8S19781C7[];
extern  VTBL_ENTRY _ZTV8S19781C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C7[];
extern Class_Descriptor cd_S19781C6;
extern VTBL_ENTRY _ZTI8S19781C6[];
extern  VTBL_ENTRY _ZTV8S19781C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19781C3;
extern VTBL_ENTRY _ZTI8S19781C3[];
extern  VTBL_ENTRY _ZTV8S19781C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C3[];
extern Class_Descriptor cd_S19781C5;
extern VTBL_ENTRY _ZTI8S19781C5[];
extern  VTBL_ENTRY _ZTV8S19781C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C5[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19781C3;
extern VTBL_ENTRY _ZTI8S19781C3[];
extern  VTBL_ENTRY _ZTV8S19781C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19781C10;
extern VTBL_ENTRY _ZTI9S19781C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19781C3;
extern VTBL_ENTRY _ZTI8S19781C3[];
extern  VTBL_ENTRY _ZTV8S19781C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C3[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19781C13;
extern VTBL_ENTRY _ZTI9S19781C13[];
extern  VTBL_ENTRY _ZTV9S19781C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19781C13[];
static Base_Class bases_S19781C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19781C7,    ABISELECT(40,20), //bcp->offset
    16, //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
    3, //immediately_derived
  0, 1},
  {&cd_S19781C6,    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
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S19781C3,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19781C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19781C3,    ABISELECT(32,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19781C10,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19781C3,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19781C13,    ABISELECT(72,36), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19781C12[];
extern void _ZN9S19781C12D1Ev();
extern void _ZN9S19781C12D0Ev();
static  VTBL_ENTRY vtc_S19781C12[] = {
  ABISELECT(72,36),
  ABISELECT(152,108),
  ABISELECT(72,36),
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19781C12[0]),
  (VTBL_ENTRY)&_ZN9S19781C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19781C12D0Ev,
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19781C12[0]),
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19781C12[0]),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19781C12[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S19781C12[0]),
};
extern VTBL_ENTRY _ZTV9S19781C12[];
static  VTBL_ENTRY _tg__ZTV8S19781C5__9S19781C12[] = {
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C68S19781C5__9S19781C12[] = {
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__8S19781C68S19781C5__9S19781C12[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19781C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C38S19781C5__9S19781C12[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__8S19781C5__9S19781C12[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19781C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C3__8S19781C5__9S19781C12[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19781C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C3__A__9S19781C12[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__9S19781C12[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19781C13__9S19781C12[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19781C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C3__A2__9S19781C12[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C3[0]),
};
static  VTT_ENTRY vtt_S19781C12[] = {
  {&(_ZTV9S19781C12[8]),  8,24},
  {&(_tg__ZTV8S19781C5__9S19781C12[5]),  5,5},
  {&(_tg__ZTV8S19781C68S19781C5__9S19781C12[4]),  4,4},
  {&(_tg__ZTV8S19781C7__8S19781C68S19781C5__9S19781C12[3]),  3,3},
  {&(_tg__ZTV8S19781C38S19781C5__9S19781C12[3]),  3,3},
  {&(_tg__ZTV8S19781C7__8S19781C5__9S19781C12[3]),  3,3},
  {&(_tg__ZTV8S19781C3__8S19781C5__9S19781C12[3]),  3,3},
  {&(_tg__ZTV8S19781C3__A__9S19781C12[3]),  3,3},
  {&(_ZTV9S19781C12[19]),  19,24},
  {&(_ZTV9S19781C12[13]),  13,24},
  {&(_ZTV9S19781C12[16]),  16,24},
  {&(_ZTV9S19781C12[24]),  24,24},
  {&(_ZTV9S19781C12[24]),  24,24},
  {&(_tg__ZTV8S19781C7__9S19781C12[3]),  3,3},
  {&(_tg__ZTV9S19781C13__9S19781C12[5]),  5,5},
  {&(_tg__ZTV9S19781C13__9S19781C12[5]),  5,5},
  {&(_tg__ZTV8S19781C3__A2__9S19781C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19781C12[];
extern  VTBL_ENTRY _ZTV9S19781C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19781C12[];
Class_Descriptor cd_S19781C12 = {  "S19781C12", // class name
  bases_S19781C12, 17,
  &(vtc_S19781C12[0]), // expected_vtbl_contents
  &(vtt_S19781C12[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI9S19781C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19781C12),24, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19781C12),17, //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  S19781C11  : virtual S19781C12 , S19781C3 , virtual S19781C9 , S3600C29_nt , virtual S19781C5 {
  virtual  ~S19781C11(); // _ZN9S19781C11D2Ev
  S19781C11(); // tgen
};
//SIG(-1 S19781C11) C1{ VBC2{ VBC3{ m} BC4{ BC5{ VBC3 VBC6{ BC7{ m Fp} VBC3 FU8{ m}} Fi} BC9{ VBC7 BC3} FC3} BC9 VBC10{ VBC11{ BC3 BC7} VBC9 BC7 FL[8]} vd} BC9 VBC12{ VBC6 BC11} BC7 VBC4 vd}


 S19781C11 ::~S19781C11(){ note_dtor("S19781C11", this);}
S19781C11 ::S19781C11(){ note_ctor("S19781C11", this);} // tgen

static void Test_S19781C11()
{
  extern Class_Descriptor cd_S19781C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,37)];
    init_test(&cd_S19781C11, buf);
    S19781C11 *dp, &lv = *(dp=new (buf) S19781C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,144), "sizeof(S19781C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19781C11)");
    /*is_ambiguous_... S19781C12::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C12*), ABISELECT(56,28), "S19781C11");
    check_base_class_offset(lv, (S3600C19*)(S19781C6*)(S19781C5*)(S19781C12*), ABISELECT(56,28), "S19781C11");
    check_base_class_offset(lv, (S3600C19*)(S19781C7*), ABISELECT(56,28), "S19781C11");
    /*is_ambiguous_... S19781C11::S19781C5 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C6*)(S19781C5*), ABISELECT(56,28), "S19781C11");
    check_base_class_offset(lv, (S3600C29_nt*)(S19781C7*), ABISELECT(64,32), "S19781C11");
    check_base_class_offset(lv, (S19781C7*)(S19781C6*)(S19781C5*)(S19781C12*), ABISELECT(56,28), "S19781C11");
    check_base_class_offset(lv, (S19781C7*)(S19781C9*), ABISELECT(56,28), "S19781C11");
    /*is_ambiguous_... S19781C11::S19781C5 */ AMB_check_base_class_offset(lv, (S19781C7*)(S19781C6*)(S19781C5*), ABISELECT(56,28), "S19781C11");
    check_base_class_offset(lv, (S19781C6*)(S19781C5*)(S19781C12*), ABISELECT(16,8), "S19781C11");
    check_base_class_offset(lv, (S3600C29_nt*)(S19781C3*)(S19781C5*)(S19781C12*), ABISELECT(80,40), "S19781C11");
    /*is_ambiguous_... S19781C12::S19781C3 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C3*)(S19781C12*), ABISELECT(80,40), "S19781C11");
    /*is_ambiguous_... S19781C11::S19781C3 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C3*), ABISELECT(80,40), "S19781C11");
    /*is_ambiguous_... S19781C11::S19781C3 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C3*), ABISELECT(80,40), "S19781C11");
    /*is_ambiguous_... S19781C11::S19781C5 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C3*)(S19781C5*), ABISELECT(80,40), "S19781C11");
    check_base_class_offset(lv, (S3600C19*)(S19781C3*)(S19781C5*)(S19781C12*), ABISELECT(32,16), "S19781C11");
    check_base_class_offset(lv, (S19781C3*)(S19781C5*)(S19781C12*), ABISELECT(32,16), "S19781C11");
    check_base_class_offset(lv, (S19781C5*)(S19781C12*), ABISELECT(16,8), "S19781C11");
    /*is_ambiguous_... S19781C12::S19781C3 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C3*)(S19781C12*), ABISELECT(48,24), "S19781C11");
    /*is_ambiguous_... S19781C12::S19781C3 */ AMB_check_base_class_offset(lv, (S19781C3*)(S19781C12*), ABISELECT(48,24), "S19781C11");
    /*is_ambiguous_... S19781C11::S19781C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C10*), ABISELECT(168,116), "S19781C11");
    /*is_ambiguous_... S19781C11::S19781C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C10*), ABISELECT(168,116), "S19781C11");
    check_base_class_offset(lv, (S19781C10*)(S19781C13*), ABISELECT(168,116), "S19781C11");
    /*is_ambiguous_... S19781C11::S19781C3 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C3*), ABISELECT(88,44), "S19781C11");
    check_base_class_offset(lv, (S19781C3*)(S19781C13*), ABISELECT(88,44), "S19781C11");
    /*is_ambiguous_... S19781C13::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C13*), ABISELECT(96,48), "S19781C11");
    check_base_class_offset(lv, (S19781C13*)(S19781C12*), ABISELECT(88,44), "S19781C11");
    check_base_class_offset(lv, (S19781C12*), ABISELECT(16,8), "S19781C11");
    /*is_ambiguous_... S19781C11::S19781C3 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C3*), 0, "S19781C11");
    /*is_ambiguous_... S19781C11::S19781C3 */ AMB_check_base_class_offset(lv, (S19781C3*), 0, "S19781C11");
    check_base_class_offset(lv, (S3600C19*)(S19781C10*)(S19781C9*), ABISELECT(184,124), "S19781C11");
    check_base_class_offset(lv, (S3600C29_nt*)(S19781C10*)(S19781C9*), ABISELECT(184,124), "S19781C11");
    check_base_class_offset(lv, (S19781C10*)(S19781C9*), ABISELECT(184,124), "S19781C11");
    check_base_class_offset(lv, (S19781C9*), ABISELECT(176,120), "S19781C11");
    /*is_ambiguous_... S19781C11::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S19781C11");
    /*is_ambiguous_... S19781C11::S19781C5 */ AMB_check_base_class_offset(lv, (S19781C6*)(S19781C5*), ABISELECT(192,128), "S19781C11");
    /*is_ambiguous_... S19781C11::S19781C5 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C3*)(S19781C5*), ABISELECT(208,136), "S19781C11");
    /*is_ambiguous_... S19781C11::S19781C5 */ AMB_check_base_class_offset(lv, (S19781C3*)(S19781C5*), ABISELECT(208,136), "S19781C11");
    /*is_ambiguous_... S19781C11::S19781C5 */ AMB_check_base_class_offset(lv, (S19781C5*), ABISELECT(192,128), "S19781C11");
    test_class_info(&lv, &cd_S19781C11);
    dp->~S19781C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19781C11(Test_S19781C11, "S19781C11", ABISELECT(224,144));

#else // __cplusplus

extern void _ZN9S19781C11C1Ev();
extern void _ZN9S19781C11D2Ev();
Name_Map name_map_S19781C11[] = {
  NSPAIR(_ZN9S19781C11C1Ev),
  NSPAIR(_ZN9S19781C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19781C7;
extern VTBL_ENTRY _ZTI8S19781C7[];
extern  VTBL_ENTRY _ZTV8S19781C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C7[];
extern Class_Descriptor cd_S19781C6;
extern VTBL_ENTRY _ZTI8S19781C6[];
extern  VTBL_ENTRY _ZTV8S19781C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19781C3;
extern VTBL_ENTRY _ZTI8S19781C3[];
extern  VTBL_ENTRY _ZTV8S19781C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C3[];
extern Class_Descriptor cd_S19781C5;
extern VTBL_ENTRY _ZTI8S19781C5[];
extern  VTBL_ENTRY _ZTV8S19781C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C5[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19781C3;
extern VTBL_ENTRY _ZTI8S19781C3[];
extern  VTBL_ENTRY _ZTV8S19781C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19781C10;
extern VTBL_ENTRY _ZTI9S19781C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19781C3;
extern VTBL_ENTRY _ZTI8S19781C3[];
extern  VTBL_ENTRY _ZTV8S19781C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C3[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19781C13;
extern VTBL_ENTRY _ZTI9S19781C13[];
extern  VTBL_ENTRY _ZTV9S19781C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19781C13[];
extern Class_Descriptor cd_S19781C12;
extern VTBL_ENTRY _ZTI9S19781C12[];
extern  VTBL_ENTRY _ZTV9S19781C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19781C12[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19781C3;
extern VTBL_ENTRY _ZTI8S19781C3[];
extern  VTBL_ENTRY _ZTV8S19781C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19781C10;
extern VTBL_ENTRY _ZTI9S19781C10[];
extern Class_Descriptor cd_S19781C9;
extern VTBL_ENTRY _ZTI8S19781C9[];
extern  VTBL_ENTRY _ZTV8S19781C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C9[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19781C6;
extern VTBL_ENTRY _ZTI8S19781C6[];
extern  VTBL_ENTRY _ZTV8S19781C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C6[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19781C3;
extern VTBL_ENTRY _ZTI8S19781C3[];
extern  VTBL_ENTRY _ZTV8S19781C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C3[];
extern Class_Descriptor cd_S19781C5;
extern VTBL_ENTRY _ZTI8S19781C5[];
extern  VTBL_ENTRY _ZTV8S19781C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C5[];
static Base_Class bases_S19781C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19781C7,    ABISELECT(56,28), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19781C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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
    6, //immediately_derived
  0, 0},
  {&cd_S19781C3,    ABISELECT(32,16), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19781C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    17, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19781C3,    ABISELECT(48,24), //bcp->offset
    27, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    12, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    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
    12, //immediately_derived
  0, 0},
  {&cd_S19781C10,    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
    16, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19781C3,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19781C13,    ABISELECT(88,44), //bcp->offset
    33, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19781C12,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19781C3,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(184,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
    22, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(184,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
    22, //immediately_derived
  0, 0},
  {&cd_S19781C10,    ABISELECT(184,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
    23, //immediately_derived
  0, 0},
  {&cd_S19781C9,    ABISELECT(176,120), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19781C6,    ABISELECT(192,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(208,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
    27, //immediately_derived
  0, 0},
  {&cd_S19781C3,    ABISELECT(208,136), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19781C5,    ABISELECT(192,128), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19781C11[];
extern void _ZN9S19781C11D1Ev();
extern void _ZN9S19781C11D0Ev();
extern void ABISELECT(_ZTv0_n72_N9S19781C11D1Ev,_ZTv0_n36_N9S19781C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19781C11D1Ev,_ZThn8_N9S19781C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19781C11D0Ev,_ZTv0_n36_N9S19781C11D0Ev)();
extern void ABISELECT(_ZThn16_N9S19781C11D0Ev,_ZThn8_N9S19781C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19781C11[] = {
  ABISELECT(192,128),
  ABISELECT(176,120),
  ABISELECT(88,44),
  ABISELECT(168,116),
  ABISELECT(88,44),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19781C11[0]),
  (VTBL_ENTRY)&_ZN9S19781C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19781C11D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  ABISELECT(152,108),
  ABISELECT(72,36),
  ABISELECT(64,32),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19781C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19781C11D1Ev,_ZTv0_n36_N9S19781C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19781C11D0Ev,_ZTv0_n36_N9S19781C11D0Ev),
  ABISELECT(48,24),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19781C11[0]),
  ABISELECT(32,16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19781C11[0]),
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19781C11[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI9S19781C11[0]),
  ABISELECT(-120,-92),
  ABISELECT(-120,-92),
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI9S19781C11[0]),
  ABISELECT(-112,-88),
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI9S19781C11[0]),
  ABISELECT(-128,-96),
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI9S19781C11[0]),
};
extern VTBL_ENTRY _ZTV9S19781C11[];
static  VTBL_ENTRY _tg__ZTV8S19781C3__A__9S19781C11[] = {
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C3[0]),
};
extern void _ZN9S19781C12D1Ev();
extern void _ZN9S19781C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19781C12__9S19781C11[] = {
  ABISELECT(72,36),
  ABISELECT(152,108),
  ABISELECT(72,36),
  ABISELECT(64,32),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19781C12[0]),
  (VTBL_ENTRY)&_ZN9S19781C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19781C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19781C59S19781C12__9S19781C11[] = {
  ABISELECT(64,32),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C68S19781C59S19781C12__9S19781C11[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__8S19781C68S19781C59S19781C12__9S19781C11[] = {
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19781C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C38S19781C59S19781C12__9S19781C11[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__8S19781C59S19781C12__9S19781C11[] = {
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19781C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C3__8S19781C59S19781C12__9S19781C11[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19781C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C39S19781C12__A1__9S19781C11[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__9S19781C12__9S19781C11[] = {
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19781C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C38S19781C5__9S19781C12__9S19781C11[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19781C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C3__A__9S19781C12__9S19781C11[] = {
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19781C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19781C13__9S19781C12__9S19781C11[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S19781C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__9S19781C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19781C13__9S19781C11[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19781C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C3__A2__9S19781C11[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C9__9S19781C11[] = {
  ABISELECT(-120,-92),
  ABISELECT(-120,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__8S19781C9__9S19781C11[] = {
  0,
  ABISELECT(120,92),
  (VTBL_ENTRY)&(_ZTI8S19781C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C5__A1__9S19781C11[] = {
  ABISELECT(-112,-88),
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C68S19781C5__A1__9S19781C11[] = {
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__8S19781C68S19781C5__A1__9S19781C11[] = {
  0,
  ABISELECT(136,100),
  (VTBL_ENTRY)&(_ZTI8S19781C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C38S19781C5__A4__9S19781C11[] = {
  ABISELECT(-128,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__8S19781C5__A1__9S19781C11[] = {
  0,
  ABISELECT(136,100),
  (VTBL_ENTRY)&(_ZTI8S19781C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C3__8S19781C5__A1__9S19781C11[] = {
  ABISELECT(-128,-96),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19781C5[0]),
};
static  VTT_ENTRY vtt_S19781C11[] = {
  {&(_ZTV9S19781C11[11]),  11,50},
  {&(_tg__ZTV8S19781C3__A__9S19781C11[3]),  3,3},
  {&(_ZTV9S19781C11[22]),  22,50},
  {&(_ZTV9S19781C11[33]),  33,50},
  {&(_ZTV9S19781C11[27]),  27,50},
  {&(_ZTV9S19781C11[30]),  30,50},
  {&(_ZTV9S19781C11[38]),  38,50},
  {&(_ZTV9S19781C11[38]),  38,50},
  {&(_ZTV9S19781C11[42]),  42,50},
  {&(_ZTV9S19781C11[47]),  47,50},
  {&(_ZTV9S19781C11[50]),  50,50},
  {&(_tg__ZTV9S19781C12__9S19781C11[8]),  8,10},
  {&(_tg__ZTV8S19781C59S19781C12__9S19781C11[5]),  5,5},
  {&(_tg__ZTV8S19781C68S19781C59S19781C12__9S19781C11[4]),  4,4},
  {&(_tg__ZTV8S19781C7__8S19781C68S19781C59S19781C12__9S19781C11[3]),  3,3},
  {&(_tg__ZTV8S19781C38S19781C59S19781C12__9S19781C11[3]),  3,3},
  {&(_tg__ZTV8S19781C7__8S19781C59S19781C12__9S19781C11[3]),  3,3},
  {&(_tg__ZTV8S19781C3__8S19781C59S19781C12__9S19781C11[3]),  3,3},
  {&(_tg__ZTV8S19781C39S19781C12__A1__9S19781C11[3]),  3,3},
  {&(_tg__ZTV8S19781C7__9S19781C12__9S19781C11[3]),  3,3},
  {&(_tg__ZTV8S19781C38S19781C5__9S19781C12__9S19781C11[3]),  3,3},
  {&(_tg__ZTV8S19781C3__A__9S19781C12__9S19781C11[3]),  3,3},
  {&(_tg__ZTV9S19781C13__9S19781C12__9S19781C11[5]),  5,5},
  {&(_tg__ZTV9S19781C13__9S19781C12__9S19781C11[5]),  5,5},
  {&(_tg__ZTV8S19781C7__9S19781C11[3]),  3,3},
  {&(_tg__ZTV9S19781C13__9S19781C11[5]),  5,5},
  {&(_tg__ZTV9S19781C13__9S19781C11[5]),  5,5},
  {&(_tg__ZTV8S19781C3__A2__9S19781C11[3]),  3,3},
  {&(_tg__ZTV8S19781C9__9S19781C11[4]),  4,4},
  {&(_tg__ZTV8S19781C7__8S19781C9__9S19781C11[3]),  3,3},
  {&(_tg__ZTV8S19781C5__A1__9S19781C11[5]),  5,5},
  {&(_tg__ZTV8S19781C68S19781C5__A1__9S19781C11[4]),  4,4},
  {&(_tg__ZTV8S19781C7__8S19781C68S19781C5__A1__9S19781C11[3]),  3,3},
  {&(_tg__ZTV8S19781C38S19781C5__A4__9S19781C11[3]),  3,3},
  {&(_tg__ZTV8S19781C7__8S19781C5__A1__9S19781C11[3]),  3,3},
  {&(_tg__ZTV8S19781C3__8S19781C5__A1__9S19781C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19781C11[];
extern  VTBL_ENTRY _ZTV9S19781C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19781C11[];
static VTBL_ENTRY alt_thunk_names103[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19781C11D0Ev,_ZTv0_n36_N9S19781C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19781C11D0Ev,_ZThn8_N9S19781C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19781C11D1Ev,_ZTv0_n36_N9S19781C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19781C11D1Ev,_ZThn8_N9S19781C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19781C11 = {  "S19781C11", // class name
  bases_S19781C11, 29,
  &(vtc_S19781C11[0]), // expected_vtbl_contents
  &(vtt_S19781C11[0]), // expected_vtt_contents
  ABISELECT(224,144), // object size
  NSPAIRA(_ZTI9S19781C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19781C11),50, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19781C11),36, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names103,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19781C1  : virtual S3600C29_nt , S19781C3 , virtual S19781C5 , S19781C9 , S19781C11 {
  ~S19781C1(); // tgen
  S19781C1(); // tgen
};
//SIG(1 S19781C1) C1{ VBC2{ m Fp} BC3{ VBC2 BC4{ m}} VBC5{ BC6{ VBC4 VBC7{ BC2 VBC4 FU8{ m}} Fi} BC3 FC4} BC9{ VBC7 BC10{ BC4 BC2}} BC11{ VBC12{ VBC4 BC5 BC3 VBC13{ VBC10 VBC3 BC2 FL[8]} vd} BC3 VBC9 BC2 VBC5 vd}}


S19781C1 ::~S19781C1(){ note_dtor("S19781C1", this);} // tgen
S19781C1 ::S19781C1(){ note_ctor("S19781C1", this);} // tgen

static void Test_S19781C1()
{
  extern Class_Descriptor cd_S19781C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,40)];
    init_test(&cd_S19781C1, buf);
    S19781C1 *dp, &lv = *(dp=new (buf) S19781C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,156), "sizeof(S19781C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19781C1)");
    /*is_ambiguous_... S19781C1::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(40,20), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C3 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C3*), ABISELECT(40,20), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C5 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C3*)(S19781C5*), ABISELECT(40,20), "S19781C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S19781C3*)(S19781C5*)(S19781C12*), ABISELECT(40,20), "S19781C1");
    /*is_ambiguous_... S19781C12::S19781C3 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C3*)(S19781C12*), ABISELECT(40,20), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C3 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C3*), ABISELECT(40,20), "S19781C1");
    /*is_ambiguous_... S19781C11::S19781C3 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C3*)(S19781C11*), ABISELECT(40,20), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C3 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C3*), 0, "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C3 */ AMB_check_base_class_offset(lv, (S19781C3*), 0, "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C5 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C6*)(S19781C5*), ABISELECT(73,37), "S19781C1");
    check_base_class_offset(lv, (S3600C19*)(S19781C7*), ABISELECT(73,37), "S19781C1");
    /*is_ambiguous_... S19781C12::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C12*), ABISELECT(73,37), "S19781C1");
    check_base_class_offset(lv, (S3600C19*)(S19781C6*)(S19781C5*)(S19781C12*), ABISELECT(73,37), "S19781C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S19781C7*), ABISELECT(88,44), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C5 */ AMB_check_base_class_offset(lv, (S19781C7*)(S19781C6*)(S19781C5*), ABISELECT(80,40), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C9 */ AMB_check_base_class_offset(lv, (S19781C7*)(S19781C9*), ABISELECT(80,40), "S19781C1");
    check_base_class_offset(lv, (S19781C7*)(S19781C6*)(S19781C5*)(S19781C12*), ABISELECT(80,40), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C9 */ AMB_check_base_class_offset(lv, (S19781C7*)(S19781C9*), ABISELECT(80,40), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C5 */ AMB_check_base_class_offset(lv, (S19781C6*)(S19781C5*), ABISELECT(48,24), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C5 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C3*)(S19781C5*), ABISELECT(64,32), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C5 */ AMB_check_base_class_offset(lv, (S19781C3*)(S19781C5*), ABISELECT(64,32), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C5 */ AMB_check_base_class_offset(lv, (S19781C5*), ABISELECT(48,24), "S19781C1");
    /*is_ambiguous_... S19781C11::S19781C5 */ AMB_check_base_class_offset(lv, (S19781C5*)(S19781C11*), ABISELECT(48,24), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C9 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C10*)(S19781C9*), ABISELECT(16,8), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C9 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C10*)(S19781C9*), ABISELECT(16,8), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C9 */ AMB_check_base_class_offset(lv, (S19781C10*)(S19781C9*), ABISELECT(16,8), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C9 */ AMB_check_base_class_offset(lv, (S19781C9*), ABISELECT(8,4), "S19781C1");
    check_base_class_offset(lv, (S19781C6*)(S19781C5*)(S19781C12*), ABISELECT(104,52), "S19781C1");
    check_base_class_offset(lv, (S3600C19*)(S19781C3*)(S19781C5*)(S19781C12*), ABISELECT(120,60), "S19781C1");
    check_base_class_offset(lv, (S19781C3*)(S19781C5*)(S19781C12*), ABISELECT(120,60), "S19781C1");
    check_base_class_offset(lv, (S19781C5*)(S19781C12*), ABISELECT(104,52), "S19781C1");
    /*is_ambiguous_... S19781C12::S19781C3 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C3*)(S19781C12*), ABISELECT(136,68), "S19781C1");
    /*is_ambiguous_... S19781C12::S19781C3 */ AMB_check_base_class_offset(lv, (S19781C3*)(S19781C12*), ABISELECT(136,68), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C10*), ABISELECT(224,144), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C10*), ABISELECT(224,144), "S19781C1");
    check_base_class_offset(lv, (S19781C10*)(S19781C13*), ABISELECT(224,144), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C3 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C3*), ABISELECT(144,72), "S19781C1");
    check_base_class_offset(lv, (S19781C3*)(S19781C13*), ABISELECT(144,72), "S19781C1");
    /*is_ambiguous_... S19781C13::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C13*), ABISELECT(152,76), "S19781C1");
    check_base_class_offset(lv, (S19781C13*)(S19781C12*), ABISELECT(144,72), "S19781C1");
    check_base_class_offset(lv, (S19781C12*)(S19781C11*), ABISELECT(104,52), "S19781C1");
    /*is_ambiguous_... S19781C11::S19781C3 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C3*)(S19781C11*), ABISELECT(24,12), "S19781C1");
    /*is_ambiguous_... S19781C11::S19781C3 */ AMB_check_base_class_offset(lv, (S19781C3*)(S19781C11*), ABISELECT(24,12), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C9 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19781C10*)(S19781C9*), ABISELECT(240,152), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C9 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C10*)(S19781C9*), ABISELECT(240,152), "S19781C1");
    /*is_ambiguous_... S19781C1::S19781C9 */ AMB_check_base_class_offset(lv, (S19781C10*)(S19781C9*), ABISELECT(240,152), "S19781C1");
    check_base_class_offset(lv, (S19781C9*)(S19781C11*), ABISELECT(232,148), "S19781C1");
    /*is_ambiguous_... S19781C11::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19781C11*), ABISELECT(32,16), "S19781C1");
    check_base_class_offset(lv, (S19781C11*), ABISELECT(24,12), "S19781C1");
    test_class_info(&lv, &cd_S19781C1);
    dp->~S19781C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19781C1(Test_S19781C1, "S19781C1", ABISELECT(248,156));

#else // __cplusplus

extern void _ZN8S19781C1C1Ev();
extern void _ZN8S19781C1D1Ev();
Name_Map name_map_S19781C1[] = {
  NSPAIR(_ZN8S19781C1C1Ev),
  NSPAIR(_ZN8S19781C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19781C3;
extern VTBL_ENTRY _ZTI8S19781C3[];
extern  VTBL_ENTRY _ZTV8S19781C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19781C7;
extern VTBL_ENTRY _ZTI8S19781C7[];
extern  VTBL_ENTRY _ZTV8S19781C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C7[];
extern Class_Descriptor cd_S19781C6;
extern VTBL_ENTRY _ZTI8S19781C6[];
extern  VTBL_ENTRY _ZTV8S19781C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C6[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19781C3;
extern VTBL_ENTRY _ZTI8S19781C3[];
extern  VTBL_ENTRY _ZTV8S19781C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C3[];
extern Class_Descriptor cd_S19781C5;
extern VTBL_ENTRY _ZTI8S19781C5[];
extern  VTBL_ENTRY _ZTV8S19781C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C5[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19781C10;
extern VTBL_ENTRY _ZTI9S19781C10[];
extern Class_Descriptor cd_S19781C9;
extern VTBL_ENTRY _ZTI8S19781C9[];
extern  VTBL_ENTRY _ZTV8S19781C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C9[];
extern Class_Descriptor cd_S19781C6;
extern VTBL_ENTRY _ZTI8S19781C6[];
extern  VTBL_ENTRY _ZTV8S19781C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C6[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19781C3;
extern VTBL_ENTRY _ZTI8S19781C3[];
extern  VTBL_ENTRY _ZTV8S19781C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C3[];
extern Class_Descriptor cd_S19781C5;
extern VTBL_ENTRY _ZTI8S19781C5[];
extern  VTBL_ENTRY _ZTV8S19781C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C5[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19781C3;
extern VTBL_ENTRY _ZTI8S19781C3[];
extern  VTBL_ENTRY _ZTV8S19781C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19781C10;
extern VTBL_ENTRY _ZTI9S19781C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19781C3;
extern VTBL_ENTRY _ZTI8S19781C3[];
extern  VTBL_ENTRY _ZTV8S19781C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C3[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19781C13;
extern VTBL_ENTRY _ZTI9S19781C13[];
extern  VTBL_ENTRY _ZTV9S19781C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19781C13[];
extern Class_Descriptor cd_S19781C12;
extern VTBL_ENTRY _ZTI9S19781C12[];
extern  VTBL_ENTRY _ZTV9S19781C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19781C12[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19781C3;
extern VTBL_ENTRY _ZTI8S19781C3[];
extern  VTBL_ENTRY _ZTV8S19781C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19781C10;
extern VTBL_ENTRY _ZTI9S19781C10[];
extern Class_Descriptor cd_S19781C9;
extern VTBL_ENTRY _ZTI8S19781C9[];
extern  VTBL_ENTRY _ZTV8S19781C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C9[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19781C11;
extern VTBL_ENTRY _ZTI9S19781C11[];
extern  VTBL_ENTRY _ZTV9S19781C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19781C11[];
static Base_Class bases_S19781C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19781C3,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(73,37), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19781C7,    ABISELECT(80,40), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19781C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19781C3,    ABISELECT(64,32), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19781C5,    ABISELECT(48,24), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    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
    12, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19781C10,    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
    13, //immediately_derived
  0, 0},
  {&cd_S19781C9,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19781C6,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(120,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
    16, //immediately_derived
  0, 0},
  {&cd_S19781C3,    ABISELECT(120,60), //bcp->offset
    52, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19781C5,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19781C3,    ABISELECT(136,68), //bcp->offset
    55, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(224,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
    22, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(224,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
    22, //immediately_derived
  0, 0},
  {&cd_S19781C10,    ABISELECT(224,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
    26, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19781C3,    ABISELECT(144,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(152,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
    26, //immediately_derived
  0, 0},
  {&cd_S19781C13,    ABISELECT(144,72), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S19781C12,    ABISELECT(104,52), //bcp->offset
    41, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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
    29, //immediately_derived
  0, 0},
  {&cd_S19781C3,    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
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(240,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(240,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19781C10,    ABISELECT(240,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19781C9,    ABISELECT(232,148), //bcp->offset
    63, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19781C11,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19781C1[];
extern void _ZN8S19781C1D1Ev();
extern void _ZN8S19781C1D0Ev();
extern void ABISELECT(_ZThn24_N8S19781C1D1Ev,_ZThn12_N8S19781C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S19781C1D0Ev,_ZThn12_N8S19781C1D0Ev)();
extern void ABISELECT(_ZTv0_n72_N8S19781C1D1Ev,_ZTv0_n36_N8S19781C1D1Ev)();
extern void ABISELECT(_ZThn104_N8S19781C1D1Ev,_ZThn52_N8S19781C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19781C1D0Ev,_ZTv0_n36_N8S19781C1D0Ev)();
extern void ABISELECT(_ZThn104_N8S19781C1D0Ev,_ZThn52_N8S19781C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19781C1[] = {
  ABISELECT(232,148),
  ABISELECT(144,72),
  ABISELECT(224,144),
  ABISELECT(144,72),
  ABISELECT(104,52),
  ABISELECT(80,40),
  ABISELECT(73,37),
  ABISELECT(48,24),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C1[0]),
  (VTBL_ENTRY)&_ZN8S19781C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19781C1D0Ev,
  ABISELECT(65,33),
  ABISELECT(72,36),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19781C1[0]),
  ABISELECT(24,12),
  ABISELECT(208,136),
  ABISELECT(120,60),
  ABISELECT(200,132),
  ABISELECT(120,60),
  ABISELECT(56,28),
  ABISELECT(49,25),
  ABISELECT(80,40),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19781C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19781C1D1Ev,_ZThn12_N8S19781C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19781C1D0Ev,_ZThn12_N8S19781C1D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(32,16),
  ABISELECT(25,13),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19781C1[0]),
  ABISELECT(-24,-12),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19781C1[0]),
  ABISELECT(-7,-3),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19781C1[0]),
  ABISELECT(-104,-52),
  ABISELECT(40,20),
  ABISELECT(120,92),
  ABISELECT(40,20),
  ABISELECT(-64,-32),
  ABISELECT(-24,-12),
  ABISELECT(-31,-15),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S19781C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19781C1D1Ev,_ZTv0_n36_N8S19781C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19781C1D0Ev,_ZTv0_n36_N8S19781C1D0Ev),
  ABISELECT(-80,-40),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S19781C1[0]),
  ABISELECT(-96,-48),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI8S19781C1[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-104,-52),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S19781C1[0]),
  ABISELECT(-159,-111),
  ABISELECT(-152,-108),
  ABISELECT(-232,-148),
  (VTBL_ENTRY)&(_ZTI8S19781C1[0]),
};
extern VTBL_ENTRY _ZTV8S19781C1[];
static  VTBL_ENTRY _tg__ZTV8S19781C3__A__8S19781C1[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C9__A__8S19781C1[] = {
  ABISELECT(65,33),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__8S19781C9__A__8S19781C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S19781C9[0]),
};
extern void _ZN9S19781C11D1Ev();
extern void _ZN9S19781C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19781C11__8S19781C1[] = {
  ABISELECT(24,12),
  ABISELECT(208,136),
  ABISELECT(120,60),
  ABISELECT(200,132),
  ABISELECT(120,60),
  ABISELECT(56,28),
  ABISELECT(49,25),
  ABISELECT(80,40),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19781C11[0]),
  (VTBL_ENTRY)&_ZN9S19781C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19781C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19781C39S19781C11__A5__8S19781C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C3[0]),
};
extern void ABISELECT(_ZTv0_n72_N9S19781C11D1Ev,_ZTv0_n36_N9S19781C11D1Ev)();
extern void ABISELECT(_ZThn80_N9S19781C11D1Ev,_ZThn40_N9S19781C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19781C11D0Ev,_ZTv0_n36_N9S19781C11D0Ev)();
extern void ABISELECT(_ZThn80_N9S19781C11D0Ev,_ZThn40_N9S19781C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19781C12__9S19781C11__8S19781C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(40,20),
  ABISELECT(120,92),
  ABISELECT(40,20),
  ABISELECT(-64,-32),
  ABISELECT(-24,-12),
  ABISELECT(-31,-15),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S19781C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19781C11D1Ev,_ZTv0_n36_N9S19781C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19781C11D0Ev,_ZTv0_n36_N9S19781C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__9S19781C11__8S19781C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19781C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C38S19781C59S19781C12__9S19781C11__8S19781C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI9S19781C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C39S19781C12__A1__9S19781C11__8S19781C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S19781C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19781C13__9S19781C11__8S19781C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-104,-52),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19781C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C9__9S19781C11__8S19781C1[] = {
  ABISELECT(-159,-111),
  ABISELECT(-152,-108),
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI9S19781C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C5__A1__9S19781C11__8S19781C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(32,16),
  ABISELECT(25,13),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19781C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C38S19781C5__A4__9S19781C11__8S19781C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19781C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C5__8S19781C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(32,16),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C68S19781C5__8S19781C1[] = {
  ABISELECT(32,16),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__8S19781C68S19781C5__8S19781C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19781C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C38S19781C5__A1__8S19781C1[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__8S19781C5__8S19781C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19781C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C3__8S19781C5__8S19781C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19781C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__8S19781C1[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C7[0]),
};
extern void _ZN9S19781C12D1Ev();
extern void _ZN9S19781C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19781C12__8S19781C1[] = {
  ABISELECT(40,20),
  ABISELECT(120,92),
  ABISELECT(40,20),
  ABISELECT(-64,-32),
  ABISELECT(-24,-12),
  ABISELECT(-31,-15),
  0,
  (VTBL_ENTRY)&(_ZTI9S19781C12[0]),
  (VTBL_ENTRY)&_ZN9S19781C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19781C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19781C59S19781C12__A1__8S19781C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-24,-12),
  ABISELECT(-31,-15),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C68S19781C59S19781C12__A1__8S19781C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-31,-15),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__8S19781C68S19781C59S19781C12__A1__8S19781C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S19781C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C38S19781C59S19781C12__A2__8S19781C1[] = {
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__8S19781C59S19781C12__A1__8S19781C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S19781C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C3__8S19781C59S19781C12__A1__8S19781C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19781C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C39S19781C12__A3__8S19781C1[] = {
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__9S19781C12__8S19781C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S19781C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C38S19781C5__9S19781C12__8S19781C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19781C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C3__A__9S19781C12__8S19781C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19781C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19781C13__9S19781C12__8S19781C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-104,-52),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19781C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19781C13__8S19781C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19781C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C3__A4__8S19781C1[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C9__A1__8S19781C1[] = {
  ABISELECT(-159,-111),
  ABISELECT(-152,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19781C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19781C7__8S19781C9__A1__8S19781C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(152,108),
  (VTBL_ENTRY)&(_ZTI8S19781C9[0]),
};
static  VTT_ENTRY vtt_S19781C1[] = {
  {&(_ZTV8S19781C1[11]),  11,67},
  {&(_tg__ZTV8S19781C3__A__8S19781C1[3]),  3,3},
  {&(_tg__ZTV8S19781C9__A__8S19781C1[4]),  4,4},
  {&(_tg__ZTV8S19781C7__8S19781C9__A__8S19781C1[3]),  3,3},
  {&(_tg__ZTV9S19781C11__8S19781C1[11]),  11,13},
  {&(_tg__ZTV8S19781C39S19781C11__A5__8S19781C1[3]),  3,3},
  {&(_tg__ZTV9S19781C12__9S19781C11__8S19781C1[9]),  9,11},
  {&(_tg__ZTV8S19781C7__9S19781C11__8S19781C1[3]),  3,3},
  {&(_tg__ZTV8S19781C38S19781C59S19781C12__9S19781C11__8S19781C1[3]),  3,3},
  {&(_tg__ZTV8S19781C39S19781C12__A1__9S19781C11__8S19781C1[3]),  3,3},
  {&(_tg__ZTV9S19781C13__9S19781C11__8S19781C1[5]),  5,5},
  {&(_tg__ZTV9S19781C13__9S19781C11__8S19781C1[5]),  5,5},
  {&(_tg__ZTV8S19781C9__9S19781C11__8S19781C1[4]),  4,4},
  {&(_tg__ZTV8S19781C5__A1__9S19781C11__8S19781C1[5]),  5,5},
  {&(_tg__ZTV8S19781C38S19781C5__A4__9S19781C11__8S19781C1[3]),  3,3},
  {&(_ZTV8S19781C1[35]),  35,67},
  {&(_ZTV8S19781C1[41]),  41,67},
  {&(_ZTV8S19781C1[38]),  38,67},
  {&(_ZTV8S19781C1[17]),  17,67},
  {&(_ZTV8S19781C1[28]),  28,67},
  {&(_ZTV8S19781C1[50]),  50,67},
  {&(_ZTV8S19781C1[55]),  55,67},
  {&(_ZTV8S19781C1[58]),  58,67},
  {&(_ZTV8S19781C1[63]),  63,67},
  {&(_ZTV8S19781C1[63]),  63,67},
  {&(_ZTV8S19781C1[67]),  67,67},
  {&(_tg__ZTV8S19781C5__8S19781C1[5]),  5,5},
  {&(_tg__ZTV8S19781C68S19781C5__8S19781C1[4]),  4,4},
  {&(_tg__ZTV8S19781C7__8S19781C68S19781C5__8S19781C1[3]),  3,3},
  {&(_tg__ZTV8S19781C38S19781C5__A1__8S19781C1[3]),  3,3},
  {&(_tg__ZTV8S19781C7__8S19781C5__8S19781C1[3]),  3,3},
  {&(_tg__ZTV8S19781C3__8S19781C5__8S19781C1[3]),  3,3},
  {&(_tg__ZTV8S19781C7__8S19781C1[3]),  3,3},
  {&(_tg__ZTV9S19781C12__8S19781C1[8]),  8,10},
  {&(_tg__ZTV8S19781C59S19781C12__A1__8S19781C1[5]),  5,5},
  {&(_tg__ZTV8S19781C68S19781C59S19781C12__A1__8S19781C1[4]),  4,4},
  {&(_tg__ZTV8S19781C7__8S19781C68S19781C59S19781C12__A1__8S19781C1[3]),  3,3},
  {&(_tg__ZTV8S19781C38S19781C59S19781C12__A2__8S19781C1[3]),  3,3},
  {&(_tg__ZTV8S19781C7__8S19781C59S19781C12__A1__8S19781C1[3]),  3,3},
  {&(_tg__ZTV8S19781C3__8S19781C59S19781C12__A1__8S19781C1[3]),  3,3},
  {&(_tg__ZTV8S19781C39S19781C12__A3__8S19781C1[3]),  3,3},
  {&(_tg__ZTV8S19781C7__9S19781C12__8S19781C1[3]),  3,3},
  {&(_tg__ZTV8S19781C38S19781C5__9S19781C12__8S19781C1[3]),  3,3},
  {&(_tg__ZTV8S19781C3__A__9S19781C12__8S19781C1[3]),  3,3},
  {&(_tg__ZTV9S19781C13__9S19781C12__8S19781C1[5]),  5,5},
  {&(_tg__ZTV9S19781C13__9S19781C12__8S19781C1[5]),  5,5},
  {&(_tg__ZTV9S19781C13__8S19781C1[5]),  5,5},
  {&(_tg__ZTV9S19781C13__8S19781C1[5]),  5,5},
  {&(_tg__ZTV8S19781C3__A4__8S19781C1[3]),  3,3},
  {&(_tg__ZTV8S19781C9__A1__8S19781C1[4]),  4,4},
  {&(_tg__ZTV8S19781C7__8S19781C9__A1__8S19781C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19781C1[];
extern  VTBL_ENTRY _ZTV8S19781C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19781C1[];
static VTBL_ENTRY alt_thunk_names104[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19781C11D0Ev,_ZTv0_n36_N9S19781C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19781C11D0Ev,_ZThn40_N9S19781C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19781C11D1Ev,_ZTv0_n36_N9S19781C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19781C11D1Ev,_ZThn40_N9S19781C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19781C1D0Ev,_ZTv0_n36_N8S19781C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19781C1D0Ev,_ZThn52_N8S19781C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19781C1D1Ev,_ZTv0_n36_N8S19781C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19781C1D1Ev,_ZThn52_N8S19781C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19781C1 = {  "S19781C1", // class name
  bases_S19781C1, 36,
  &(vtc_S19781C1[0]), // expected_vtbl_contents
  &(vtt_S19781C1[0]), // expected_vtt_contents
  ABISELECT(248,156), // object size
  NSPAIRA(_ZTI8S19781C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19781C1),67, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19781C1),51, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names104,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10041C2  {
  int s10041c2f0[28];
  virtual  ~S10041C2(); // _ZN8S10041C2D1Ev
  virtual void  v6(); // _ZN8S10041C22v6Ev
  virtual void  v7(); // _ZN8S10041C22v7Ev
  virtual void  v8(); // _ZN8S10041C22v8Ev
  virtual void  v9(); // _ZN8S10041C22v9Ev
  virtual void  v10(); // _ZN8S10041C23v10Ev
  virtual void  v11(); // _ZN8S10041C23v11Ev
  virtual void  v12(); // _ZN8S10041C23v12Ev
  virtual void  v13(); // _ZN8S10041C23v13Ev
  virtual void  v14(); // _ZN8S10041C23v14Ev
  virtual void  v15(); // _ZN8S10041C23v15Ev
  virtual void  v16(); // _ZN8S10041C23v16Ev
  virtual void  v17(); // _ZN8S10041C23v17Ev
  virtual void  v18(); // _ZN8S10041C23v18Ev
  virtual void  v19(); // _ZN8S10041C23v19Ev
  virtual void  v20(); // _ZN8S10041C23v20Ev
  virtual void  v21(); // _ZN8S10041C23v21Ev
  virtual void  v22(); // _ZN8S10041C23v22Ev
  virtual void  v23(); // _ZN8S10041C23v23Ev
  virtual void  v24(); // _ZN8S10041C23v24Ev
  virtual void  v25(); // _ZN8S10041C23v25Ev
  virtual void  v26(); // _ZN8S10041C23v26Ev
  virtual void  v27(); // _ZN8S10041C23v27Ev
  virtual void  v28(); // _ZN8S10041C23v28Ev
  virtual void  v29(); // _ZN8S10041C23v29Ev
  virtual void  v30(); // _ZN8S10041C23v30Ev
  S10041C2(); // tgen
};
//SIG(-1 S10041C2) 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 Fi[28]}


 S10041C2 ::~S10041C2(){ note_dtor("S10041C2", this);}
void  S10041C2 ::v6(){vfunc_called(this, "_ZN8S10041C22v6Ev");}
void  S10041C2 ::v7(){vfunc_called(this, "_ZN8S10041C22v7Ev");}
void  S10041C2 ::v8(){vfunc_called(this, "_ZN8S10041C22v8Ev");}
void  S10041C2 ::v9(){vfunc_called(this, "_ZN8S10041C22v9Ev");}
void  S10041C2 ::v10(){vfunc_called(this, "_ZN8S10041C23v10Ev");}
void  S10041C2 ::v11(){vfunc_called(this, "_ZN8S10041C23v11Ev");}
void  S10041C2 ::v12(){vfunc_called(this, "_ZN8S10041C23v12Ev");}
void  S10041C2 ::v13(){vfunc_called(this, "_ZN8S10041C23v13Ev");}
void  S10041C2 ::v14(){vfunc_called(this, "_ZN8S10041C23v14Ev");}
void  S10041C2 ::v15(){vfunc_called(this, "_ZN8S10041C23v15Ev");}
void  S10041C2 ::v16(){vfunc_called(this, "_ZN8S10041C23v16Ev");}
void  S10041C2 ::v17(){vfunc_called(this, "_ZN8S10041C23v17Ev");}
void  S10041C2 ::v18(){vfunc_called(this, "_ZN8S10041C23v18Ev");}
void  S10041C2 ::v19(){vfunc_called(this, "_ZN8S10041C23v19Ev");}
void  S10041C2 ::v20(){vfunc_called(this, "_ZN8S10041C23v20Ev");}
void  S10041C2 ::v21(){vfunc_called(this, "_ZN8S10041C23v21Ev");}
void  S10041C2 ::v22(){vfunc_called(this, "_ZN8S10041C23v22Ev");}
void  S10041C2 ::v23(){vfunc_called(this, "_ZN8S10041C23v23Ev");}
void  S10041C2 ::v24(){vfunc_called(this, "_ZN8S10041C23v24Ev");}
void  S10041C2 ::v25(){vfunc_called(this, "_ZN8S10041C23v25Ev");}
void  S10041C2 ::v26(){vfunc_called(this, "_ZN8S10041C23v26Ev");}
void  S10041C2 ::v27(){vfunc_called(this, "_ZN8S10041C23v27Ev");}
void  S10041C2 ::v28(){vfunc_called(this, "_ZN8S10041C23v28Ev");}
void  S10041C2 ::v29(){vfunc_called(this, "_ZN8S10041C23v29Ev");}
void  S10041C2 ::v30(){vfunc_called(this, "_ZN8S10041C23v30Ev");}
S10041C2 ::S10041C2(){ note_ctor("S10041C2", this);} // tgen

static void Test_S10041C2()
{
  extern Class_Descriptor cd_S10041C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S10041C2, buf);
    S10041C2 *dp, &lv = *(dp=new (buf) S10041C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S10041C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10041C2)");
    check_field_offset(lv, s10041c2f0, ABISELECT(8,4), "S10041C2.s10041c2f0");
    test_class_info(&lv, &cd_S10041C2);
    dp->~S10041C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10041C2(Test_S10041C2, "S10041C2", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN8S10041C2C1Ev();
extern void _ZN8S10041C2D1Ev();
Name_Map name_map_S10041C2[] = {
  NSPAIR(_ZN8S10041C2C1Ev),
  NSPAIR(_ZN8S10041C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10041C2[];
extern void _ZN8S10041C2D1Ev();
extern void _ZN8S10041C2D0Ev();
extern void _ZN8S10041C22v6Ev();
extern void _ZN8S10041C22v7Ev();
extern void _ZN8S10041C22v8Ev();
extern void _ZN8S10041C22v9Ev();
extern void _ZN8S10041C23v10Ev();
extern void _ZN8S10041C23v11Ev();
extern void _ZN8S10041C23v12Ev();
extern void _ZN8S10041C23v13Ev();
extern void _ZN8S10041C23v14Ev();
extern void _ZN8S10041C23v15Ev();
extern void _ZN8S10041C23v16Ev();
extern void _ZN8S10041C23v17Ev();
extern void _ZN8S10041C23v18Ev();
extern void _ZN8S10041C23v19Ev();
extern void _ZN8S10041C23v20Ev();
extern void _ZN8S10041C23v21Ev();
extern void _ZN8S10041C23v22Ev();
extern void _ZN8S10041C23v23Ev();
extern void _ZN8S10041C23v24Ev();
extern void _ZN8S10041C23v25Ev();
extern void _ZN8S10041C23v26Ev();
extern void _ZN8S10041C23v27Ev();
extern void _ZN8S10041C23v28Ev();
extern void _ZN8S10041C23v29Ev();
extern void _ZN8S10041C23v30Ev();
static  VTBL_ENTRY vtc_S10041C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10041C2[0]),
  (VTBL_ENTRY)&_ZN8S10041C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10041C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10041C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10041C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10041C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10041C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v20Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v21Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v22Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v23Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v24Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v25Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v26Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v27Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v28Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v29Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v30Ev,
};
extern VTBL_ENTRY _ZTI8S10041C2[];
extern  VTBL_ENTRY _ZTV8S10041C2[];
Class_Descriptor cd_S10041C2 = {  "S10041C2", // class name
  0,0,//no base classes
  &(vtc_S10041C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI8S10041C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10041C2),29, //virtual function table var
  2, // 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  S10041C1  : S10041C2 {
  int s10041c1f0;
  ::S1566C9 s10041c1f1;
  void *s10041c1f2;
  int s10041c1f3[5];
  void *s10041c1f4[2];
  virtual  ~S10041C1(); // _ZN8S10041C1D1Ev
  virtual void  v1(); // _ZN8S10041C12v1Ev
  virtual void  v2(); // _ZN8S10041C12v2Ev
  virtual void  v3(); // _ZN8S10041C12v3Ev
  virtual void  v4(); // _ZN8S10041C12v4Ev
  virtual void  v5(); // _ZN8S10041C12v5Ev
  S10041C1(); // tgen
};
//SIG(1 S10041C1) 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 Fi[28]} vd v1 v2 v3 v4 v5 Fi FC3{ BC4{ BC5{ m Fp Fi[2]}}} Fp Fi[5] Fp[2]}


 S10041C1 ::~S10041C1(){ note_dtor("S10041C1", this);}
void  S10041C1 ::v1(){vfunc_called(this, "_ZN8S10041C12v1Ev");}
void  S10041C1 ::v2(){vfunc_called(this, "_ZN8S10041C12v2Ev");}
void  S10041C1 ::v3(){vfunc_called(this, "_ZN8S10041C12v3Ev");}
void  S10041C1 ::v4(){vfunc_called(this, "_ZN8S10041C12v4Ev");}
void  S10041C1 ::v5(){vfunc_called(this, "_ZN8S10041C12v5Ev");}
S10041C1 ::S10041C1(){ note_ctor("S10041C1", this);} // tgen

static void Test_S10041C1()
{
  extern Class_Descriptor cd_S10041C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,42)];
    init_test(&cd_S10041C1, buf);
    S10041C1 *dp, &lv = *(dp=new (buf) S10041C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,164), "sizeof(S10041C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10041C1)");
    check_base_class_offset(lv, (S10041C2*), 0, "S10041C1");
    check_field_offset(lv, s10041c1f0, ABISELECT(120,116), "S10041C1.s10041c1f0");
    check_field_offset(lv, s10041c1f1, ABISELECT(128,120), "S10041C1.s10041c1f1");
    check_field_offset(lv, s10041c1f2, ABISELECT(144,132), "S10041C1.s10041c1f2");
    check_field_offset(lv, s10041c1f3, ABISELECT(152,136), "S10041C1.s10041c1f3");
    check_field_offset(lv, s10041c1f4, ABISELECT(176,156), "S10041C1.s10041c1f4");
    test_class_info(&lv, &cd_S10041C1);
    dp->~S10041C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10041C1(Test_S10041C1, "S10041C1", ABISELECT(192,164));

#else // __cplusplus

extern void _ZN8S10041C1C1Ev();
extern void _ZN8S10041C1D1Ev();
Name_Map name_map_S10041C1[] = {
  NSPAIR(_ZN8S10041C1C1Ev),
  NSPAIR(_ZN8S10041C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10041C2;
extern VTBL_ENTRY _ZTI8S10041C2[];
extern  VTBL_ENTRY _ZTV8S10041C2[];
static Base_Class bases_S10041C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10041C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10041C1[];
extern void _ZN8S10041C1D1Ev();
extern void _ZN8S10041C1D0Ev();
extern void _ZN8S10041C22v6Ev();
extern void _ZN8S10041C22v7Ev();
extern void _ZN8S10041C22v8Ev();
extern void _ZN8S10041C22v9Ev();
extern void _ZN8S10041C23v10Ev();
extern void _ZN8S10041C23v11Ev();
extern void _ZN8S10041C23v12Ev();
extern void _ZN8S10041C23v13Ev();
extern void _ZN8S10041C23v14Ev();
extern void _ZN8S10041C23v15Ev();
extern void _ZN8S10041C23v16Ev();
extern void _ZN8S10041C23v17Ev();
extern void _ZN8S10041C23v18Ev();
extern void _ZN8S10041C23v19Ev();
extern void _ZN8S10041C23v20Ev();
extern void _ZN8S10041C23v21Ev();
extern void _ZN8S10041C23v22Ev();
extern void _ZN8S10041C23v23Ev();
extern void _ZN8S10041C23v24Ev();
extern void _ZN8S10041C23v25Ev();
extern void _ZN8S10041C23v26Ev();
extern void _ZN8S10041C23v27Ev();
extern void _ZN8S10041C23v28Ev();
extern void _ZN8S10041C23v29Ev();
extern void _ZN8S10041C23v30Ev();
extern void _ZN8S10041C12v1Ev();
extern void _ZN8S10041C12v2Ev();
extern void _ZN8S10041C12v3Ev();
extern void _ZN8S10041C12v4Ev();
extern void _ZN8S10041C12v5Ev();
static  VTBL_ENTRY vtc_S10041C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10041C1[0]),
  (VTBL_ENTRY)&_ZN8S10041C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10041C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10041C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10041C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10041C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10041C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v20Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v21Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v22Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v23Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v24Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v25Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v26Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v27Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v28Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v29Ev,
  (VTBL_ENTRY)&_ZN8S10041C23v30Ev,
  (VTBL_ENTRY)&_ZN8S10041C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10041C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10041C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10041C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10041C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10041C1[];
extern  VTBL_ENTRY _ZTV8S10041C1[];
Class_Descriptor cd_S10041C1 = {  "S10041C1", // class name
  bases_S10041C1, 1,
  &(vtc_S10041C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,164), // object size
  NSPAIRA(_ZTI8S10041C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10041C1),34, //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  S10040C2  {
  int s10040c2f0[28];
  virtual  ~S10040C2(); // _ZN8S10040C2D1Ev
  virtual void  v6(); // _ZN8S10040C22v6Ev
  virtual void  v7(); // _ZN8S10040C22v7Ev
  virtual void  v8(); // _ZN8S10040C22v8Ev
  virtual void  v9(); // _ZN8S10040C22v9Ev
  virtual void  v10(); // _ZN8S10040C23v10Ev
  virtual void  v11(); // _ZN8S10040C23v11Ev
  virtual void  v12(); // _ZN8S10040C23v12Ev
  virtual void  v13(); // _ZN8S10040C23v13Ev
  virtual void  v14(); // _ZN8S10040C23v14Ev
  virtual void  v15(); // _ZN8S10040C23v15Ev
  virtual void  v16(); // _ZN8S10040C23v16Ev
  virtual void  v17(); // _ZN8S10040C23v17Ev
  virtual void  v18(); // _ZN8S10040C23v18Ev
  virtual void  v19(); // _ZN8S10040C23v19Ev
  virtual void  v20(); // _ZN8S10040C23v20Ev
  virtual void  v21(); // _ZN8S10040C23v21Ev
  virtual void  v22(); // _ZN8S10040C23v22Ev
  virtual void  v23(); // _ZN8S10040C23v23Ev
  virtual void  v24(); // _ZN8S10040C23v24Ev
  virtual void  v25(); // _ZN8S10040C23v25Ev
  virtual void  v26(); // _ZN8S10040C23v26Ev
  virtual void  v27(); // _ZN8S10040C23v27Ev
  virtual void  v28(); // _ZN8S10040C23v28Ev
  virtual void  v29(); // _ZN8S10040C23v29Ev
  virtual void  v30(); // _ZN8S10040C23v30Ev
  S10040C2(); // tgen
};
//SIG(-1 S10040C2) 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 Fi[28]}


 S10040C2 ::~S10040C2(){ note_dtor("S10040C2", this);}
void  S10040C2 ::v6(){vfunc_called(this, "_ZN8S10040C22v6Ev");}
void  S10040C2 ::v7(){vfunc_called(this, "_ZN8S10040C22v7Ev");}
void  S10040C2 ::v8(){vfunc_called(this, "_ZN8S10040C22v8Ev");}
void  S10040C2 ::v9(){vfunc_called(this, "_ZN8S10040C22v9Ev");}
void  S10040C2 ::v10(){vfunc_called(this, "_ZN8S10040C23v10Ev");}
void  S10040C2 ::v11(){vfunc_called(this, "_ZN8S10040C23v11Ev");}
void  S10040C2 ::v12(){vfunc_called(this, "_ZN8S10040C23v12Ev");}
void  S10040C2 ::v13(){vfunc_called(this, "_ZN8S10040C23v13Ev");}
void  S10040C2 ::v14(){vfunc_called(this, "_ZN8S10040C23v14Ev");}
void  S10040C2 ::v15(){vfunc_called(this, "_ZN8S10040C23v15Ev");}
void  S10040C2 ::v16(){vfunc_called(this, "_ZN8S10040C23v16Ev");}
void  S10040C2 ::v17(){vfunc_called(this, "_ZN8S10040C23v17Ev");}
void  S10040C2 ::v18(){vfunc_called(this, "_ZN8S10040C23v18Ev");}
void  S10040C2 ::v19(){vfunc_called(this, "_ZN8S10040C23v19Ev");}
void  S10040C2 ::v20(){vfunc_called(this, "_ZN8S10040C23v20Ev");}
void  S10040C2 ::v21(){vfunc_called(this, "_ZN8S10040C23v21Ev");}
void  S10040C2 ::v22(){vfunc_called(this, "_ZN8S10040C23v22Ev");}
void  S10040C2 ::v23(){vfunc_called(this, "_ZN8S10040C23v23Ev");}
void  S10040C2 ::v24(){vfunc_called(this, "_ZN8S10040C23v24Ev");}
void  S10040C2 ::v25(){vfunc_called(this, "_ZN8S10040C23v25Ev");}
void  S10040C2 ::v26(){vfunc_called(this, "_ZN8S10040C23v26Ev");}
void  S10040C2 ::v27(){vfunc_called(this, "_ZN8S10040C23v27Ev");}
void  S10040C2 ::v28(){vfunc_called(this, "_ZN8S10040C23v28Ev");}
void  S10040C2 ::v29(){vfunc_called(this, "_ZN8S10040C23v29Ev");}
void  S10040C2 ::v30(){vfunc_called(this, "_ZN8S10040C23v30Ev");}
S10040C2 ::S10040C2(){ note_ctor("S10040C2", this);} // tgen

static void Test_S10040C2()
{
  extern Class_Descriptor cd_S10040C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S10040C2, buf);
    S10040C2 *dp, &lv = *(dp=new (buf) S10040C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S10040C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10040C2)");
    check_field_offset(lv, s10040c2f0, ABISELECT(8,4), "S10040C2.s10040c2f0");
    test_class_info(&lv, &cd_S10040C2);
    dp->~S10040C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10040C2(Test_S10040C2, "S10040C2", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN8S10040C2C1Ev();
extern void _ZN8S10040C2D1Ev();
Name_Map name_map_S10040C2[] = {
  NSPAIR(_ZN8S10040C2C1Ev),
  NSPAIR(_ZN8S10040C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10040C2[];
extern void _ZN8S10040C2D1Ev();
extern void _ZN8S10040C2D0Ev();
extern void _ZN8S10040C22v6Ev();
extern void _ZN8S10040C22v7Ev();
extern void _ZN8S10040C22v8Ev();
extern void _ZN8S10040C22v9Ev();
extern void _ZN8S10040C23v10Ev();
extern void _ZN8S10040C23v11Ev();
extern void _ZN8S10040C23v12Ev();
extern void _ZN8S10040C23v13Ev();
extern void _ZN8S10040C23v14Ev();
extern void _ZN8S10040C23v15Ev();
extern void _ZN8S10040C23v16Ev();
extern void _ZN8S10040C23v17Ev();
extern void _ZN8S10040C23v18Ev();
extern void _ZN8S10040C23v19Ev();
extern void _ZN8S10040C23v20Ev();
extern void _ZN8S10040C23v21Ev();
extern void _ZN8S10040C23v22Ev();
extern void _ZN8S10040C23v23Ev();
extern void _ZN8S10040C23v24Ev();
extern void _ZN8S10040C23v25Ev();
extern void _ZN8S10040C23v26Ev();
extern void _ZN8S10040C23v27Ev();
extern void _ZN8S10040C23v28Ev();
extern void _ZN8S10040C23v29Ev();
extern void _ZN8S10040C23v30Ev();
static  VTBL_ENTRY vtc_S10040C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10040C2[0]),
  (VTBL_ENTRY)&_ZN8S10040C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10040C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10040C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10040C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10040C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10040C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v20Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v21Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v22Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v23Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v24Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v25Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v26Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v27Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v28Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v29Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v30Ev,
};
extern VTBL_ENTRY _ZTI8S10040C2[];
extern  VTBL_ENTRY _ZTV8S10040C2[];
Class_Descriptor cd_S10040C2 = {  "S10040C2", // class name
  0,0,//no base classes
  &(vtc_S10040C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI8S10040C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10040C2),29, //virtual function table var
  2, // 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  S10040C1  : S10040C2 {
  int s10040c1f0;
  ::S1566C9 s10040c1f1;
  int s10040c1f2;
  void *s10040c1f3;
  int s10040c1f4[3];
  void *s10040c1f5;
  virtual  ~S10040C1(); // _ZN8S10040C1D1Ev
  virtual void  v1(); // _ZN8S10040C12v1Ev
  virtual void  v2(); // _ZN8S10040C12v2Ev
  virtual void  v3(); // _ZN8S10040C12v3Ev
  virtual void  v4(); // _ZN8S10040C12v4Ev
  virtual void  v5(); // _ZN8S10040C12v5Ev
  S10040C1(); // tgen
};
//SIG(1 S10040C1) 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 Fi[28]} vd v1 v2 v3 v4 v5 Fi FC3{ BC4{ BC5{ m Fp Fi[2]}}} Fi Fp Fi[3] Fp}


 S10040C1 ::~S10040C1(){ note_dtor("S10040C1", this);}
void  S10040C1 ::v1(){vfunc_called(this, "_ZN8S10040C12v1Ev");}
void  S10040C1 ::v2(){vfunc_called(this, "_ZN8S10040C12v2Ev");}
void  S10040C1 ::v3(){vfunc_called(this, "_ZN8S10040C12v3Ev");}
void  S10040C1 ::v4(){vfunc_called(this, "_ZN8S10040C12v4Ev");}
void  S10040C1 ::v5(){vfunc_called(this, "_ZN8S10040C12v5Ev");}
S10040C1 ::S10040C1(){ note_ctor("S10040C1", this);} // tgen

static void Test_S10040C1()
{
  extern Class_Descriptor cd_S10040C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,40)];
    init_test(&cd_S10040C1, buf);
    S10040C1 *dp, &lv = *(dp=new (buf) S10040C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,156), "sizeof(S10040C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10040C1)");
    check_base_class_offset(lv, (S10040C2*), 0, "S10040C1");
    check_field_offset(lv, s10040c1f0, ABISELECT(120,116), "S10040C1.s10040c1f0");
    check_field_offset(lv, s10040c1f1, ABISELECT(128,120), "S10040C1.s10040c1f1");
    check_field_offset(lv, s10040c1f2, ABISELECT(144,132), "S10040C1.s10040c1f2");
    check_field_offset(lv, s10040c1f3, ABISELECT(152,136), "S10040C1.s10040c1f3");
    check_field_offset(lv, s10040c1f4, ABISELECT(160,140), "S10040C1.s10040c1f4");
    check_field_offset(lv, s10040c1f5, ABISELECT(176,152), "S10040C1.s10040c1f5");
    test_class_info(&lv, &cd_S10040C1);
    dp->~S10040C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10040C1(Test_S10040C1, "S10040C1", ABISELECT(184,156));

#else // __cplusplus

extern void _ZN8S10040C1C1Ev();
extern void _ZN8S10040C1D1Ev();
Name_Map name_map_S10040C1[] = {
  NSPAIR(_ZN8S10040C1C1Ev),
  NSPAIR(_ZN8S10040C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10040C2;
extern VTBL_ENTRY _ZTI8S10040C2[];
extern  VTBL_ENTRY _ZTV8S10040C2[];
static Base_Class bases_S10040C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10040C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10040C1[];
extern void _ZN8S10040C1D1Ev();
extern void _ZN8S10040C1D0Ev();
extern void _ZN8S10040C22v6Ev();
extern void _ZN8S10040C22v7Ev();
extern void _ZN8S10040C22v8Ev();
extern void _ZN8S10040C22v9Ev();
extern void _ZN8S10040C23v10Ev();
extern void _ZN8S10040C23v11Ev();
extern void _ZN8S10040C23v12Ev();
extern void _ZN8S10040C23v13Ev();
extern void _ZN8S10040C23v14Ev();
extern void _ZN8S10040C23v15Ev();
extern void _ZN8S10040C23v16Ev();
extern void _ZN8S10040C23v17Ev();
extern void _ZN8S10040C23v18Ev();
extern void _ZN8S10040C23v19Ev();
extern void _ZN8S10040C23v20Ev();
extern void _ZN8S10040C23v21Ev();
extern void _ZN8S10040C23v22Ev();
extern void _ZN8S10040C23v23Ev();
extern void _ZN8S10040C23v24Ev();
extern void _ZN8S10040C23v25Ev();
extern void _ZN8S10040C23v26Ev();
extern void _ZN8S10040C23v27Ev();
extern void _ZN8S10040C23v28Ev();
extern void _ZN8S10040C23v29Ev();
extern void _ZN8S10040C23v30Ev();
extern void _ZN8S10040C12v1Ev();
extern void _ZN8S10040C12v2Ev();
extern void _ZN8S10040C12v3Ev();
extern void _ZN8S10040C12v4Ev();
extern void _ZN8S10040C12v5Ev();
static  VTBL_ENTRY vtc_S10040C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10040C1[0]),
  (VTBL_ENTRY)&_ZN8S10040C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10040C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10040C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10040C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10040C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10040C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v20Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v21Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v22Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v23Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v24Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v25Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v26Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v27Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v28Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v29Ev,
  (VTBL_ENTRY)&_ZN8S10040C23v30Ev,
  (VTBL_ENTRY)&_ZN8S10040C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10040C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10040C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10040C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10040C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10040C1[];
extern  VTBL_ENTRY _ZTV8S10040C1[];
Class_Descriptor cd_S10040C1 = {  "S10040C1", // class name
  bases_S10040C1, 1,
  &(vtc_S10040C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,156), // object size
  NSPAIRA(_ZTI8S10040C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10040C1),34, //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  S20495C3  : S3600C19 , S3600C29_nt {
};
//SIG(-1 S20495C3) C1{ BC2{ m} BC3{ m Fp}}



static void Test_S20495C3()
{
  extern Class_Descriptor cd_S20495C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20495C3, buf);
    S20495C3 &lv = *(new (buf) S20495C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20495C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20495C3)");
    check_base_class_offset(lv, (S3600C19*), 0, "S20495C3");
    check_base_class_offset(lv, (S3600C29_nt*), 0, "S20495C3");
    test_class_info(&lv, &cd_S20495C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20495C3(Test_S20495C3, "S20495C3", ABISELECT(8,4));

#else // __cplusplus

extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S20495C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3600C29_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 _ZTI8S20495C3[];
Class_Descriptor cd_S20495C3 = {  "S20495C3", // class name
  bases_S20495C3, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20495C3),ABISELECT(56,32), //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  S20495C6  : virtual S3600C29_nt , S3600C19 {
  ~S20495C6(); // tgen
  S20495C6(); // tgen
};
//SIG(-1 S20495C6) C1{ VBC2{ m Fp} BC3{ m}}


S20495C6 ::~S20495C6(){ note_dtor("S20495C6", this);} // tgen
S20495C6 ::S20495C6(){ note_ctor("S20495C6", this);} // tgen

static void Test_S20495C6()
{
  extern Class_Descriptor cd_S20495C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20495C6, buf);
    S20495C6 *dp, &lv = *(dp=new (buf) S20495C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20495C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20495C6)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20495C6");
    check_base_class_offset(lv, (S3600C19*), 0, "S20495C6");
    test_class_info(&lv, &cd_S20495C6);
    dp->~S20495C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20495C6(Test_S20495C6, "S20495C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20495C6C1Ev();
extern void _ZN8S20495C6D1Ev();
Name_Map name_map_S20495C6[] = {
  NSPAIR(_ZN8S20495C6C1Ev),
  NSPAIR(_ZN8S20495C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S20495C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S20495C6[];
static  VTBL_ENTRY vtc_S20495C6[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C6[0]),
};
extern VTBL_ENTRY _ZTV8S20495C6[];
static  VTT_ENTRY vtt_S20495C6[] = {
  {&(_ZTV8S20495C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20495C6[];
extern  VTBL_ENTRY _ZTV8S20495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C6[];
Class_Descriptor cd_S20495C6 = {  "S20495C6", // class name
  bases_S20495C6, 2,
  &(vtc_S20495C6[0]), // expected_vtbl_contents
  &(vtt_S20495C6[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20495C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20495C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20495C6),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  S20495C2  : virtual S20495C3 , virtual S20495C6 , S3600C29_nt {
  __tsi64 s20495c2f0[8];
  ~S20495C2(); // tgen
  S20495C2(); // tgen
};
//SIG(-1 S20495C2) C1{ VBC2{ BC3{ m} BC4{ m Fp}} VBC5{ VBC4 BC3} BC4 FL[8]}


S20495C2 ::~S20495C2(){ note_dtor("S20495C2", this);} // tgen
S20495C2 ::S20495C2(){ note_ctor("S20495C2", this);} // tgen

static void Test_S20495C2()
{
  extern Class_Descriptor cd_S20495C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,21)];
    init_test(&cd_S20495C2, buf);
    S20495C2 *dp, &lv = *(dp=new (buf) S20495C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,80), "sizeof(S20495C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20495C2)");
    check_base_class_offset(lv, (S3600C19*)(S20495C3*), ABISELECT(80,72), "S20495C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S20495C3*), ABISELECT(80,72), "S20495C2");
    check_base_class_offset(lv, (S20495C3*), ABISELECT(80,72), "S20495C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S20495C6*), ABISELECT(88,76), "S20495C2");
    check_base_class_offset(lv, (S3600C19*)(S20495C6*), 0, "S20495C2");
    check_base_class_offset(lv, (S20495C6*), 0, "S20495C2");
    /*is_ambiguous_... S20495C2::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20495C2");
    check_field_offset(lv, s20495c2f0, ABISELECT(16,8), "S20495C2.s20495c2f0");
    test_class_info(&lv, &cd_S20495C2);
    dp->~S20495C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20495C2(Test_S20495C2, "S20495C2", ABISELECT(96,80));

#else // __cplusplus

extern void _ZN8S20495C2C1Ev();
extern void _ZN8S20495C2D1Ev();
Name_Map name_map_S20495C2[] = {
  NSPAIR(_ZN8S20495C2C1Ev),
  NSPAIR(_ZN8S20495C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20495C3;
extern VTBL_ENTRY _ZTI8S20495C3[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20495C6;
extern VTBL_ENTRY _ZTI8S20495C6[];
extern  VTBL_ENTRY _ZTV8S20495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S20495C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S20495C3,    ABISELECT(80,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_S3600C29_nt,    ABISELECT(88,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20495C6,    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},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20495C2[];
static  VTBL_ENTRY vtc_S20495C2[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C2[0]),
};
extern VTBL_ENTRY _ZTV8S20495C2[];
static  VTBL_ENTRY _tg__ZTV8S20495C6__8S20495C2[] = {
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C6[0]),
};
static  VTT_ENTRY vtt_S20495C2[] = {
  {&(_ZTV8S20495C2[5]),  5,5},
  {&(_ZTV8S20495C2[5]),  5,5},
  {&(_tg__ZTV8S20495C6__8S20495C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20495C2[];
extern  VTBL_ENTRY _ZTV8S20495C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C2[];
Class_Descriptor cd_S20495C2 = {  "S20495C2", // class name
  bases_S20495C2, 7,
  &(vtc_S20495C2[0]), // expected_vtbl_contents
  &(vtt_S20495C2[0]), // expected_vtt_contents
  ABISELECT(96,80), // object size
  NSPAIRA(_ZTI8S20495C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20495C2),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20495C2),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  S20495C10  : S3600C29_nt , virtual S3600C19 {
  ::S19426C9_nt s20495c10f0;
  ~S20495C10(); // tgen
  S20495C10(); // tgen
};
//SIG(-1 S20495C10) C1{ BC2{ m Fp} VBC3{ m} FU4{ m}}


S20495C10 ::~S20495C10(){ note_dtor("S20495C10", this);} // tgen
S20495C10 ::S20495C10(){ note_ctor("S20495C10", this);} // tgen

static void Test_S20495C10()
{
  extern Class_Descriptor cd_S20495C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20495C10, buf);
    S20495C10 *dp, &lv = *(dp=new (buf) S20495C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20495C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20495C10)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20495C10");
    check_base_class_offset(lv, (S3600C19*), 0, "S20495C10");
    check_field_offset(lv, s20495c10f0, ABISELECT(16,8), "S20495C10.s20495c10f0");
    test_class_info(&lv, &cd_S20495C10);
    dp->~S20495C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20495C10(Test_S20495C10, "S20495C10", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S20495C10C1Ev();
extern void _ZN9S20495C10D1Ev();
Name_Map name_map_S20495C10[] = {
  NSPAIR(_ZN9S20495C10C1Ev),
  NSPAIR(_ZN9S20495C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S20495C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S20495C10[];
static  VTBL_ENTRY vtc_S20495C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20495C10[0]),
};
extern VTBL_ENTRY _ZTV9S20495C10[];
static  VTT_ENTRY vtt_S20495C10[] = {
  {&(_ZTV9S20495C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20495C10[];
extern  VTBL_ENTRY _ZTV9S20495C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20495C10[];
Class_Descriptor cd_S20495C10 = {  "S20495C10", // class name
  bases_S20495C10, 2,
  &(vtc_S20495C10[0]), // expected_vtbl_contents
  &(vtt_S20495C10[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S20495C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20495C10),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20495C10),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  S20495C9  : virtual S3600C19 , virtual S20495C10 {
  int s20495c9f0;
  ~S20495C9(); // tgen
  S20495C9(); // tgen
};
//SIG(-1 S20495C9) C1{ VBC2{ m} VBC3{ BC4{ m Fp} VBC2 FU5{ m}} Fi}


S20495C9 ::~S20495C9(){ note_dtor("S20495C9", this);} // tgen
S20495C9 ::S20495C9(){ note_ctor("S20495C9", this);} // tgen

static void Test_S20495C9()
{
  extern Class_Descriptor cd_S20495C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20495C9, buf);
    S20495C9 *dp, &lv = *(dp=new (buf) S20495C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20495C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20495C9)");
    check_base_class_offset(lv, (S3600C19*), 0, "S20495C9");
    check_base_class_offset(lv, (S3600C19*)(S20495C10*), 0, "S20495C9");
    check_base_class_offset(lv, (S3600C29_nt*)(S20495C10*), ABISELECT(24,12), "S20495C9");
    check_base_class_offset(lv, (S20495C10*), ABISELECT(16,8), "S20495C9");
    check_field_offset(lv, s20495c9f0, ABISELECT(8,4), "S20495C9.s20495c9f0");
    test_class_info(&lv, &cd_S20495C9);
    dp->~S20495C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20495C9(Test_S20495C9, "S20495C9", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20495C9C1Ev();
extern void _ZN8S20495C9D1Ev();
Name_Map name_map_S20495C9[] = {
  NSPAIR(_ZN8S20495C9C1Ev),
  NSPAIR(_ZN8S20495C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20495C10;
extern VTBL_ENTRY _ZTI9S20495C10[];
extern  VTBL_ENTRY _ZTV9S20495C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20495C10[];
static Base_Class bases_S20495C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20495C10,    ABISELECT(16,8), //bcp->offset
    4, //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 _ZTI8S20495C9[];
static  VTBL_ENTRY vtc_S20495C9[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C9[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20495C9[0]),
};
extern VTBL_ENTRY _ZTV8S20495C9[];
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C9[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20495C10[0]),
};
static  VTT_ENTRY vtt_S20495C9[] = {
  {&(_ZTV8S20495C9[4]),  4,7},
  {&(_ZTV8S20495C9[7]),  7,7},
  {&(_tg__ZTV9S20495C10__8S20495C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20495C9[];
extern  VTBL_ENTRY _ZTV8S20495C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C9[];
Class_Descriptor cd_S20495C9 = {  "S20495C9", // class name
  bases_S20495C9, 3,
  &(vtc_S20495C9[0]), // expected_vtbl_contents
  &(vtt_S20495C9[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20495C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20495C9),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20495C9),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  S20495C8  : S20495C9 , S20495C6 {
  ::S3600C19 s20495c8f0;
  ~S20495C8(); // tgen
  S20495C8(); // tgen
};
//SIG(-1 S20495C8) C1{ BC2{ VBC3{ m} VBC4{ BC5{ m Fp} VBC3 FU6{ m}} Fi} BC7{ VBC5 BC3} FC3}


S20495C8 ::~S20495C8(){ note_dtor("S20495C8", this);} // tgen
S20495C8 ::S20495C8(){ note_ctor("S20495C8", this);} // tgen

static void Test_S20495C8()
{
  extern Class_Descriptor cd_S20495C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20495C8, buf);
    S20495C8 *dp, &lv = *(dp=new (buf) S20495C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20495C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20495C8)");
    check_base_class_offset(lv, (S3600C19*)(S20495C9*), 0, "S20495C8");
    check_base_class_offset(lv, (S3600C19*)(S20495C10*), 0, "S20495C8");
    check_base_class_offset(lv, (S3600C29_nt*)(S20495C10*), ABISELECT(40,20), "S20495C8");
    check_base_class_offset(lv, (S20495C10*)(S20495C9*), ABISELECT(32,16), "S20495C8");
    check_base_class_offset(lv, (S20495C9*), 0, "S20495C8");
    check_base_class_offset(lv, (S3600C29_nt*)(S20495C6*), ABISELECT(56,28), "S20495C8");
    check_base_class_offset(lv, (S3600C19*)(S20495C6*), ABISELECT(16,8), "S20495C8");
    check_base_class_offset(lv, (S20495C6*), ABISELECT(16,8), "S20495C8");
    check_field_offset(lv, s20495c8f0, ABISELECT(24,12), "S20495C8.s20495c8f0");
    test_class_info(&lv, &cd_S20495C8);
    dp->~S20495C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20495C8(Test_S20495C8, "S20495C8", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20495C8C1Ev();
extern void _ZN8S20495C8D1Ev();
Name_Map name_map_S20495C8[] = {
  NSPAIR(_ZN8S20495C8C1Ev),
  NSPAIR(_ZN8S20495C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20495C10;
extern VTBL_ENTRY _ZTI9S20495C10[];
extern  VTBL_ENTRY _ZTV9S20495C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20495C10[];
extern Class_Descriptor cd_S20495C9;
extern VTBL_ENTRY _ZTI8S20495C9[];
extern  VTBL_ENTRY _ZTV8S20495C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C9[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20495C6;
extern VTBL_ENTRY _ZTI8S20495C6[];
extern  VTBL_ENTRY _ZTV8S20495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C6[];
static Base_Class bases_S20495C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20495C10,    ABISELECT(32,16), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20495C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C29_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S20495C6,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI8S20495C8[];
static  VTBL_ENTRY vtc_S20495C8[] = {
  ABISELECT(56,28),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
extern VTBL_ENTRY _ZTV8S20495C8[];
static  VTBL_ENTRY _tg__ZTV8S20495C9__8S20495C8[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C9__8S20495C8[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20495C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C6__8S20495C8[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C8[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20495C10[0]),
};
static  VTT_ENTRY vtt_S20495C8[] = {
  {&(_ZTV8S20495C8[5]),  5,11},
  {&(_tg__ZTV8S20495C9__8S20495C8[4]),  4,4},
  {&(_tg__ZTV9S20495C10__8S20495C9__8S20495C8[3]),  3,3},
  {&(_tg__ZTV8S20495C6__8S20495C8[3]),  3,3},
  {&(_ZTV8S20495C8[11]),  11,11},
  {&(_ZTV8S20495C8[8]),  8,11},
  {&(_tg__ZTV9S20495C10__8S20495C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20495C8[];
extern  VTBL_ENTRY _ZTV8S20495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C8[];
Class_Descriptor cd_S20495C8 = {  "S20495C8", // class name
  bases_S20495C8, 7,
  &(vtc_S20495C8[0]), // expected_vtbl_contents
  &(vtt_S20495C8[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20495C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20495C8),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20495C8),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  S20495C12  {
  virtual void  v1(); // _ZN9S20495C122v1Ev
  ~S20495C12(); // tgen
  S20495C12(); // tgen
};
//SIG(-1 S20495C12) C1{ v1}


void  S20495C12 ::v1(){vfunc_called(this, "_ZN9S20495C122v1Ev");}
S20495C12 ::~S20495C12(){ note_dtor("S20495C12", this);} // tgen
S20495C12 ::S20495C12(){ note_ctor("S20495C12", this);} // tgen

static void Test_S20495C12()
{
  extern Class_Descriptor cd_S20495C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20495C12, buf);
    S20495C12 *dp, &lv = *(dp=new (buf) S20495C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20495C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20495C12)");
    test_class_info(&lv, &cd_S20495C12);
    dp->~S20495C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20495C12(Test_S20495C12, "S20495C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S20495C12C1Ev();
extern void _ZN9S20495C12D1Ev();
Name_Map name_map_S20495C12[] = {
  NSPAIR(_ZN9S20495C12C1Ev),
  NSPAIR(_ZN9S20495C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20495C12[];
extern void _ZN9S20495C122v1Ev();
static  VTBL_ENTRY vtc_S20495C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20495C12[0]),
  (VTBL_ENTRY)&_ZN9S20495C122v1Ev,
};
extern VTBL_ENTRY _ZTI9S20495C12[];
extern  VTBL_ENTRY _ZTV9S20495C12[];
Class_Descriptor cd_S20495C12 = {  "S20495C12", // class name
  0,0,//no base classes
  &(vtc_S20495C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S20495C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20495C12),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  S20495C7  : virtual S20495C8 , virtual S20495C12 , virtual S20495C2 {
  ~S20495C7(); // tgen
  S20495C7(); // tgen
};
//SIG(-1 S20495C7) C1{ VBC2{ BC3{ VBC4{ m} VBC5{ BC6{ m Fp} VBC4 FU7{ m}} Fi} BC8{ VBC6 BC4} FC4} VBC9{ v1} VBC10{ VBC11{ BC4 BC6} VBC8 BC6 FL[8]}}


S20495C7 ::~S20495C7(){ note_dtor("S20495C7", this);} // tgen
S20495C7 ::S20495C7(){ note_ctor("S20495C7", this);} // tgen

static void Test_S20495C7()
{
  extern Class_Descriptor cd_S20495C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S20495C7, buf);
    S20495C7 *dp, &lv = *(dp=new (buf) S20495C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20495C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20495C7)");
    check_base_class_offset(lv, (S3600C19*)(S20495C9*)(S20495C8*), 0, "S20495C7");
    check_base_class_offset(lv, (S3600C19*)(S20495C10*), 0, "S20495C7");
    check_base_class_offset(lv, (S3600C29_nt*)(S20495C10*), ABISELECT(48,24), "S20495C7");
    check_base_class_offset(lv, (S20495C10*)(S20495C9*)(S20495C8*), ABISELECT(40,20), "S20495C7");
    check_base_class_offset(lv, (S20495C9*)(S20495C8*), ABISELECT(8,4), "S20495C7");
    check_base_class_offset(lv, (S3600C29_nt*)(S20495C6*)(S20495C8*), ABISELECT(64,32), "S20495C7");
    /*is_ambiguous_... S20495C7::S20495C6 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20495C6*), ABISELECT(64,32), "S20495C7");
    check_base_class_offset(lv, (S3600C19*)(S20495C6*)(S20495C8*), ABISELECT(24,12), "S20495C7");
    check_base_class_offset(lv, (S20495C6*)(S20495C8*), ABISELECT(24,12), "S20495C7");
    check_base_class_offset(lv, (S20495C8*), ABISELECT(8,4), "S20495C7");
    check_base_class_offset(lv, (S20495C12*), 0, "S20495C7");
    check_base_class_offset(lv, (S3600C19*)(S20495C3*), ABISELECT(152,108), "S20495C7");
    check_base_class_offset(lv, (S3600C29_nt*)(S20495C3*), ABISELECT(152,108), "S20495C7");
    check_base_class_offset(lv, (S20495C3*)(S20495C2*), ABISELECT(152,108), "S20495C7");
    /*is_ambiguous_... S20495C7::S20495C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20495C6*), ABISELECT(72,36), "S20495C7");
    check_base_class_offset(lv, (S20495C6*)(S20495C2*), ABISELECT(72,36), "S20495C7");
    /*is_ambiguous_... S20495C2::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20495C2*), ABISELECT(80,40), "S20495C7");
    check_base_class_offset(lv, (S20495C2*), ABISELECT(72,36), "S20495C7");
    test_class_info(&lv, &cd_S20495C7);
    dp->~S20495C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20495C7(Test_S20495C7, "S20495C7", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN8S20495C7C1Ev();
extern void _ZN8S20495C7D1Ev();
Name_Map name_map_S20495C7[] = {
  NSPAIR(_ZN8S20495C7C1Ev),
  NSPAIR(_ZN8S20495C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20495C10;
extern VTBL_ENTRY _ZTI9S20495C10[];
extern  VTBL_ENTRY _ZTV9S20495C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20495C10[];
extern Class_Descriptor cd_S20495C9;
extern VTBL_ENTRY _ZTI8S20495C9[];
extern  VTBL_ENTRY _ZTV8S20495C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C9[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20495C6;
extern VTBL_ENTRY _ZTI8S20495C6[];
extern  VTBL_ENTRY _ZTV8S20495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C6[];
extern Class_Descriptor cd_S20495C8;
extern VTBL_ENTRY _ZTI8S20495C8[];
extern  VTBL_ENTRY _ZTV8S20495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C8[];
extern Class_Descriptor cd_S20495C12;
extern VTBL_ENTRY _ZTI9S20495C12[];
extern  VTBL_ENTRY _ZTV9S20495C12[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20495C3;
extern VTBL_ENTRY _ZTI8S20495C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20495C6;
extern VTBL_ENTRY _ZTI8S20495C6[];
extern  VTBL_ENTRY _ZTV8S20495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20495C2;
extern VTBL_ENTRY _ZTI8S20495C2[];
extern  VTBL_ENTRY _ZTV8S20495C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C2[];
static Base_Class bases_S20495C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20495C10,    ABISELECT(40,20), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20495C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S20495C6,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //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
    7, //immediately_derived
  0, 0},
  {&cd_S20495C8,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20495C12,    0, //bcp->offset
    -1, //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
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20495C3,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20495C6,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    15, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20495C2,    ABISELECT(72,36), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20495C7[];
extern void _ZN9S20495C122v1Ev();
static  VTBL_ENTRY vtc_S20495C7[] = {
  ABISELECT(72,36),
  ABISELECT(152,108),
  ABISELECT(72,36),
  0,
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C7[0]),
  (VTBL_ENTRY)&_ZN9S20495C122v1Ev,
  ABISELECT(56,28),
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20495C7[0]),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20495C7[0]),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20495C7[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20495C7[0]),
};
extern VTBL_ENTRY _ZTV8S20495C7[];
static  VTBL_ENTRY _tg__ZTV8S20495C8__8S20495C7[] = {
  ABISELECT(56,28),
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C98S20495C8__8S20495C7[] = {
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C98S20495C8__8S20495C7[] = {
  ABISELECT(-40,-20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20495C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C68S20495C8__8S20495C7[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C8__8S20495C7[] = {
  ABISELECT(-40,-20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C6__8S20495C8__8S20495C7[] = {
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C7[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20495C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C2__8S20495C7[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C6__A1__8S20495C7[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C6[0]),
};
static  VTT_ENTRY vtt_S20495C7[] = {
  {&(_ZTV8S20495C7[11]),  11,28},
  {&(_ZTV8S20495C7[17]),  17,28},
  {&(_ZTV8S20495C7[23]),  23,28},
  {&(_ZTV8S20495C7[20]),  20,28},
  {&(_ZTV8S20495C7[11]),  11,28},
  {&(_ZTV8S20495C7[28]),  28,28},
  {&(_ZTV8S20495C7[28]),  28,28},
  {&(_tg__ZTV8S20495C8__8S20495C7[5]),  5,5},
  {&(_tg__ZTV8S20495C98S20495C8__8S20495C7[4]),  4,4},
  {&(_tg__ZTV9S20495C10__8S20495C98S20495C8__8S20495C7[3]),  3,3},
  {&(_tg__ZTV8S20495C68S20495C8__8S20495C7[3]),  3,3},
  {&(_tg__ZTV9S20495C10__8S20495C8__8S20495C7[3]),  3,3},
  {&(_tg__ZTV8S20495C6__8S20495C8__8S20495C7[3]),  3,3},
  {&(_tg__ZTV9S20495C10__8S20495C7[3]),  3,3},
  {&(_tg__ZTV8S20495C2__8S20495C7[5]),  5,5},
  {&(_tg__ZTV8S20495C2__8S20495C7[5]),  5,5},
  {&(_tg__ZTV8S20495C6__A1__8S20495C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20495C7[];
extern  VTBL_ENTRY _ZTV8S20495C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C7[];
Class_Descriptor cd_S20495C7 = {  "S20495C7", // class name
  bases_S20495C7, 16,
  &(vtc_S20495C7[0]), // expected_vtbl_contents
  &(vtt_S20495C7[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S20495C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20495C7),28, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20495C7),17, //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  S20495C14  : virtual S20495C12 , S20495C8 , virtual S3600C6_nt {
  ~S20495C14(); // tgen
  S20495C14(); // tgen
};
//SIG(-1 S20495C14) C1{ VBC2{ v1} BC3{ BC4{ VBC5{ m} VBC6{ BC7{ m Fp} VBC5 FU8{ m}} Fi} BC9{ VBC7 BC5} FC5} VBC10{ m}}


S20495C14 ::~S20495C14(){ note_dtor("S20495C14", this);} // tgen
S20495C14 ::S20495C14(){ note_ctor("S20495C14", this);} // tgen

static void Test_S20495C14()
{
  extern Class_Descriptor cd_S20495C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S20495C14, buf);
    S20495C14 *dp, &lv = *(dp=new (buf) S20495C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S20495C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20495C14)");
    check_base_class_offset(lv, (S20495C12*), ABISELECT(32,16), "S20495C14");
    check_base_class_offset(lv, (S3600C19*)(S20495C9*)(S20495C8*), 0, "S20495C14");
    check_base_class_offset(lv, (S3600C19*)(S20495C10*), 0, "S20495C14");
    check_base_class_offset(lv, (S3600C29_nt*)(S20495C10*), ABISELECT(48,24), "S20495C14");
    check_base_class_offset(lv, (S20495C10*)(S20495C9*)(S20495C8*), ABISELECT(40,20), "S20495C14");
    check_base_class_offset(lv, (S20495C9*)(S20495C8*), 0, "S20495C14");
    check_base_class_offset(lv, (S3600C29_nt*)(S20495C6*)(S20495C8*), ABISELECT(64,32), "S20495C14");
    check_base_class_offset(lv, (S3600C19*)(S20495C6*)(S20495C8*), ABISELECT(16,8), "S20495C14");
    check_base_class_offset(lv, (S20495C6*)(S20495C8*), ABISELECT(16,8), "S20495C14");
    check_base_class_offset(lv, (S20495C8*), 0, "S20495C14");
    check_base_class_offset(lv, (S3600C6_nt*), 0, "S20495C14");
    test_class_info(&lv, &cd_S20495C14);
    dp->~S20495C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20495C14(Test_S20495C14, "S20495C14", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN9S20495C14C1Ev();
extern void _ZN9S20495C14D1Ev();
Name_Map name_map_S20495C14[] = {
  NSPAIR(_ZN9S20495C14C1Ev),
  NSPAIR(_ZN9S20495C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20495C12;
extern VTBL_ENTRY _ZTI9S20495C12[];
extern  VTBL_ENTRY _ZTV9S20495C12[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20495C10;
extern VTBL_ENTRY _ZTI9S20495C10[];
extern  VTBL_ENTRY _ZTV9S20495C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20495C10[];
extern Class_Descriptor cd_S20495C9;
extern VTBL_ENTRY _ZTI8S20495C9[];
extern  VTBL_ENTRY _ZTV8S20495C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C9[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20495C6;
extern VTBL_ENTRY _ZTI8S20495C6[];
extern  VTBL_ENTRY _ZTV8S20495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C6[];
extern Class_Descriptor cd_S20495C8;
extern VTBL_ENTRY _ZTI8S20495C8[];
extern  VTBL_ENTRY _ZTV8S20495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C8[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
static Base_Class bases_S20495C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20495C12,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20495C10,    ABISELECT(40,20), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20495C9,    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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S20495C6,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20495C8,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C6_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20495C14[];
extern void _ZN9S20495C122v1Ev();
static  VTBL_ENTRY vtc_S20495C14[] = {
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20495C14[0]),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20495C14[0]),
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20495C14[0]),
  (VTBL_ENTRY)&_ZN9S20495C122v1Ev,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20495C14[0]),
};
extern VTBL_ENTRY _ZTV9S20495C14[];
static  VTBL_ENTRY _tg__ZTV8S20495C8__9S20495C14[] = {
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C98S20495C8__9S20495C14[] = {
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C98S20495C8__9S20495C14[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20495C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C68S20495C8__9S20495C14[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C8__9S20495C14[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C6__8S20495C8__9S20495C14[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__9S20495C14[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20495C10[0]),
};
static  VTT_ENTRY vtt_S20495C14[] = {
  {&(_ZTV9S20495C14[7]),  7,17},
  {&(_tg__ZTV8S20495C8__9S20495C14[5]),  5,5},
  {&(_tg__ZTV8S20495C98S20495C8__9S20495C14[4]),  4,4},
  {&(_tg__ZTV9S20495C10__8S20495C98S20495C8__9S20495C14[3]),  3,3},
  {&(_tg__ZTV8S20495C68S20495C8__9S20495C14[3]),  3,3},
  {&(_tg__ZTV9S20495C10__8S20495C8__9S20495C14[3]),  3,3},
  {&(_tg__ZTV8S20495C6__8S20495C8__9S20495C14[3]),  3,3},
  {&(_ZTV9S20495C14[13]),  13,17},
  {&(_ZTV9S20495C14[17]),  17,17},
  {&(_ZTV9S20495C14[10]),  10,17},
  {&(_tg__ZTV9S20495C10__9S20495C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20495C14[];
extern  VTBL_ENTRY _ZTV9S20495C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20495C14[];
Class_Descriptor cd_S20495C14 = {  "S20495C14", // class name
  bases_S20495C14, 10,
  &(vtc_S20495C14[0]), // expected_vtbl_contents
  &(vtt_S20495C14[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI9S20495C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20495C14),17, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20495C14),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  S20495C13  : virtual S20495C14 , S20495C8 , virtual S20495C3 , virtual S20495C2 {
  int s20495c13f0[6];
  ~S20495C13(); // tgen
  S20495C13(); // tgen
};
//SIG(-1 S20495C13) C1{ VBC2{ VBC3{ v1} BC4{ BC5{ VBC6{ m} VBC7{ BC8{ m Fp} VBC6 FU9{ m}} Fi} BC10{ VBC8 BC6} FC6} VBC11{ m}} BC4 VBC12{ BC6 BC8} VBC13{ VBC12 VBC10 BC8 FL[8]} Fi[6]}


S20495C13 ::~S20495C13(){ note_dtor("S20495C13", this);} // tgen
S20495C13 ::S20495C13(){ note_ctor("S20495C13", this);} // tgen

static void Test_S20495C13()
{
  extern Class_Descriptor cd_S20495C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,39)];
    init_test(&cd_S20495C13, buf);
    S20495C13 *dp, &lv = *(dp=new (buf) S20495C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,152), "sizeof(S20495C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20495C13)");
    check_base_class_offset(lv, (S20495C12*)(S20495C14*), ABISELECT(88,56), "S20495C13");
    check_base_class_offset(lv, (S3600C19*)(S20495C9*)(S20495C8*)(S20495C14*), 0, "S20495C13");
    check_base_class_offset(lv, (S3600C19*)(S20495C10*), 0, "S20495C13");
    /*is_ambiguous_... S20495C13::S20495C8 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20495C9*)(S20495C8*), 0, "S20495C13");
    check_base_class_offset(lv, (S3600C29_nt*)(S20495C10*), ABISELECT(104,64), "S20495C13");
    check_base_class_offset(lv, (S20495C10*)(S20495C9*)(S20495C8*)(S20495C14*), ABISELECT(96,60), "S20495C13");
    /*is_ambiguous_... S20495C13::S20495C8 */ AMB_check_base_class_offset(lv, (S20495C10*)(S20495C9*)(S20495C8*), ABISELECT(96,60), "S20495C13");
    check_base_class_offset(lv, (S20495C9*)(S20495C8*)(S20495C14*), ABISELECT(56,40), "S20495C13");
    check_base_class_offset(lv, (S3600C29_nt*)(S20495C6*)(S20495C8*)(S20495C14*), ABISELECT(120,72), "S20495C13");
    /*is_ambiguous_... S20495C13::S20495C8 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20495C6*)(S20495C8*), ABISELECT(120,72), "S20495C13");
    /*is_ambiguous_... S20495C13::S20495C6 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20495C6*), ABISELECT(120,72), "S20495C13");
    check_base_class_offset(lv, (S3600C19*)(S20495C6*)(S20495C8*)(S20495C14*), ABISELECT(72,48), "S20495C13");
    check_base_class_offset(lv, (S20495C6*)(S20495C8*)(S20495C14*), ABISELECT(72,48), "S20495C13");
    check_base_class_offset(lv, (S20495C8*)(S20495C14*), ABISELECT(56,40), "S20495C13");
    check_base_class_offset(lv, (S3600C6_nt*)(S20495C14*), 0, "S20495C13");
    check_base_class_offset(lv, (S20495C14*), ABISELECT(56,40), "S20495C13");
    /*is_ambiguous_... S20495C13::S20495C8 */ AMB_check_base_class_offset(lv, (S20495C9*)(S20495C8*), 0, "S20495C13");
    /*is_ambiguous_... S20495C13::S20495C8 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20495C6*)(S20495C8*), ABISELECT(16,8), "S20495C13");
    /*is_ambiguous_... S20495C13::S20495C8 */ AMB_check_base_class_offset(lv, (S20495C6*)(S20495C8*), ABISELECT(16,8), "S20495C13");
    /*is_ambiguous_... S20495C13::S20495C8 */ AMB_check_base_class_offset(lv, (S20495C8*), 0, "S20495C13");
    check_base_class_offset(lv, (S3600C19*)(S20495C3*), ABISELECT(128,76), "S20495C13");
    check_base_class_offset(lv, (S3600C29_nt*)(S20495C3*), ABISELECT(128,76), "S20495C13");
    check_base_class_offset(lv, (S20495C3*), ABISELECT(128,76), "S20495C13");
    check_base_class_offset(lv, (S20495C3*)(S20495C2*), ABISELECT(128,76), "S20495C13");
    /*is_ambiguous_... S20495C13::S20495C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20495C6*), ABISELECT(136,80), "S20495C13");
    check_base_class_offset(lv, (S20495C6*)(S20495C2*), ABISELECT(136,80), "S20495C13");
    /*is_ambiguous_... S20495C2::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20495C2*), ABISELECT(144,84), "S20495C13");
    check_base_class_offset(lv, (S20495C2*), ABISELECT(136,80), "S20495C13");
    check_field_offset(lv, s20495c13f0, ABISELECT(28,16), "S20495C13.s20495c13f0");
    test_class_info(&lv, &cd_S20495C13);
    dp->~S20495C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20495C13(Test_S20495C13, "S20495C13", ABISELECT(216,152));

#else // __cplusplus

extern void _ZN9S20495C13C1Ev();
extern void _ZN9S20495C13D1Ev();
Name_Map name_map_S20495C13[] = {
  NSPAIR(_ZN9S20495C13C1Ev),
  NSPAIR(_ZN9S20495C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20495C12;
extern VTBL_ENTRY _ZTI9S20495C12[];
extern  VTBL_ENTRY _ZTV9S20495C12[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20495C10;
extern VTBL_ENTRY _ZTI9S20495C10[];
extern  VTBL_ENTRY _ZTV9S20495C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20495C10[];
extern Class_Descriptor cd_S20495C9;
extern VTBL_ENTRY _ZTI8S20495C9[];
extern  VTBL_ENTRY _ZTV8S20495C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C9[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20495C6;
extern VTBL_ENTRY _ZTI8S20495C6[];
extern  VTBL_ENTRY _ZTV8S20495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C6[];
extern Class_Descriptor cd_S20495C8;
extern VTBL_ENTRY _ZTI8S20495C8[];
extern  VTBL_ENTRY _ZTV8S20495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C8[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
extern Class_Descriptor cd_S20495C14;
extern VTBL_ENTRY _ZTI9S20495C14[];
extern  VTBL_ENTRY _ZTV9S20495C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20495C14[];
extern Class_Descriptor cd_S20495C9;
extern VTBL_ENTRY _ZTI8S20495C9[];
extern  VTBL_ENTRY _ZTV8S20495C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C9[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20495C6;
extern VTBL_ENTRY _ZTI8S20495C6[];
extern  VTBL_ENTRY _ZTV8S20495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C6[];
extern Class_Descriptor cd_S20495C8;
extern VTBL_ENTRY _ZTI8S20495C8[];
extern  VTBL_ENTRY _ZTV8S20495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C8[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20495C3;
extern VTBL_ENTRY _ZTI8S20495C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20495C6;
extern VTBL_ENTRY _ZTI8S20495C6[];
extern  VTBL_ENTRY _ZTV8S20495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20495C2;
extern VTBL_ENTRY _ZTI8S20495C2[];
extern  VTBL_ENTRY _ZTV8S20495C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C2[];
static Base_Class bases_S20495C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20495C12,    ABISELECT(88,56), //bcp->offset
    24, //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
    10, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(104,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
    3, //immediately_derived
  0, 0},
  {&cd_S20495C10,    ABISELECT(96,60), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20495C9,    ABISELECT(56,40), //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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(120,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
    7, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(72,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, 0},
  {&cd_S20495C6,    ABISELECT(72,48), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20495C8,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3600C6_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
    10, //immediately_derived
  0, 1},
  {&cd_S20495C14,    ABISELECT(56,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20495C9,    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
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    13, //immediately_derived
  0, 0},
  {&cd_S20495C6,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20495C8,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(128,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
    17, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(128,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
    17, //immediately_derived
  0, 0},
  {&cd_S20495C3,    ABISELECT(128,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_S3600C19,    ABISELECT(136,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
    19, //immediately_derived
  0, 0},
  {&cd_S20495C6,    ABISELECT(136,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(144,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
    21, //immediately_derived
  0, 0},
  {&cd_S20495C2,    ABISELECT(136,80), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20495C13[];
extern void _ZN9S20495C122v1Ev();
static  VTBL_ENTRY vtc_S20495C13[] = {
  ABISELECT(136,80),
  ABISELECT(136,80),
  ABISELECT(128,76),
  0,
  ABISELECT(88,56),
  ABISELECT(56,40),
  ABISELECT(120,72),
  ABISELECT(96,60),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20495C13[0]),
  ABISELECT(104,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20495C13[0]),
  ABISELECT(-56,-40),
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(40,20),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S20495C13[0]),
  ABISELECT(48,24),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S20495C13[0]),
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI9S20495C13[0]),
  (VTBL_ENTRY)&_ZN9S20495C122v1Ev,
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI9S20495C13[0]),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI9S20495C13[0]),
};
extern VTBL_ENTRY _ZTV9S20495C13[];
static  VTBL_ENTRY _tg__ZTV8S20495C8__A1__9S20495C13[] = {
  ABISELECT(120,72),
  ABISELECT(96,60),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C98S20495C8__A1__9S20495C13[] = {
  ABISELECT(96,60),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C98S20495C8__A1__9S20495C13[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S20495C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C68S20495C8__A1__9S20495C13[] = {
  ABISELECT(104,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C8__A1__9S20495C13[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C6__8S20495C8__A1__9S20495C13[] = {
  ABISELECT(104,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C14__9S20495C13[] = {
  ABISELECT(-56,-40),
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(40,20),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S20495C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C89S20495C14__9S20495C13[] = {
  ABISELECT(64,32),
  ABISELECT(40,20),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C98S20495C89S20495C14__9S20495C13[] = {
  ABISELECT(40,20),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C98S20495C89S20495C14__9S20495C13[] = {
  ABISELECT(-96,-60),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20495C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C68S20495C89S20495C14__9S20495C13[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C89S20495C14__9S20495C13[] = {
  ABISELECT(-96,-60),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C6__8S20495C89S20495C14__9S20495C13[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
extern void _ZN9S20495C122v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20495C12__9S20495C14__9S20495C13[] = {
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20495C14[0]),
  (VTBL_ENTRY)&_ZN9S20495C122v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__9S20495C14__9S20495C13[] = {
  ABISELECT(-96,-60),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20495C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C68S20495C8__9S20495C14__9S20495C13[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20495C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__9S20495C13[] = {
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20495C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C2__9S20495C13[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C6__A2__9S20495C13[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C6[0]),
};
static  VTT_ENTRY vtt_S20495C13[] = {
  {&(_ZTV9S20495C13[11]),  11,36},
  {&(_tg__ZTV8S20495C8__A1__9S20495C13[5]),  5,5},
  {&(_tg__ZTV8S20495C98S20495C8__A1__9S20495C13[4]),  4,4},
  {&(_tg__ZTV9S20495C10__8S20495C98S20495C8__A1__9S20495C13[3]),  3,3},
  {&(_tg__ZTV8S20495C68S20495C8__A1__9S20495C13[3]),  3,3},
  {&(_tg__ZTV9S20495C10__8S20495C8__A1__9S20495C13[3]),  3,3},
  {&(_tg__ZTV8S20495C6__8S20495C8__A1__9S20495C13[3]),  3,3},
  {&(_ZTV9S20495C13[21]),  21,36},
  {&(_ZTV9S20495C13[27]),  27,36},
  {&(_ZTV9S20495C13[31]),  31,36},
  {&(_ZTV9S20495C13[24]),  24,36},
  {&(_ZTV9S20495C13[14]),  14,36},
  {&(_ZTV9S20495C13[36]),  36,36},
  {&(_ZTV9S20495C13[36]),  36,36},
  {&(_tg__ZTV9S20495C14__9S20495C13[7]),  7,7},
  {&(_tg__ZTV8S20495C89S20495C14__9S20495C13[5]),  5,5},
  {&(_tg__ZTV8S20495C98S20495C89S20495C14__9S20495C13[4]),  4,4},
  {&(_tg__ZTV9S20495C10__8S20495C98S20495C89S20495C14__9S20495C13[3]),  3,3},
  {&(_tg__ZTV8S20495C68S20495C89S20495C14__9S20495C13[3]),  3,3},
  {&(_tg__ZTV9S20495C10__8S20495C89S20495C14__9S20495C13[3]),  3,3},
  {&(_tg__ZTV8S20495C6__8S20495C89S20495C14__9S20495C13[3]),  3,3},
  {&(_tg__ZTV9S20495C12__9S20495C14__9S20495C13[3]),  3,4},
  {&(_tg__ZTV9S20495C10__9S20495C14__9S20495C13[3]),  3,3},
  {&(_tg__ZTV8S20495C68S20495C8__9S20495C14__9S20495C13[3]),  3,3},
  {&(_tg__ZTV9S20495C10__9S20495C13[3]),  3,3},
  {&(_tg__ZTV8S20495C2__9S20495C13[5]),  5,5},
  {&(_tg__ZTV8S20495C2__9S20495C13[5]),  5,5},
  {&(_tg__ZTV8S20495C6__A2__9S20495C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20495C13[];
extern  VTBL_ENTRY _ZTV9S20495C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20495C13[];
Class_Descriptor cd_S20495C13 = {  "S20495C13", // class name
  bases_S20495C13, 22,
  &(vtc_S20495C13[0]), // expected_vtbl_contents
  &(vtt_S20495C13[0]), // expected_vtt_contents
  ABISELECT(216,152), // object size
  NSPAIRA(_ZTI9S20495C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20495C13),36, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20495C13),28, //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  S20495C1  : virtual S20495C2 , virtual S20495C7 , virtual S20495C13 {
  ~S20495C1(); // tgen
  S20495C1(); // tgen
};
//SIG(1 S20495C1) C1{ VBC2{ VBC3{ BC4{ m} BC5{ m Fp}} VBC6{ VBC5 BC4} BC5 FL[8]} VBC7{ VBC8{ BC9{ VBC4 VBC10{ BC5 VBC4 FU11{ m}} Fi} BC6 FC4} VBC12{ v1} VBC2} VBC13{ VBC14{ VBC12 BC8 VBC15{ m}} BC8 VBC3 VBC2 Fi[6]}}


S20495C1 ::~S20495C1(){ note_dtor("S20495C1", this);} // tgen
S20495C1 ::S20495C1(){ note_ctor("S20495C1", this);} // tgen

static void Test_S20495C1()
{
  extern Class_Descriptor cd_S20495C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,43)];
    init_test(&cd_S20495C1, buf);
    S20495C1 *dp, &lv = *(dp=new (buf) S20495C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,168), "sizeof(S20495C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20495C1)");
    check_base_class_offset(lv, (S3600C19*)(S20495C3*), ABISELECT(88,76), "S20495C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S20495C3*), ABISELECT(88,76), "S20495C1");
    check_base_class_offset(lv, (S20495C3*)(S20495C2*), ABISELECT(88,76), "S20495C1");
    check_base_class_offset(lv, (S20495C3*)(S20495C13*), ABISELECT(88,76), "S20495C1");
    /*is_ambiguous_... S20495C1::S20495C6 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20495C6*), ABISELECT(96,80), "S20495C1");
    /*is_ambiguous_... S20495C1::S20495C8 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20495C6*)(S20495C8*), ABISELECT(96,80), "S20495C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S20495C6*)(S20495C8*)(S20495C14*), ABISELECT(96,80), "S20495C1");
    /*is_ambiguous_... S20495C13::S20495C8 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20495C6*)(S20495C8*)(S20495C13*), ABISELECT(96,80), "S20495C1");
    /*is_ambiguous_... S20495C1::S20495C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20495C6*), ABISELECT(8,4), "S20495C1");
    check_base_class_offset(lv, (S20495C6*)(S20495C2*), ABISELECT(8,4), "S20495C1");
    /*is_ambiguous_... S20495C2::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20495C2*), ABISELECT(16,8), "S20495C1");
    check_base_class_offset(lv, (S20495C2*), ABISELECT(8,4), "S20495C1");
    check_base_class_offset(lv, (S20495C2*)(S20495C7*), ABISELECT(8,4), "S20495C1");
    check_base_class_offset(lv, (S20495C2*)(S20495C13*), ABISELECT(8,4), "S20495C1");
    /*is_ambiguous_... S20495C1::S20495C8 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20495C9*)(S20495C8*), 0, "S20495C1");
    check_base_class_offset(lv, (S3600C19*)(S20495C10*), 0, "S20495C1");
    check_base_class_offset(lv, (S3600C19*)(S20495C9*)(S20495C8*)(S20495C14*), 0, "S20495C1");
    /*is_ambiguous_... S20495C13::S20495C8 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20495C9*)(S20495C8*)(S20495C13*), 0, "S20495C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S20495C10*), ABISELECT(144,104), "S20495C1");
    /*is_ambiguous_... S20495C1::S20495C8 */ AMB_check_base_class_offset(lv, (S20495C10*)(S20495C9*)(S20495C8*), ABISELECT(136,100), "S20495C1");
    check_base_class_offset(lv, (S20495C10*)(S20495C9*)(S20495C8*)(S20495C14*), ABISELECT(136,100), "S20495C1");
    /*is_ambiguous_... S20495C13::S20495C8 */ AMB_check_base_class_offset(lv, (S20495C10*)(S20495C9*)(S20495C8*)(S20495C13*), ABISELECT(136,100), "S20495C1");
    /*is_ambiguous_... S20495C1::S20495C8 */ AMB_check_base_class_offset(lv, (S20495C9*)(S20495C8*), ABISELECT(104,84), "S20495C1");
    /*is_ambiguous_... S20495C1::S20495C8 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20495C6*)(S20495C8*), ABISELECT(120,92), "S20495C1");
    /*is_ambiguous_... S20495C1::S20495C8 */ AMB_check_base_class_offset(lv, (S20495C6*)(S20495C8*), ABISELECT(120,92), "S20495C1");
    check_base_class_offset(lv, (S20495C8*)(S20495C7*), ABISELECT(104,84), "S20495C1");
    check_base_class_offset(lv, (S20495C12*)(S20495C7*), 0, "S20495C1");
    check_base_class_offset(lv, (S20495C12*)(S20495C14*), 0, "S20495C1");
    check_base_class_offset(lv, (S20495C7*), 0, "S20495C1");
    check_base_class_offset(lv, (S20495C9*)(S20495C8*)(S20495C14*), ABISELECT(216,152), "S20495C1");
    check_base_class_offset(lv, (S3600C19*)(S20495C6*)(S20495C8*)(S20495C14*), ABISELECT(232,160), "S20495C1");
    check_base_class_offset(lv, (S20495C6*)(S20495C8*)(S20495C14*), ABISELECT(232,160), "S20495C1");
    check_base_class_offset(lv, (S20495C8*)(S20495C14*), ABISELECT(216,152), "S20495C1");
    check_base_class_offset(lv, (S3600C6_nt*)(S20495C14*), 0, "S20495C1");
    check_base_class_offset(lv, (S20495C14*)(S20495C13*), ABISELECT(216,152), "S20495C1");
    /*is_ambiguous_... S20495C13::S20495C8 */ AMB_check_base_class_offset(lv, (S20495C9*)(S20495C8*)(S20495C13*), ABISELECT(160,112), "S20495C1");
    /*is_ambiguous_... S20495C13::S20495C8 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20495C6*)(S20495C8*)(S20495C13*), ABISELECT(176,120), "S20495C1");
    /*is_ambiguous_... S20495C13::S20495C8 */ AMB_check_base_class_offset(lv, (S20495C6*)(S20495C8*)(S20495C13*), ABISELECT(176,120), "S20495C1");
    /*is_ambiguous_... S20495C13::S20495C8 */ AMB_check_base_class_offset(lv, (S20495C8*)(S20495C13*), ABISELECT(160,112), "S20495C1");
    check_base_class_offset(lv, (S20495C13*), ABISELECT(160,112), "S20495C1");
    test_class_info(&lv, &cd_S20495C1);
    dp->~S20495C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20495C1(Test_S20495C1, "S20495C1", ABISELECT(248,168));

#else // __cplusplus

extern void _ZN8S20495C1C1Ev();
extern void _ZN8S20495C1D1Ev();
Name_Map name_map_S20495C1[] = {
  NSPAIR(_ZN8S20495C1C1Ev),
  NSPAIR(_ZN8S20495C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20495C3;
extern VTBL_ENTRY _ZTI8S20495C3[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20495C6;
extern VTBL_ENTRY _ZTI8S20495C6[];
extern  VTBL_ENTRY _ZTV8S20495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20495C2;
extern VTBL_ENTRY _ZTI8S20495C2[];
extern  VTBL_ENTRY _ZTV8S20495C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C2[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20495C10;
extern VTBL_ENTRY _ZTI9S20495C10[];
extern  VTBL_ENTRY _ZTV9S20495C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20495C10[];
extern Class_Descriptor cd_S20495C9;
extern VTBL_ENTRY _ZTI8S20495C9[];
extern  VTBL_ENTRY _ZTV8S20495C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C9[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20495C6;
extern VTBL_ENTRY _ZTI8S20495C6[];
extern  VTBL_ENTRY _ZTV8S20495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C6[];
extern Class_Descriptor cd_S20495C8;
extern VTBL_ENTRY _ZTI8S20495C8[];
extern  VTBL_ENTRY _ZTV8S20495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C8[];
extern Class_Descriptor cd_S20495C12;
extern VTBL_ENTRY _ZTI9S20495C12[];
extern  VTBL_ENTRY _ZTV9S20495C12[];
extern Class_Descriptor cd_S20495C7;
extern VTBL_ENTRY _ZTI8S20495C7[];
extern  VTBL_ENTRY _ZTV8S20495C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C7[];
extern Class_Descriptor cd_S20495C9;
extern VTBL_ENTRY _ZTI8S20495C9[];
extern  VTBL_ENTRY _ZTV8S20495C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C9[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20495C6;
extern VTBL_ENTRY _ZTI8S20495C6[];
extern  VTBL_ENTRY _ZTV8S20495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C6[];
extern Class_Descriptor cd_S20495C8;
extern VTBL_ENTRY _ZTI8S20495C8[];
extern  VTBL_ENTRY _ZTV8S20495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C8[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
extern Class_Descriptor cd_S20495C14;
extern VTBL_ENTRY _ZTI9S20495C14[];
extern  VTBL_ENTRY _ZTV9S20495C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20495C14[];
extern Class_Descriptor cd_S20495C9;
extern VTBL_ENTRY _ZTI8S20495C9[];
extern  VTBL_ENTRY _ZTV8S20495C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C9[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20495C6;
extern VTBL_ENTRY _ZTI8S20495C6[];
extern  VTBL_ENTRY _ZTV8S20495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C6[];
extern Class_Descriptor cd_S20495C8;
extern VTBL_ENTRY _ZTI8S20495C8[];
extern  VTBL_ENTRY _ZTV8S20495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C8[];
extern Class_Descriptor cd_S20495C13;
extern VTBL_ENTRY _ZTI9S20495C13[];
extern  VTBL_ENTRY _ZTV9S20495C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20495C13[];
static Base_Class bases_S20495C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(88,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
    2, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(88,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
    2, //immediately_derived
  0, 0},
  {&cd_S20495C3,    ABISELECT(88,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
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(96,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20495C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20495C2,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(144,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20495C10,    ABISELECT(136,100), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20495C9,    ABISELECT(104,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    14, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(120,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
    13, //immediately_derived
  0, 0},
  {&cd_S20495C6,    ABISELECT(120,92), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20495C8,    ABISELECT(104,84), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20495C12,    0, //bcp->offset
    -1, //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
    7, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20495C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20495C9,    ABISELECT(216,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(232,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
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20495C6,    ABISELECT(232,160), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20495C8,    ABISELECT(216,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3600C6_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
    22, //immediately_derived
  0, 1},
  {&cd_S20495C14,    ABISELECT(216,152), //bcp->offset
    46, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S20495C9,    ABISELECT(160,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(176,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
    25, //immediately_derived
  0, 0},
  {&cd_S20495C6,    ABISELECT(176,120), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //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
    26, //immediately_derived
  0, 0},
  {&cd_S20495C8,    ABISELECT(160,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20495C13,    ABISELECT(160,112), //bcp->offset
    32, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20495C1[];
extern void _ZN9S20495C122v1Ev();
static  VTBL_ENTRY vtc_S20495C1[] = {
  0,
  ABISELECT(216,152),
  ABISELECT(160,112),
  0,
  ABISELECT(8,4),
  ABISELECT(88,76),
  ABISELECT(8,4),
  0,
  ABISELECT(96,80),
  ABISELECT(136,100),
  0,
  ABISELECT(104,84),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C1[0]),
  (VTBL_ENTRY)&_ZN9S20495C122v1Ev,
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20495C1[0]),
  ABISELECT(-8,-4),
  ABISELECT(32,16),
  ABISELECT(-104,-84),
  ABISELECT(-104,-84),
  (VTBL_ENTRY)&(_ZTI8S20495C1[0]),
  ABISELECT(-24,-12),
  ABISELECT(-120,-92),
  (VTBL_ENTRY)&(_ZTI8S20495C1[0]),
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI8S20495C1[0]),
  ABISELECT(-152,-108),
  ABISELECT(-152,-108),
  ABISELECT(-72,-36),
  ABISELECT(-160,-112),
  ABISELECT(-160,-112),
  ABISELECT(56,40),
  ABISELECT(-64,-32),
  ABISELECT(-24,-12),
  ABISELECT(-160,-112),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20495C1[0]),
  ABISELECT(-80,-40),
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI8S20495C1[0]),
  ABISELECT(-216,-152),
  ABISELECT(-216,-152),
  ABISELECT(-120,-72),
  ABISELECT(-80,-52),
  ABISELECT(-216,-152),
  ABISELECT(-216,-152),
  (VTBL_ENTRY)&(_ZTI8S20495C1[0]),
  ABISELECT(-136,-80),
  ABISELECT(-232,-160),
  (VTBL_ENTRY)&(_ZTI8S20495C1[0]),
};
extern VTBL_ENTRY _ZTV8S20495C1[];
static  VTBL_ENTRY _tg__ZTV8S20495C2__8S20495C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C6__8S20495C1[] = {
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C6[0]),
};
extern void _ZN9S20495C122v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20495C7__8S20495C1[] = {
  ABISELECT(8,4),
  ABISELECT(88,76),
  ABISELECT(8,4),
  0,
  ABISELECT(96,80),
  ABISELECT(136,100),
  0,
  ABISELECT(104,84),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C7[0]),
  (VTBL_ENTRY)&_ZN9S20495C122v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20495C8__8S20495C7__8S20495C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(32,16),
  ABISELECT(-104,-84),
  ABISELECT(-104,-84),
  (VTBL_ENTRY)&(_ZTI8S20495C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C7__8S20495C1[] = {
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI8S20495C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C68S20495C8__8S20495C7__8S20495C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-120,-92),
  (VTBL_ENTRY)&(_ZTI8S20495C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C2__8S20495C7__8S20495C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20495C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C8__8S20495C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(32,16),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C98S20495C8__8S20495C1[] = {
  ABISELECT(32,16),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C98S20495C8__8S20495C1[] = {
  ABISELECT(-136,-100),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20495C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C68S20495C8__A1__8S20495C1[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C8__8S20495C1[] = {
  ABISELECT(-136,-100),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C6__8S20495C8__8S20495C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C1[] = {
  ABISELECT(-136,-100),
  0,
  (VTBL_ENTRY)&(_ZTI9S20495C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C13__8S20495C1[] = {
  ABISELECT(-152,-108),
  ABISELECT(-152,-108),
  ABISELECT(-72,-36),
  ABISELECT(-160,-112),
  ABISELECT(-160,-112),
  ABISELECT(56,40),
  ABISELECT(-64,-32),
  ABISELECT(-24,-12),
  ABISELECT(-160,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20495C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C89S20495C13__A2__8S20495C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-24,-12),
  ABISELECT(-160,-112),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C98S20495C89S20495C13__A2__8S20495C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-160,-112),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C98S20495C89S20495C13__A2__8S20495C1[] = {
  ABISELECT(-136,-100),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S20495C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C68S20495C89S20495C13__A3__8S20495C1[] = {
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C89S20495C13__A2__8S20495C1[] = {
  ABISELECT(-136,-100),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C6__8S20495C89S20495C13__A2__8S20495C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C14__9S20495C13__8S20495C1[] = {
  ABISELECT(-216,-152),
  ABISELECT(-216,-152),
  ABISELECT(-120,-72),
  ABISELECT(-80,-52),
  ABISELECT(-216,-152),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S20495C13[0]),
};
extern void _ZN9S20495C122v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20495C12__9S20495C13__8S20495C1[] = {
  0,
  ABISELECT(160,112),
  (VTBL_ENTRY)&(_ZTI9S20495C13[0]),
  (VTBL_ENTRY)&_ZN9S20495C122v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__9S20495C13__8S20495C1[] = {
  ABISELECT(-136,-100),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S20495C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C68S20495C89S20495C14__9S20495C13__8S20495C1[] = {
  ABISELECT(-136,-80),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S20495C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C68S20495C8__A1__9S20495C13__8S20495C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20495C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C2__9S20495C13__8S20495C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  ABISELECT(152,108),
  (VTBL_ENTRY)&(_ZTI9S20495C13[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C14__8S20495C1[] = {
  ABISELECT(-216,-152),
  ABISELECT(-216,-152),
  ABISELECT(-120,-72),
  ABISELECT(-80,-52),
  ABISELECT(-216,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S20495C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C89S20495C14__A1__8S20495C1[] = {
  ABISELECT(-120,-72),
  ABISELECT(-80,-52),
  ABISELECT(-216,-152),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C98S20495C89S20495C14__A1__8S20495C1[] = {
  ABISELECT(-80,-52),
  ABISELECT(-216,-152),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C98S20495C89S20495C14__A1__8S20495C1[] = {
  ABISELECT(-136,-100),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI8S20495C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C68S20495C89S20495C14__A2__8S20495C1[] = {
  ABISELECT(-136,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S20495C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__8S20495C89S20495C14__A1__8S20495C1[] = {
  ABISELECT(-136,-100),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C6__8S20495C89S20495C14__A1__8S20495C1[] = {
  ABISELECT(-136,-80),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20495C8[0]),
};
extern void _ZN9S20495C122v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20495C12__9S20495C14__8S20495C1[] = {
  0,
  ABISELECT(216,152),
  (VTBL_ENTRY)&(_ZTI9S20495C14[0]),
  (VTBL_ENTRY)&_ZN9S20495C122v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20495C10__9S20495C14__8S20495C1[] = {
  ABISELECT(-136,-100),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI9S20495C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20495C68S20495C8__9S20495C14__8S20495C1[] = {
  ABISELECT(-136,-80),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20495C14[0]),
};
static  VTT_ENTRY vtt_S20495C1[] = {
  {&(_ZTV8S20495C1[15]),  15,56},
  {&(_ZTV8S20495C1[21]),  21,56},
  {&(_ZTV8S20495C1[21]),  21,56},
  {&(_ZTV8S20495C1[15]),  15,56},
  {&(_ZTV8S20495C1[26]),  26,56},
  {&(_ZTV8S20495C1[32]),  32,56},
  {&(_ZTV8S20495C1[29]),  29,56},
  {&(_ZTV8S20495C1[15]),  15,56},
  {&(_ZTV8S20495C1[43]),  43,56},
  {&(_ZTV8S20495C1[53]),  53,56},
  {&(_ZTV8S20495C1[56]),  56,56},
  {&(_ZTV8S20495C1[46]),  46,56},
  {&(_tg__ZTV8S20495C2__8S20495C1[5]),  5,5},
  {&(_tg__ZTV8S20495C2__8S20495C1[5]),  5,5},
  {&(_tg__ZTV8S20495C6__8S20495C1[3]),  3,3},
  {&(_tg__ZTV8S20495C7__8S20495C1[11]),  11,12},
  {&(_tg__ZTV8S20495C8__8S20495C7__8S20495C1[5]),  5,5},
  {&(_tg__ZTV9S20495C10__8S20495C7__8S20495C1[3]),  3,3},
  {&(_tg__ZTV8S20495C68S20495C8__8S20495C7__8S20495C1[3]),  3,3},
  {&(_tg__ZTV8S20495C7__8S20495C1[11]),  11,12},
  {&(_tg__ZTV8S20495C2__8S20495C7__8S20495C1[5]),  5,5},
  {&(_tg__ZTV8S20495C2__8S20495C7__8S20495C1[5]),  5,5},
  {&(_tg__ZTV8S20495C8__8S20495C1[5]),  5,5},
  {&(_tg__ZTV8S20495C98S20495C8__8S20495C1[4]),  4,4},
  {&(_tg__ZTV9S20495C10__8S20495C98S20495C8__8S20495C1[3]),  3,3},
  {&(_tg__ZTV8S20495C68S20495C8__A1__8S20495C1[3]),  3,3},
  {&(_tg__ZTV9S20495C10__8S20495C8__8S20495C1[3]),  3,3},
  {&(_tg__ZTV8S20495C6__8S20495C8__8S20495C1[3]),  3,3},
  {&(_tg__ZTV9S20495C10__8S20495C1[3]),  3,3},
  {&(_tg__ZTV9S20495C13__8S20495C1[11]),  11,11},
  {&(_tg__ZTV8S20495C89S20495C13__A2__8S20495C1[5]),  5,5},
  {&(_tg__ZTV8S20495C98S20495C89S20495C13__A2__8S20495C1[4]),  4,4},
  {&(_tg__ZTV9S20495C10__8S20495C98S20495C89S20495C13__A2__8S20495C1[3]),  3,3},
  {&(_tg__ZTV8S20495C68S20495C89S20495C13__A3__8S20495C1[3]),  3,3},
  {&(_tg__ZTV9S20495C10__8S20495C89S20495C13__A2__8S20495C1[3]),  3,3},
  {&(_tg__ZTV8S20495C6__8S20495C89S20495C13__A2__8S20495C1[3]),  3,3},
  {&(_tg__ZTV9S20495C14__9S20495C13__8S20495C1[7]),  7,7},
  {&(_tg__ZTV9S20495C12__9S20495C13__8S20495C1[3]),  3,4},
  {&(_tg__ZTV9S20495C10__9S20495C13__8S20495C1[3]),  3,3},
  {&(_tg__ZTV8S20495C68S20495C89S20495C14__9S20495C13__8S20495C1[3]),  3,3},
  {&(_tg__ZTV8S20495C68S20495C8__A1__9S20495C13__8S20495C1[3]),  3,3},
  {&(_tg__ZTV8S20495C2__9S20495C13__8S20495C1[5]),  5,5},
  {&(_tg__ZTV8S20495C2__9S20495C13__8S20495C1[5]),  5,5},
  {&(_tg__ZTV9S20495C14__8S20495C1[7]),  7,7},
  {&(_tg__ZTV8S20495C89S20495C14__A1__8S20495C1[5]),  5,5},
  {&(_tg__ZTV8S20495C98S20495C89S20495C14__A1__8S20495C1[4]),  4,4},
  {&(_tg__ZTV9S20495C10__8S20495C98S20495C89S20495C14__A1__8S20495C1[3]),  3,3},
  {&(_tg__ZTV8S20495C68S20495C89S20495C14__A2__8S20495C1[3]),  3,3},
  {&(_tg__ZTV9S20495C10__8S20495C89S20495C14__A1__8S20495C1[3]),  3,3},
  {&(_tg__ZTV8S20495C6__8S20495C89S20495C14__A1__8S20495C1[3]),  3,3},
  {&(_tg__ZTV9S20495C12__9S20495C14__8S20495C1[3]),  3,4},
  {&(_tg__ZTV9S20495C10__9S20495C14__8S20495C1[3]),  3,3},
  {&(_tg__ZTV8S20495C68S20495C8__9S20495C14__8S20495C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20495C1[];
extern  VTBL_ENTRY _ZTV8S20495C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20495C1[];
Class_Descriptor cd_S20495C1 = {  "S20495C1", // class name
  bases_S20495C1, 28,
  &(vtc_S20495C1[0]), // expected_vtbl_contents
  &(vtt_S20495C1[0]), // expected_vtt_contents
  ABISELECT(248,168), // object size
  NSPAIRA(_ZTI8S20495C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20495C1),56, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20495C1),53, //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  S20535C4  {
  int s20535c4f0;
  void *s20535c4f1[2];
  char s20535c4f2[4];
  virtual void  v3(); // _ZN8S20535C42v3Ev
  virtual void  v4(); // _ZN8S20535C42v4Ev
  virtual void  v5(); // _ZN8S20535C42v5Ev
  virtual void  v6(); // _ZN8S20535C42v6Ev
  virtual void  v7(); // _ZN8S20535C42v7Ev
  ~S20535C4(); // tgen
  S20535C4(); // tgen
};
//SIG(-1 S20535C4) C1{ v1 v2 v3 v4 v5 Fi Fp[2] Fc[4]}


void  S20535C4 ::v3(){vfunc_called(this, "_ZN8S20535C42v3Ev");}
void  S20535C4 ::v4(){vfunc_called(this, "_ZN8S20535C42v4Ev");}
void  S20535C4 ::v5(){vfunc_called(this, "_ZN8S20535C42v5Ev");}
void  S20535C4 ::v6(){vfunc_called(this, "_ZN8S20535C42v6Ev");}
void  S20535C4 ::v7(){vfunc_called(this, "_ZN8S20535C42v7Ev");}
S20535C4 ::~S20535C4(){ note_dtor("S20535C4", this);} // tgen
S20535C4 ::S20535C4(){ note_ctor("S20535C4", this);} // tgen

static void Test_S20535C4()
{
  extern Class_Descriptor cd_S20535C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20535C4, buf);
    S20535C4 *dp, &lv = *(dp=new (buf) S20535C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20535C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20535C4)");
    check_field_offset(lv, s20535c4f0, ABISELECT(8,4), "S20535C4.s20535c4f0");
    check_field_offset(lv, s20535c4f1, ABISELECT(16,8), "S20535C4.s20535c4f1");
    check_field_offset(lv, s20535c4f2, ABISELECT(32,16), "S20535C4.s20535c4f2");
    test_class_info(&lv, &cd_S20535C4);
    dp->~S20535C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20535C4(Test_S20535C4, "S20535C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20535C4C1Ev();
extern void _ZN8S20535C4D1Ev();
Name_Map name_map_S20535C4[] = {
  NSPAIR(_ZN8S20535C4C1Ev),
  NSPAIR(_ZN8S20535C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20535C4[];
extern void _ZN8S20535C42v3Ev();
extern void _ZN8S20535C42v4Ev();
extern void _ZN8S20535C42v5Ev();
extern void _ZN8S20535C42v6Ev();
extern void _ZN8S20535C42v7Ev();
static  VTBL_ENTRY vtc_S20535C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20535C4[0]),
  (VTBL_ENTRY)&_ZN8S20535C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v7Ev,
};
extern VTBL_ENTRY _ZTI8S20535C4[];
extern  VTBL_ENTRY _ZTV8S20535C4[];
Class_Descriptor cd_S20535C4 = {  "S20535C4", // class name
  0,0,//no base classes
  &(vtc_S20535C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20535C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20535C4),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  S20535C5  {
  void *s20535c5f0;
  long s20535c5f1[6];
  char s20535c5f2:5;
  virtual void  v8(); // _ZN8S20535C52v8Ev
  virtual void  v9(); // _ZN8S20535C52v9Ev
  virtual void  v10(); // _ZN8S20535C53v10Ev
  virtual void  v11(); // _ZN8S20535C53v11Ev
  ~S20535C5(); // tgen
  S20535C5(); // tgen
};
//SIG(-1 S20535C5) C1{ v1 v2 v3 v4 Fp Fl[6] Fc:5}


void  S20535C5 ::v8(){vfunc_called(this, "_ZN8S20535C52v8Ev");}
void  S20535C5 ::v9(){vfunc_called(this, "_ZN8S20535C52v9Ev");}
void  S20535C5 ::v10(){vfunc_called(this, "_ZN8S20535C53v10Ev");}
void  S20535C5 ::v11(){vfunc_called(this, "_ZN8S20535C53v11Ev");}
S20535C5 ::~S20535C5(){ note_dtor("S20535C5", this);} // tgen
S20535C5 ::S20535C5(){ note_ctor("S20535C5", this);} // tgen

static void Test_S20535C5()
{
  extern Class_Descriptor cd_S20535C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S20535C5, buf);
    S20535C5 *dp, &lv = *(dp=new (buf) S20535C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S20535C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20535C5)");
    check_field_offset(lv, s20535c5f0, ABISELECT(8,4), "S20535C5.s20535c5f0");
    check_field_offset(lv, s20535c5f1, ABISELECT(16,8), "S20535C5.s20535c5f1");
    set_bf_and_test(lv, s20535c5f2, ABISELECT(64,32), 0, 5, 1, "S20535C5");
    set_bf_and_test(lv, s20535c5f2, ABISELECT(64,32), 0, 5, hide_sll(1LL<<4), "S20535C5");
    test_class_info(&lv, &cd_S20535C5);
    dp->~S20535C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20535C5(Test_S20535C5, "S20535C5", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S20535C5C1Ev();
extern void _ZN8S20535C5D1Ev();
Name_Map name_map_S20535C5[] = {
  NSPAIR(_ZN8S20535C5C1Ev),
  NSPAIR(_ZN8S20535C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20535C5[];
extern void _ZN8S20535C52v8Ev();
extern void _ZN8S20535C52v9Ev();
extern void _ZN8S20535C53v10Ev();
extern void _ZN8S20535C53v11Ev();
static  VTBL_ENTRY vtc_S20535C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20535C5[0]),
  (VTBL_ENTRY)&_ZN8S20535C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20535C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v11Ev,
};
extern VTBL_ENTRY _ZTI8S20535C5[];
extern  VTBL_ENTRY _ZTV8S20535C5[];
Class_Descriptor cd_S20535C5 = {  "S20535C5", // class name
  0,0,//no base classes
  &(vtc_S20535C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S20535C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20535C5),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  S20535C3  : S20535C4 , S20535C5 {
  short s20535c3f0;
  void *s20535c3f1;
  virtual void  v12(); // _ZN8S20535C33v12Ev
  virtual void  v13(); // _ZN8S20535C33v13Ev
  virtual void  v14(); // _ZN8S20535C33v14Ev
  virtual void  v15(); // _ZN8S20535C33v15Ev
  virtual void  v16(); // _ZN8S20535C33v16Ev
  ~S20535C3(); // tgen
  S20535C3(); // tgen
};
//SIG(-1 S20535C3) C1{ BC2{ v6 v7 v8 v9 v10 Fi Fp[2] Fc[4]} BC3{ v11 v12 v13 v14 Fp Fl[6] Fc:5} v1 v2 v3 v4 v5 Fs Fp}


void  S20535C3 ::v12(){vfunc_called(this, "_ZN8S20535C33v12Ev");}
void  S20535C3 ::v13(){vfunc_called(this, "_ZN8S20535C33v13Ev");}
void  S20535C3 ::v14(){vfunc_called(this, "_ZN8S20535C33v14Ev");}
void  S20535C3 ::v15(){vfunc_called(this, "_ZN8S20535C33v15Ev");}
void  S20535C3 ::v16(){vfunc_called(this, "_ZN8S20535C33v16Ev");}
S20535C3 ::~S20535C3(){ note_dtor("S20535C3", this);} // tgen
S20535C3 ::S20535C3(){ note_ctor("S20535C3", this);} // tgen

static void Test_S20535C3()
{
  extern Class_Descriptor cd_S20535C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S20535C3, buf);
    S20535C3 *dp, &lv = *(dp=new (buf) S20535C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S20535C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20535C3)");
    check_base_class_offset(lv, (S20535C4*), 0, "S20535C3");
    check_base_class_offset(lv, (S20535C5*), ABISELECT(40,20), "S20535C3");
    check_field_offset(lv, s20535c3f0, ABISELECT(106,54), "S20535C3.s20535c3f0");
    check_field_offset(lv, s20535c3f1, ABISELECT(112,56), "S20535C3.s20535c3f1");
    test_class_info(&lv, &cd_S20535C3);
    dp->~S20535C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20535C3(Test_S20535C3, "S20535C3", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN8S20535C3C1Ev();
extern void _ZN8S20535C3D1Ev();
Name_Map name_map_S20535C3[] = {
  NSPAIR(_ZN8S20535C3C1Ev),
  NSPAIR(_ZN8S20535C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20535C4;
extern VTBL_ENTRY _ZTI8S20535C4[];
extern  VTBL_ENTRY _ZTV8S20535C4[];
extern Class_Descriptor cd_S20535C5;
extern VTBL_ENTRY _ZTI8S20535C5[];
extern  VTBL_ENTRY _ZTV8S20535C5[];
static Base_Class bases_S20535C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20535C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20535C5,    ABISELECT(40,20), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20535C3[];
extern void _ZN8S20535C42v3Ev();
extern void _ZN8S20535C42v4Ev();
extern void _ZN8S20535C42v5Ev();
extern void _ZN8S20535C42v6Ev();
extern void _ZN8S20535C42v7Ev();
extern void _ZN8S20535C33v12Ev();
extern void _ZN8S20535C33v13Ev();
extern void _ZN8S20535C33v14Ev();
extern void _ZN8S20535C33v15Ev();
extern void _ZN8S20535C33v16Ev();
extern void _ZN8S20535C52v8Ev();
extern void _ZN8S20535C52v9Ev();
extern void _ZN8S20535C53v10Ev();
extern void _ZN8S20535C53v11Ev();
static  VTBL_ENTRY vtc_S20535C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20535C3[0]),
  (VTBL_ENTRY)&_ZN8S20535C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v16Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20535C3[0]),
  (VTBL_ENTRY)&_ZN8S20535C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20535C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v11Ev,
};
extern VTBL_ENTRY _ZTI8S20535C3[];
extern  VTBL_ENTRY _ZTV8S20535C3[];
Class_Descriptor cd_S20535C3 = {  "S20535C3", // class name
  bases_S20535C3, 2,
  &(vtc_S20535C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI8S20535C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20535C3),18, //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  S20535C6  : virtual S20535C5 , S20535C3 {
  virtual void  v17(); // _ZN8S20535C63v17Ev
  virtual void  v18(); // _ZN8S20535C63v18Ev
  virtual void  v19(); // _ZN8S20535C63v19Ev
  virtual void  v20(); // _ZN8S20535C63v20Ev
  virtual void  v21(); // _ZN8S20535C63v21Ev
  virtual void  v22(); // _ZN8S20535C63v22Ev
  virtual void  v23(); // _ZN8S20535C63v23Ev
  virtual void  v24(); // _ZN8S20535C63v24Ev
  ~S20535C6(); // tgen
  S20535C6(); // tgen
};
//SIG(-1 S20535C6) C1{ VBC2{ v9 v10 v11 v12 Fp Fl[6] Fc:5} BC3{ BC4{ v13 v14 v15 v16 v17 Fi Fp[2] Fc[4]} BC2 v18 v19 v20 v21 v22 Fs Fp} v1 v2 v3 v4 v5 v6 v7 v8}


void  S20535C6 ::v17(){vfunc_called(this, "_ZN8S20535C63v17Ev");}
void  S20535C6 ::v18(){vfunc_called(this, "_ZN8S20535C63v18Ev");}
void  S20535C6 ::v19(){vfunc_called(this, "_ZN8S20535C63v19Ev");}
void  S20535C6 ::v20(){vfunc_called(this, "_ZN8S20535C63v20Ev");}
void  S20535C6 ::v21(){vfunc_called(this, "_ZN8S20535C63v21Ev");}
void  S20535C6 ::v22(){vfunc_called(this, "_ZN8S20535C63v22Ev");}
void  S20535C6 ::v23(){vfunc_called(this, "_ZN8S20535C63v23Ev");}
void  S20535C6 ::v24(){vfunc_called(this, "_ZN8S20535C63v24Ev");}
S20535C6 ::~S20535C6(){ note_dtor("S20535C6", this);} // tgen
S20535C6 ::S20535C6(){ note_ctor("S20535C6", this);} // tgen

static void Test_S20535C6()
{
  extern Class_Descriptor cd_S20535C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[25];
    init_test(&cd_S20535C6, buf);
    S20535C6 *dp, &lv = *(dp=new (buf) S20535C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,96), "sizeof(S20535C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20535C6)");
    /*is_ambiguous_... S20535C6::S20535C5 */ AMB_check_base_class_offset(lv, (S20535C5*), ABISELECT(120,60), "S20535C6");
    check_base_class_offset(lv, (S20535C4*)(S20535C3*), 0, "S20535C6");
    check_base_class_offset(lv, (S20535C5*)(S20535C3*), ABISELECT(40,20), "S20535C6");
    check_base_class_offset(lv, (S20535C3*), 0, "S20535C6");
    test_class_info(&lv, &cd_S20535C6);
    dp->~S20535C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20535C6(Test_S20535C6, "S20535C6", ABISELECT(192,96));

#else // __cplusplus

extern void _ZN8S20535C6C1Ev();
extern void _ZN8S20535C6D1Ev();
Name_Map name_map_S20535C6[] = {
  NSPAIR(_ZN8S20535C6C1Ev),
  NSPAIR(_ZN8S20535C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20535C5;
extern VTBL_ENTRY _ZTI8S20535C5[];
extern  VTBL_ENTRY _ZTV8S20535C5[];
extern Class_Descriptor cd_S20535C4;
extern VTBL_ENTRY _ZTI8S20535C4[];
extern  VTBL_ENTRY _ZTV8S20535C4[];
extern Class_Descriptor cd_S20535C5;
extern VTBL_ENTRY _ZTI8S20535C5[];
extern  VTBL_ENTRY _ZTV8S20535C5[];
extern Class_Descriptor cd_S20535C3;
extern VTBL_ENTRY _ZTI8S20535C3[];
extern  VTBL_ENTRY _ZTV8S20535C3[];
static Base_Class bases_S20535C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20535C5,    ABISELECT(120,60), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20535C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20535C5,    ABISELECT(40,20), //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20535C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20535C6[];
extern void _ZN8S20535C42v3Ev();
extern void _ZN8S20535C42v4Ev();
extern void _ZN8S20535C42v5Ev();
extern void _ZN8S20535C42v6Ev();
extern void _ZN8S20535C42v7Ev();
extern void _ZN8S20535C33v12Ev();
extern void _ZN8S20535C33v13Ev();
extern void _ZN8S20535C33v14Ev();
extern void _ZN8S20535C33v15Ev();
extern void _ZN8S20535C33v16Ev();
extern void _ZN8S20535C63v17Ev();
extern void _ZN8S20535C63v18Ev();
extern void _ZN8S20535C63v19Ev();
extern void _ZN8S20535C63v20Ev();
extern void _ZN8S20535C63v21Ev();
extern void _ZN8S20535C63v22Ev();
extern void _ZN8S20535C63v23Ev();
extern void _ZN8S20535C63v24Ev();
extern void _ZN8S20535C52v8Ev();
extern void _ZN8S20535C52v9Ev();
extern void _ZN8S20535C53v10Ev();
extern void _ZN8S20535C53v11Ev();
extern void _ZN8S20535C52v8Ev();
extern void _ZN8S20535C52v9Ev();
extern void _ZN8S20535C53v10Ev();
extern void _ZN8S20535C53v11Ev();
static  VTBL_ENTRY vtc_S20535C6[] = {
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20535C6[0]),
  (VTBL_ENTRY)&_ZN8S20535C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v24Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20535C6[0]),
  (VTBL_ENTRY)&_ZN8S20535C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20535C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S20535C6[0]),
  (VTBL_ENTRY)&_ZN8S20535C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20535C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20535C6[];
static  VTT_ENTRY vtt_S20535C6[] = {
  {&(_ZTV8S20535C6[3]),  3,37},
  {&(_ZTV8S20535C6[33]),  33,37},
};
extern VTBL_ENTRY _ZTI8S20535C6[];
extern  VTBL_ENTRY _ZTV8S20535C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20535C6[];
Class_Descriptor cd_S20535C6 = {  "S20535C6", // class name
  bases_S20535C6, 4,
  &(vtc_S20535C6[0]), // expected_vtbl_contents
  &(vtt_S20535C6[0]), // expected_vtt_contents
  ABISELECT(192,96), // object size
  NSPAIRA(_ZTI8S20535C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20535C6),37, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20535C6),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20535C2  : virtual S20535C3 , S20535C6 {
  virtual void  v25(); // _ZN8S20535C23v25Ev
  virtual void  v26(); // _ZN8S20535C23v26Ev
  virtual void  v27(); // _ZN8S20535C23v27Ev
  ~S20535C2(); // tgen
  S20535C2(); // tgen
};
//SIG(-1 S20535C2) C1{ VBC2{ BC3{ v4 v5 v6 v7 v8 Fi Fp[2] Fc[4]} BC4{ v9 v10 v11 v12 Fp Fl[6] Fc:5} v13 v14 v15 v16 v17 Fs Fp} BC5{ VBC4 BC2 v18 v19 v20 v21 v22 v23 v24 v25} v1 v2 v3}


void  S20535C2 ::v25(){vfunc_called(this, "_ZN8S20535C23v25Ev");}
void  S20535C2 ::v26(){vfunc_called(this, "_ZN8S20535C23v26Ev");}
void  S20535C2 ::v27(){vfunc_called(this, "_ZN8S20535C23v27Ev");}
S20535C2 ::~S20535C2(){ note_dtor("S20535C2", this);} // tgen
S20535C2 ::S20535C2(){ note_ctor("S20535C2", this);} // tgen

static void Test_S20535C2()
{
  extern Class_Descriptor cd_S20535C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[40];
    init_test(&cd_S20535C2, buf);
    S20535C2 *dp, &lv = *(dp=new (buf) S20535C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,156), "sizeof(S20535C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20535C2)");
    /*is_ambiguous_... S20535C2::S20535C3 */ AMB_check_base_class_offset(lv, (S20535C4*)(S20535C3*), ABISELECT(120,60), "S20535C2");
    /*is_ambiguous_... S20535C2::S20535C3 */ AMB_check_base_class_offset(lv, (S20535C5*)(S20535C3*), ABISELECT(160,80), "S20535C2");
    /*is_ambiguous_... S20535C2::S20535C3 */ AMB_check_base_class_offset(lv, (S20535C3*), ABISELECT(120,60), "S20535C2");
    /*is_ambiguous_... S20535C6::S20535C5 */ AMB_check_base_class_offset(lv, (S20535C5*)(S20535C6*), ABISELECT(240,120), "S20535C2");
    check_base_class_offset(lv, (S20535C4*)(S20535C3*)(S20535C6*), 0, "S20535C2");
    check_base_class_offset(lv, (S20535C5*)(S20535C3*)(S20535C6*), ABISELECT(40,20), "S20535C2");
    check_base_class_offset(lv, (S20535C3*)(S20535C6*), 0, "S20535C2");
    check_base_class_offset(lv, (S20535C6*), 0, "S20535C2");
    test_class_info(&lv, &cd_S20535C2);
    dp->~S20535C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20535C2(Test_S20535C2, "S20535C2", ABISELECT(312,156));

#else // __cplusplus

extern void _ZN8S20535C2C1Ev();
extern void _ZN8S20535C2D1Ev();
Name_Map name_map_S20535C2[] = {
  NSPAIR(_ZN8S20535C2C1Ev),
  NSPAIR(_ZN8S20535C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20535C4;
extern VTBL_ENTRY _ZTI8S20535C4[];
extern  VTBL_ENTRY _ZTV8S20535C4[];
extern Class_Descriptor cd_S20535C5;
extern VTBL_ENTRY _ZTI8S20535C5[];
extern  VTBL_ENTRY _ZTV8S20535C5[];
extern Class_Descriptor cd_S20535C3;
extern VTBL_ENTRY _ZTI8S20535C3[];
extern  VTBL_ENTRY _ZTV8S20535C3[];
extern Class_Descriptor cd_S20535C5;
extern VTBL_ENTRY _ZTI8S20535C5[];
extern  VTBL_ENTRY _ZTV8S20535C5[];
extern Class_Descriptor cd_S20535C4;
extern VTBL_ENTRY _ZTI8S20535C4[];
extern  VTBL_ENTRY _ZTV8S20535C4[];
extern Class_Descriptor cd_S20535C5;
extern VTBL_ENTRY _ZTI8S20535C5[];
extern  VTBL_ENTRY _ZTV8S20535C5[];
extern Class_Descriptor cd_S20535C3;
extern VTBL_ENTRY _ZTI8S20535C3[];
extern  VTBL_ENTRY _ZTV8S20535C3[];
extern Class_Descriptor cd_S20535C6;
extern VTBL_ENTRY _ZTI8S20535C6[];
extern  VTBL_ENTRY _ZTV8S20535C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20535C6[];
static Base_Class bases_S20535C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20535C4,    ABISELECT(120,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
    2, //immediately_derived
  0, 0},
  {&cd_S20535C5,    ABISELECT(160,80), //bcp->offset
    57, //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20535C3,    ABISELECT(120,60), //bcp->offset
    31, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20535C5,    ABISELECT(240,120), //bcp->offset
    63, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20535C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20535C5,    ABISELECT(40,20), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20535C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S20535C6,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S20535C2[];
extern void _ZN8S20535C42v3Ev();
extern void _ZN8S20535C42v4Ev();
extern void _ZN8S20535C42v5Ev();
extern void _ZN8S20535C42v6Ev();
extern void _ZN8S20535C42v7Ev();
extern void _ZN8S20535C33v12Ev();
extern void _ZN8S20535C33v13Ev();
extern void _ZN8S20535C33v14Ev();
extern void _ZN8S20535C33v15Ev();
extern void _ZN8S20535C33v16Ev();
extern void _ZN8S20535C63v17Ev();
extern void _ZN8S20535C63v18Ev();
extern void _ZN8S20535C63v19Ev();
extern void _ZN8S20535C63v20Ev();
extern void _ZN8S20535C63v21Ev();
extern void _ZN8S20535C63v22Ev();
extern void _ZN8S20535C63v23Ev();
extern void _ZN8S20535C63v24Ev();
extern void _ZN8S20535C23v25Ev();
extern void _ZN8S20535C23v26Ev();
extern void _ZN8S20535C23v27Ev();
extern void _ZN8S20535C52v8Ev();
extern void _ZN8S20535C52v9Ev();
extern void _ZN8S20535C53v10Ev();
extern void _ZN8S20535C53v11Ev();
extern void _ZN8S20535C42v3Ev();
extern void _ZN8S20535C42v4Ev();
extern void _ZN8S20535C42v5Ev();
extern void _ZN8S20535C42v6Ev();
extern void _ZN8S20535C42v7Ev();
extern void _ZN8S20535C33v12Ev();
extern void _ZN8S20535C33v13Ev();
extern void _ZN8S20535C33v14Ev();
extern void _ZN8S20535C33v15Ev();
extern void _ZN8S20535C33v16Ev();
extern void _ZN8S20535C52v8Ev();
extern void _ZN8S20535C52v9Ev();
extern void _ZN8S20535C53v10Ev();
extern void _ZN8S20535C53v11Ev();
extern void _ZN8S20535C52v8Ev();
extern void _ZN8S20535C52v9Ev();
extern void _ZN8S20535C53v10Ev();
extern void _ZN8S20535C53v11Ev();
static  VTBL_ENTRY vtc_S20535C2[] = {
  ABISELECT(120,60),
  ABISELECT(240,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S20535C2[0]),
  (VTBL_ENTRY)&_ZN8S20535C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20535C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20535C23v26Ev,
  (VTBL_ENTRY)&_ZN8S20535C23v27Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20535C2[0]),
  (VTBL_ENTRY)&_ZN8S20535C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20535C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v11Ev,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S20535C2[0]),
  (VTBL_ENTRY)&_ZN8S20535C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v16Ev,
  ABISELECT(-160,-80),
  (VTBL_ENTRY)&(_ZTI8S20535C2[0]),
  (VTBL_ENTRY)&_ZN8S20535C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20535C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S20535C2[0]),
  (VTBL_ENTRY)&_ZN8S20535C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20535C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20535C2[];
extern void _ZN8S20535C42v3Ev();
extern void _ZN8S20535C42v4Ev();
extern void _ZN8S20535C42v5Ev();
extern void _ZN8S20535C42v6Ev();
extern void _ZN8S20535C42v7Ev();
extern void _ZN8S20535C33v12Ev();
extern void _ZN8S20535C33v13Ev();
extern void _ZN8S20535C33v14Ev();
extern void _ZN8S20535C33v15Ev();
extern void _ZN8S20535C33v16Ev();
extern void _ZN8S20535C63v17Ev();
extern void _ZN8S20535C63v18Ev();
extern void _ZN8S20535C63v19Ev();
extern void _ZN8S20535C63v20Ev();
extern void _ZN8S20535C63v21Ev();
extern void _ZN8S20535C63v22Ev();
extern void _ZN8S20535C63v23Ev();
extern void _ZN8S20535C63v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20535C6__8S20535C2[] = {
  ABISELECT(240,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S20535C6[0]),
  (VTBL_ENTRY)&_ZN8S20535C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v24Ev,
};
extern void _ZN8S20535C52v8Ev();
extern void _ZN8S20535C52v9Ev();
extern void _ZN8S20535C53v10Ev();
extern void _ZN8S20535C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20535C5__8S20535C6__8S20535C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S20535C6[0]),
  (VTBL_ENTRY)&_ZN8S20535C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20535C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v11Ev,
};
static  VTT_ENTRY vtt_S20535C2[] = {
  {&(_ZTV8S20535C2[4]),  4,73},
  {&(_tg__ZTV8S20535C6__8S20535C2[3]),  3,21},
  {&(_tg__ZTV8S20535C5__8S20535C6__8S20535C2[6]),  6,10},
  {&(_ZTV8S20535C2[47]),  47,73},
  {&(_ZTV8S20535C2[59]),  59,73},
  {&(_ZTV8S20535C2[69]),  69,73},
};
extern VTBL_ENTRY _ZTI8S20535C2[];
extern  VTBL_ENTRY _ZTV8S20535C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20535C2[];
Class_Descriptor cd_S20535C2 = {  "S20535C2", // class name
  bases_S20535C2, 8,
  &(vtc_S20535C2[0]), // expected_vtbl_contents
  &(vtt_S20535C2[0]), // expected_vtt_contents
  ABISELECT(312,156), // object size
  NSPAIRA(_ZTI8S20535C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20535C2),73, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20535C2),6, //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  S20535C1  : virtual S20535C2 {
  virtual  ~S20535C1(); // _ZN8S20535C1D2Ev
  virtual void  v1(); // _ZN8S20535C12v1Ev
  virtual void  v2(); // _ZN8S20535C12v2Ev
  S20535C1(); // tgen
};
//SIG(1 S20535C1) C1{ VBC2{ VBC3{ BC4{ v3 v4 v5 v6 v7 Fi Fp[2] Fc[4]} BC5{ v8 v9 v10 v11 Fp Fl[6] Fc:5} v12 v13 v14 v15 v16 Fs Fp} BC6{ VBC5 BC3 v17 v18 v19 v20 v21 v22 v23 v24} v25 v26 v27} vd v1 v2}


 S20535C1 ::~S20535C1(){ note_dtor("S20535C1", this);}
void  S20535C1 ::v1(){vfunc_called(this, "_ZN8S20535C12v1Ev");}
void  S20535C1 ::v2(){vfunc_called(this, "_ZN8S20535C12v2Ev");}
S20535C1 ::S20535C1(){ note_ctor("S20535C1", this);} // tgen

static void Test_S20535C1()
{
  extern Class_Descriptor cd_S20535C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[41];
    init_test(&cd_S20535C1, buf);
    S20535C1 *dp, &lv = *(dp=new (buf) S20535C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,160), "sizeof(S20535C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20535C1)");
    /*is_ambiguous_... S20535C1::S20535C3 */ AMB_check_base_class_offset(lv, (S20535C4*)(S20535C3*), ABISELECT(128,64), "S20535C1");
    /*is_ambiguous_... S20535C1::S20535C3 */ AMB_check_base_class_offset(lv, (S20535C5*)(S20535C3*), ABISELECT(168,84), "S20535C1");
    /*is_ambiguous_... S20535C2::S20535C3 */ AMB_check_base_class_offset(lv, (S20535C3*)(S20535C2*), ABISELECT(128,64), "S20535C1");
    /*is_ambiguous_... S20535C6::S20535C5 */ AMB_check_base_class_offset(lv, (S20535C5*)(S20535C6*)(S20535C2*), ABISELECT(248,124), "S20535C1");
    check_base_class_offset(lv, (S20535C4*)(S20535C3*)(S20535C6*)(S20535C2*), ABISELECT(8,4), "S20535C1");
    check_base_class_offset(lv, (S20535C5*)(S20535C3*)(S20535C6*)(S20535C2*), ABISELECT(48,24), "S20535C1");
    check_base_class_offset(lv, (S20535C3*)(S20535C6*)(S20535C2*), ABISELECT(8,4), "S20535C1");
    check_base_class_offset(lv, (S20535C6*)(S20535C2*), ABISELECT(8,4), "S20535C1");
    check_base_class_offset(lv, (S20535C2*), ABISELECT(8,4), "S20535C1");
    test_class_info(&lv, &cd_S20535C1);
    dp->~S20535C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20535C1(Test_S20535C1, "S20535C1", ABISELECT(320,160));

#else // __cplusplus

extern void _ZN8S20535C1C1Ev();
extern void _ZN8S20535C1D2Ev();
Name_Map name_map_S20535C1[] = {
  NSPAIR(_ZN8S20535C1C1Ev),
  NSPAIR(_ZN8S20535C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20535C4;
extern VTBL_ENTRY _ZTI8S20535C4[];
extern  VTBL_ENTRY _ZTV8S20535C4[];
extern Class_Descriptor cd_S20535C5;
extern VTBL_ENTRY _ZTI8S20535C5[];
extern  VTBL_ENTRY _ZTV8S20535C5[];
extern Class_Descriptor cd_S20535C3;
extern VTBL_ENTRY _ZTI8S20535C3[];
extern  VTBL_ENTRY _ZTV8S20535C3[];
extern Class_Descriptor cd_S20535C5;
extern VTBL_ENTRY _ZTI8S20535C5[];
extern  VTBL_ENTRY _ZTV8S20535C5[];
extern Class_Descriptor cd_S20535C4;
extern VTBL_ENTRY _ZTI8S20535C4[];
extern  VTBL_ENTRY _ZTV8S20535C4[];
extern Class_Descriptor cd_S20535C5;
extern VTBL_ENTRY _ZTI8S20535C5[];
extern  VTBL_ENTRY _ZTV8S20535C5[];
extern Class_Descriptor cd_S20535C3;
extern VTBL_ENTRY _ZTI8S20535C3[];
extern  VTBL_ENTRY _ZTV8S20535C3[];
extern Class_Descriptor cd_S20535C6;
extern VTBL_ENTRY _ZTI8S20535C6[];
extern  VTBL_ENTRY _ZTV8S20535C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20535C6[];
extern Class_Descriptor cd_S20535C2;
extern VTBL_ENTRY _ZTI8S20535C2[];
extern  VTBL_ENTRY _ZTV8S20535C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20535C2[];
static Base_Class bases_S20535C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20535C4,    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
    2, //immediately_derived
  0, 0},
  {&cd_S20535C5,    ABISELECT(168,84), //bcp->offset
    91, //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20535C3,    ABISELECT(128,64), //bcp->offset
    65, //bcp->virtual_function_table_offset
    16, //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
    8, //immediately_derived
  0, 1},
  {&cd_S20535C5,    ABISELECT(248,124), //bcp->offset
    97, //bcp->virtual_function_table_offset
    6, //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
    7, //immediately_derived
  0, 1},
  {&cd_S20535C4,    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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20535C5,    ABISELECT(48,24), //bcp->offset
    59, //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_S20535C3,    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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20535C6,    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
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20535C2,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    29, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20535C1[];
extern void _ZN8S20535C1D1Ev();
extern void _ZN8S20535C1D0Ev();
extern void _ZN8S20535C12v1Ev();
extern void _ZN8S20535C12v2Ev();
extern void _ZN8S20535C42v3Ev();
extern void _ZN8S20535C42v4Ev();
extern void _ZN8S20535C42v5Ev();
extern void _ZN8S20535C42v6Ev();
extern void _ZN8S20535C42v7Ev();
extern void _ZN8S20535C33v12Ev();
extern void _ZN8S20535C33v13Ev();
extern void _ZN8S20535C33v14Ev();
extern void _ZN8S20535C33v15Ev();
extern void _ZN8S20535C33v16Ev();
extern void _ZN8S20535C63v17Ev();
extern void _ZN8S20535C63v18Ev();
extern void _ZN8S20535C63v19Ev();
extern void _ZN8S20535C63v20Ev();
extern void _ZN8S20535C63v21Ev();
extern void _ZN8S20535C63v22Ev();
extern void _ZN8S20535C63v23Ev();
extern void _ZN8S20535C63v24Ev();
extern void _ZN8S20535C23v25Ev();
extern void _ZN8S20535C23v26Ev();
extern void _ZN8S20535C23v27Ev();
extern void _ZN8S20535C52v8Ev();
extern void _ZN8S20535C52v9Ev();
extern void _ZN8S20535C53v10Ev();
extern void _ZN8S20535C53v11Ev();
extern void _ZN8S20535C42v3Ev();
extern void _ZN8S20535C42v4Ev();
extern void _ZN8S20535C42v5Ev();
extern void _ZN8S20535C42v6Ev();
extern void _ZN8S20535C42v7Ev();
extern void _ZN8S20535C33v12Ev();
extern void _ZN8S20535C33v13Ev();
extern void _ZN8S20535C33v14Ev();
extern void _ZN8S20535C33v15Ev();
extern void _ZN8S20535C33v16Ev();
extern void _ZN8S20535C52v8Ev();
extern void _ZN8S20535C52v9Ev();
extern void _ZN8S20535C53v10Ev();
extern void _ZN8S20535C53v11Ev();
extern void _ZN8S20535C52v8Ev();
extern void _ZN8S20535C52v9Ev();
extern void _ZN8S20535C53v10Ev();
extern void _ZN8S20535C53v11Ev();
static  VTBL_ENTRY vtc_S20535C1[] = {
  ABISELECT(248,124),
  ABISELECT(128,64),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20535C1[0]),
  (VTBL_ENTRY)&_ZN8S20535C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20535C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20535C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20535C12v2Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  ABISELECT(240,120),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20535C1[0]),
  (VTBL_ENTRY)&_ZN8S20535C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20535C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20535C23v26Ev,
  (VTBL_ENTRY)&_ZN8S20535C23v27Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20535C1[0]),
  (VTBL_ENTRY)&_ZN8S20535C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20535C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v11Ev,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S20535C1[0]),
  (VTBL_ENTRY)&_ZN8S20535C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v16Ev,
  ABISELECT(-168,-84),
  (VTBL_ENTRY)&(_ZTI8S20535C1[0]),
  (VTBL_ENTRY)&_ZN8S20535C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20535C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-248,-124),
  (VTBL_ENTRY)&(_ZTI8S20535C1[0]),
  (VTBL_ENTRY)&_ZN8S20535C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20535C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20535C1[];
extern void _ZN8S20535C42v3Ev();
extern void _ZN8S20535C42v4Ev();
extern void _ZN8S20535C42v5Ev();
extern void _ZN8S20535C42v6Ev();
extern void _ZN8S20535C42v7Ev();
extern void _ZN8S20535C33v12Ev();
extern void _ZN8S20535C33v13Ev();
extern void _ZN8S20535C33v14Ev();
extern void _ZN8S20535C33v15Ev();
extern void _ZN8S20535C33v16Ev();
extern void _ZN8S20535C63v17Ev();
extern void _ZN8S20535C63v18Ev();
extern void _ZN8S20535C63v19Ev();
extern void _ZN8S20535C63v20Ev();
extern void _ZN8S20535C63v21Ev();
extern void _ZN8S20535C63v22Ev();
extern void _ZN8S20535C63v23Ev();
extern void _ZN8S20535C63v24Ev();
extern void _ZN8S20535C23v25Ev();
extern void _ZN8S20535C23v26Ev();
extern void _ZN8S20535C23v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20535C2__8S20535C1[] = {
  ABISELECT(120,60),
  ABISELECT(240,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S20535C2[0]),
  (VTBL_ENTRY)&_ZN8S20535C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20535C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20535C23v26Ev,
  (VTBL_ENTRY)&_ZN8S20535C23v27Ev,
};
extern void _ZN8S20535C42v3Ev();
extern void _ZN8S20535C42v4Ev();
extern void _ZN8S20535C42v5Ev();
extern void _ZN8S20535C42v6Ev();
extern void _ZN8S20535C42v7Ev();
extern void _ZN8S20535C33v12Ev();
extern void _ZN8S20535C33v13Ev();
extern void _ZN8S20535C33v14Ev();
extern void _ZN8S20535C33v15Ev();
extern void _ZN8S20535C33v16Ev();
extern void _ZN8S20535C63v17Ev();
extern void _ZN8S20535C63v18Ev();
extern void _ZN8S20535C63v19Ev();
extern void _ZN8S20535C63v20Ev();
extern void _ZN8S20535C63v21Ev();
extern void _ZN8S20535C63v22Ev();
extern void _ZN8S20535C63v23Ev();
extern void _ZN8S20535C63v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20535C68S20535C2__8S20535C1[] = {
  ABISELECT(240,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S20535C6[0]),
  (VTBL_ENTRY)&_ZN8S20535C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20535C63v24Ev,
};
extern void _ZN8S20535C52v8Ev();
extern void _ZN8S20535C52v9Ev();
extern void _ZN8S20535C53v10Ev();
extern void _ZN8S20535C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20535C5__8S20535C68S20535C2__8S20535C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S20535C6[0]),
  (VTBL_ENTRY)&_ZN8S20535C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20535C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v11Ev,
};
extern void _ZN8S20535C42v3Ev();
extern void _ZN8S20535C42v4Ev();
extern void _ZN8S20535C42v5Ev();
extern void _ZN8S20535C42v6Ev();
extern void _ZN8S20535C42v7Ev();
extern void _ZN8S20535C33v12Ev();
extern void _ZN8S20535C33v13Ev();
extern void _ZN8S20535C33v14Ev();
extern void _ZN8S20535C33v15Ev();
extern void _ZN8S20535C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20535C3__8S20535C2__8S20535C1[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S20535C2[0]),
  (VTBL_ENTRY)&_ZN8S20535C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20535C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20535C33v16Ev,
};
extern void _ZN8S20535C52v8Ev();
extern void _ZN8S20535C52v9Ev();
extern void _ZN8S20535C53v10Ev();
extern void _ZN8S20535C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20535C58S20535C3__8S20535C2__8S20535C1[] = {
  ABISELECT(-160,-80),
  (VTBL_ENTRY)&(_ZTI8S20535C2[0]),
  (VTBL_ENTRY)&_ZN8S20535C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20535C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v11Ev,
};
extern void _ZN8S20535C52v8Ev();
extern void _ZN8S20535C52v9Ev();
extern void _ZN8S20535C53v10Ev();
extern void _ZN8S20535C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20535C5__A1__8S20535C2__8S20535C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S20535C2[0]),
  (VTBL_ENTRY)&_ZN8S20535C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20535C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20535C53v11Ev,
};
static  VTT_ENTRY vtt_S20535C1[] = {
  {&(_ZTV8S20535C1[5]),  5,107},
  {&(_ZTV8S20535C1[38]),  38,107},
  {&(_ZTV8S20535C1[81]),  81,107},
  {&(_ZTV8S20535C1[93]),  93,107},
  {&(_ZTV8S20535C1[103]),  103,107},
  {&(_ZTV8S20535C1[61]),  61,107},
  {&(_tg__ZTV8S20535C2__8S20535C1[4]),  4,25},
  {&(_tg__ZTV8S20535C68S20535C2__8S20535C1[3]),  3,21},
  {&(_tg__ZTV8S20535C5__8S20535C68S20535C2__8S20535C1[6]),  6,10},
  {&(_tg__ZTV8S20535C3__8S20535C2__8S20535C1[16]),  16,26},
  {&(_tg__ZTV8S20535C58S20535C3__8S20535C2__8S20535C1[2]),  2,6},
  {&(_tg__ZTV8S20535C5__A1__8S20535C2__8S20535C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20535C1[];
extern  VTBL_ENTRY _ZTV8S20535C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20535C1[];
Class_Descriptor cd_S20535C1 = {  "S20535C1", // class name
  bases_S20535C1, 9,
  &(vtc_S20535C1[0]), // expected_vtbl_contents
  &(vtt_S20535C1[0]), // expected_vtt_contents
  ABISELECT(320,160), // object size
  NSPAIRA(_ZTI8S20535C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20535C1),107, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20535C1),12, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7313C4  {
  int s7313c4f0;
  ::S7707C6 s7313c4f1;
  int s7313c4f2;
  virtual  ~S7313C4(); // _ZN7S7313C4D1Ev
  virtual void  v3(); // _ZN7S7313C42v3Ev
  virtual void  v4(); // _ZN7S7313C42v4Ev
  virtual void  v5(); // _ZN7S7313C42v5Ev
  virtual void  v6(); // _ZN7S7313C42v6Ev
  virtual void  v7(); // _ZN7S7313C42v7Ev
  virtual void  v8(); // _ZN7S7313C42v8Ev
  virtual void  v9(); // _ZN7S7313C42v9Ev
  S7313C4(); // tgen
};
//SIG(-1 S7313C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 Fi FC2{ v8 Fi[6]} Fi}


 S7313C4 ::~S7313C4(){ note_dtor("S7313C4", this);}
void  S7313C4 ::v3(){vfunc_called(this, "_ZN7S7313C42v3Ev");}
void  S7313C4 ::v4(){vfunc_called(this, "_ZN7S7313C42v4Ev");}
void  S7313C4 ::v5(){vfunc_called(this, "_ZN7S7313C42v5Ev");}
void  S7313C4 ::v6(){vfunc_called(this, "_ZN7S7313C42v6Ev");}
void  S7313C4 ::v7(){vfunc_called(this, "_ZN7S7313C42v7Ev");}
void  S7313C4 ::v8(){vfunc_called(this, "_ZN7S7313C42v8Ev");}
void  S7313C4 ::v9(){vfunc_called(this, "_ZN7S7313C42v9Ev");}
S7313C4 ::S7313C4(){ note_ctor("S7313C4", this);} // tgen

static void Test_S7313C4()
{
  extern Class_Descriptor cd_S7313C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S7313C4, buf);
    S7313C4 *dp, &lv = *(dp=new (buf) S7313C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S7313C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7313C4)");
    check_field_offset(lv, s7313c4f0, ABISELECT(8,4), "S7313C4.s7313c4f0");
    check_field_offset(lv, s7313c4f1, ABISELECT(16,8), "S7313C4.s7313c4f1");
    check_field_offset(lv, s7313c4f2, ABISELECT(48,36), "S7313C4.s7313c4f2");
    test_class_info(&lv, &cd_S7313C4);
    dp->~S7313C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7313C4(Test_S7313C4, "S7313C4", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S7313C4C1Ev();
extern void _ZN7S7313C4D1Ev();
Name_Map name_map_S7313C4[] = {
  NSPAIR(_ZN7S7313C4C1Ev),
  NSPAIR(_ZN7S7313C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7313C4[];
extern void _ZN7S7313C4D1Ev();
extern void _ZN7S7313C4D0Ev();
extern void _ZN7S7313C42v3Ev();
extern void _ZN7S7313C42v4Ev();
extern void _ZN7S7313C42v5Ev();
extern void _ZN7S7313C42v6Ev();
extern void _ZN7S7313C42v7Ev();
extern void _ZN7S7313C42v8Ev();
extern void _ZN7S7313C42v9Ev();
static  VTBL_ENTRY vtc_S7313C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7313C4[0]),
  (VTBL_ENTRY)&_ZN7S7313C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7313C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S7313C4[];
extern  VTBL_ENTRY _ZTV7S7313C4[];
Class_Descriptor cd_S7313C4 = {  "S7313C4", // class name
  0,0,//no base classes
  &(vtc_S7313C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S7313C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7313C4),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7313C6  : S7313C4 {
  virtual  ~S7313C6(); // _ZN7S7313C6D1Ev
  virtual void  v10(); // _ZN7S7313C63v10Ev
  S7313C6(); // tgen
};
//SIG(-1 S7313C6) C1{ BC2{ vd v2 v3 v4 v5 v6 v7 v8 Fi FC3{ v9 Fi[6]} Fi} vd v1}


 S7313C6 ::~S7313C6(){ note_dtor("S7313C6", this);}
void  S7313C6 ::v10(){vfunc_called(this, "_ZN7S7313C63v10Ev");}
S7313C6 ::S7313C6(){ note_ctor("S7313C6", this);} // tgen

static void Test_S7313C6()
{
  extern Class_Descriptor cd_S7313C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S7313C6, buf);
    S7313C6 *dp, &lv = *(dp=new (buf) S7313C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S7313C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7313C6)");
    check_base_class_offset(lv, (S7313C4*), 0, "S7313C6");
    test_class_info(&lv, &cd_S7313C6);
    dp->~S7313C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7313C6(Test_S7313C6, "S7313C6", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S7313C6C1Ev();
extern void _ZN7S7313C6D1Ev();
Name_Map name_map_S7313C6[] = {
  NSPAIR(_ZN7S7313C6C1Ev),
  NSPAIR(_ZN7S7313C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7313C4;
extern VTBL_ENTRY _ZTI7S7313C4[];
extern  VTBL_ENTRY _ZTV7S7313C4[];
static Base_Class bases_S7313C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7313C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S7313C6[];
extern void _ZN7S7313C6D1Ev();
extern void _ZN7S7313C6D0Ev();
extern void _ZN7S7313C42v3Ev();
extern void _ZN7S7313C42v4Ev();
extern void _ZN7S7313C42v5Ev();
extern void _ZN7S7313C42v6Ev();
extern void _ZN7S7313C42v7Ev();
extern void _ZN7S7313C42v8Ev();
extern void _ZN7S7313C42v9Ev();
extern void _ZN7S7313C63v10Ev();
static  VTBL_ENTRY vtc_S7313C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7313C6[0]),
  (VTBL_ENTRY)&_ZN7S7313C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7313C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7313C63v10Ev,
};
extern VTBL_ENTRY _ZTI7S7313C6[];
extern  VTBL_ENTRY _ZTV7S7313C6[];
Class_Descriptor cd_S7313C6 = {  "S7313C6", // class name
  bases_S7313C6, 1,
  &(vtc_S7313C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S7313C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7313C6),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7313C3  : S7313C4 , virtual S7313C6 {
  int s7313c3f0:10;
  ::S7707C6 s7313c3f1;
  void *s7313c3f2;
  virtual  ~S7313C3(); // _ZN7S7313C3D2Ev
  virtual void  v11(); // _ZN7S7313C33v11Ev
  virtual void  v12(); // _ZN7S7313C33v12Ev
  virtual void  v13(); // _ZN7S7313C33v13Ev
  virtual void  v14(); // _ZN7S7313C33v14Ev
  virtual void  v15(); // _ZN7S7313C33v15Ev
  virtual void  v16(); // _ZN7S7313C33v16Ev
  virtual void  v17(); // _ZN7S7313C33v17Ev
  S7313C3(); // tgen
};
//SIG(-1 S7313C3) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 Fi FC3{ v16 Fi[6]} Fi} VBC4{ BC2 vd v15} vd v1 v2 v3 v4 v5 v6 v7 Fi:10 FC3 Fp}


 S7313C3 ::~S7313C3(){ note_dtor("S7313C3", this);}
void  S7313C3 ::v11(){vfunc_called(this, "_ZN7S7313C33v11Ev");}
void  S7313C3 ::v12(){vfunc_called(this, "_ZN7S7313C33v12Ev");}
void  S7313C3 ::v13(){vfunc_called(this, "_ZN7S7313C33v13Ev");}
void  S7313C3 ::v14(){vfunc_called(this, "_ZN7S7313C33v14Ev");}
void  S7313C3 ::v15(){vfunc_called(this, "_ZN7S7313C33v15Ev");}
void  S7313C3 ::v16(){vfunc_called(this, "_ZN7S7313C33v16Ev");}
void  S7313C3 ::v17(){vfunc_called(this, "_ZN7S7313C33v17Ev");}
S7313C3 ::S7313C3(){ note_ctor("S7313C3", this);} // tgen

static void Test_S7313C3()
{
  extern Class_Descriptor cd_S7313C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,30)];
    init_test(&cd_S7313C3, buf);
    S7313C3 *dp, &lv = *(dp=new (buf) S7313C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,116), "sizeof(S7313C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7313C3)");
    /*is_ambiguous_... S7313C3::S7313C4 */ AMB_check_base_class_offset(lv, (S7313C4*), 0, "S7313C3");
    check_base_class_offset(lv, (S7313C4*)(S7313C6*), ABISELECT(96,76), "S7313C3");
    check_base_class_offset(lv, (S7313C6*), ABISELECT(96,76), "S7313C3");
    set_bf_and_test(lv, s7313c3f0, ABISELECT(52,40), 0, 10, 1, "S7313C3");
    set_bf_and_test(lv, s7313c3f0, ABISELECT(52,40), 0, 10, hide_sll(1LL<<9), "S7313C3");
    check_field_offset(lv, s7313c3f1, ABISELECT(56,44), "S7313C3.s7313c3f1");
    check_field_offset(lv, s7313c3f2, ABISELECT(88,72), "S7313C3.s7313c3f2");
    test_class_info(&lv, &cd_S7313C3);
    dp->~S7313C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7313C3(Test_S7313C3, "S7313C3", ABISELECT(152,116));

#else // __cplusplus

extern void _ZN7S7313C3C1Ev();
extern void _ZN7S7313C3D2Ev();
Name_Map name_map_S7313C3[] = {
  NSPAIR(_ZN7S7313C3C1Ev),
  NSPAIR(_ZN7S7313C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7313C4;
extern VTBL_ENTRY _ZTI7S7313C4[];
extern  VTBL_ENTRY _ZTV7S7313C4[];
extern Class_Descriptor cd_S7313C4;
extern VTBL_ENTRY _ZTI7S7313C4[];
extern  VTBL_ENTRY _ZTV7S7313C4[];
extern Class_Descriptor cd_S7313C6;
extern VTBL_ENTRY _ZTI7S7313C6[];
extern  VTBL_ENTRY _ZTV7S7313C6[];
static Base_Class bases_S7313C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7313C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7313C4,    ABISELECT(96,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
    2, //immediately_derived
  0, 0},
  {&cd_S7313C6,    ABISELECT(96,76), //bcp->offset
    19, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S7313C3[];
extern void _ZN7S7313C3D1Ev();
extern void _ZN7S7313C3D0Ev();
extern void _ZN7S7313C42v3Ev();
extern void _ZN7S7313C42v4Ev();
extern void _ZN7S7313C42v5Ev();
extern void _ZN7S7313C42v6Ev();
extern void _ZN7S7313C42v7Ev();
extern void _ZN7S7313C42v8Ev();
extern void _ZN7S7313C42v9Ev();
extern void _ZN7S7313C33v11Ev();
extern void _ZN7S7313C33v12Ev();
extern void _ZN7S7313C33v13Ev();
extern void _ZN7S7313C33v14Ev();
extern void _ZN7S7313C33v15Ev();
extern void _ZN7S7313C33v16Ev();
extern void _ZN7S7313C33v17Ev();
extern void ABISELECT(_ZTv0_n24_N7S7313C3D1Ev,_ZTv0_n12_N7S7313C3D1Ev)();
extern void ABISELECT(_ZThn96_N7S7313C3D1Ev,_ZThn76_N7S7313C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7313C3D0Ev,_ZTv0_n12_N7S7313C3D0Ev)();
extern void ABISELECT(_ZThn96_N7S7313C3D0Ev,_ZThn76_N7S7313C3D0Ev)() __attribute__((weak));
extern void _ZN7S7313C42v3Ev();
extern void _ZN7S7313C42v4Ev();
extern void _ZN7S7313C42v5Ev();
extern void _ZN7S7313C42v6Ev();
extern void _ZN7S7313C42v7Ev();
extern void _ZN7S7313C42v8Ev();
extern void _ZN7S7313C42v9Ev();
extern void _ZN7S7313C63v10Ev();
static  VTBL_ENTRY vtc_S7313C3[] = {
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7313C3[0]),
  (VTBL_ENTRY)&_ZN7S7313C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7313C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-76),
  ABISELECT(-96,-76),
  (VTBL_ENTRY)&(_ZTI7S7313C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7313C3D1Ev,_ZTv0_n12_N7S7313C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7313C3D0Ev,_ZTv0_n12_N7S7313C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7313C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7313C63v10Ev,
};
extern VTBL_ENTRY _ZTV7S7313C3[];
static  VTT_ENTRY vtt_S7313C3[] = {
  {&(_ZTV7S7313C3[3]),  3,40},
  {&(_ZTV7S7313C3[30]),  30,40},
};
extern VTBL_ENTRY _ZTI7S7313C3[];
extern  VTBL_ENTRY _ZTV7S7313C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7313C3[];
static VTBL_ENTRY alt_thunk_names105[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7313C3D0Ev,_ZTv0_n12_N7S7313C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7313C3D0Ev,_ZThn76_N7S7313C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7313C3D1Ev,_ZTv0_n12_N7S7313C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7313C3D1Ev,_ZThn76_N7S7313C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7313C3 = {  "S7313C3", // class name
  bases_S7313C3, 3,
  &(vtc_S7313C3[0]), // expected_vtbl_contents
  &(vtt_S7313C3[0]), // expected_vtt_contents
  ABISELECT(152,116), // object size
  NSPAIRA(_ZTI7S7313C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7313C3),40, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7313C3),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names105,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7313C2  : virtual S7313C3 {
  virtual  ~S7313C2(); // _ZN7S7313C2D2Ev
  virtual void  v18(); // _ZN7S7313C23v18Ev
  virtual void  v19(); // _ZN7S7313C23v19Ev
  virtual void  v20(); // _ZN7S7313C23v20Ev
  virtual void  v21(); // _ZN7S7313C23v21Ev
  virtual void  v22(); // _ZN7S7313C23v22Ev
  virtual void  v23(); // _ZN7S7313C23v23Ev
  virtual void  v24(); // _ZN7S7313C23v24Ev
  S7313C2(); // tgen
};
//SIG(-1 S7313C2) C1{ VBC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 Fi FC4{ v23 Fi[6]} Fi} VBC5{ BC3 vd v15} vd v16 v17 v18 v19 v20 v21 v22 Fi:10 FC4 Fp} vd v1 v2 v3 v4 v5 v6 v7}


 S7313C2 ::~S7313C2(){ note_dtor("S7313C2", this);}
void  S7313C2 ::v18(){vfunc_called(this, "_ZN7S7313C23v18Ev");}
void  S7313C2 ::v19(){vfunc_called(this, "_ZN7S7313C23v19Ev");}
void  S7313C2 ::v20(){vfunc_called(this, "_ZN7S7313C23v20Ev");}
void  S7313C2 ::v21(){vfunc_called(this, "_ZN7S7313C23v21Ev");}
void  S7313C2 ::v22(){vfunc_called(this, "_ZN7S7313C23v22Ev");}
void  S7313C2 ::v23(){vfunc_called(this, "_ZN7S7313C23v23Ev");}
void  S7313C2 ::v24(){vfunc_called(this, "_ZN7S7313C23v24Ev");}
S7313C2 ::S7313C2(){ note_ctor("S7313C2", this);} // tgen

static void Test_S7313C2()
{
  extern Class_Descriptor cd_S7313C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,31)];
    init_test(&cd_S7313C2, buf);
    S7313C2 *dp, &lv = *(dp=new (buf) S7313C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,120), "sizeof(S7313C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7313C2)");
    /*is_ambiguous_... S7313C3::S7313C4 */ AMB_check_base_class_offset(lv, (S7313C4*)(S7313C3*), ABISELECT(8,4), "S7313C2");
    check_base_class_offset(lv, (S7313C4*)(S7313C6*), ABISELECT(104,80), "S7313C2");
    check_base_class_offset(lv, (S7313C6*)(S7313C3*), ABISELECT(104,80), "S7313C2");
    check_base_class_offset(lv, (S7313C3*), ABISELECT(8,4), "S7313C2");
    test_class_info(&lv, &cd_S7313C2);
    dp->~S7313C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7313C2(Test_S7313C2, "S7313C2", ABISELECT(160,120));

#else // __cplusplus

extern void _ZN7S7313C2C1Ev();
extern void _ZN7S7313C2D2Ev();
Name_Map name_map_S7313C2[] = {
  NSPAIR(_ZN7S7313C2C1Ev),
  NSPAIR(_ZN7S7313C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7313C4;
extern VTBL_ENTRY _ZTI7S7313C4[];
extern  VTBL_ENTRY _ZTV7S7313C4[];
extern Class_Descriptor cd_S7313C4;
extern VTBL_ENTRY _ZTI7S7313C4[];
extern  VTBL_ENTRY _ZTV7S7313C4[];
extern Class_Descriptor cd_S7313C6;
extern VTBL_ENTRY _ZTI7S7313C6[];
extern  VTBL_ENTRY _ZTV7S7313C6[];
extern Class_Descriptor cd_S7313C3;
extern VTBL_ENTRY _ZTI7S7313C3[];
extern  VTBL_ENTRY _ZTV7S7313C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7313C3[];
static Base_Class bases_S7313C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7313C4,    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
    3, //immediately_derived
  0, 0},
  {&cd_S7313C4,    ABISELECT(104,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
    2, //immediately_derived
  0, 0},
  {&cd_S7313C6,    ABISELECT(104,80), //bcp->offset
    47, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7313C3,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7313C2[];
extern void _ZN7S7313C2D1Ev();
extern void _ZN7S7313C2D0Ev();
extern void _ZN7S7313C23v18Ev();
extern void _ZN7S7313C23v19Ev();
extern void _ZN7S7313C23v20Ev();
extern void _ZN7S7313C23v21Ev();
extern void _ZN7S7313C23v22Ev();
extern void _ZN7S7313C23v23Ev();
extern void _ZN7S7313C23v24Ev();
extern void ABISELECT(_ZTv0_n32_N7S7313C2D1Ev,_ZTv0_n16_N7S7313C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7313C2D1Ev,_ZThn4_N7S7313C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7313C2D0Ev,_ZTv0_n16_N7S7313C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S7313C2D0Ev,_ZThn4_N7S7313C2D0Ev)() __attribute__((weak));
extern void _ZN7S7313C42v3Ev();
extern void _ZN7S7313C42v4Ev();
extern void _ZN7S7313C42v5Ev();
extern void _ZN7S7313C42v6Ev();
extern void _ZN7S7313C42v7Ev();
extern void _ZN7S7313C42v8Ev();
extern void _ZN7S7313C42v9Ev();
extern void _ZN7S7313C33v11Ev();
extern void _ZN7S7313C33v12Ev();
extern void _ZN7S7313C33v13Ev();
extern void _ZN7S7313C33v14Ev();
extern void _ZN7S7313C33v15Ev();
extern void _ZN7S7313C33v16Ev();
extern void _ZN7S7313C33v17Ev();
extern void ABISELECT(_ZTv0_n24_N7S7313C2D1Ev,_ZTv0_n12_N7S7313C2D1Ev)();
extern void ABISELECT(_ZThn104_N7S7313C2D1Ev,_ZThn80_N7S7313C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7313C2D0Ev,_ZTv0_n12_N7S7313C2D0Ev)();
extern void ABISELECT(_ZThn104_N7S7313C2D0Ev,_ZThn80_N7S7313C2D0Ev)() __attribute__((weak));
extern void _ZN7S7313C42v3Ev();
extern void _ZN7S7313C42v4Ev();
extern void _ZN7S7313C42v5Ev();
extern void _ZN7S7313C42v6Ev();
extern void _ZN7S7313C42v7Ev();
extern void _ZN7S7313C42v8Ev();
extern void _ZN7S7313C42v9Ev();
extern void _ZN7S7313C63v10Ev();
static  VTBL_ENTRY vtc_S7313C2[] = {
  ABISELECT(104,80),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7313C2[0]),
  (VTBL_ENTRY)&_ZN7S7313C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7313C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(96,76),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7313C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7313C2D1Ev,_ZTv0_n16_N7S7313C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7313C2D0Ev,_ZTv0_n16_N7S7313C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7313C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-80),
  ABISELECT(-104,-80),
  (VTBL_ENTRY)&(_ZTI7S7313C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7313C2D1Ev,_ZTv0_n12_N7S7313C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7313C2D0Ev,_ZTv0_n12_N7S7313C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7313C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7313C63v10Ev,
};
extern VTBL_ENTRY _ZTV7S7313C2[];
extern void _ZN7S7313C3D1Ev();
extern void _ZN7S7313C3D0Ev();
extern void _ZN7S7313C42v3Ev();
extern void _ZN7S7313C42v4Ev();
extern void _ZN7S7313C42v5Ev();
extern void _ZN7S7313C42v6Ev();
extern void _ZN7S7313C42v7Ev();
extern void _ZN7S7313C42v8Ev();
extern void _ZN7S7313C42v9Ev();
extern void _ZN7S7313C33v11Ev();
extern void _ZN7S7313C33v12Ev();
extern void _ZN7S7313C33v13Ev();
extern void _ZN7S7313C33v14Ev();
extern void _ZN7S7313C33v15Ev();
extern void _ZN7S7313C33v16Ev();
extern void _ZN7S7313C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7313C3__7S7313C2[] = {
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7313C3[0]),
  (VTBL_ENTRY)&_ZN7S7313C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7313C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7313C3D1Ev,_ZTv0_n12_N7S7313C3D1Ev)();
extern void ABISELECT(_ZThn96_N7S7313C3D1Ev,_ZThn76_N7S7313C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7313C3D0Ev,_ZTv0_n12_N7S7313C3D0Ev)();
extern void ABISELECT(_ZThn96_N7S7313C3D0Ev,_ZThn76_N7S7313C3D0Ev)() __attribute__((weak));
extern void _ZN7S7313C42v3Ev();
extern void _ZN7S7313C42v4Ev();
extern void _ZN7S7313C42v5Ev();
extern void _ZN7S7313C42v6Ev();
extern void _ZN7S7313C42v7Ev();
extern void _ZN7S7313C42v8Ev();
extern void _ZN7S7313C42v9Ev();
extern void _ZN7S7313C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7313C6__7S7313C3__7S7313C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-76),
  ABISELECT(-96,-76),
  (VTBL_ENTRY)&(_ZTI7S7313C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7313C3D1Ev,_ZTv0_n12_N7S7313C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7313C3D0Ev,_ZTv0_n12_N7S7313C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7313C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7313C63v10Ev,
};
static  VTT_ENTRY vtt_S7313C2[] = {
  {&(_ZTV7S7313C2[4]),  4,68},
  {&(_ZTV7S7313C2[31]),  31,68},
  {&(_ZTV7S7313C2[58]),  58,68},
  {&(_tg__ZTV7S7313C3__7S7313C2[3]),  3,19},
  {&(_tg__ZTV7S7313C6__7S7313C3__7S7313C2[11]),  11,21},
};
extern VTBL_ENTRY _ZTI7S7313C2[];
extern  VTBL_ENTRY _ZTV7S7313C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7313C2[];
static VTBL_ENTRY alt_thunk_names106[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7313C3D0Ev,_ZTv0_n12_N7S7313C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7313C3D0Ev,_ZThn76_N7S7313C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7313C3D1Ev,_ZTv0_n12_N7S7313C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7313C3D1Ev,_ZThn76_N7S7313C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7313C2D0Ev,_ZTv0_n12_N7S7313C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7313C2D0Ev,_ZThn80_N7S7313C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7313C2D1Ev,_ZTv0_n12_N7S7313C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7313C2D1Ev,_ZThn80_N7S7313C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7313C2D0Ev,_ZTv0_n16_N7S7313C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7313C2D0Ev,_ZThn4_N7S7313C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7313C2D1Ev,_ZTv0_n16_N7S7313C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7313C2D1Ev,_ZThn4_N7S7313C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7313C2 = {  "S7313C2", // class name
  bases_S7313C2, 4,
  &(vtc_S7313C2[0]), // expected_vtbl_contents
  &(vtt_S7313C2[0]), // expected_vtt_contents
  ABISELECT(160,120), // object size
  NSPAIRA(_ZTI7S7313C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7313C2),68, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7313C2),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names106,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7313C1  : S7313C2 {
  char s7313c1f0;
  char  :0;
  __tsi64 s7313c1f2;
  virtual  ~S7313C1(); // _ZN7S7313C1D2Ev
  virtual void  v1(); // _ZN7S7313C12v1Ev
  virtual void  v2(); // _ZN7S7313C12v2Ev
  S7313C1(); // tgen
};
//SIG(1 S7313C1) C1{ BC2{ VBC3{ BC4{ vd v3 v4 v5 v6 v7 v8 v9 Fi FC5{ v25 Fi[6]} Fi} VBC6{ BC4 vd v10} vd v11 v12 v13 v14 v15 v16 v17 Fi:10 FC5 Fp} vd v18 v19 v20 v21 v22 v23 v24} vd v1 v2 Fc Fc:0 FL}


 S7313C1 ::~S7313C1(){ note_dtor("S7313C1", this);}
void  S7313C1 ::v1(){vfunc_called(this, "_ZN7S7313C12v1Ev");}
void  S7313C1 ::v2(){vfunc_called(this, "_ZN7S7313C12v2Ev");}
S7313C1 ::S7313C1(){ note_ctor("S7313C1", this);} // tgen

static void Test_S7313C1()
{
  extern Class_Descriptor cd_S7313C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,34)];
    init_test(&cd_S7313C1, buf);
    S7313C1 *dp, &lv = *(dp=new (buf) S7313C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,132), "sizeof(S7313C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7313C1)");
    /*is_ambiguous_... S7313C3::S7313C4 */ AMB_check_base_class_offset(lv, (S7313C4*)(S7313C3*), ABISELECT(24,16), "S7313C1");
    check_base_class_offset(lv, (S7313C4*)(S7313C6*), ABISELECT(120,92), "S7313C1");
    check_base_class_offset(lv, (S7313C6*)(S7313C3*), ABISELECT(120,92), "S7313C1");
    check_base_class_offset(lv, (S7313C3*)(S7313C2*), ABISELECT(24,16), "S7313C1");
    check_base_class_offset(lv, (S7313C2*), 0, "S7313C1");
    check_field_offset(lv, s7313c1f0, ABISELECT(8,4), "S7313C1.s7313c1f0");
    check_field_offset(lv, s7313c1f2, ABISELECT(16,8), "S7313C1.s7313c1f2");
    test_class_info(&lv, &cd_S7313C1);
    dp->~S7313C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7313C1(Test_S7313C1, "S7313C1", ABISELECT(176,132));

#else // __cplusplus

extern void _ZN7S7313C1C1Ev();
extern void _ZN7S7313C1D2Ev();
Name_Map name_map_S7313C1[] = {
  NSPAIR(_ZN7S7313C1C1Ev),
  NSPAIR(_ZN7S7313C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7313C4;
extern VTBL_ENTRY _ZTI7S7313C4[];
extern  VTBL_ENTRY _ZTV7S7313C4[];
extern Class_Descriptor cd_S7313C4;
extern VTBL_ENTRY _ZTI7S7313C4[];
extern  VTBL_ENTRY _ZTV7S7313C4[];
extern Class_Descriptor cd_S7313C6;
extern VTBL_ENTRY _ZTI7S7313C6[];
extern  VTBL_ENTRY _ZTV7S7313C6[];
extern Class_Descriptor cd_S7313C3;
extern VTBL_ENTRY _ZTI7S7313C3[];
extern  VTBL_ENTRY _ZTV7S7313C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7313C3[];
extern Class_Descriptor cd_S7313C2;
extern VTBL_ENTRY _ZTI7S7313C2[];
extern  VTBL_ENTRY _ZTV7S7313C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7313C2[];
static Base_Class bases_S7313C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7313C4,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7313C4,    ABISELECT(120,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
    2, //immediately_derived
  0, 0},
  {&cd_S7313C6,    ABISELECT(120,92), //bcp->offset
    49, //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
    3, //immediately_derived
  0, 1},
  {&cd_S7313C3,    ABISELECT(24,16), //bcp->offset
    15, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7313C2,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S7313C1[];
extern void _ZN7S7313C1D1Ev();
extern void _ZN7S7313C1D0Ev();
extern void _ZN7S7313C23v18Ev();
extern void _ZN7S7313C23v19Ev();
extern void _ZN7S7313C23v20Ev();
extern void _ZN7S7313C23v21Ev();
extern void _ZN7S7313C23v22Ev();
extern void _ZN7S7313C23v23Ev();
extern void _ZN7S7313C23v24Ev();
extern void _ZN7S7313C12v1Ev();
extern void _ZN7S7313C12v2Ev();
extern void ABISELECT(_ZTv0_n32_N7S7313C1D1Ev,_ZTv0_n16_N7S7313C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S7313C1D1Ev,_ZThn16_N7S7313C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7313C1D0Ev,_ZTv0_n16_N7S7313C1D0Ev)();
extern void ABISELECT(_ZThn24_N7S7313C1D0Ev,_ZThn16_N7S7313C1D0Ev)() __attribute__((weak));
extern void _ZN7S7313C42v3Ev();
extern void _ZN7S7313C42v4Ev();
extern void _ZN7S7313C42v5Ev();
extern void _ZN7S7313C42v6Ev();
extern void _ZN7S7313C42v7Ev();
extern void _ZN7S7313C42v8Ev();
extern void _ZN7S7313C42v9Ev();
extern void _ZN7S7313C33v11Ev();
extern void _ZN7S7313C33v12Ev();
extern void _ZN7S7313C33v13Ev();
extern void _ZN7S7313C33v14Ev();
extern void _ZN7S7313C33v15Ev();
extern void _ZN7S7313C33v16Ev();
extern void _ZN7S7313C33v17Ev();
extern void ABISELECT(_ZTv0_n24_N7S7313C1D1Ev,_ZTv0_n12_N7S7313C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S7313C1D1Ev,_ZThn92_N7S7313C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7313C1D0Ev,_ZTv0_n12_N7S7313C1D0Ev)();
extern void ABISELECT(_ZThn120_N7S7313C1D0Ev,_ZThn92_N7S7313C1D0Ev)() __attribute__((weak));
extern void _ZN7S7313C42v3Ev();
extern void _ZN7S7313C42v4Ev();
extern void _ZN7S7313C42v5Ev();
extern void _ZN7S7313C42v6Ev();
extern void _ZN7S7313C42v7Ev();
extern void _ZN7S7313C42v8Ev();
extern void _ZN7S7313C42v9Ev();
extern void _ZN7S7313C63v10Ev();
static  VTBL_ENTRY vtc_S7313C1[] = {
  ABISELECT(120,92),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7313C1[0]),
  (VTBL_ENTRY)&_ZN7S7313C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7313C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7313C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7313C12v2Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(96,76),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7313C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7313C1D1Ev,_ZTv0_n16_N7S7313C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7313C1D0Ev,_ZTv0_n16_N7S7313C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7313C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-92),
  ABISELECT(-120,-92),
  (VTBL_ENTRY)&(_ZTI7S7313C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7313C1D1Ev,_ZTv0_n12_N7S7313C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7313C1D0Ev,_ZTv0_n12_N7S7313C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7313C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7313C63v10Ev,
};
extern VTBL_ENTRY _ZTV7S7313C1[];
extern void _ZN7S7313C2D1Ev();
extern void _ZN7S7313C2D0Ev();
extern void _ZN7S7313C23v18Ev();
extern void _ZN7S7313C23v19Ev();
extern void _ZN7S7313C23v20Ev();
extern void _ZN7S7313C23v21Ev();
extern void _ZN7S7313C23v22Ev();
extern void _ZN7S7313C23v23Ev();
extern void _ZN7S7313C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7313C2__7S7313C1[] = {
  ABISELECT(120,92),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7313C2[0]),
  (VTBL_ENTRY)&_ZN7S7313C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7313C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7313C23v24Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7313C2D1Ev,_ZTv0_n16_N7S7313C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S7313C2D1Ev,_ZThn16_N7S7313C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7313C2D0Ev,_ZTv0_n16_N7S7313C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S7313C2D0Ev,_ZThn16_N7S7313C2D0Ev)() __attribute__((weak));
extern void _ZN7S7313C42v3Ev();
extern void _ZN7S7313C42v4Ev();
extern void _ZN7S7313C42v5Ev();
extern void _ZN7S7313C42v6Ev();
extern void _ZN7S7313C42v7Ev();
extern void _ZN7S7313C42v8Ev();
extern void _ZN7S7313C42v9Ev();
extern void _ZN7S7313C33v11Ev();
extern void _ZN7S7313C33v12Ev();
extern void _ZN7S7313C33v13Ev();
extern void _ZN7S7313C33v14Ev();
extern void _ZN7S7313C33v15Ev();
extern void _ZN7S7313C33v16Ev();
extern void _ZN7S7313C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7313C3__7S7313C2__7S7313C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(96,76),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7313C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7313C2D1Ev,_ZTv0_n16_N7S7313C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7313C2D0Ev,_ZTv0_n16_N7S7313C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7313C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7313C2D1Ev,_ZTv0_n12_N7S7313C2D1Ev)();
extern void ABISELECT(_ZThn120_N7S7313C2D1Ev,_ZThn92_N7S7313C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7313C2D0Ev,_ZTv0_n12_N7S7313C2D0Ev)();
extern void ABISELECT(_ZThn120_N7S7313C2D0Ev,_ZThn92_N7S7313C2D0Ev)() __attribute__((weak));
extern void _ZN7S7313C42v3Ev();
extern void _ZN7S7313C42v4Ev();
extern void _ZN7S7313C42v5Ev();
extern void _ZN7S7313C42v6Ev();
extern void _ZN7S7313C42v7Ev();
extern void _ZN7S7313C42v8Ev();
extern void _ZN7S7313C42v9Ev();
extern void _ZN7S7313C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7313C6__7S7313C2__7S7313C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-92),
  ABISELECT(-120,-92),
  (VTBL_ENTRY)&(_ZTI7S7313C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7313C2D1Ev,_ZTv0_n12_N7S7313C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7313C2D0Ev,_ZTv0_n12_N7S7313C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7313C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7313C63v10Ev,
};
extern void _ZN7S7313C3D1Ev();
extern void _ZN7S7313C3D0Ev();
extern void _ZN7S7313C42v3Ev();
extern void _ZN7S7313C42v4Ev();
extern void _ZN7S7313C42v5Ev();
extern void _ZN7S7313C42v6Ev();
extern void _ZN7S7313C42v7Ev();
extern void _ZN7S7313C42v8Ev();
extern void _ZN7S7313C42v9Ev();
extern void _ZN7S7313C33v11Ev();
extern void _ZN7S7313C33v12Ev();
extern void _ZN7S7313C33v13Ev();
extern void _ZN7S7313C33v14Ev();
extern void _ZN7S7313C33v15Ev();
extern void _ZN7S7313C33v16Ev();
extern void _ZN7S7313C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7313C3__7S7313C1[] = {
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7313C3[0]),
  (VTBL_ENTRY)&_ZN7S7313C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7313C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7313C33v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7313C3D1Ev,_ZTv0_n12_N7S7313C3D1Ev)();
extern void ABISELECT(_ZThn96_N7S7313C3D1Ev,_ZThn76_N7S7313C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7313C3D0Ev,_ZTv0_n12_N7S7313C3D0Ev)();
extern void ABISELECT(_ZThn96_N7S7313C3D0Ev,_ZThn76_N7S7313C3D0Ev)() __attribute__((weak));
extern void _ZN7S7313C42v3Ev();
extern void _ZN7S7313C42v4Ev();
extern void _ZN7S7313C42v5Ev();
extern void _ZN7S7313C42v6Ev();
extern void _ZN7S7313C42v7Ev();
extern void _ZN7S7313C42v8Ev();
extern void _ZN7S7313C42v9Ev();
extern void _ZN7S7313C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7313C6__7S7313C3__7S7313C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-76),
  ABISELECT(-96,-76),
  (VTBL_ENTRY)&(_ZTI7S7313C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7313C3D1Ev,_ZTv0_n12_N7S7313C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7313C3D0Ev,_ZTv0_n12_N7S7313C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7313C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7313C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7313C63v10Ev,
};
static  VTT_ENTRY vtt_S7313C1[] = {
  {&(_ZTV7S7313C1[4]),  4,70},
  {&(_tg__ZTV7S7313C2__7S7313C1[4]),  4,13},
  {&(_tg__ZTV7S7313C3__7S7313C2__7S7313C1[18]),  18,34},
  {&(_tg__ZTV7S7313C6__7S7313C2__7S7313C1[11]),  11,21},
  {&(_ZTV7S7313C1[33]),  33,70},
  {&(_ZTV7S7313C1[60]),  60,70},
  {&(_tg__ZTV7S7313C3__7S7313C1[3]),  3,19},
  {&(_tg__ZTV7S7313C6__7S7313C3__7S7313C1[11]),  11,21},
};
extern VTBL_ENTRY _ZTI7S7313C1[];
extern  VTBL_ENTRY _ZTV7S7313C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7313C1[];
static VTBL_ENTRY alt_thunk_names107[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7313C3D0Ev,_ZTv0_n12_N7S7313C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7313C3D0Ev,_ZThn76_N7S7313C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7313C3D1Ev,_ZTv0_n12_N7S7313C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7313C3D1Ev,_ZThn76_N7S7313C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7313C2D0Ev,_ZTv0_n12_N7S7313C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7313C2D0Ev,_ZThn92_N7S7313C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7313C2D1Ev,_ZTv0_n12_N7S7313C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7313C2D1Ev,_ZThn92_N7S7313C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7313C2D0Ev,_ZTv0_n16_N7S7313C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7313C2D0Ev,_ZThn16_N7S7313C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7313C2D1Ev,_ZTv0_n16_N7S7313C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7313C2D1Ev,_ZThn16_N7S7313C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7313C1D0Ev,_ZTv0_n12_N7S7313C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7313C1D0Ev,_ZThn92_N7S7313C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7313C1D1Ev,_ZTv0_n12_N7S7313C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7313C1D1Ev,_ZThn92_N7S7313C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7313C1D0Ev,_ZTv0_n16_N7S7313C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7313C1D0Ev,_ZThn16_N7S7313C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7313C1D1Ev,_ZTv0_n16_N7S7313C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7313C1D1Ev,_ZThn16_N7S7313C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7313C1 = {  "S7313C1", // class name
  bases_S7313C1, 5,
  &(vtc_S7313C1[0]), // expected_vtbl_contents
  &(vtt_S7313C1[0]), // expected_vtt_contents
  ABISELECT(176,132), // object size
  NSPAIRA(_ZTI7S7313C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7313C1),70, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7313C1),8, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names107,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4547C3  {
  int s4547c3f0[28];
  virtual  ~S4547C3(); // _ZN7S4547C3D1Ev
  virtual void  v2(); // _ZN7S4547C32v2Ev
  virtual void  v3(); // _ZN7S4547C32v3Ev
  virtual void  v4(); // _ZN7S4547C32v4Ev
  virtual void  v5(); // _ZN7S4547C32v5Ev
  virtual void  v6(); // _ZN7S4547C32v6Ev
  virtual void  v7(); // _ZN7S4547C32v7Ev
  virtual void  v8(); // _ZN7S4547C32v8Ev
  virtual void  v9(); // _ZN7S4547C32v9Ev
  virtual void  v10(); // _ZN7S4547C33v10Ev
  virtual void  v11(); // _ZN7S4547C33v11Ev
  virtual void  v12(); // _ZN7S4547C33v12Ev
  virtual void  v13(); // _ZN7S4547C33v13Ev
  virtual void  v14(); // _ZN7S4547C33v14Ev
  virtual void  v15(); // _ZN7S4547C33v15Ev
  virtual void  v16(); // _ZN7S4547C33v16Ev
  virtual void  v17(); // _ZN7S4547C33v17Ev
  virtual void  v18(); // _ZN7S4547C33v18Ev
  virtual void  v19(); // _ZN7S4547C33v19Ev
  virtual void  v20(); // _ZN7S4547C33v20Ev
  virtual void  v21(); // _ZN7S4547C33v21Ev
  virtual void  v22(); // _ZN7S4547C33v22Ev
  virtual void  v23(); // _ZN7S4547C33v23Ev
  virtual void  v24(); // _ZN7S4547C33v24Ev
  virtual void  v25(); // _ZN7S4547C33v25Ev
  virtual void  v26(); // _ZN7S4547C33v26Ev
  S4547C3(); // tgen
};
//SIG(-1 S4547C3) 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 Fi[28]}


 S4547C3 ::~S4547C3(){ note_dtor("S4547C3", this);}
void  S4547C3 ::v2(){vfunc_called(this, "_ZN7S4547C32v2Ev");}
void  S4547C3 ::v3(){vfunc_called(this, "_ZN7S4547C32v3Ev");}
void  S4547C3 ::v4(){vfunc_called(this, "_ZN7S4547C32v4Ev");}
void  S4547C3 ::v5(){vfunc_called(this, "_ZN7S4547C32v5Ev");}
void  S4547C3 ::v6(){vfunc_called(this, "_ZN7S4547C32v6Ev");}
void  S4547C3 ::v7(){vfunc_called(this, "_ZN7S4547C32v7Ev");}
void  S4547C3 ::v8(){vfunc_called(this, "_ZN7S4547C32v8Ev");}
void  S4547C3 ::v9(){vfunc_called(this, "_ZN7S4547C32v9Ev");}
void  S4547C3 ::v10(){vfunc_called(this, "_ZN7S4547C33v10Ev");}
void  S4547C3 ::v11(){vfunc_called(this, "_ZN7S4547C33v11Ev");}
void  S4547C3 ::v12(){vfunc_called(this, "_ZN7S4547C33v12Ev");}
void  S4547C3 ::v13(){vfunc_called(this, "_ZN7S4547C33v13Ev");}
void  S4547C3 ::v14(){vfunc_called(this, "_ZN7S4547C33v14Ev");}
void  S4547C3 ::v15(){vfunc_called(this, "_ZN7S4547C33v15Ev");}
void  S4547C3 ::v16(){vfunc_called(this, "_ZN7S4547C33v16Ev");}
void  S4547C3 ::v17(){vfunc_called(this, "_ZN7S4547C33v17Ev");}
void  S4547C3 ::v18(){vfunc_called(this, "_ZN7S4547C33v18Ev");}
void  S4547C3 ::v19(){vfunc_called(this, "_ZN7S4547C33v19Ev");}
void  S4547C3 ::v20(){vfunc_called(this, "_ZN7S4547C33v20Ev");}
void  S4547C3 ::v21(){vfunc_called(this, "_ZN7S4547C33v21Ev");}
void  S4547C3 ::v22(){vfunc_called(this, "_ZN7S4547C33v22Ev");}
void  S4547C3 ::v23(){vfunc_called(this, "_ZN7S4547C33v23Ev");}
void  S4547C3 ::v24(){vfunc_called(this, "_ZN7S4547C33v24Ev");}
void  S4547C3 ::v25(){vfunc_called(this, "_ZN7S4547C33v25Ev");}
void  S4547C3 ::v26(){vfunc_called(this, "_ZN7S4547C33v26Ev");}
S4547C3 ::S4547C3(){ note_ctor("S4547C3", this);} // tgen

static void Test_S4547C3()
{
  extern Class_Descriptor cd_S4547C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S4547C3, buf);
    S4547C3 *dp, &lv = *(dp=new (buf) S4547C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S4547C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4547C3)");
    check_field_offset(lv, s4547c3f0, ABISELECT(8,4), "S4547C3.s4547c3f0");
    test_class_info(&lv, &cd_S4547C3);
    dp->~S4547C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4547C3(Test_S4547C3, "S4547C3", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN7S4547C3C1Ev();
extern void _ZN7S4547C3D1Ev();
Name_Map name_map_S4547C3[] = {
  NSPAIR(_ZN7S4547C3C1Ev),
  NSPAIR(_ZN7S4547C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4547C3[];
extern void _ZN7S4547C3D1Ev();
extern void _ZN7S4547C3D0Ev();
extern void _ZN7S4547C32v2Ev();
extern void _ZN7S4547C32v3Ev();
extern void _ZN7S4547C32v4Ev();
extern void _ZN7S4547C32v5Ev();
extern void _ZN7S4547C32v6Ev();
extern void _ZN7S4547C32v7Ev();
extern void _ZN7S4547C32v8Ev();
extern void _ZN7S4547C32v9Ev();
extern void _ZN7S4547C33v10Ev();
extern void _ZN7S4547C33v11Ev();
extern void _ZN7S4547C33v12Ev();
extern void _ZN7S4547C33v13Ev();
extern void _ZN7S4547C33v14Ev();
extern void _ZN7S4547C33v15Ev();
extern void _ZN7S4547C33v16Ev();
extern void _ZN7S4547C33v17Ev();
extern void _ZN7S4547C33v18Ev();
extern void _ZN7S4547C33v19Ev();
extern void _ZN7S4547C33v20Ev();
extern void _ZN7S4547C33v21Ev();
extern void _ZN7S4547C33v22Ev();
extern void _ZN7S4547C33v23Ev();
extern void _ZN7S4547C33v24Ev();
extern void _ZN7S4547C33v25Ev();
extern void _ZN7S4547C33v26Ev();
static  VTBL_ENTRY vtc_S4547C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4547C3[0]),
  (VTBL_ENTRY)&_ZN7S4547C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4547C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v26Ev,
};
extern VTBL_ENTRY _ZTI7S4547C3[];
extern  VTBL_ENTRY _ZTV7S4547C3[];
Class_Descriptor cd_S4547C3 = {  "S4547C3", // class name
  0,0,//no base classes
  &(vtc_S4547C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI7S4547C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4547C3),29, //virtual function table var
  2, // 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  S4547C2  : S4547C3 {
  void *s4547c2f0;
  ::S2831C24 s4547c2f1;
  void *s4547c2f2;
  int s4547c2f3[2];
  virtual void  v27(); // _ZN7S4547C23v27Ev
  ~S4547C2(); // tgen
  S4547C2(); // tgen
};
//SIG(-1 S4547C2) C1{ BC2{ vd 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 Fi[28]} v1 Fp FC3{ BC4{ m FC5{ BC6{ m Fp Fi[2]}} Fp Fi}} Fp Fi[2]}


void  S4547C2 ::v27(){vfunc_called(this, "_ZN7S4547C23v27Ev");}
S4547C2 ::~S4547C2(){ note_dtor("S4547C2", this);} // tgen
S4547C2 ::S4547C2(){ note_ctor("S4547C2", this);} // tgen

static void Test_S4547C2()
{
  extern Class_Descriptor cd_S4547C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,39)];
    init_test(&cd_S4547C2, buf);
    S4547C2 *dp, &lv = *(dp=new (buf) S4547C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,152), "sizeof(S4547C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4547C2)");
    check_base_class_offset(lv, (S4547C3*), 0, "S4547C2");
    check_field_offset(lv, s4547c2f0, ABISELECT(120,116), "S4547C2.s4547c2f0");
    check_field_offset(lv, s4547c2f1, ABISELECT(128,120), "S4547C2.s4547c2f1");
    check_field_offset(lv, s4547c2f2, ABISELECT(160,140), "S4547C2.s4547c2f2");
    check_field_offset(lv, s4547c2f3, ABISELECT(168,144), "S4547C2.s4547c2f3");
    test_class_info(&lv, &cd_S4547C2);
    dp->~S4547C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4547C2(Test_S4547C2, "S4547C2", ABISELECT(176,152));

#else // __cplusplus

extern void _ZN7S4547C2C1Ev();
extern void _ZN7S4547C2D1Ev();
Name_Map name_map_S4547C2[] = {
  NSPAIR(_ZN7S4547C2C1Ev),
  NSPAIR(_ZN7S4547C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4547C3;
extern VTBL_ENTRY _ZTI7S4547C3[];
extern  VTBL_ENTRY _ZTV7S4547C3[];
static Base_Class bases_S4547C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4547C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4547C2[];
extern void _ZN7S4547C2D1Ev();
extern void _ZN7S4547C2D0Ev();
extern void _ZN7S4547C32v2Ev();
extern void _ZN7S4547C32v3Ev();
extern void _ZN7S4547C32v4Ev();
extern void _ZN7S4547C32v5Ev();
extern void _ZN7S4547C32v6Ev();
extern void _ZN7S4547C32v7Ev();
extern void _ZN7S4547C32v8Ev();
extern void _ZN7S4547C32v9Ev();
extern void _ZN7S4547C33v10Ev();
extern void _ZN7S4547C33v11Ev();
extern void _ZN7S4547C33v12Ev();
extern void _ZN7S4547C33v13Ev();
extern void _ZN7S4547C33v14Ev();
extern void _ZN7S4547C33v15Ev();
extern void _ZN7S4547C33v16Ev();
extern void _ZN7S4547C33v17Ev();
extern void _ZN7S4547C33v18Ev();
extern void _ZN7S4547C33v19Ev();
extern void _ZN7S4547C33v20Ev();
extern void _ZN7S4547C33v21Ev();
extern void _ZN7S4547C33v22Ev();
extern void _ZN7S4547C33v23Ev();
extern void _ZN7S4547C33v24Ev();
extern void _ZN7S4547C33v25Ev();
extern void _ZN7S4547C33v26Ev();
extern void _ZN7S4547C23v27Ev();
static  VTBL_ENTRY vtc_S4547C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4547C2[0]),
  (VTBL_ENTRY)&_ZN7S4547C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4547C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4547C23v27Ev,
};
extern VTBL_ENTRY _ZTI7S4547C2[];
extern  VTBL_ENTRY _ZTV7S4547C2[];
Class_Descriptor cd_S4547C2 = {  "S4547C2", // class name
  bases_S4547C2, 1,
  &(vtc_S4547C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,152), // object size
  NSPAIRA(_ZTI7S4547C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4547C2),30, //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  S4547C1  : S4547C2 {
  virtual void  v1(); // _ZN7S4547C12v1Ev
  ~S4547C1(); // tgen
  S4547C1(); // tgen
};
//SIG(1 S4547C1) C1{ BC2{ BC3{ vd 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 Fi[28]} v27 Fp FC4{ BC5{ m FC6{ BC7{ m Fp Fi[2]}} Fp Fi}} Fp Fi[2]} v1}


void  S4547C1 ::v1(){vfunc_called(this, "_ZN7S4547C12v1Ev");}
S4547C1 ::~S4547C1(){ note_dtor("S4547C1", this);} // tgen
S4547C1 ::S4547C1(){ note_ctor("S4547C1", this);} // tgen

static void Test_S4547C1()
{
  extern Class_Descriptor cd_S4547C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,39)];
    init_test(&cd_S4547C1, buf);
    S4547C1 *dp, &lv = *(dp=new (buf) S4547C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,152), "sizeof(S4547C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4547C1)");
    check_base_class_offset(lv, (S4547C3*)(S4547C2*), 0, "S4547C1");
    check_base_class_offset(lv, (S4547C2*), 0, "S4547C1");
    test_class_info(&lv, &cd_S4547C1);
    dp->~S4547C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4547C1(Test_S4547C1, "S4547C1", ABISELECT(176,152));

#else // __cplusplus

extern void _ZN7S4547C1C1Ev();
extern void _ZN7S4547C1D1Ev();
Name_Map name_map_S4547C1[] = {
  NSPAIR(_ZN7S4547C1C1Ev),
  NSPAIR(_ZN7S4547C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4547C3;
extern VTBL_ENTRY _ZTI7S4547C3[];
extern  VTBL_ENTRY _ZTV7S4547C3[];
extern Class_Descriptor cd_S4547C2;
extern VTBL_ENTRY _ZTI7S4547C2[];
extern  VTBL_ENTRY _ZTV7S4547C2[];
static Base_Class bases_S4547C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4547C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4547C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4547C1[];
extern void _ZN7S4547C1D1Ev();
extern void _ZN7S4547C1D0Ev();
extern void _ZN7S4547C32v2Ev();
extern void _ZN7S4547C32v3Ev();
extern void _ZN7S4547C32v4Ev();
extern void _ZN7S4547C32v5Ev();
extern void _ZN7S4547C32v6Ev();
extern void _ZN7S4547C32v7Ev();
extern void _ZN7S4547C32v8Ev();
extern void _ZN7S4547C32v9Ev();
extern void _ZN7S4547C33v10Ev();
extern void _ZN7S4547C33v11Ev();
extern void _ZN7S4547C33v12Ev();
extern void _ZN7S4547C33v13Ev();
extern void _ZN7S4547C33v14Ev();
extern void _ZN7S4547C33v15Ev();
extern void _ZN7S4547C33v16Ev();
extern void _ZN7S4547C33v17Ev();
extern void _ZN7S4547C33v18Ev();
extern void _ZN7S4547C33v19Ev();
extern void _ZN7S4547C33v20Ev();
extern void _ZN7S4547C33v21Ev();
extern void _ZN7S4547C33v22Ev();
extern void _ZN7S4547C33v23Ev();
extern void _ZN7S4547C33v24Ev();
extern void _ZN7S4547C33v25Ev();
extern void _ZN7S4547C33v26Ev();
extern void _ZN7S4547C23v27Ev();
extern void _ZN7S4547C12v1Ev();
static  VTBL_ENTRY vtc_S4547C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4547C1[0]),
  (VTBL_ENTRY)&_ZN7S4547C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4547C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4547C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4547C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4547C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4547C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4547C1[];
extern  VTBL_ENTRY _ZTV7S4547C1[];
Class_Descriptor cd_S4547C1 = {  "S4547C1", // class name
  bases_S4547C1, 2,
  &(vtc_S4547C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,152), // object size
  NSPAIRA(_ZTI7S4547C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4547C1),31, //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  S6660C2  {
  int s6660c2f0[6];
  virtual void  v3(); // _ZN7S6660C22v3Ev
  ~S6660C2(); // tgen
  S6660C2(); // tgen
};
//SIG(-1 S6660C2) C1{ v1 Fi[6]}


void  S6660C2 ::v3(){vfunc_called(this, "_ZN7S6660C22v3Ev");}
S6660C2 ::~S6660C2(){ note_dtor("S6660C2", this);} // tgen
S6660C2 ::S6660C2(){ note_ctor("S6660C2", this);} // tgen

static void Test_S6660C2()
{
  extern Class_Descriptor cd_S6660C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S6660C2, buf);
    S6660C2 *dp, &lv = *(dp=new (buf) S6660C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S6660C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6660C2)");
    check_field_offset(lv, s6660c2f0, ABISELECT(8,4), "S6660C2.s6660c2f0");
    test_class_info(&lv, &cd_S6660C2);
    dp->~S6660C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6660C2(Test_S6660C2, "S6660C2", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN7S6660C2C1Ev();
extern void _ZN7S6660C2D1Ev();
Name_Map name_map_S6660C2[] = {
  NSPAIR(_ZN7S6660C2C1Ev),
  NSPAIR(_ZN7S6660C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6660C2[];
extern void _ZN7S6660C22v3Ev();
static  VTBL_ENTRY vtc_S6660C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6660C2[0]),
  (VTBL_ENTRY)&_ZN7S6660C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6660C2[];
extern  VTBL_ENTRY _ZTV7S6660C2[];
Class_Descriptor cd_S6660C2 = {  "S6660C2", // class name
  0,0,//no base classes
  &(vtc_S6660C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI7S6660C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6660C2),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  S6660C5  {
  ::S19252C5_nt s6660c5f0;
  ::S6660C2 s6660c5f1;
  __tsi64 s6660c5f2;
  virtual void  v4(); // _ZN7S6660C52v4Ev
  ~S6660C5(); // tgen
  S6660C5(); // tgen
};
//SIG(-1 S6660C5) C1{ v1 FC2{} FC3{ v2 Fi[6]} FL}


void  S6660C5 ::v4(){vfunc_called(this, "_ZN7S6660C52v4Ev");}
S6660C5 ::~S6660C5(){ note_dtor("S6660C5", this);} // tgen
S6660C5 ::S6660C5(){ note_ctor("S6660C5", this);} // tgen

static void Test_S6660C5()
{
  extern Class_Descriptor cd_S6660C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S6660C5, buf);
    S6660C5 *dp, &lv = *(dp=new (buf) S6660C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S6660C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6660C5)");
    check_field_offset(lv, s6660c5f0, ABISELECT(8,4), "S6660C5.s6660c5f0");
    check_field_offset(lv, s6660c5f1, ABISELECT(16,8), "S6660C5.s6660c5f1");
    check_field_offset(lv, s6660c5f2, ABISELECT(48,36), "S6660C5.s6660c5f2");
    test_class_info(&lv, &cd_S6660C5);
    dp->~S6660C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6660C5(Test_S6660C5, "S6660C5", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN7S6660C5C1Ev();
extern void _ZN7S6660C5D1Ev();
Name_Map name_map_S6660C5[] = {
  NSPAIR(_ZN7S6660C5C1Ev),
  NSPAIR(_ZN7S6660C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6660C5[];
extern void _ZN7S6660C52v4Ev();
static  VTBL_ENTRY vtc_S6660C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6660C5[0]),
  (VTBL_ENTRY)&_ZN7S6660C52v4Ev,
};
extern VTBL_ENTRY _ZTI7S6660C5[];
extern  VTBL_ENTRY _ZTV7S6660C5[];
Class_Descriptor cd_S6660C5 = {  "S6660C5", // class name
  0,0,//no base classes
  &(vtc_S6660C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI7S6660C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6660C5),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  S6660C4  : S6660C5 {
  __tsi64 s6660c4f0;
  ~S6660C4(); // tgen
  S6660C4(); // tgen
};
//SIG(-1 S6660C4) C1{ BC2{ v1 FC3{} FC4{ v2 Fi[6]} FL} FL}


S6660C4 ::~S6660C4(){ note_dtor("S6660C4", this);} // tgen
S6660C4 ::S6660C4(){ note_ctor("S6660C4", this);} // tgen

static void Test_S6660C4()
{
  extern Class_Descriptor cd_S6660C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,14)];
    init_test(&cd_S6660C4, buf);
    S6660C4 *dp, &lv = *(dp=new (buf) S6660C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,52), "sizeof(S6660C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6660C4)");
    check_base_class_offset(lv, (S6660C5*), 0, "S6660C4");
    check_field_offset(lv, s6660c4f0, ABISELECT(56,44), "S6660C4.s6660c4f0");
    test_class_info(&lv, &cd_S6660C4);
    dp->~S6660C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6660C4(Test_S6660C4, "S6660C4", ABISELECT(64,52));

#else // __cplusplus

extern void _ZN7S6660C4C1Ev();
extern void _ZN7S6660C4D1Ev();
Name_Map name_map_S6660C4[] = {
  NSPAIR(_ZN7S6660C4C1Ev),
  NSPAIR(_ZN7S6660C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6660C5;
extern VTBL_ENTRY _ZTI7S6660C5[];
extern  VTBL_ENTRY _ZTV7S6660C5[];
static Base_Class bases_S6660C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6660C5,    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 _ZTI7S6660C4[];
extern void _ZN7S6660C52v4Ev();
static  VTBL_ENTRY vtc_S6660C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6660C4[0]),
  (VTBL_ENTRY)&_ZN7S6660C52v4Ev,
};
extern VTBL_ENTRY _ZTI7S6660C4[];
extern  VTBL_ENTRY _ZTV7S6660C4[];
Class_Descriptor cd_S6660C4 = {  "S6660C4", // class name
  bases_S6660C4, 1,
  &(vtc_S6660C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,52), // object size
  NSPAIRA(_ZTI7S6660C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6660C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6660C8  {
  int s6660c8f0;
  ::S6660C2 s6660c8f1;
  int s6660c8f2;
  virtual  ~S6660C8(); // _ZN7S6660C8D1Ev
  virtual void  v5(); // _ZN7S6660C82v5Ev
  virtual void  v6(); // _ZN7S6660C82v6Ev
  virtual void  v7(); // _ZN7S6660C82v7Ev
  virtual void  v8(); // _ZN7S6660C82v8Ev
  virtual void  v9(); // _ZN7S6660C82v9Ev
  virtual void  v10(); // _ZN7S6660C83v10Ev
  virtual void  v11(); // _ZN7S6660C83v11Ev
  S6660C8(); // tgen
};
//SIG(-1 S6660C8) C1{ vd v1 v2 v3 v4 v5 v6 v7 Fi FC2{ v8 Fi[6]} Fi}


 S6660C8 ::~S6660C8(){ note_dtor("S6660C8", this);}
void  S6660C8 ::v5(){vfunc_called(this, "_ZN7S6660C82v5Ev");}
void  S6660C8 ::v6(){vfunc_called(this, "_ZN7S6660C82v6Ev");}
void  S6660C8 ::v7(){vfunc_called(this, "_ZN7S6660C82v7Ev");}
void  S6660C8 ::v8(){vfunc_called(this, "_ZN7S6660C82v8Ev");}
void  S6660C8 ::v9(){vfunc_called(this, "_ZN7S6660C82v9Ev");}
void  S6660C8 ::v10(){vfunc_called(this, "_ZN7S6660C83v10Ev");}
void  S6660C8 ::v11(){vfunc_called(this, "_ZN7S6660C83v11Ev");}
S6660C8 ::S6660C8(){ note_ctor("S6660C8", this);} // tgen

static void Test_S6660C8()
{
  extern Class_Descriptor cd_S6660C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S6660C8, buf);
    S6660C8 *dp, &lv = *(dp=new (buf) S6660C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S6660C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6660C8)");
    check_field_offset(lv, s6660c8f0, ABISELECT(8,4), "S6660C8.s6660c8f0");
    check_field_offset(lv, s6660c8f1, ABISELECT(16,8), "S6660C8.s6660c8f1");
    check_field_offset(lv, s6660c8f2, ABISELECT(48,36), "S6660C8.s6660c8f2");
    test_class_info(&lv, &cd_S6660C8);
    dp->~S6660C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6660C8(Test_S6660C8, "S6660C8", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S6660C8C1Ev();
extern void _ZN7S6660C8D1Ev();
Name_Map name_map_S6660C8[] = {
  NSPAIR(_ZN7S6660C8C1Ev),
  NSPAIR(_ZN7S6660C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6660C8[];
extern void _ZN7S6660C8D1Ev();
extern void _ZN7S6660C8D0Ev();
extern void _ZN7S6660C82v5Ev();
extern void _ZN7S6660C82v6Ev();
extern void _ZN7S6660C82v7Ev();
extern void _ZN7S6660C82v8Ev();
extern void _ZN7S6660C82v9Ev();
extern void _ZN7S6660C83v10Ev();
extern void _ZN7S6660C83v11Ev();
static  VTBL_ENTRY vtc_S6660C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6660C8[0]),
  (VTBL_ENTRY)&_ZN7S6660C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6660C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v6Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v7Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v8Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v9Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v10Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v11Ev,
};
extern VTBL_ENTRY _ZTI7S6660C8[];
extern  VTBL_ENTRY _ZTV7S6660C8[];
Class_Descriptor cd_S6660C8 = {  "S6660C8", // class name
  0,0,//no base classes
  &(vtc_S6660C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S6660C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6660C8),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6660C9  : S6660C8 {
  virtual  ~S6660C9(); // _ZN7S6660C9D1Ev
  virtual void  v12(); // _ZN7S6660C93v12Ev
  S6660C9(); // tgen
};
//SIG(-1 S6660C9) C1{ BC2{ vd v2 v3 v4 v5 v6 v7 v8 Fi FC3{ v9 Fi[6]} Fi} vd v1}


 S6660C9 ::~S6660C9(){ note_dtor("S6660C9", this);}
void  S6660C9 ::v12(){vfunc_called(this, "_ZN7S6660C93v12Ev");}
S6660C9 ::S6660C9(){ note_ctor("S6660C9", this);} // tgen

static void Test_S6660C9()
{
  extern Class_Descriptor cd_S6660C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S6660C9, buf);
    S6660C9 *dp, &lv = *(dp=new (buf) S6660C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S6660C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6660C9)");
    check_base_class_offset(lv, (S6660C8*), 0, "S6660C9");
    test_class_info(&lv, &cd_S6660C9);
    dp->~S6660C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6660C9(Test_S6660C9, "S6660C9", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S6660C9C1Ev();
extern void _ZN7S6660C9D1Ev();
Name_Map name_map_S6660C9[] = {
  NSPAIR(_ZN7S6660C9C1Ev),
  NSPAIR(_ZN7S6660C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6660C8;
extern VTBL_ENTRY _ZTI7S6660C8[];
extern  VTBL_ENTRY _ZTV7S6660C8[];
static Base_Class bases_S6660C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6660C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S6660C9[];
extern void _ZN7S6660C9D1Ev();
extern void _ZN7S6660C9D0Ev();
extern void _ZN7S6660C82v5Ev();
extern void _ZN7S6660C82v6Ev();
extern void _ZN7S6660C82v7Ev();
extern void _ZN7S6660C82v8Ev();
extern void _ZN7S6660C82v9Ev();
extern void _ZN7S6660C83v10Ev();
extern void _ZN7S6660C83v11Ev();
extern void _ZN7S6660C93v12Ev();
static  VTBL_ENTRY vtc_S6660C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6660C9[0]),
  (VTBL_ENTRY)&_ZN7S6660C9D1Ev,
  (VTBL_ENTRY)&_ZN7S6660C9D0Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v6Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v7Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v8Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v9Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v10Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v11Ev,
  (VTBL_ENTRY)&_ZN7S6660C93v12Ev,
};
extern VTBL_ENTRY _ZTI7S6660C9[];
extern  VTBL_ENTRY _ZTV7S6660C9[];
Class_Descriptor cd_S6660C9 = {  "S6660C9", // class name
  bases_S6660C9, 1,
  &(vtc_S6660C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S6660C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6660C9),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6660C7  : S6660C8 , virtual S6660C9 {
  int s6660c7f0:10;
  ::S6660C2 s6660c7f1;
  void *s6660c7f2;
  virtual  ~S6660C7(); // _ZN7S6660C7D2Ev
  virtual void  v13(); // _ZN7S6660C73v13Ev
  virtual void  v14(); // _ZN7S6660C73v14Ev
  virtual void  v15(); // _ZN7S6660C73v15Ev
  virtual void  v16(); // _ZN7S6660C73v16Ev
  virtual void  v17(); // _ZN7S6660C73v17Ev
  virtual void  v18(); // _ZN7S6660C73v18Ev
  virtual void  v19(); // _ZN7S6660C73v19Ev
  S6660C7(); // tgen
};
//SIG(-1 S6660C7) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 Fi FC3{ v16 Fi[6]} Fi} VBC4{ BC2 vd v15} vd v1 v2 v3 v4 v5 v6 v7 Fi:10 FC3 Fp}


 S6660C7 ::~S6660C7(){ note_dtor("S6660C7", this);}
void  S6660C7 ::v13(){vfunc_called(this, "_ZN7S6660C73v13Ev");}
void  S6660C7 ::v14(){vfunc_called(this, "_ZN7S6660C73v14Ev");}
void  S6660C7 ::v15(){vfunc_called(this, "_ZN7S6660C73v15Ev");}
void  S6660C7 ::v16(){vfunc_called(this, "_ZN7S6660C73v16Ev");}
void  S6660C7 ::v17(){vfunc_called(this, "_ZN7S6660C73v17Ev");}
void  S6660C7 ::v18(){vfunc_called(this, "_ZN7S6660C73v18Ev");}
void  S6660C7 ::v19(){vfunc_called(this, "_ZN7S6660C73v19Ev");}
S6660C7 ::S6660C7(){ note_ctor("S6660C7", this);} // tgen

static void Test_S6660C7()
{
  extern Class_Descriptor cd_S6660C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,30)];
    init_test(&cd_S6660C7, buf);
    S6660C7 *dp, &lv = *(dp=new (buf) S6660C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,116), "sizeof(S6660C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6660C7)");
    /*is_ambiguous_... S6660C7::S6660C8 */ AMB_check_base_class_offset(lv, (S6660C8*), 0, "S6660C7");
    check_base_class_offset(lv, (S6660C8*)(S6660C9*), ABISELECT(96,76), "S6660C7");
    check_base_class_offset(lv, (S6660C9*), ABISELECT(96,76), "S6660C7");
    set_bf_and_test(lv, s6660c7f0, ABISELECT(52,40), 0, 10, 1, "S6660C7");
    set_bf_and_test(lv, s6660c7f0, ABISELECT(52,40), 0, 10, hide_sll(1LL<<9), "S6660C7");
    check_field_offset(lv, s6660c7f1, ABISELECT(56,44), "S6660C7.s6660c7f1");
    check_field_offset(lv, s6660c7f2, ABISELECT(88,72), "S6660C7.s6660c7f2");
    test_class_info(&lv, &cd_S6660C7);
    dp->~S6660C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6660C7(Test_S6660C7, "S6660C7", ABISELECT(152,116));

#else // __cplusplus

extern void _ZN7S6660C7C1Ev();
extern void _ZN7S6660C7D2Ev();
Name_Map name_map_S6660C7[] = {
  NSPAIR(_ZN7S6660C7C1Ev),
  NSPAIR(_ZN7S6660C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6660C8;
extern VTBL_ENTRY _ZTI7S6660C8[];
extern  VTBL_ENTRY _ZTV7S6660C8[];
extern Class_Descriptor cd_S6660C8;
extern VTBL_ENTRY _ZTI7S6660C8[];
extern  VTBL_ENTRY _ZTV7S6660C8[];
extern Class_Descriptor cd_S6660C9;
extern VTBL_ENTRY _ZTI7S6660C9[];
extern  VTBL_ENTRY _ZTV7S6660C9[];
static Base_Class bases_S6660C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6660C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6660C8,    ABISELECT(96,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
    2, //immediately_derived
  0, 0},
  {&cd_S6660C9,    ABISELECT(96,76), //bcp->offset
    19, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S6660C7[];
extern void _ZN7S6660C7D1Ev();
extern void _ZN7S6660C7D0Ev();
extern void _ZN7S6660C82v5Ev();
extern void _ZN7S6660C82v6Ev();
extern void _ZN7S6660C82v7Ev();
extern void _ZN7S6660C82v8Ev();
extern void _ZN7S6660C82v9Ev();
extern void _ZN7S6660C83v10Ev();
extern void _ZN7S6660C83v11Ev();
extern void _ZN7S6660C73v13Ev();
extern void _ZN7S6660C73v14Ev();
extern void _ZN7S6660C73v15Ev();
extern void _ZN7S6660C73v16Ev();
extern void _ZN7S6660C73v17Ev();
extern void _ZN7S6660C73v18Ev();
extern void _ZN7S6660C73v19Ev();
extern void ABISELECT(_ZTv0_n24_N7S6660C7D1Ev,_ZTv0_n12_N7S6660C7D1Ev)();
extern void ABISELECT(_ZThn96_N7S6660C7D1Ev,_ZThn76_N7S6660C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6660C7D0Ev,_ZTv0_n12_N7S6660C7D0Ev)();
extern void ABISELECT(_ZThn96_N7S6660C7D0Ev,_ZThn76_N7S6660C7D0Ev)() __attribute__((weak));
extern void _ZN7S6660C82v5Ev();
extern void _ZN7S6660C82v6Ev();
extern void _ZN7S6660C82v7Ev();
extern void _ZN7S6660C82v8Ev();
extern void _ZN7S6660C82v9Ev();
extern void _ZN7S6660C83v10Ev();
extern void _ZN7S6660C83v11Ev();
extern void _ZN7S6660C93v12Ev();
static  VTBL_ENTRY vtc_S6660C7[] = {
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S6660C7[0]),
  (VTBL_ENTRY)&_ZN7S6660C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6660C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v6Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v7Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v8Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v9Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v10Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v11Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v13Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v14Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v15Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v16Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v17Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-76),
  ABISELECT(-96,-76),
  (VTBL_ENTRY)&(_ZTI7S6660C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6660C7D1Ev,_ZTv0_n12_N7S6660C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6660C7D0Ev,_ZTv0_n12_N7S6660C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6660C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v6Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v7Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v8Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v9Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v10Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v11Ev,
  (VTBL_ENTRY)&_ZN7S6660C93v12Ev,
};
extern VTBL_ENTRY _ZTV7S6660C7[];
static  VTT_ENTRY vtt_S6660C7[] = {
  {&(_ZTV7S6660C7[3]),  3,40},
  {&(_ZTV7S6660C7[30]),  30,40},
};
extern VTBL_ENTRY _ZTI7S6660C7[];
extern  VTBL_ENTRY _ZTV7S6660C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6660C7[];
static VTBL_ENTRY alt_thunk_names108[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6660C7D0Ev,_ZTv0_n12_N7S6660C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6660C7D0Ev,_ZThn76_N7S6660C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6660C7D1Ev,_ZTv0_n12_N7S6660C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6660C7D1Ev,_ZThn76_N7S6660C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6660C7 = {  "S6660C7", // class name
  bases_S6660C7, 3,
  &(vtc_S6660C7[0]), // expected_vtbl_contents
  &(vtt_S6660C7[0]), // expected_vtt_contents
  ABISELECT(152,116), // object size
  NSPAIRA(_ZTI7S6660C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6660C7),40, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6660C7),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names108,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6660C3  : S6660C4 , virtual S6660C7 {
  virtual  ~S6660C3(); // _ZN7S6660C3D2Ev
  virtual void  v20(); // _ZN7S6660C33v20Ev
  S6660C3(); // tgen
};
//SIG(-1 S6660C3) C1{ BC2{ BC3{ v2 FC4{} FC5{ v18 Fi[6]} FL} FL} VBC6{ BC7{ vd v3 v4 v5 v6 v7 v8 v9 Fi FC5 Fi} VBC8{ BC7 vd v10} vd v11 v12 v13 v14 v15 v16 v17 Fi:10 FC5 Fp} vd v1}


 S6660C3 ::~S6660C3(){ note_dtor("S6660C3", this);}
void  S6660C3 ::v20(){vfunc_called(this, "_ZN7S6660C33v20Ev");}
S6660C3 ::S6660C3(){ note_ctor("S6660C3", this);} // tgen

static void Test_S6660C3()
{
  extern Class_Descriptor cd_S6660C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,43)];
    init_test(&cd_S6660C3, buf);
    S6660C3 *dp, &lv = *(dp=new (buf) S6660C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,168), "sizeof(S6660C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6660C3)");
    check_base_class_offset(lv, (S6660C5*)(S6660C4*), 0, "S6660C3");
    check_base_class_offset(lv, (S6660C4*), 0, "S6660C3");
    /*is_ambiguous_... S6660C7::S6660C8 */ AMB_check_base_class_offset(lv, (S6660C8*)(S6660C7*), ABISELECT(64,52), "S6660C3");
    check_base_class_offset(lv, (S6660C8*)(S6660C9*), ABISELECT(160,128), "S6660C3");
    check_base_class_offset(lv, (S6660C9*)(S6660C7*), ABISELECT(160,128), "S6660C3");
    check_base_class_offset(lv, (S6660C7*), ABISELECT(64,52), "S6660C3");
    test_class_info(&lv, &cd_S6660C3);
    dp->~S6660C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6660C3(Test_S6660C3, "S6660C3", ABISELECT(216,168));

#else // __cplusplus

extern void _ZN7S6660C3C1Ev();
extern void _ZN7S6660C3D2Ev();
Name_Map name_map_S6660C3[] = {
  NSPAIR(_ZN7S6660C3C1Ev),
  NSPAIR(_ZN7S6660C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6660C5;
extern VTBL_ENTRY _ZTI7S6660C5[];
extern  VTBL_ENTRY _ZTV7S6660C5[];
extern Class_Descriptor cd_S6660C4;
extern VTBL_ENTRY _ZTI7S6660C4[];
extern  VTBL_ENTRY _ZTV7S6660C4[];
extern Class_Descriptor cd_S6660C8;
extern VTBL_ENTRY _ZTI7S6660C8[];
extern  VTBL_ENTRY _ZTV7S6660C8[];
extern Class_Descriptor cd_S6660C8;
extern VTBL_ENTRY _ZTI7S6660C8[];
extern  VTBL_ENTRY _ZTV7S6660C8[];
extern Class_Descriptor cd_S6660C9;
extern VTBL_ENTRY _ZTI7S6660C9[];
extern  VTBL_ENTRY _ZTV7S6660C9[];
extern Class_Descriptor cd_S6660C7;
extern VTBL_ENTRY _ZTI7S6660C7[];
extern  VTBL_ENTRY _ZTV7S6660C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6660C7[];
static Base_Class bases_S6660C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6660C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S6660C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S6660C8,    ABISELECT(64,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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6660C8,    ABISELECT(160,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
    4, //immediately_derived
  0, 0},
  {&cd_S6660C9,    ABISELECT(160,128), //bcp->offset
    42, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6660C7,    ABISELECT(64,52), //bcp->offset
    8, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6660C3[];
extern void _ZN7S6660C52v4Ev();
extern void _ZN7S6660C3D1Ev();
extern void _ZN7S6660C3D0Ev();
extern void _ZN7S6660C33v20Ev();
extern void ABISELECT(_ZTv0_n32_N7S6660C3D1Ev,_ZTv0_n16_N7S6660C3D1Ev)();
extern void ABISELECT(_ZThn64_N7S6660C3D1Ev,_ZThn52_N7S6660C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6660C3D0Ev,_ZTv0_n16_N7S6660C3D0Ev)();
extern void ABISELECT(_ZThn64_N7S6660C3D0Ev,_ZThn52_N7S6660C3D0Ev)() __attribute__((weak));
extern void _ZN7S6660C82v5Ev();
extern void _ZN7S6660C82v6Ev();
extern void _ZN7S6660C82v7Ev();
extern void _ZN7S6660C82v8Ev();
extern void _ZN7S6660C82v9Ev();
extern void _ZN7S6660C83v10Ev();
extern void _ZN7S6660C83v11Ev();
extern void _ZN7S6660C73v13Ev();
extern void _ZN7S6660C73v14Ev();
extern void _ZN7S6660C73v15Ev();
extern void _ZN7S6660C73v16Ev();
extern void _ZN7S6660C73v17Ev();
extern void _ZN7S6660C73v18Ev();
extern void _ZN7S6660C73v19Ev();
extern void ABISELECT(_ZTv0_n24_N7S6660C3D1Ev,_ZTv0_n12_N7S6660C3D1Ev)();
extern void ABISELECT(_ZThn160_N7S6660C3D1Ev,_ZThn128_N7S6660C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6660C3D0Ev,_ZTv0_n12_N7S6660C3D0Ev)();
extern void ABISELECT(_ZThn160_N7S6660C3D0Ev,_ZThn128_N7S6660C3D0Ev)() __attribute__((weak));
extern void _ZN7S6660C82v5Ev();
extern void _ZN7S6660C82v6Ev();
extern void _ZN7S6660C82v7Ev();
extern void _ZN7S6660C82v8Ev();
extern void _ZN7S6660C82v9Ev();
extern void _ZN7S6660C83v10Ev();
extern void _ZN7S6660C83v11Ev();
extern void _ZN7S6660C93v12Ev();
static  VTBL_ENTRY vtc_S6660C3[] = {
  ABISELECT(160,128),
  ABISELECT(64,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S6660C3[0]),
  (VTBL_ENTRY)&_ZN7S6660C52v4Ev,
  (VTBL_ENTRY)&_ZN7S6660C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6660C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6660C33v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-52),
  ABISELECT(96,76),
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI7S6660C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6660C3D1Ev,_ZTv0_n16_N7S6660C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6660C3D0Ev,_ZTv0_n16_N7S6660C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6660C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v6Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v7Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v8Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v9Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v10Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v11Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v13Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v14Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v15Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v16Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v17Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-128),
  ABISELECT(-160,-128),
  (VTBL_ENTRY)&(_ZTI7S6660C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6660C3D1Ev,_ZTv0_n12_N7S6660C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6660C3D0Ev,_ZTv0_n12_N7S6660C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6660C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v6Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v7Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v8Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v9Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v10Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v11Ev,
  (VTBL_ENTRY)&_ZN7S6660C93v12Ev,
};
extern VTBL_ENTRY _ZTV7S6660C3[];
extern void _ZN7S6660C7D1Ev();
extern void _ZN7S6660C7D0Ev();
extern void _ZN7S6660C82v5Ev();
extern void _ZN7S6660C82v6Ev();
extern void _ZN7S6660C82v7Ev();
extern void _ZN7S6660C82v8Ev();
extern void _ZN7S6660C82v9Ev();
extern void _ZN7S6660C83v10Ev();
extern void _ZN7S6660C83v11Ev();
extern void _ZN7S6660C73v13Ev();
extern void _ZN7S6660C73v14Ev();
extern void _ZN7S6660C73v15Ev();
extern void _ZN7S6660C73v16Ev();
extern void _ZN7S6660C73v17Ev();
extern void _ZN7S6660C73v18Ev();
extern void _ZN7S6660C73v19Ev();
static  VTBL_ENTRY _tg__ZTV7S6660C7__7S6660C3[] = {
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S6660C7[0]),
  (VTBL_ENTRY)&_ZN7S6660C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6660C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v6Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v7Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v8Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v9Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v10Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v11Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v13Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v14Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v15Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v16Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v17Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v19Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6660C7D1Ev,_ZTv0_n12_N7S6660C7D1Ev)();
extern void ABISELECT(_ZThn96_N7S6660C7D1Ev,_ZThn76_N7S6660C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6660C7D0Ev,_ZTv0_n12_N7S6660C7D0Ev)();
extern void ABISELECT(_ZThn96_N7S6660C7D0Ev,_ZThn76_N7S6660C7D0Ev)() __attribute__((weak));
extern void _ZN7S6660C82v5Ev();
extern void _ZN7S6660C82v6Ev();
extern void _ZN7S6660C82v7Ev();
extern void _ZN7S6660C82v8Ev();
extern void _ZN7S6660C82v9Ev();
extern void _ZN7S6660C83v10Ev();
extern void _ZN7S6660C83v11Ev();
extern void _ZN7S6660C93v12Ev();
static  VTBL_ENTRY _tg__ZTV7S6660C9__7S6660C7__7S6660C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-76),
  ABISELECT(-96,-76),
  (VTBL_ENTRY)&(_ZTI7S6660C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6660C7D1Ev,_ZTv0_n12_N7S6660C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6660C7D0Ev,_ZTv0_n12_N7S6660C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6660C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v6Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v7Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v8Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v9Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v10Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v11Ev,
  (VTBL_ENTRY)&_ZN7S6660C93v12Ev,
};
static  VTT_ENTRY vtt_S6660C3[] = {
  {&(_ZTV7S6660C3[4]),  4,63},
  {&(_ZTV7S6660C3[26]),  26,63},
  {&(_ZTV7S6660C3[53]),  53,63},
  {&(_tg__ZTV7S6660C7__7S6660C3[3]),  3,19},
  {&(_tg__ZTV7S6660C9__7S6660C7__7S6660C3[11]),  11,21},
};
extern VTBL_ENTRY _ZTI7S6660C3[];
extern  VTBL_ENTRY _ZTV7S6660C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6660C3[];
static VTBL_ENTRY alt_thunk_names109[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6660C7D0Ev,_ZTv0_n12_N7S6660C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6660C7D0Ev,_ZThn76_N7S6660C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6660C7D1Ev,_ZTv0_n12_N7S6660C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6660C7D1Ev,_ZThn76_N7S6660C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6660C3D0Ev,_ZTv0_n12_N7S6660C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S6660C3D0Ev,_ZThn128_N7S6660C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6660C3D1Ev,_ZTv0_n12_N7S6660C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S6660C3D1Ev,_ZThn128_N7S6660C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6660C3D0Ev,_ZTv0_n16_N7S6660C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6660C3D0Ev,_ZThn52_N7S6660C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6660C3D1Ev,_ZTv0_n16_N7S6660C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6660C3D1Ev,_ZThn52_N7S6660C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6660C3 = {  "S6660C3", // class name
  bases_S6660C3, 6,
  &(vtc_S6660C3[0]), // expected_vtbl_contents
  &(vtt_S6660C3[0]), // expected_vtt_contents
  ABISELECT(216,168), // object size
  NSPAIRA(_ZTI7S6660C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6660C3),63, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6660C3),5, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names109,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6660C1  : S6660C2 , S6660C3 {
  virtual  ~S6660C1(); // _ZN7S6660C1D2Ev
  virtual void  v1(); // _ZN7S6660C12v1Ev
  virtual void  v2(); // _ZN7S6660C12v2Ev
  S6660C1(); // tgen
};
//SIG(1 S6660C1) C1{ BC2{ v3 Fi[6]} BC3{ BC4{ BC5{ v4 FC6{} FC2 FL} FL} VBC7{ BC8{ vd v5 v6 v7 v8 v9 v10 v11 Fi FC2 Fi} VBC9{ BC8 vd v12} vd v13 v14 v15 v16 v17 v18 v19 Fi:10 FC2 Fp} vd v20} vd v1 v2}


 S6660C1 ::~S6660C1(){ note_dtor("S6660C1", this);}
void  S6660C1 ::v1(){vfunc_called(this, "_ZN7S6660C12v1Ev");}
void  S6660C1 ::v2(){vfunc_called(this, "_ZN7S6660C12v2Ev");}
S6660C1 ::S6660C1(){ note_ctor("S6660C1", this);} // tgen

static void Test_S6660C1()
{
  extern Class_Descriptor cd_S6660C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,50)];
    init_test(&cd_S6660C1, buf);
    S6660C1 *dp, &lv = *(dp=new (buf) S6660C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,196), "sizeof(S6660C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6660C1)");
    check_base_class_offset(lv, (S6660C2*), 0, "S6660C1");
    check_base_class_offset(lv, (S6660C5*)(S6660C4*)(S6660C3*), ABISELECT(32,28), "S6660C1");
    check_base_class_offset(lv, (S6660C4*)(S6660C3*), ABISELECT(32,28), "S6660C1");
    /*is_ambiguous_... S6660C7::S6660C8 */ AMB_check_base_class_offset(lv, (S6660C8*)(S6660C7*), ABISELECT(96,80), "S6660C1");
    check_base_class_offset(lv, (S6660C8*)(S6660C9*), ABISELECT(192,156), "S6660C1");
    check_base_class_offset(lv, (S6660C9*)(S6660C7*), ABISELECT(192,156), "S6660C1");
    check_base_class_offset(lv, (S6660C7*)(S6660C3*), ABISELECT(96,80), "S6660C1");
    check_base_class_offset(lv, (S6660C3*), ABISELECT(32,28), "S6660C1");
    test_class_info(&lv, &cd_S6660C1);
    dp->~S6660C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6660C1(Test_S6660C1, "S6660C1", ABISELECT(248,196));

#else // __cplusplus

extern void _ZN7S6660C1C1Ev();
extern void _ZN7S6660C1D2Ev();
Name_Map name_map_S6660C1[] = {
  NSPAIR(_ZN7S6660C1C1Ev),
  NSPAIR(_ZN7S6660C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6660C2;
extern VTBL_ENTRY _ZTI7S6660C2[];
extern  VTBL_ENTRY _ZTV7S6660C2[];
extern Class_Descriptor cd_S6660C5;
extern VTBL_ENTRY _ZTI7S6660C5[];
extern  VTBL_ENTRY _ZTV7S6660C5[];
extern Class_Descriptor cd_S6660C4;
extern VTBL_ENTRY _ZTI7S6660C4[];
extern  VTBL_ENTRY _ZTV7S6660C4[];
extern Class_Descriptor cd_S6660C8;
extern VTBL_ENTRY _ZTI7S6660C8[];
extern  VTBL_ENTRY _ZTV7S6660C8[];
extern Class_Descriptor cd_S6660C8;
extern VTBL_ENTRY _ZTI7S6660C8[];
extern  VTBL_ENTRY _ZTV7S6660C8[];
extern Class_Descriptor cd_S6660C9;
extern VTBL_ENTRY _ZTI7S6660C9[];
extern  VTBL_ENTRY _ZTV7S6660C9[];
extern Class_Descriptor cd_S6660C7;
extern VTBL_ENTRY _ZTI7S6660C7[];
extern  VTBL_ENTRY _ZTV7S6660C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6660C7[];
extern Class_Descriptor cd_S6660C3;
extern VTBL_ENTRY _ZTI7S6660C3[];
extern  VTBL_ENTRY _ZTV7S6660C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6660C3[];
static Base_Class bases_S6660C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6660C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6660C5,    ABISELECT(32,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
    2, //immediately_derived
  0, 0},
  {&cd_S6660C4,    ABISELECT(32,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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6660C8,    ABISELECT(96,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6660C8,    ABISELECT(192,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
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6660C9,    ABISELECT(192,156), //bcp->offset
    51, //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
    6, //immediately_derived
  0, 1},
  {&cd_S6660C7,    ABISELECT(96,80), //bcp->offset
    17, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6660C3,    ABISELECT(32,28), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //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 _ZTI7S6660C1[];
extern void _ZN7S6660C22v3Ev();
extern void _ZN7S6660C1D1Ev();
extern void _ZN7S6660C1D0Ev();
extern void _ZN7S6660C12v1Ev();
extern void _ZN7S6660C12v2Ev();
extern void _ZN7S6660C52v4Ev();
extern void ABISELECT(_ZThn32_N7S6660C1D1Ev,_ZThn28_N7S6660C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S6660C1D0Ev,_ZThn28_N7S6660C1D0Ev)();
extern void _ZN7S6660C33v20Ev();
extern void ABISELECT(_ZTv0_n32_N7S6660C1D1Ev,_ZTv0_n16_N7S6660C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S6660C1D1Ev,_ZThn80_N7S6660C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6660C1D0Ev,_ZTv0_n16_N7S6660C1D0Ev)();
extern void ABISELECT(_ZThn96_N7S6660C1D0Ev,_ZThn80_N7S6660C1D0Ev)() __attribute__((weak));
extern void _ZN7S6660C82v5Ev();
extern void _ZN7S6660C82v6Ev();
extern void _ZN7S6660C82v7Ev();
extern void _ZN7S6660C82v8Ev();
extern void _ZN7S6660C82v9Ev();
extern void _ZN7S6660C83v10Ev();
extern void _ZN7S6660C83v11Ev();
extern void _ZN7S6660C73v13Ev();
extern void _ZN7S6660C73v14Ev();
extern void _ZN7S6660C73v15Ev();
extern void _ZN7S6660C73v16Ev();
extern void _ZN7S6660C73v17Ev();
extern void _ZN7S6660C73v18Ev();
extern void _ZN7S6660C73v19Ev();
extern void ABISELECT(_ZTv0_n24_N7S6660C1D1Ev,_ZTv0_n12_N7S6660C1D1Ev)();
extern void ABISELECT(_ZThn192_N7S6660C1D1Ev,_ZThn156_N7S6660C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6660C1D0Ev,_ZTv0_n12_N7S6660C1D0Ev)();
extern void ABISELECT(_ZThn192_N7S6660C1D0Ev,_ZThn156_N7S6660C1D0Ev)() __attribute__((weak));
extern void _ZN7S6660C82v5Ev();
extern void _ZN7S6660C82v6Ev();
extern void _ZN7S6660C82v7Ev();
extern void _ZN7S6660C82v8Ev();
extern void _ZN7S6660C82v9Ev();
extern void _ZN7S6660C83v10Ev();
extern void _ZN7S6660C83v11Ev();
extern void _ZN7S6660C93v12Ev();
static  VTBL_ENTRY vtc_S6660C1[] = {
  ABISELECT(192,156),
  ABISELECT(96,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S6660C1[0]),
  (VTBL_ENTRY)&_ZN7S6660C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6660C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6660C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6660C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6660C12v2Ev,
  ABISELECT(160,128),
  ABISELECT(64,52),
  ABISELECT(-32,-28),
  (VTBL_ENTRY)&(_ZTI7S6660C1[0]),
  (VTBL_ENTRY)&_ZN7S6660C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S6660C1D1Ev,_ZThn28_N7S6660C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S6660C1D0Ev,_ZThn28_N7S6660C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6660C33v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-80),
  ABISELECT(96,76),
  ABISELECT(-96,-80),
  (VTBL_ENTRY)&(_ZTI7S6660C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6660C1D1Ev,_ZTv0_n16_N7S6660C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6660C1D0Ev,_ZTv0_n16_N7S6660C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6660C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v6Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v7Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v8Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v9Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v10Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v11Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v13Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v14Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v15Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v16Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v17Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-156),
  ABISELECT(-192,-156),
  (VTBL_ENTRY)&(_ZTI7S6660C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6660C1D1Ev,_ZTv0_n12_N7S6660C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6660C1D0Ev,_ZTv0_n12_N7S6660C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6660C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v6Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v7Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v8Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v9Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v10Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v11Ev,
  (VTBL_ENTRY)&_ZN7S6660C93v12Ev,
};
extern VTBL_ENTRY _ZTV7S6660C1[];
extern void _ZN7S6660C52v4Ev();
extern void _ZN7S6660C3D1Ev();
extern void _ZN7S6660C3D0Ev();
extern void _ZN7S6660C33v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6660C3__7S6660C1[] = {
  ABISELECT(160,128),
  ABISELECT(64,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S6660C3[0]),
  (VTBL_ENTRY)&_ZN7S6660C52v4Ev,
  (VTBL_ENTRY)&_ZN7S6660C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6660C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6660C33v20Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S6660C3D1Ev,_ZTv0_n16_N7S6660C3D1Ev)();
extern void ABISELECT(_ZThn64_N7S6660C3D1Ev,_ZThn52_N7S6660C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6660C3D0Ev,_ZTv0_n16_N7S6660C3D0Ev)();
extern void ABISELECT(_ZThn64_N7S6660C3D0Ev,_ZThn52_N7S6660C3D0Ev)() __attribute__((weak));
extern void _ZN7S6660C82v5Ev();
extern void _ZN7S6660C82v6Ev();
extern void _ZN7S6660C82v7Ev();
extern void _ZN7S6660C82v8Ev();
extern void _ZN7S6660C82v9Ev();
extern void _ZN7S6660C83v10Ev();
extern void _ZN7S6660C83v11Ev();
extern void _ZN7S6660C73v13Ev();
extern void _ZN7S6660C73v14Ev();
extern void _ZN7S6660C73v15Ev();
extern void _ZN7S6660C73v16Ev();
extern void _ZN7S6660C73v17Ev();
extern void _ZN7S6660C73v18Ev();
extern void _ZN7S6660C73v19Ev();
static  VTBL_ENTRY _tg__ZTV7S6660C7__7S6660C3__7S6660C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-52),
  ABISELECT(96,76),
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI7S6660C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6660C3D1Ev,_ZTv0_n16_N7S6660C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6660C3D0Ev,_ZTv0_n16_N7S6660C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6660C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v6Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v7Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v8Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v9Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v10Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v11Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v13Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v14Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v15Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v16Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v17Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v19Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6660C3D1Ev,_ZTv0_n12_N7S6660C3D1Ev)();
extern void ABISELECT(_ZThn160_N7S6660C3D1Ev,_ZThn128_N7S6660C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6660C3D0Ev,_ZTv0_n12_N7S6660C3D0Ev)();
extern void ABISELECT(_ZThn160_N7S6660C3D0Ev,_ZThn128_N7S6660C3D0Ev)() __attribute__((weak));
extern void _ZN7S6660C82v5Ev();
extern void _ZN7S6660C82v6Ev();
extern void _ZN7S6660C82v7Ev();
extern void _ZN7S6660C82v8Ev();
extern void _ZN7S6660C82v9Ev();
extern void _ZN7S6660C83v10Ev();
extern void _ZN7S6660C83v11Ev();
extern void _ZN7S6660C93v12Ev();
static  VTBL_ENTRY _tg__ZTV7S6660C9__7S6660C3__7S6660C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-128),
  ABISELECT(-160,-128),
  (VTBL_ENTRY)&(_ZTI7S6660C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6660C3D1Ev,_ZTv0_n12_N7S6660C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6660C3D0Ev,_ZTv0_n12_N7S6660C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6660C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v6Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v7Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v8Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v9Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v10Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v11Ev,
  (VTBL_ENTRY)&_ZN7S6660C93v12Ev,
};
extern void _ZN7S6660C7D1Ev();
extern void _ZN7S6660C7D0Ev();
extern void _ZN7S6660C82v5Ev();
extern void _ZN7S6660C82v6Ev();
extern void _ZN7S6660C82v7Ev();
extern void _ZN7S6660C82v8Ev();
extern void _ZN7S6660C82v9Ev();
extern void _ZN7S6660C83v10Ev();
extern void _ZN7S6660C83v11Ev();
extern void _ZN7S6660C73v13Ev();
extern void _ZN7S6660C73v14Ev();
extern void _ZN7S6660C73v15Ev();
extern void _ZN7S6660C73v16Ev();
extern void _ZN7S6660C73v17Ev();
extern void _ZN7S6660C73v18Ev();
extern void _ZN7S6660C73v19Ev();
static  VTBL_ENTRY _tg__ZTV7S6660C7__7S6660C1[] = {
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S6660C7[0]),
  (VTBL_ENTRY)&_ZN7S6660C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6660C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v6Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v7Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v8Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v9Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v10Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v11Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v13Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v14Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v15Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v16Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v17Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6660C73v19Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6660C7D1Ev,_ZTv0_n12_N7S6660C7D1Ev)();
extern void ABISELECT(_ZThn96_N7S6660C7D1Ev,_ZThn76_N7S6660C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6660C7D0Ev,_ZTv0_n12_N7S6660C7D0Ev)();
extern void ABISELECT(_ZThn96_N7S6660C7D0Ev,_ZThn76_N7S6660C7D0Ev)() __attribute__((weak));
extern void _ZN7S6660C82v5Ev();
extern void _ZN7S6660C82v6Ev();
extern void _ZN7S6660C82v7Ev();
extern void _ZN7S6660C82v8Ev();
extern void _ZN7S6660C82v9Ev();
extern void _ZN7S6660C83v10Ev();
extern void _ZN7S6660C83v11Ev();
extern void _ZN7S6660C93v12Ev();
static  VTBL_ENTRY _tg__ZTV7S6660C9__7S6660C7__7S6660C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-76),
  ABISELECT(-96,-76),
  (VTBL_ENTRY)&(_ZTI7S6660C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6660C7D1Ev,_ZTv0_n12_N7S6660C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6660C7D0Ev,_ZTv0_n12_N7S6660C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6660C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v6Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v7Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v8Ev,
  (VTBL_ENTRY)&_ZN7S6660C82v9Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v10Ev,
  (VTBL_ENTRY)&_ZN7S6660C83v11Ev,
  (VTBL_ENTRY)&_ZN7S6660C93v12Ev,
};
static  VTT_ENTRY vtt_S6660C1[] = {
  {&(_ZTV7S6660C1[4]),  4,72},
  {&(_tg__ZTV7S6660C3__7S6660C1[4]),  4,8},
  {&(_tg__ZTV7S6660C7__7S6660C3__7S6660C1[18]),  18,34},
  {&(_tg__ZTV7S6660C9__7S6660C3__7S6660C1[11]),  11,21},
  {&(_ZTV7S6660C1[13]),  13,72},
  {&(_ZTV7S6660C1[35]),  35,72},
  {&(_ZTV7S6660C1[62]),  62,72},
  {&(_tg__ZTV7S6660C7__7S6660C1[3]),  3,19},
  {&(_tg__ZTV7S6660C9__7S6660C7__7S6660C1[11]),  11,21},
};
extern VTBL_ENTRY _ZTI7S6660C1[];
extern  VTBL_ENTRY _ZTV7S6660C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6660C1[];
static VTBL_ENTRY alt_thunk_names110[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6660C7D0Ev,_ZTv0_n12_N7S6660C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6660C7D0Ev,_ZThn76_N7S6660C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6660C7D1Ev,_ZTv0_n12_N7S6660C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6660C7D1Ev,_ZThn76_N7S6660C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6660C3D0Ev,_ZTv0_n12_N7S6660C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S6660C3D0Ev,_ZThn128_N7S6660C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6660C3D1Ev,_ZTv0_n12_N7S6660C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S6660C3D1Ev,_ZThn128_N7S6660C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6660C3D0Ev,_ZTv0_n16_N7S6660C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6660C3D0Ev,_ZThn52_N7S6660C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6660C3D1Ev,_ZTv0_n16_N7S6660C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6660C3D1Ev,_ZThn52_N7S6660C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6660C1D0Ev,_ZTv0_n12_N7S6660C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S6660C1D0Ev,_ZThn156_N7S6660C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6660C1D1Ev,_ZTv0_n12_N7S6660C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S6660C1D1Ev,_ZThn156_N7S6660C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6660C1D0Ev,_ZTv0_n16_N7S6660C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6660C1D0Ev,_ZThn80_N7S6660C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6660C1D1Ev,_ZTv0_n16_N7S6660C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6660C1D1Ev,_ZThn80_N7S6660C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6660C1 = {  "S6660C1", // class name
  bases_S6660C1, 8,
  &(vtc_S6660C1[0]), // expected_vtbl_contents
  &(vtt_S6660C1[0]), // expected_vtt_contents
  ABISELECT(248,196), // object size
  NSPAIRA(_ZTI7S6660C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6660C1),72, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6660C1),9, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names110,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10207C2  {
  int s10207c2f0[28];
  virtual  ~S10207C2(); // _ZN8S10207C2D1Ev
  virtual void  v8(); // _ZN8S10207C22v8Ev
  virtual void  v9(); // _ZN8S10207C22v9Ev
  virtual void  v10(); // _ZN8S10207C23v10Ev
  virtual void  v11(); // _ZN8S10207C23v11Ev
  virtual void  v12(); // _ZN8S10207C23v12Ev
  virtual void  v13(); // _ZN8S10207C23v13Ev
  virtual void  v14(); // _ZN8S10207C23v14Ev
  virtual void  v15(); // _ZN8S10207C23v15Ev
  virtual void  v16(); // _ZN8S10207C23v16Ev
  virtual void  v17(); // _ZN8S10207C23v17Ev
  virtual void  v18(); // _ZN8S10207C23v18Ev
  virtual void  v19(); // _ZN8S10207C23v19Ev
  virtual void  v20(); // _ZN8S10207C23v20Ev
  virtual void  v21(); // _ZN8S10207C23v21Ev
  virtual void  v22(); // _ZN8S10207C23v22Ev
  virtual void  v23(); // _ZN8S10207C23v23Ev
  virtual void  v24(); // _ZN8S10207C23v24Ev
  virtual void  v25(); // _ZN8S10207C23v25Ev
  virtual void  v26(); // _ZN8S10207C23v26Ev
  virtual void  v27(); // _ZN8S10207C23v27Ev
  virtual void  v28(); // _ZN8S10207C23v28Ev
  virtual void  v29(); // _ZN8S10207C23v29Ev
  virtual void  v30(); // _ZN8S10207C23v30Ev
  virtual void  v31(); // _ZN8S10207C23v31Ev
  virtual void  v32(); // _ZN8S10207C23v32Ev
  S10207C2(); // tgen
};
//SIG(-1 S10207C2) 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 Fi[28]}


 S10207C2 ::~S10207C2(){ note_dtor("S10207C2", this);}
void  S10207C2 ::v8(){vfunc_called(this, "_ZN8S10207C22v8Ev");}
void  S10207C2 ::v9(){vfunc_called(this, "_ZN8S10207C22v9Ev");}
void  S10207C2 ::v10(){vfunc_called(this, "_ZN8S10207C23v10Ev");}
void  S10207C2 ::v11(){vfunc_called(this, "_ZN8S10207C23v11Ev");}
void  S10207C2 ::v12(){vfunc_called(this, "_ZN8S10207C23v12Ev");}
void  S10207C2 ::v13(){vfunc_called(this, "_ZN8S10207C23v13Ev");}
void  S10207C2 ::v14(){vfunc_called(this, "_ZN8S10207C23v14Ev");}
void  S10207C2 ::v15(){vfunc_called(this, "_ZN8S10207C23v15Ev");}
void  S10207C2 ::v16(){vfunc_called(this, "_ZN8S10207C23v16Ev");}
void  S10207C2 ::v17(){vfunc_called(this, "_ZN8S10207C23v17Ev");}
void  S10207C2 ::v18(){vfunc_called(this, "_ZN8S10207C23v18Ev");}
void  S10207C2 ::v19(){vfunc_called(this, "_ZN8S10207C23v19Ev");}
void  S10207C2 ::v20(){vfunc_called(this, "_ZN8S10207C23v20Ev");}
void  S10207C2 ::v21(){vfunc_called(this, "_ZN8S10207C23v21Ev");}
void  S10207C2 ::v22(){vfunc_called(this, "_ZN8S10207C23v22Ev");}
void  S10207C2 ::v23(){vfunc_called(this, "_ZN8S10207C23v23Ev");}
void  S10207C2 ::v24(){vfunc_called(this, "_ZN8S10207C23v24Ev");}
void  S10207C2 ::v25(){vfunc_called(this, "_ZN8S10207C23v25Ev");}
void  S10207C2 ::v26(){vfunc_called(this, "_ZN8S10207C23v26Ev");}
void  S10207C2 ::v27(){vfunc_called(this, "_ZN8S10207C23v27Ev");}
void  S10207C2 ::v28(){vfunc_called(this, "_ZN8S10207C23v28Ev");}
void  S10207C2 ::v29(){vfunc_called(this, "_ZN8S10207C23v29Ev");}
void  S10207C2 ::v30(){vfunc_called(this, "_ZN8S10207C23v30Ev");}
void  S10207C2 ::v31(){vfunc_called(this, "_ZN8S10207C23v31Ev");}
void  S10207C2 ::v32(){vfunc_called(this, "_ZN8S10207C23v32Ev");}
S10207C2 ::S10207C2(){ note_ctor("S10207C2", this);} // tgen

static void Test_S10207C2()
{
  extern Class_Descriptor cd_S10207C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S10207C2, buf);
    S10207C2 *dp, &lv = *(dp=new (buf) S10207C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S10207C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10207C2)");
    check_field_offset(lv, s10207c2f0, ABISELECT(8,4), "S10207C2.s10207c2f0");
    test_class_info(&lv, &cd_S10207C2);
    dp->~S10207C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10207C2(Test_S10207C2, "S10207C2", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN8S10207C2C1Ev();
extern void _ZN8S10207C2D1Ev();
Name_Map name_map_S10207C2[] = {
  NSPAIR(_ZN8S10207C2C1Ev),
  NSPAIR(_ZN8S10207C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10207C2[];
extern void _ZN8S10207C2D1Ev();
extern void _ZN8S10207C2D0Ev();
extern void _ZN8S10207C22v8Ev();
extern void _ZN8S10207C22v9Ev();
extern void _ZN8S10207C23v10Ev();
extern void _ZN8S10207C23v11Ev();
extern void _ZN8S10207C23v12Ev();
extern void _ZN8S10207C23v13Ev();
extern void _ZN8S10207C23v14Ev();
extern void _ZN8S10207C23v15Ev();
extern void _ZN8S10207C23v16Ev();
extern void _ZN8S10207C23v17Ev();
extern void _ZN8S10207C23v18Ev();
extern void _ZN8S10207C23v19Ev();
extern void _ZN8S10207C23v20Ev();
extern void _ZN8S10207C23v21Ev();
extern void _ZN8S10207C23v22Ev();
extern void _ZN8S10207C23v23Ev();
extern void _ZN8S10207C23v24Ev();
extern void _ZN8S10207C23v25Ev();
extern void _ZN8S10207C23v26Ev();
extern void _ZN8S10207C23v27Ev();
extern void _ZN8S10207C23v28Ev();
extern void _ZN8S10207C23v29Ev();
extern void _ZN8S10207C23v30Ev();
extern void _ZN8S10207C23v31Ev();
extern void _ZN8S10207C23v32Ev();
static  VTBL_ENTRY vtc_S10207C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10207C2[0]),
  (VTBL_ENTRY)&_ZN8S10207C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10207C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10207C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10207C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v20Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v21Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v22Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v23Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v24Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v25Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v26Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v27Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v28Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v29Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v30Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v31Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v32Ev,
};
extern VTBL_ENTRY _ZTI8S10207C2[];
extern  VTBL_ENTRY _ZTV8S10207C2[];
Class_Descriptor cd_S10207C2 = {  "S10207C2", // class name
  0,0,//no base classes
  &(vtc_S10207C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI8S10207C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10207C2),29, //virtual function table var
  2, // 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  S10207C1  : S10207C2 {
  ::S1566C29 s10207c1f0;
  int s10207c1f1;
  void *s10207c1f2;
  virtual void  v1(); // _ZN8S10207C12v1Ev
  virtual void  v2(); // _ZN8S10207C12v2Ev
  virtual void  v3(); // _ZN8S10207C12v3Ev
  virtual void  v4(); // _ZN8S10207C12v4Ev
  virtual void  v5(); // _ZN8S10207C12v5Ev
  virtual void  v6(); // _ZN8S10207C12v6Ev
  virtual void  v7(); // _ZN8S10207C12v7Ev
  ~S10207C1(); // tgen
  S10207C1(); // tgen
};
//SIG(1 S10207C1) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fi[28]} v1 v2 v3 v4 v5 v6 v7 FC3{ BC4{ m Fp Fi[2]}} Fi Fp}


void  S10207C1 ::v1(){vfunc_called(this, "_ZN8S10207C12v1Ev");}
void  S10207C1 ::v2(){vfunc_called(this, "_ZN8S10207C12v2Ev");}
void  S10207C1 ::v3(){vfunc_called(this, "_ZN8S10207C12v3Ev");}
void  S10207C1 ::v4(){vfunc_called(this, "_ZN8S10207C12v4Ev");}
void  S10207C1 ::v5(){vfunc_called(this, "_ZN8S10207C12v5Ev");}
void  S10207C1 ::v6(){vfunc_called(this, "_ZN8S10207C12v6Ev");}
void  S10207C1 ::v7(){vfunc_called(this, "_ZN8S10207C12v7Ev");}
S10207C1 ::~S10207C1(){ note_dtor("S10207C1", this);} // tgen
S10207C1 ::S10207C1(){ note_ctor("S10207C1", this);} // tgen

static void Test_S10207C1()
{
  extern Class_Descriptor cd_S10207C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,35)];
    init_test(&cd_S10207C1, buf);
    S10207C1 *dp, &lv = *(dp=new (buf) S10207C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,136), "sizeof(S10207C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10207C1)");
    check_base_class_offset(lv, (S10207C2*), 0, "S10207C1");
    check_field_offset(lv, s10207c1f0, ABISELECT(120,116), "S10207C1.s10207c1f0");
    check_field_offset(lv, s10207c1f1, ABISELECT(136,128), "S10207C1.s10207c1f1");
    check_field_offset(lv, s10207c1f2, ABISELECT(144,132), "S10207C1.s10207c1f2");
    test_class_info(&lv, &cd_S10207C1);
    dp->~S10207C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10207C1(Test_S10207C1, "S10207C1", ABISELECT(152,136));

#else // __cplusplus

extern void _ZN8S10207C1C1Ev();
extern void _ZN8S10207C1D1Ev();
Name_Map name_map_S10207C1[] = {
  NSPAIR(_ZN8S10207C1C1Ev),
  NSPAIR(_ZN8S10207C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10207C2;
extern VTBL_ENTRY _ZTI8S10207C2[];
extern  VTBL_ENTRY _ZTV8S10207C2[];
static Base_Class bases_S10207C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10207C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10207C1[];
extern void _ZN8S10207C1D1Ev();
extern void _ZN8S10207C1D0Ev();
extern void _ZN8S10207C22v8Ev();
extern void _ZN8S10207C22v9Ev();
extern void _ZN8S10207C23v10Ev();
extern void _ZN8S10207C23v11Ev();
extern void _ZN8S10207C23v12Ev();
extern void _ZN8S10207C23v13Ev();
extern void _ZN8S10207C23v14Ev();
extern void _ZN8S10207C23v15Ev();
extern void _ZN8S10207C23v16Ev();
extern void _ZN8S10207C23v17Ev();
extern void _ZN8S10207C23v18Ev();
extern void _ZN8S10207C23v19Ev();
extern void _ZN8S10207C23v20Ev();
extern void _ZN8S10207C23v21Ev();
extern void _ZN8S10207C23v22Ev();
extern void _ZN8S10207C23v23Ev();
extern void _ZN8S10207C23v24Ev();
extern void _ZN8S10207C23v25Ev();
extern void _ZN8S10207C23v26Ev();
extern void _ZN8S10207C23v27Ev();
extern void _ZN8S10207C23v28Ev();
extern void _ZN8S10207C23v29Ev();
extern void _ZN8S10207C23v30Ev();
extern void _ZN8S10207C23v31Ev();
extern void _ZN8S10207C23v32Ev();
extern void _ZN8S10207C12v1Ev();
extern void _ZN8S10207C12v2Ev();
extern void _ZN8S10207C12v3Ev();
extern void _ZN8S10207C12v4Ev();
extern void _ZN8S10207C12v5Ev();
extern void _ZN8S10207C12v6Ev();
extern void _ZN8S10207C12v7Ev();
static  VTBL_ENTRY vtc_S10207C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10207C1[0]),
  (VTBL_ENTRY)&_ZN8S10207C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10207C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10207C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10207C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v20Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v21Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v22Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v23Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v24Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v25Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v26Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v27Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v28Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v29Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v30Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v31Ev,
  (VTBL_ENTRY)&_ZN8S10207C23v32Ev,
  (VTBL_ENTRY)&_ZN8S10207C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10207C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10207C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10207C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10207C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10207C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10207C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S10207C1[];
extern  VTBL_ENTRY _ZTV8S10207C1[];
Class_Descriptor cd_S10207C1 = {  "S10207C1", // class name
  bases_S10207C1, 1,
  &(vtc_S10207C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,136), // object size
  NSPAIRA(_ZTI8S10207C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10207C1),36, //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  S8973C2  {
  int s8973c2f0[28];
  virtual  ~S8973C2(); // _ZN7S8973C2D1Ev
  virtual void  v2(); // _ZN7S8973C22v2Ev
  virtual void  v3(); // _ZN7S8973C22v3Ev
  virtual void  v4(); // _ZN7S8973C22v4Ev
  virtual void  v5(); // _ZN7S8973C22v5Ev
  virtual void  v6(); // _ZN7S8973C22v6Ev
  virtual void  v7(); // _ZN7S8973C22v7Ev
  virtual void  v8(); // _ZN7S8973C22v8Ev
  virtual void  v9(); // _ZN7S8973C22v9Ev
  virtual void  v10(); // _ZN7S8973C23v10Ev
  virtual void  v11(); // _ZN7S8973C23v11Ev
  virtual void  v12(); // _ZN7S8973C23v12Ev
  virtual void  v13(); // _ZN7S8973C23v13Ev
  virtual void  v14(); // _ZN7S8973C23v14Ev
  virtual void  v15(); // _ZN7S8973C23v15Ev
  virtual void  v16(); // _ZN7S8973C23v16Ev
  virtual void  v17(); // _ZN7S8973C23v17Ev
  virtual void  v18(); // _ZN7S8973C23v18Ev
  virtual void  v19(); // _ZN7S8973C23v19Ev
  virtual void  v20(); // _ZN7S8973C23v20Ev
  virtual void  v21(); // _ZN7S8973C23v21Ev
  virtual void  v22(); // _ZN7S8973C23v22Ev
  virtual void  v23(); // _ZN7S8973C23v23Ev
  virtual void  v24(); // _ZN7S8973C23v24Ev
  virtual void  v25(); // _ZN7S8973C23v25Ev
  virtual void  v26(); // _ZN7S8973C23v26Ev
  S8973C2(); // tgen
};
//SIG(-1 S8973C2) 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 Fi[28]}


 S8973C2 ::~S8973C2(){ note_dtor("S8973C2", this);}
void  S8973C2 ::v2(){vfunc_called(this, "_ZN7S8973C22v2Ev");}
void  S8973C2 ::v3(){vfunc_called(this, "_ZN7S8973C22v3Ev");}
void  S8973C2 ::v4(){vfunc_called(this, "_ZN7S8973C22v4Ev");}
void  S8973C2 ::v5(){vfunc_called(this, "_ZN7S8973C22v5Ev");}
void  S8973C2 ::v6(){vfunc_called(this, "_ZN7S8973C22v6Ev");}
void  S8973C2 ::v7(){vfunc_called(this, "_ZN7S8973C22v7Ev");}
void  S8973C2 ::v8(){vfunc_called(this, "_ZN7S8973C22v8Ev");}
void  S8973C2 ::v9(){vfunc_called(this, "_ZN7S8973C22v9Ev");}
void  S8973C2 ::v10(){vfunc_called(this, "_ZN7S8973C23v10Ev");}
void  S8973C2 ::v11(){vfunc_called(this, "_ZN7S8973C23v11Ev");}
void  S8973C2 ::v12(){vfunc_called(this, "_ZN7S8973C23v12Ev");}
void  S8973C2 ::v13(){vfunc_called(this, "_ZN7S8973C23v13Ev");}
void  S8973C2 ::v14(){vfunc_called(this, "_ZN7S8973C23v14Ev");}
void  S8973C2 ::v15(){vfunc_called(this, "_ZN7S8973C23v15Ev");}
void  S8973C2 ::v16(){vfunc_called(this, "_ZN7S8973C23v16Ev");}
void  S8973C2 ::v17(){vfunc_called(this, "_ZN7S8973C23v17Ev");}
void  S8973C2 ::v18(){vfunc_called(this, "_ZN7S8973C23v18Ev");}
void  S8973C2 ::v19(){vfunc_called(this, "_ZN7S8973C23v19Ev");}
void  S8973C2 ::v20(){vfunc_called(this, "_ZN7S8973C23v20Ev");}
void  S8973C2 ::v21(){vfunc_called(this, "_ZN7S8973C23v21Ev");}
void  S8973C2 ::v22(){vfunc_called(this, "_ZN7S8973C23v22Ev");}
void  S8973C2 ::v23(){vfunc_called(this, "_ZN7S8973C23v23Ev");}
void  S8973C2 ::v24(){vfunc_called(this, "_ZN7S8973C23v24Ev");}
void  S8973C2 ::v25(){vfunc_called(this, "_ZN7S8973C23v25Ev");}
void  S8973C2 ::v26(){vfunc_called(this, "_ZN7S8973C23v26Ev");}
S8973C2 ::S8973C2(){ note_ctor("S8973C2", this);} // tgen

static void Test_S8973C2()
{
  extern Class_Descriptor cd_S8973C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S8973C2, buf);
    S8973C2 *dp, &lv = *(dp=new (buf) S8973C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S8973C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8973C2)");
    check_field_offset(lv, s8973c2f0, ABISELECT(8,4), "S8973C2.s8973c2f0");
    test_class_info(&lv, &cd_S8973C2);
    dp->~S8973C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8973C2(Test_S8973C2, "S8973C2", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN7S8973C2C1Ev();
extern void _ZN7S8973C2D1Ev();
Name_Map name_map_S8973C2[] = {
  NSPAIR(_ZN7S8973C2C1Ev),
  NSPAIR(_ZN7S8973C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8973C2[];
extern void _ZN7S8973C2D1Ev();
extern void _ZN7S8973C2D0Ev();
extern void _ZN7S8973C22v2Ev();
extern void _ZN7S8973C22v3Ev();
extern void _ZN7S8973C22v4Ev();
extern void _ZN7S8973C22v5Ev();
extern void _ZN7S8973C22v6Ev();
extern void _ZN7S8973C22v7Ev();
extern void _ZN7S8973C22v8Ev();
extern void _ZN7S8973C22v9Ev();
extern void _ZN7S8973C23v10Ev();
extern void _ZN7S8973C23v11Ev();
extern void _ZN7S8973C23v12Ev();
extern void _ZN7S8973C23v13Ev();
extern void _ZN7S8973C23v14Ev();
extern void _ZN7S8973C23v15Ev();
extern void _ZN7S8973C23v16Ev();
extern void _ZN7S8973C23v17Ev();
extern void _ZN7S8973C23v18Ev();
extern void _ZN7S8973C23v19Ev();
extern void _ZN7S8973C23v20Ev();
extern void _ZN7S8973C23v21Ev();
extern void _ZN7S8973C23v22Ev();
extern void _ZN7S8973C23v23Ev();
extern void _ZN7S8973C23v24Ev();
extern void _ZN7S8973C23v25Ev();
extern void _ZN7S8973C23v26Ev();
static  VTBL_ENTRY vtc_S8973C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8973C2[0]),
  (VTBL_ENTRY)&_ZN7S8973C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8973C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8973C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8973C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8973C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8973C22v7Ev,
  (VTBL_ENTRY)&_ZN7S8973C22v8Ev,
  (VTBL_ENTRY)&_ZN7S8973C22v9Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v24Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v25Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v26Ev,
};
extern VTBL_ENTRY _ZTI7S8973C2[];
extern  VTBL_ENTRY _ZTV7S8973C2[];
Class_Descriptor cd_S8973C2 = {  "S8973C2", // class name
  0,0,//no base classes
  &(vtc_S8973C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI7S8973C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8973C2),29, //virtual function table var
  2, // 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  S8973C1  : S8973C2 {
  ::S2831C24 s8973c1f0;
  ::S1566C29 s8973c1f1;
  ::S2831C24 s8973c1f2;
  virtual void  v1(); // _ZN7S8973C12v1Ev
  ~S8973C1(); // tgen
  S8973C1(); // tgen
};
//SIG(1 S8973C1) C1{ BC2{ vd 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 Fi[28]} v1 FC3{ BC4{ m FC5{ BC6{ m Fp Fi[2]}} Fp Fi}} FC7{ BC6} FC3}


void  S8973C1 ::v1(){vfunc_called(this, "_ZN7S8973C12v1Ev");}
S8973C1 ::~S8973C1(){ note_dtor("S8973C1", this);} // tgen
S8973C1 ::S8973C1(){ note_ctor("S8973C1", this);} // tgen

static void Test_S8973C1()
{
  extern Class_Descriptor cd_S8973C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,43)];
    init_test(&cd_S8973C1, buf);
    S8973C1 *dp, &lv = *(dp=new (buf) S8973C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,168), "sizeof(S8973C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8973C1)");
    check_base_class_offset(lv, (S8973C2*), 0, "S8973C1");
    check_field_offset(lv, s8973c1f0, ABISELECT(120,116), "S8973C1.s8973c1f0");
    check_field_offset(lv, s8973c1f1, ABISELECT(152,136), "S8973C1.s8973c1f1");
    check_field_offset(lv, s8973c1f2, ABISELECT(168,148), "S8973C1.s8973c1f2");
    test_class_info(&lv, &cd_S8973C1);
    dp->~S8973C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8973C1(Test_S8973C1, "S8973C1", ABISELECT(200,168));

#else // __cplusplus

extern void _ZN7S8973C1C1Ev();
extern void _ZN7S8973C1D1Ev();
Name_Map name_map_S8973C1[] = {
  NSPAIR(_ZN7S8973C1C1Ev),
  NSPAIR(_ZN7S8973C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8973C2;
extern VTBL_ENTRY _ZTI7S8973C2[];
extern  VTBL_ENTRY _ZTV7S8973C2[];
static Base_Class bases_S8973C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8973C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S8973C1[];
extern void _ZN7S8973C1D1Ev();
extern void _ZN7S8973C1D0Ev();
extern void _ZN7S8973C22v2Ev();
extern void _ZN7S8973C22v3Ev();
extern void _ZN7S8973C22v4Ev();
extern void _ZN7S8973C22v5Ev();
extern void _ZN7S8973C22v6Ev();
extern void _ZN7S8973C22v7Ev();
extern void _ZN7S8973C22v8Ev();
extern void _ZN7S8973C22v9Ev();
extern void _ZN7S8973C23v10Ev();
extern void _ZN7S8973C23v11Ev();
extern void _ZN7S8973C23v12Ev();
extern void _ZN7S8973C23v13Ev();
extern void _ZN7S8973C23v14Ev();
extern void _ZN7S8973C23v15Ev();
extern void _ZN7S8973C23v16Ev();
extern void _ZN7S8973C23v17Ev();
extern void _ZN7S8973C23v18Ev();
extern void _ZN7S8973C23v19Ev();
extern void _ZN7S8973C23v20Ev();
extern void _ZN7S8973C23v21Ev();
extern void _ZN7S8973C23v22Ev();
extern void _ZN7S8973C23v23Ev();
extern void _ZN7S8973C23v24Ev();
extern void _ZN7S8973C23v25Ev();
extern void _ZN7S8973C23v26Ev();
extern void _ZN7S8973C12v1Ev();
static  VTBL_ENTRY vtc_S8973C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8973C1[0]),
  (VTBL_ENTRY)&_ZN7S8973C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8973C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8973C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8973C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8973C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8973C22v7Ev,
  (VTBL_ENTRY)&_ZN7S8973C22v8Ev,
  (VTBL_ENTRY)&_ZN7S8973C22v9Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v24Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v25Ev,
  (VTBL_ENTRY)&_ZN7S8973C23v26Ev,
  (VTBL_ENTRY)&_ZN7S8973C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8973C1[];
extern  VTBL_ENTRY _ZTV7S8973C1[];
Class_Descriptor cd_S8973C1 = {  "S8973C1", // class name
  bases_S8973C1, 1,
  &(vtc_S8973C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,168), // object size
  NSPAIRA(_ZTI7S8973C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8973C1),30, //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  S2833C7  : S3600C29_nt , virtual S3600C19 {
  ::S19426C9_nt s2833c7f0;
  ~S2833C7(); // tgen
  S2833C7(); // tgen
};
//SIG(-1 S2833C7) C1{ BC2{ m Fp} VBC3{ m} FU4{ m}}


S2833C7 ::~S2833C7(){ note_dtor("S2833C7", this);} // tgen
S2833C7 ::S2833C7(){ note_ctor("S2833C7", this);} // tgen

static void Test_S2833C7()
{
  extern Class_Descriptor cd_S2833C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S2833C7, buf);
    S2833C7 *dp, &lv = *(dp=new (buf) S2833C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S2833C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2833C7)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S2833C7");
    check_base_class_offset(lv, (S3600C19*), 0, "S2833C7");
    check_field_offset(lv, s2833c7f0, ABISELECT(16,8), "S2833C7.s2833c7f0");
    test_class_info(&lv, &cd_S2833C7);
    dp->~S2833C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2833C7(Test_S2833C7, "S2833C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S2833C7C1Ev();
extern void _ZN7S2833C7D1Ev();
Name_Map name_map_S2833C7[] = {
  NSPAIR(_ZN7S2833C7C1Ev),
  NSPAIR(_ZN7S2833C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S2833C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2833C7[];
static  VTBL_ENTRY vtc_S2833C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C7[0]),
};
extern VTBL_ENTRY _ZTV7S2833C7[];
static  VTT_ENTRY vtt_S2833C7[] = {
  {&(_ZTV7S2833C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2833C7[];
extern  VTBL_ENTRY _ZTV7S2833C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C7[];
Class_Descriptor cd_S2833C7 = {  "S2833C7", // class name
  bases_S2833C7, 2,
  &(vtc_S2833C7[0]), // expected_vtbl_contents
  &(vtt_S2833C7[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S2833C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2833C7),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2833C7),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  S2833C6  : virtual S3600C19 , virtual S2833C7 {
  int s2833c6f0;
  ~S2833C6(); // tgen
  S2833C6(); // tgen
};
//SIG(-1 S2833C6) C1{ VBC2{ m} VBC3{ BC4{ m Fp} VBC2 FU5{ m}} Fi}


S2833C6 ::~S2833C6(){ note_dtor("S2833C6", this);} // tgen
S2833C6 ::S2833C6(){ note_ctor("S2833C6", this);} // tgen

static void Test_S2833C6()
{
  extern Class_Descriptor cd_S2833C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S2833C6, buf);
    S2833C6 *dp, &lv = *(dp=new (buf) S2833C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S2833C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2833C6)");
    check_base_class_offset(lv, (S3600C19*), 0, "S2833C6");
    check_base_class_offset(lv, (S3600C19*)(S2833C7*), 0, "S2833C6");
    check_base_class_offset(lv, (S3600C29_nt*)(S2833C7*), ABISELECT(24,12), "S2833C6");
    check_base_class_offset(lv, (S2833C7*), ABISELECT(16,8), "S2833C6");
    check_field_offset(lv, s2833c6f0, ABISELECT(8,4), "S2833C6.s2833c6f0");
    test_class_info(&lv, &cd_S2833C6);
    dp->~S2833C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2833C6(Test_S2833C6, "S2833C6", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S2833C6C1Ev();
extern void _ZN7S2833C6D1Ev();
Name_Map name_map_S2833C6[] = {
  NSPAIR(_ZN7S2833C6C1Ev),
  NSPAIR(_ZN7S2833C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2833C7;
extern VTBL_ENTRY _ZTI7S2833C7[];
extern  VTBL_ENTRY _ZTV7S2833C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C7[];
static Base_Class bases_S2833C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2833C7,    ABISELECT(16,8), //bcp->offset
    4, //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 _ZTI7S2833C6[];
static  VTBL_ENTRY vtc_S2833C6[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C6[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2833C6[0]),
};
extern VTBL_ENTRY _ZTV7S2833C6[];
static  VTBL_ENTRY _tg__ZTV7S2833C7__7S2833C6[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C7[0]),
};
static  VTT_ENTRY vtt_S2833C6[] = {
  {&(_ZTV7S2833C6[4]),  4,7},
  {&(_ZTV7S2833C6[7]),  7,7},
  {&(_tg__ZTV7S2833C7__7S2833C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2833C6[];
extern  VTBL_ENTRY _ZTV7S2833C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C6[];
Class_Descriptor cd_S2833C6 = {  "S2833C6", // class name
  bases_S2833C6, 3,
  &(vtc_S2833C6[0]), // expected_vtbl_contents
  &(vtt_S2833C6[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S2833C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2833C6),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2833C6),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  S2833C10  : virtual S3600C29_nt , S3600C19 {
  ~S2833C10(); // tgen
  S2833C10(); // tgen
};
//SIG(-1 S2833C10) C1{ VBC2{ m Fp} BC3{ m}}


S2833C10 ::~S2833C10(){ note_dtor("S2833C10", this);} // tgen
S2833C10 ::S2833C10(){ note_ctor("S2833C10", this);} // tgen

static void Test_S2833C10()
{
  extern Class_Descriptor cd_S2833C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2833C10, buf);
    S2833C10 *dp, &lv = *(dp=new (buf) S2833C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2833C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2833C10)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S2833C10");
    check_base_class_offset(lv, (S3600C19*), 0, "S2833C10");
    test_class_info(&lv, &cd_S2833C10);
    dp->~S2833C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2833C10(Test_S2833C10, "S2833C10", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S2833C10C1Ev();
extern void _ZN8S2833C10D1Ev();
Name_Map name_map_S2833C10[] = {
  NSPAIR(_ZN8S2833C10C1Ev),
  NSPAIR(_ZN8S2833C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S2833C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S2833C10[];
static  VTBL_ENTRY vtc_S2833C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C10[0]),
};
extern VTBL_ENTRY _ZTV8S2833C10[];
static  VTT_ENTRY vtt_S2833C10[] = {
  {&(_ZTV8S2833C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2833C10[];
extern  VTBL_ENTRY _ZTV8S2833C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C10[];
Class_Descriptor cd_S2833C10 = {  "S2833C10", // class name
  bases_S2833C10, 2,
  &(vtc_S2833C10[0]), // expected_vtbl_contents
  &(vtt_S2833C10[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S2833C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2833C10),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2833C10),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  S2833C5  : S2833C6 , S2833C10 {
  ::S3600C19 s2833c5f0;
  ~S2833C5(); // tgen
  S2833C5(); // tgen
};
//SIG(-1 S2833C5) C1{ BC2{ VBC3{ m} VBC4{ BC5{ m Fp} VBC3 FU6{ m}} Fi} BC7{ VBC5 BC3} FC3}


S2833C5 ::~S2833C5(){ note_dtor("S2833C5", this);} // tgen
S2833C5 ::S2833C5(){ note_ctor("S2833C5", this);} // tgen

static void Test_S2833C5()
{
  extern Class_Descriptor cd_S2833C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S2833C5, buf);
    S2833C5 *dp, &lv = *(dp=new (buf) S2833C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S2833C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2833C5)");
    check_base_class_offset(lv, (S3600C19*)(S2833C6*), 0, "S2833C5");
    check_base_class_offset(lv, (S3600C19*)(S2833C7*), 0, "S2833C5");
    check_base_class_offset(lv, (S3600C29_nt*)(S2833C7*), ABISELECT(40,20), "S2833C5");
    check_base_class_offset(lv, (S2833C7*)(S2833C6*), ABISELECT(32,16), "S2833C5");
    check_base_class_offset(lv, (S2833C6*), 0, "S2833C5");
    check_base_class_offset(lv, (S3600C29_nt*)(S2833C10*), ABISELECT(56,28), "S2833C5");
    check_base_class_offset(lv, (S3600C19*)(S2833C10*), ABISELECT(16,8), "S2833C5");
    check_base_class_offset(lv, (S2833C10*), ABISELECT(16,8), "S2833C5");
    check_field_offset(lv, s2833c5f0, ABISELECT(24,12), "S2833C5.s2833c5f0");
    test_class_info(&lv, &cd_S2833C5);
    dp->~S2833C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2833C5(Test_S2833C5, "S2833C5", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S2833C5C1Ev();
extern void _ZN7S2833C5D1Ev();
Name_Map name_map_S2833C5[] = {
  NSPAIR(_ZN7S2833C5C1Ev),
  NSPAIR(_ZN7S2833C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2833C7;
extern VTBL_ENTRY _ZTI7S2833C7[];
extern  VTBL_ENTRY _ZTV7S2833C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C7[];
extern Class_Descriptor cd_S2833C6;
extern VTBL_ENTRY _ZTI7S2833C6[];
extern  VTBL_ENTRY _ZTV7S2833C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2833C10;
extern VTBL_ENTRY _ZTI8S2833C10[];
extern  VTBL_ENTRY _ZTV8S2833C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C10[];
static Base_Class bases_S2833C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2833C7,    ABISELECT(32,16), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2833C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C29_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S2833C10,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI7S2833C5[];
static  VTBL_ENTRY vtc_S2833C5[] = {
  ABISELECT(56,28),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C5[0]),
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2833C5[0]),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2833C5[0]),
};
extern VTBL_ENTRY _ZTV7S2833C5[];
static  VTBL_ENTRY _tg__ZTV7S2833C6__7S2833C5[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2833C7__7S2833C6__7S2833C5[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2833C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C10__7S2833C5[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2833C7__7S2833C5[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C7[0]),
};
static  VTT_ENTRY vtt_S2833C5[] = {
  {&(_ZTV7S2833C5[5]),  5,11},
  {&(_tg__ZTV7S2833C6__7S2833C5[4]),  4,4},
  {&(_tg__ZTV7S2833C7__7S2833C6__7S2833C5[3]),  3,3},
  {&(_tg__ZTV8S2833C10__7S2833C5[3]),  3,3},
  {&(_ZTV7S2833C5[11]),  11,11},
  {&(_ZTV7S2833C5[8]),  8,11},
  {&(_tg__ZTV7S2833C7__7S2833C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2833C5[];
extern  VTBL_ENTRY _ZTV7S2833C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C5[];
Class_Descriptor cd_S2833C5 = {  "S2833C5", // class name
  bases_S2833C5, 7,
  &(vtc_S2833C5[0]), // expected_vtbl_contents
  &(vtt_S2833C5[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S2833C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2833C5),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2833C5),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  S2833C12  : S3600C19 , S3600C29_nt {
};
//SIG(-1 S2833C12) C1{ BC2{ m} BC3{ m Fp}}



static void Test_S2833C12()
{
  extern Class_Descriptor cd_S2833C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2833C12, buf);
    S2833C12 &lv = *(new (buf) S2833C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2833C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2833C12)");
    check_base_class_offset(lv, (S3600C19*), 0, "S2833C12");
    check_base_class_offset(lv, (S3600C29_nt*), 0, "S2833C12");
    test_class_info(&lv, &cd_S2833C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2833C12(Test_S2833C12, "S2833C12", ABISELECT(8,4));

#else // __cplusplus

extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S2833C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3600C29_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 _ZTI8S2833C12[];
Class_Descriptor cd_S2833C12 = {  "S2833C12", // class name
  bases_S2833C12, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2833C12),ABISELECT(56,32), //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  S2833C11  : virtual S2833C12 , virtual S2833C10 , S3600C29_nt {
  __tsi64 s2833c11f0[8];
  ~S2833C11(); // tgen
  S2833C11(); // tgen
};
//SIG(-1 S2833C11) C1{ VBC2{ BC3{ m} BC4{ m Fp}} VBC5{ VBC4 BC3} BC4 FL[8]}


S2833C11 ::~S2833C11(){ note_dtor("S2833C11", this);} // tgen
S2833C11 ::S2833C11(){ note_ctor("S2833C11", this);} // tgen

static void Test_S2833C11()
{
  extern Class_Descriptor cd_S2833C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,21)];
    init_test(&cd_S2833C11, buf);
    S2833C11 *dp, &lv = *(dp=new (buf) S2833C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,80), "sizeof(S2833C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2833C11)");
    check_base_class_offset(lv, (S3600C19*)(S2833C12*), ABISELECT(80,72), "S2833C11");
    check_base_class_offset(lv, (S3600C29_nt*)(S2833C12*), ABISELECT(80,72), "S2833C11");
    check_base_class_offset(lv, (S2833C12*), ABISELECT(80,72), "S2833C11");
    check_base_class_offset(lv, (S3600C29_nt*)(S2833C10*), ABISELECT(88,76), "S2833C11");
    check_base_class_offset(lv, (S3600C19*)(S2833C10*), 0, "S2833C11");
    check_base_class_offset(lv, (S2833C10*), 0, "S2833C11");
    /*is_ambiguous_... S2833C11::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S2833C11");
    check_field_offset(lv, s2833c11f0, ABISELECT(16,8), "S2833C11.s2833c11f0");
    test_class_info(&lv, &cd_S2833C11);
    dp->~S2833C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2833C11(Test_S2833C11, "S2833C11", ABISELECT(96,80));

#else // __cplusplus

extern void _ZN8S2833C11C1Ev();
extern void _ZN8S2833C11D1Ev();
Name_Map name_map_S2833C11[] = {
  NSPAIR(_ZN8S2833C11C1Ev),
  NSPAIR(_ZN8S2833C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2833C12;
extern VTBL_ENTRY _ZTI8S2833C12[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2833C10;
extern VTBL_ENTRY _ZTI8S2833C10[];
extern  VTBL_ENTRY _ZTV8S2833C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S2833C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S2833C12,    ABISELECT(80,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_S3600C29_nt,    ABISELECT(88,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2833C10,    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},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2833C11[];
static  VTBL_ENTRY vtc_S2833C11[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C11[0]),
};
extern VTBL_ENTRY _ZTV8S2833C11[];
static  VTBL_ENTRY _tg__ZTV8S2833C10__8S2833C11[] = {
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C10[0]),
};
static  VTT_ENTRY vtt_S2833C11[] = {
  {&(_ZTV8S2833C11[5]),  5,5},
  {&(_ZTV8S2833C11[5]),  5,5},
  {&(_tg__ZTV8S2833C10__8S2833C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2833C11[];
extern  VTBL_ENTRY _ZTV8S2833C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C11[];
Class_Descriptor cd_S2833C11 = {  "S2833C11", // class name
  bases_S2833C11, 7,
  &(vtc_S2833C11[0]), // expected_vtbl_contents
  &(vtt_S2833C11[0]), // expected_vtt_contents
  ABISELECT(96,80), // object size
  NSPAIRA(_ZTI8S2833C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2833C11),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2833C11),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  S2833C4  : virtual S3600C19 , S2833C5 , S2833C10 , virtual S2833C11 {
  virtual  ~S2833C4(); // _ZN7S2833C4D2Ev
  S2833C4(); // tgen
};
//SIG(-1 S2833C4) C1{ VBC2{ m} BC3{ BC4{ VBC2 VBC5{ BC6{ m Fp} VBC2 FU7{ m}} Fi} BC8{ VBC6 BC2} FC2} BC8 VBC9{ VBC10{ BC2 BC6} VBC8 BC6 FL[8]} vd}


 S2833C4 ::~S2833C4(){ note_dtor("S2833C4", this);}
S2833C4 ::S2833C4(){ note_ctor("S2833C4", this);} // tgen

static void Test_S2833C4()
{
  extern Class_Descriptor cd_S2833C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S2833C4, buf);
    S2833C4 *dp, &lv = *(dp=new (buf) S2833C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S2833C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2833C4)");
    /*is_ambiguous_... S2833C4::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), 0, "S2833C4");
    check_base_class_offset(lv, (S3600C19*)(S2833C6*)(S2833C5*), 0, "S2833C4");
    check_base_class_offset(lv, (S3600C19*)(S2833C7*), 0, "S2833C4");
    check_base_class_offset(lv, (S3600C29_nt*)(S2833C7*), ABISELECT(48,24), "S2833C4");
    check_base_class_offset(lv, (S2833C7*)(S2833C6*)(S2833C5*), ABISELECT(40,20), "S2833C4");
    check_base_class_offset(lv, (S2833C6*)(S2833C5*), 0, "S2833C4");
    check_base_class_offset(lv, (S3600C29_nt*)(S2833C10*)(S2833C5*), ABISELECT(64,32), "S2833C4");
    /*is_ambiguous_... S2833C4::S2833C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2833C10*), ABISELECT(64,32), "S2833C4");
    /*is_ambiguous_... S2833C4::S2833C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2833C10*), ABISELECT(64,32), "S2833C4");
    check_base_class_offset(lv, (S3600C19*)(S2833C10*)(S2833C5*), ABISELECT(16,8), "S2833C4");
    check_base_class_offset(lv, (S2833C10*)(S2833C5*), ABISELECT(16,8), "S2833C4");
    check_base_class_offset(lv, (S2833C5*), 0, "S2833C4");
    /*is_ambiguous_... S2833C4::S2833C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2833C10*), ABISELECT(32,16), "S2833C4");
    /*is_ambiguous_... S2833C4::S2833C10 */ AMB_check_base_class_offset(lv, (S2833C10*), ABISELECT(32,16), "S2833C4");
    check_base_class_offset(lv, (S3600C19*)(S2833C12*), ABISELECT(152,108), "S2833C4");
    check_base_class_offset(lv, (S3600C29_nt*)(S2833C12*), ABISELECT(152,108), "S2833C4");
    check_base_class_offset(lv, (S2833C12*)(S2833C11*), ABISELECT(152,108), "S2833C4");
    /*is_ambiguous_... S2833C4::S2833C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2833C10*), ABISELECT(72,36), "S2833C4");
    check_base_class_offset(lv, (S2833C10*)(S2833C11*), ABISELECT(72,36), "S2833C4");
    /*is_ambiguous_... S2833C11::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2833C11*), ABISELECT(80,40), "S2833C4");
    check_base_class_offset(lv, (S2833C11*), ABISELECT(72,36), "S2833C4");
    test_class_info(&lv, &cd_S2833C4);
    dp->~S2833C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2833C4(Test_S2833C4, "S2833C4", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN7S2833C4C1Ev();
extern void _ZN7S2833C4D2Ev();
Name_Map name_map_S2833C4[] = {
  NSPAIR(_ZN7S2833C4C1Ev),
  NSPAIR(_ZN7S2833C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2833C7;
extern VTBL_ENTRY _ZTI7S2833C7[];
extern  VTBL_ENTRY _ZTV7S2833C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C7[];
extern Class_Descriptor cd_S2833C6;
extern VTBL_ENTRY _ZTI7S2833C6[];
extern  VTBL_ENTRY _ZTV7S2833C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2833C10;
extern VTBL_ENTRY _ZTI8S2833C10[];
extern  VTBL_ENTRY _ZTV8S2833C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C10[];
extern Class_Descriptor cd_S2833C5;
extern VTBL_ENTRY _ZTI7S2833C5[];
extern  VTBL_ENTRY _ZTV7S2833C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C5[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2833C10;
extern VTBL_ENTRY _ZTI8S2833C10[];
extern  VTBL_ENTRY _ZTV8S2833C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2833C12;
extern VTBL_ENTRY _ZTI8S2833C12[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2833C10;
extern VTBL_ENTRY _ZTI8S2833C10[];
extern  VTBL_ENTRY _ZTV8S2833C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2833C11;
extern VTBL_ENTRY _ZTI8S2833C11[];
extern  VTBL_ENTRY _ZTV8S2833C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C11[];
static Base_Class bases_S2833C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2833C7,    ABISELECT(40,20), //bcp->offset
    16, //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
    3, //immediately_derived
  0, 1},
  {&cd_S2833C6,    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
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S2833C10,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2833C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2833C10,    ABISELECT(32,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2833C12,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2833C10,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2833C11,    ABISELECT(72,36), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2833C4[];
extern void _ZN7S2833C4D1Ev();
extern void _ZN7S2833C4D0Ev();
static  VTBL_ENTRY vtc_S2833C4[] = {
  ABISELECT(72,36),
  ABISELECT(152,108),
  ABISELECT(72,36),
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C4[0]),
  (VTBL_ENTRY)&_ZN7S2833C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2833C4D0Ev,
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2833C4[0]),
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2833C4[0]),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S2833C4[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S2833C4[0]),
};
extern VTBL_ENTRY _ZTV7S2833C4[];
static  VTBL_ENTRY _tg__ZTV7S2833C5__7S2833C4[] = {
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2833C67S2833C5__7S2833C4[] = {
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2833C7__7S2833C67S2833C5__7S2833C4[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S2833C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C107S2833C5__7S2833C4[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2833C7__7S2833C5__7S2833C4[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S2833C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C10__7S2833C5__7S2833C4[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2833C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C10__A__7S2833C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2833C7__7S2833C4[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C11__7S2833C4[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C10__A2__7S2833C4[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C10[0]),
};
static  VTT_ENTRY vtt_S2833C4[] = {
  {&(_ZTV7S2833C4[8]),  8,24},
  {&(_tg__ZTV7S2833C5__7S2833C4[5]),  5,5},
  {&(_tg__ZTV7S2833C67S2833C5__7S2833C4[4]),  4,4},
  {&(_tg__ZTV7S2833C7__7S2833C67S2833C5__7S2833C4[3]),  3,3},
  {&(_tg__ZTV8S2833C107S2833C5__7S2833C4[3]),  3,3},
  {&(_tg__ZTV7S2833C7__7S2833C5__7S2833C4[3]),  3,3},
  {&(_tg__ZTV8S2833C10__7S2833C5__7S2833C4[3]),  3,3},
  {&(_tg__ZTV8S2833C10__A__7S2833C4[3]),  3,3},
  {&(_ZTV7S2833C4[19]),  19,24},
  {&(_ZTV7S2833C4[13]),  13,24},
  {&(_ZTV7S2833C4[16]),  16,24},
  {&(_ZTV7S2833C4[24]),  24,24},
  {&(_ZTV7S2833C4[24]),  24,24},
  {&(_tg__ZTV7S2833C7__7S2833C4[3]),  3,3},
  {&(_tg__ZTV8S2833C11__7S2833C4[5]),  5,5},
  {&(_tg__ZTV8S2833C11__7S2833C4[5]),  5,5},
  {&(_tg__ZTV8S2833C10__A2__7S2833C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2833C4[];
extern  VTBL_ENTRY _ZTV7S2833C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C4[];
Class_Descriptor cd_S2833C4 = {  "S2833C4", // class name
  bases_S2833C4, 17,
  &(vtc_S2833C4[0]), // expected_vtbl_contents
  &(vtt_S2833C4[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI7S2833C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2833C4),24, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2833C4),17, //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  S2833C13  : virtual S3600C29_nt {
  virtual  ~S2833C13(); // _ZN8S2833C13D2Ev
  S2833C13(); // tgen
};
//SIG(-1 S2833C13) C1{ VBC2{ m Fp} vd}


 S2833C13 ::~S2833C13(){ note_dtor("S2833C13", this);}
S2833C13 ::S2833C13(){ note_ctor("S2833C13", this);} // tgen

static void Test_S2833C13()
{
  extern Class_Descriptor cd_S2833C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2833C13, buf);
    S2833C13 *dp, &lv = *(dp=new (buf) S2833C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2833C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2833C13)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S2833C13");
    test_class_info(&lv, &cd_S2833C13);
    dp->~S2833C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2833C13(Test_S2833C13, "S2833C13", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S2833C13C1Ev();
extern void _ZN8S2833C13D2Ev();
Name_Map name_map_S2833C13[] = {
  NSPAIR(_ZN8S2833C13C1Ev),
  NSPAIR(_ZN8S2833C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S2833C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2833C13[];
extern void _ZN8S2833C13D1Ev();
extern void _ZN8S2833C13D0Ev();
static  VTBL_ENTRY vtc_S2833C13[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C13[0]),
  (VTBL_ENTRY)&_ZN8S2833C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2833C13D0Ev,
};
extern VTBL_ENTRY _ZTV8S2833C13[];
static  VTT_ENTRY vtt_S2833C13[] = {
  {&(_ZTV8S2833C13[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2833C13[];
extern  VTBL_ENTRY _ZTV8S2833C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C13[];
Class_Descriptor cd_S2833C13 = {  "S2833C13", // class name
  bases_S2833C13, 1,
  &(vtc_S2833C13[0]), // expected_vtbl_contents
  &(vtt_S2833C13[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S2833C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S2833C13),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2833C13),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  S2833C2  : S3600C19 , S2833C4 , S2833C13 {
  virtual  ~S2833C2(); // _ZN7S2833C2D2Ev
  S2833C2(); // tgen
};
//SIG(-1 S2833C2) C1{ BC2{ m} BC3{ VBC2 BC4{ BC5{ VBC2 VBC6{ BC7{ m Fp} VBC2 FU8{ m}} Fi} BC9{ VBC7 BC2} FC2} BC9 VBC10{ VBC11{ BC2 BC7} VBC9 BC7 FL[8]} vd} BC12{ VBC7 vd} vd}


 S2833C2 ::~S2833C2(){ note_dtor("S2833C2", this);}
S2833C2 ::S2833C2(){ note_ctor("S2833C2", this);} // tgen

static void Test_S2833C2()
{
  extern Class_Descriptor cd_S2833C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,30)];
    init_test(&cd_S2833C2, buf);
    S2833C2 *dp, &lv = *(dp=new (buf) S2833C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,116), "sizeof(S2833C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2833C2)");
    /*is_ambiguous_... S2833C2::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), 0, "S2833C2");
    /*is_ambiguous_... S2833C4::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2833C4*), ABISELECT(48,24), "S2833C2");
    check_base_class_offset(lv, (S3600C19*)(S2833C6*)(S2833C5*)(S2833C4*), ABISELECT(48,24), "S2833C2");
    check_base_class_offset(lv, (S3600C19*)(S2833C7*), ABISELECT(48,24), "S2833C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S2833C7*), ABISELECT(56,28), "S2833C2");
    check_base_class_offset(lv, (S2833C7*)(S2833C6*)(S2833C5*)(S2833C4*), ABISELECT(48,24), "S2833C2");
    check_base_class_offset(lv, (S2833C6*)(S2833C5*)(S2833C4*), 0, "S2833C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S2833C10*)(S2833C5*)(S2833C4*), ABISELECT(72,36), "S2833C2");
    /*is_ambiguous_... S2833C4::S2833C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2833C10*)(S2833C4*), ABISELECT(72,36), "S2833C2");
    /*is_ambiguous_... S2833C2::S2833C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2833C10*), ABISELECT(72,36), "S2833C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S2833C13*), ABISELECT(72,36), "S2833C2");
    check_base_class_offset(lv, (S3600C19*)(S2833C10*)(S2833C5*)(S2833C4*), ABISELECT(16,8), "S2833C2");
    check_base_class_offset(lv, (S2833C10*)(S2833C5*)(S2833C4*), ABISELECT(16,8), "S2833C2");
    check_base_class_offset(lv, (S2833C5*)(S2833C4*), 0, "S2833C2");
    /*is_ambiguous_... S2833C4::S2833C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2833C10*)(S2833C4*), ABISELECT(32,16), "S2833C2");
    /*is_ambiguous_... S2833C4::S2833C10 */ AMB_check_base_class_offset(lv, (S2833C10*)(S2833C4*), ABISELECT(32,16), "S2833C2");
    check_base_class_offset(lv, (S3600C19*)(S2833C12*), ABISELECT(160,112), "S2833C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S2833C12*), ABISELECT(160,112), "S2833C2");
    check_base_class_offset(lv, (S2833C12*)(S2833C11*), ABISELECT(160,112), "S2833C2");
    /*is_ambiguous_... S2833C2::S2833C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2833C10*), ABISELECT(80,40), "S2833C2");
    check_base_class_offset(lv, (S2833C10*)(S2833C11*), ABISELECT(80,40), "S2833C2");
    /*is_ambiguous_... S2833C11::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2833C11*), ABISELECT(88,44), "S2833C2");
    check_base_class_offset(lv, (S2833C11*)(S2833C4*), ABISELECT(80,40), "S2833C2");
    check_base_class_offset(lv, (S2833C4*), 0, "S2833C2");
    check_base_class_offset(lv, (S2833C13*), ABISELECT(40,20), "S2833C2");
    test_class_info(&lv, &cd_S2833C2);
    dp->~S2833C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2833C2(Test_S2833C2, "S2833C2", ABISELECT(168,116));

#else // __cplusplus

extern void _ZN7S2833C2C1Ev();
extern void _ZN7S2833C2D2Ev();
Name_Map name_map_S2833C2[] = {
  NSPAIR(_ZN7S2833C2C1Ev),
  NSPAIR(_ZN7S2833C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2833C7;
extern VTBL_ENTRY _ZTI7S2833C7[];
extern  VTBL_ENTRY _ZTV7S2833C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C7[];
extern Class_Descriptor cd_S2833C6;
extern VTBL_ENTRY _ZTI7S2833C6[];
extern  VTBL_ENTRY _ZTV7S2833C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2833C10;
extern VTBL_ENTRY _ZTI8S2833C10[];
extern  VTBL_ENTRY _ZTV8S2833C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C10[];
extern Class_Descriptor cd_S2833C5;
extern VTBL_ENTRY _ZTI7S2833C5[];
extern  VTBL_ENTRY _ZTV7S2833C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C5[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2833C10;
extern VTBL_ENTRY _ZTI8S2833C10[];
extern  VTBL_ENTRY _ZTV8S2833C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2833C12;
extern VTBL_ENTRY _ZTI8S2833C12[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2833C10;
extern VTBL_ENTRY _ZTI8S2833C10[];
extern  VTBL_ENTRY _ZTV8S2833C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2833C11;
extern VTBL_ENTRY _ZTI8S2833C11[];
extern  VTBL_ENTRY _ZTV8S2833C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C11[];
extern Class_Descriptor cd_S2833C4;
extern VTBL_ENTRY _ZTI7S2833C4[];
extern  VTBL_ENTRY _ZTV7S2833C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C4[];
extern Class_Descriptor cd_S2833C13;
extern VTBL_ENTRY _ZTI8S2833C13[];
extern  VTBL_ENTRY _ZTV8S2833C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C13[];
static Base_Class bases_S2833C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3600C19,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2833C7,    ABISELECT(48,24), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2833C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S2833C10,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2833C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2833C10,    ABISELECT(32,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(160,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
    13, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(160,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
    13, //immediately_derived
  0, 0},
  {&cd_S2833C12,    ABISELECT(160,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
    17, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2833C10,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2833C11,    ABISELECT(80,40), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S2833C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2833C13,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2833C2[];
extern void _ZN7S2833C2D1Ev();
extern void _ZN7S2833C2D0Ev();
extern void ABISELECT(_ZThn40_N7S2833C2D1Ev,_ZThn20_N7S2833C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2833C2D0Ev,_ZThn20_N7S2833C2D0Ev)();
static  VTBL_ENTRY vtc_S2833C2[] = {
  ABISELECT(80,40),
  ABISELECT(160,112),
  ABISELECT(80,40),
  ABISELECT(72,36),
  ABISELECT(48,24),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C2[0]),
  (VTBL_ENTRY)&_ZN7S2833C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2833C2D0Ev,
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2833C2[0]),
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2833C2[0]),
  ABISELECT(32,16),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S2833C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2833C2D1Ev,_ZThn20_N7S2833C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2833C2D0Ev,_ZThn20_N7S2833C2D0Ev),
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S2833C2[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S2833C2[0]),
};
extern VTBL_ENTRY _ZTV7S2833C2[];
extern void _ZN7S2833C4D1Ev();
extern void _ZN7S2833C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2833C4__7S2833C2[] = {
  ABISELECT(80,40),
  ABISELECT(160,112),
  ABISELECT(80,40),
  ABISELECT(72,36),
  ABISELECT(48,24),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C4[0]),
  (VTBL_ENTRY)&_ZN7S2833C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2833C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2833C57S2833C4__7S2833C2[] = {
  ABISELECT(72,36),
  ABISELECT(48,24),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2833C67S2833C57S2833C4__7S2833C2[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2833C7__7S2833C67S2833C57S2833C4__7S2833C2[] = {
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S2833C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C107S2833C57S2833C4__7S2833C2[] = {
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2833C7__7S2833C57S2833C4__7S2833C2[] = {
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S2833C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C10__7S2833C57S2833C4__7S2833C2[] = {
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2833C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C107S2833C4__A1__7S2833C2[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2833C7__7S2833C4__7S2833C2[] = {
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S2833C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C107S2833C5__7S2833C4__7S2833C2[] = {
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2833C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C10__A__7S2833C4__7S2833C2[] = {
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2833C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C11__7S2833C4__7S2833C2[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S2833C4[0]),
};
extern void _ZN8S2833C13D1Ev();
extern void _ZN8S2833C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2833C13__7S2833C2[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C13[0]),
  (VTBL_ENTRY)&_ZN8S2833C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2833C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2833C7__7S2833C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C11__7S2833C2[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C10__A2__7S2833C2[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C10[0]),
};
static  VTT_ENTRY vtt_S2833C2[] = {
  {&(_ZTV7S2833C2[8]),  8,29},
  {&(_tg__ZTV7S2833C4__7S2833C2[8]),  8,10},
  {&(_tg__ZTV7S2833C57S2833C4__7S2833C2[5]),  5,5},
  {&(_tg__ZTV7S2833C67S2833C57S2833C4__7S2833C2[4]),  4,4},
  {&(_tg__ZTV7S2833C7__7S2833C67S2833C57S2833C4__7S2833C2[3]),  3,3},
  {&(_tg__ZTV8S2833C107S2833C57S2833C4__7S2833C2[3]),  3,3},
  {&(_tg__ZTV7S2833C7__7S2833C57S2833C4__7S2833C2[3]),  3,3},
  {&(_tg__ZTV8S2833C10__7S2833C57S2833C4__7S2833C2[3]),  3,3},
  {&(_tg__ZTV8S2833C107S2833C4__A1__7S2833C2[3]),  3,3},
  {&(_tg__ZTV7S2833C7__7S2833C4__7S2833C2[3]),  3,3},
  {&(_tg__ZTV8S2833C107S2833C5__7S2833C4__7S2833C2[3]),  3,3},
  {&(_tg__ZTV8S2833C10__A__7S2833C4__7S2833C2[3]),  3,3},
  {&(_tg__ZTV8S2833C11__7S2833C4__7S2833C2[5]),  5,5},
  {&(_tg__ZTV8S2833C11__7S2833C4__7S2833C2[5]),  5,5},
  {&(_tg__ZTV8S2833C13__7S2833C2[3]),  3,5},
  {&(_ZTV7S2833C2[24]),  24,29},
  {&(_ZTV7S2833C2[13]),  13,29},
  {&(_ZTV7S2833C2[16]),  16,29},
  {&(_ZTV7S2833C2[29]),  29,29},
  {&(_ZTV7S2833C2[29]),  29,29},
  {&(_ZTV7S2833C2[19]),  19,29},
  {&(_tg__ZTV7S2833C7__7S2833C2[3]),  3,3},
  {&(_tg__ZTV8S2833C11__7S2833C2[5]),  5,5},
  {&(_tg__ZTV8S2833C11__7S2833C2[5]),  5,5},
  {&(_tg__ZTV8S2833C10__A2__7S2833C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2833C2[];
extern  VTBL_ENTRY _ZTV7S2833C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C2[];
Class_Descriptor cd_S2833C2 = {  "S2833C2", // class name
  bases_S2833C2, 20,
  &(vtc_S2833C2[0]), // expected_vtbl_contents
  &(vtt_S2833C2[0]), // expected_vtt_contents
  ABISELECT(168,116), // object size
  NSPAIRA(_ZTI7S2833C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2833C2),29, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2833C2),25, //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  S2833C14  : virtual S2833C7 , S2833C12 {
  ~S2833C14(); // tgen
  S2833C14(); // tgen
};
//SIG(-1 S2833C14) C1{ VBC2{ BC3{ m Fp} VBC4{ m} FU5{ m}} BC6{ BC4 BC3}}


S2833C14 ::~S2833C14(){ note_dtor("S2833C14", this);} // tgen
S2833C14 ::S2833C14(){ note_ctor("S2833C14", this);} // tgen

static void Test_S2833C14()
{
  extern Class_Descriptor cd_S2833C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S2833C14, buf);
    S2833C14 *dp, &lv = *(dp=new (buf) S2833C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S2833C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2833C14)");
    check_base_class_offset(lv, (S3600C29_nt*)(S2833C7*), ABISELECT(24,12), "S2833C14");
    check_base_class_offset(lv, (S3600C19*)(S2833C7*), 0, "S2833C14");
    check_base_class_offset(lv, (S2833C7*), ABISELECT(16,8), "S2833C14");
    check_base_class_offset(lv, (S3600C19*)(S2833C12*), ABISELECT(8,4), "S2833C14");
    check_base_class_offset(lv, (S3600C29_nt*)(S2833C12*), ABISELECT(8,4), "S2833C14");
    check_base_class_offset(lv, (S2833C12*), ABISELECT(8,4), "S2833C14");
    test_class_info(&lv, &cd_S2833C14);
    dp->~S2833C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2833C14(Test_S2833C14, "S2833C14", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S2833C14C1Ev();
extern void _ZN8S2833C14D1Ev();
Name_Map name_map_S2833C14[] = {
  NSPAIR(_ZN8S2833C14C1Ev),
  NSPAIR(_ZN8S2833C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2833C7;
extern VTBL_ENTRY _ZTI7S2833C7[];
extern  VTBL_ENTRY _ZTV7S2833C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C7[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2833C12;
extern VTBL_ENTRY _ZTI8S2833C12[];
static Base_Class bases_S2833C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2833C7,    ABISELECT(16,8), //bcp->offset
    4, //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},
  {&cd_S3600C19,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2833C12,    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 _ZTI8S2833C14[];
static  VTBL_ENTRY vtc_S2833C14[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C14[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2833C14[0]),
};
extern VTBL_ENTRY _ZTV8S2833C14[];
static  VTBL_ENTRY _tg__ZTV7S2833C7__8S2833C14[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C7[0]),
};
static  VTT_ENTRY vtt_S2833C14[] = {
  {&(_ZTV8S2833C14[4]),  4,7},
  {&(_ZTV8S2833C14[7]),  7,7},
  {&(_tg__ZTV7S2833C7__8S2833C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2833C14[];
extern  VTBL_ENTRY _ZTV8S2833C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C14[];
Class_Descriptor cd_S2833C14 = {  "S2833C14", // class name
  bases_S2833C14, 6,
  &(vtc_S2833C14[0]), // expected_vtbl_contents
  &(vtt_S2833C14[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S2833C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2833C14),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2833C14),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  S2833C1  : S2833C2 , S2833C14 {
  virtual  ~S2833C1(); // _ZN7S2833C1D2Ev
  S2833C1(); // tgen
};
//SIG(1 S2833C1) C1{ BC2{ BC3{ m} BC4{ VBC3 BC5{ BC6{ VBC3 VBC7{ BC8{ m Fp} VBC3 FU9{ m}} Fi} BC10{ VBC8 BC3} FC3} BC10 VBC11{ VBC12{ BC3 BC8} VBC10 BC8 FL[8]} vd} BC13{ VBC8 vd} vd} BC14{ VBC7 BC12} vd}


 S2833C1 ::~S2833C1(){ note_dtor("S2833C1", this);}
S2833C1 ::S2833C1(){ note_ctor("S2833C1", this);} // tgen

static void Test_S2833C1()
{
  extern Class_Descriptor cd_S2833C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,32)];
    init_test(&cd_S2833C1, buf);
    S2833C1 *dp, &lv = *(dp=new (buf) S2833C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,124), "sizeof(S2833C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2833C1)");
    /*is_ambiguous_... S2833C2::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2833C2*), 0, "S2833C1");
    /*is_ambiguous_... S2833C4::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2833C4*)(S2833C2*), ABISELECT(64,32), "S2833C1");
    check_base_class_offset(lv, (S3600C19*)(S2833C6*)(S2833C5*)(S2833C4*)(S2833C2*), ABISELECT(64,32), "S2833C1");
    check_base_class_offset(lv, (S3600C19*)(S2833C7*), ABISELECT(64,32), "S2833C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S2833C7*), ABISELECT(72,36), "S2833C1");
    check_base_class_offset(lv, (S2833C7*)(S2833C6*)(S2833C5*)(S2833C4*)(S2833C2*), ABISELECT(64,32), "S2833C1");
    check_base_class_offset(lv, (S2833C7*)(S2833C14*), ABISELECT(64,32), "S2833C1");
    check_base_class_offset(lv, (S2833C6*)(S2833C5*)(S2833C4*)(S2833C2*), 0, "S2833C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S2833C10*)(S2833C5*)(S2833C4*)(S2833C2*), ABISELECT(88,44), "S2833C1");
    /*is_ambiguous_... S2833C4::S2833C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2833C10*)(S2833C4*)(S2833C2*), ABISELECT(88,44), "S2833C1");
    /*is_ambiguous_... S2833C1::S2833C10 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2833C10*), ABISELECT(88,44), "S2833C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S2833C13*)(S2833C2*), ABISELECT(88,44), "S2833C1");
    check_base_class_offset(lv, (S3600C19*)(S2833C10*)(S2833C5*)(S2833C4*)(S2833C2*), ABISELECT(16,8), "S2833C1");
    check_base_class_offset(lv, (S2833C10*)(S2833C5*)(S2833C4*)(S2833C2*), ABISELECT(16,8), "S2833C1");
    check_base_class_offset(lv, (S2833C5*)(S2833C4*)(S2833C2*), 0, "S2833C1");
    /*is_ambiguous_... S2833C4::S2833C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2833C10*)(S2833C4*)(S2833C2*), ABISELECT(32,16), "S2833C1");
    /*is_ambiguous_... S2833C4::S2833C10 */ AMB_check_base_class_offset(lv, (S2833C10*)(S2833C4*)(S2833C2*), ABISELECT(32,16), "S2833C1");
    /*is_ambiguous_... S2833C1::S2833C12 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2833C12*), ABISELECT(176,120), "S2833C1");
    /*is_ambiguous_... S2833C1::S2833C12 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2833C12*), ABISELECT(176,120), "S2833C1");
    check_base_class_offset(lv, (S2833C12*)(S2833C11*), ABISELECT(176,120), "S2833C1");
    /*is_ambiguous_... S2833C1::S2833C10 */ AMB_check_base_class_offset(lv, (S3600C19*)(S2833C10*), ABISELECT(96,48), "S2833C1");
    check_base_class_offset(lv, (S2833C10*)(S2833C11*), ABISELECT(96,48), "S2833C1");
    /*is_ambiguous_... S2833C11::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S2833C11*), ABISELECT(104,52), "S2833C1");
    check_base_class_offset(lv, (S2833C11*)(S2833C4*)(S2833C2*), ABISELECT(96,48), "S2833C1");
    check_base_class_offset(lv, (S2833C4*)(S2833C2*), 0, "S2833C1");
    check_base_class_offset(lv, (S2833C13*)(S2833C2*), ABISELECT(40,20), "S2833C1");
    check_base_class_offset(lv, (S2833C2*), 0, "S2833C1");
    check_base_class_offset(lv, (S3600C19*)(S2833C12*)(S2833C14*), ABISELECT(56,28), "S2833C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S2833C12*)(S2833C14*), ABISELECT(56,28), "S2833C1");
    check_base_class_offset(lv, (S2833C12*)(S2833C14*), ABISELECT(56,28), "S2833C1");
    check_base_class_offset(lv, (S2833C14*), ABISELECT(48,24), "S2833C1");
    test_class_info(&lv, &cd_S2833C1);
    dp->~S2833C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2833C1(Test_S2833C1, "S2833C1", ABISELECT(184,124));

#else // __cplusplus

extern void _ZN7S2833C1C1Ev();
extern void _ZN7S2833C1D2Ev();
Name_Map name_map_S2833C1[] = {
  NSPAIR(_ZN7S2833C1C1Ev),
  NSPAIR(_ZN7S2833C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2833C7;
extern VTBL_ENTRY _ZTI7S2833C7[];
extern  VTBL_ENTRY _ZTV7S2833C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C7[];
extern Class_Descriptor cd_S2833C6;
extern VTBL_ENTRY _ZTI7S2833C6[];
extern  VTBL_ENTRY _ZTV7S2833C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C6[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2833C10;
extern VTBL_ENTRY _ZTI8S2833C10[];
extern  VTBL_ENTRY _ZTV8S2833C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C10[];
extern Class_Descriptor cd_S2833C5;
extern VTBL_ENTRY _ZTI7S2833C5[];
extern  VTBL_ENTRY _ZTV7S2833C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C5[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2833C10;
extern VTBL_ENTRY _ZTI8S2833C10[];
extern  VTBL_ENTRY _ZTV8S2833C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2833C12;
extern VTBL_ENTRY _ZTI8S2833C12[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S2833C10;
extern VTBL_ENTRY _ZTI8S2833C10[];
extern  VTBL_ENTRY _ZTV8S2833C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2833C11;
extern VTBL_ENTRY _ZTI8S2833C11[];
extern  VTBL_ENTRY _ZTV8S2833C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C11[];
extern Class_Descriptor cd_S2833C4;
extern VTBL_ENTRY _ZTI7S2833C4[];
extern  VTBL_ENTRY _ZTV7S2833C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C4[];
extern Class_Descriptor cd_S2833C13;
extern VTBL_ENTRY _ZTI8S2833C13[];
extern  VTBL_ENTRY _ZTV8S2833C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C13[];
extern Class_Descriptor cd_S2833C2;
extern VTBL_ENTRY _ZTI7S2833C2[];
extern  VTBL_ENTRY _ZTV7S2833C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C2[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S2833C12;
extern VTBL_ENTRY _ZTI8S2833C12[];
extern Class_Descriptor cd_S2833C14;
extern VTBL_ENTRY _ZTI8S2833C14[];
extern  VTBL_ENTRY _ZTV8S2833C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2833C14[];
static Base_Class bases_S2833C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C19,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2833C7,    ABISELECT(64,32), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2833C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S2833C10,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2833C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    18, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2833C10,    ABISELECT(32,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(176,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
    13, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(176,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
    13, //immediately_derived
  0, 0},
  {&cd_S2833C12,    ABISELECT(176,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
    17, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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
    15, //immediately_derived
  0, 0},
  {&cd_S2833C10,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2833C11,    ABISELECT(96,48), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S2833C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    20, //immediately_derived
  0, 0},
  {&cd_S2833C13,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2833C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2833C12,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2833C14,    ABISELECT(48,24), //bcp->offset
    21, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2833C1[];
extern void _ZN7S2833C1D1Ev();
extern void _ZN7S2833C1D0Ev();
extern void ABISELECT(_ZThn40_N7S2833C1D1Ev,_ZThn20_N7S2833C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2833C1D0Ev,_ZThn20_N7S2833C1D0Ev)();
static  VTBL_ENTRY vtc_S2833C1[] = {
  ABISELECT(96,48),
  ABISELECT(176,120),
  ABISELECT(96,48),
  ABISELECT(88,44),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C1[0]),
  (VTBL_ENTRY)&_ZN7S2833C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2833C1D0Ev,
  ABISELECT(72,36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2833C1[0]),
  ABISELECT(56,28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2833C1[0]),
  ABISELECT(48,24),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S2833C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2833C1D1Ev,_ZThn20_N7S2833C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2833C1D0Ev,_ZThn20_N7S2833C1D0Ev),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S2833C1[0]),
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S2833C1[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S2833C1[0]),
};
extern VTBL_ENTRY _ZTV7S2833C1[];
extern void _ZN7S2833C2D1Ev();
extern void _ZN7S2833C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2833C2__7S2833C1[] = {
  ABISELECT(96,48),
  ABISELECT(176,120),
  ABISELECT(96,48),
  ABISELECT(88,44),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C2[0]),
  (VTBL_ENTRY)&_ZN7S2833C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2833C2D0Ev,
};
extern void _ZN7S2833C4D1Ev();
extern void _ZN7S2833C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2833C47S2833C2__7S2833C1[] = {
  ABISELECT(96,48),
  ABISELECT(176,120),
  ABISELECT(96,48),
  ABISELECT(88,44),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C4[0]),
  (VTBL_ENTRY)&_ZN7S2833C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2833C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2833C57S2833C47S2833C2__7S2833C1[] = {
  ABISELECT(88,44),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2833C67S2833C57S2833C47S2833C2__7S2833C1[] = {
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2833C7__7S2833C67S2833C57S2833C47S2833C2__7S2833C1[] = {
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S2833C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C107S2833C57S2833C47S2833C2__7S2833C1[] = {
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2833C7__7S2833C57S2833C47S2833C2__7S2833C1[] = {
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S2833C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C10__7S2833C57S2833C47S2833C2__7S2833C1[] = {
  ABISELECT(72,36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2833C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C107S2833C47S2833C2__A1__7S2833C1[] = {
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2833C7__7S2833C47S2833C2__7S2833C1[] = {
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S2833C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C107S2833C5__7S2833C47S2833C2__7S2833C1[] = {
  ABISELECT(72,36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2833C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C10__A__7S2833C47S2833C2__7S2833C1[] = {
  ABISELECT(56,28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2833C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C11__7S2833C47S2833C2__7S2833C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S2833C4[0]),
};
extern void _ZN8S2833C13D1Ev();
extern void _ZN8S2833C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2833C137S2833C2__7S2833C1[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C13[0]),
  (VTBL_ENTRY)&_ZN8S2833C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2833C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2833C7__7S2833C2__7S2833C1[] = {
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S2833C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C107S2833C57S2833C4__7S2833C2__7S2833C1[] = {
  ABISELECT(72,36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2833C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C107S2833C4__A1__7S2833C2__7S2833C1[] = {
  ABISELECT(56,28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2833C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C11__7S2833C2__7S2833C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S2833C2[0]),
};
extern void ABISELECT(_ZThn40_N7S2833C2D1Ev,_ZThn20_N7S2833C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2833C2D0Ev,_ZThn20_N7S2833C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2833C13__7S2833C2__7S2833C1[] = {
  ABISELECT(48,24),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S2833C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2833C2D1Ev,_ZThn20_N7S2833C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2833C2D0Ev,_ZThn20_N7S2833C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S2833C14__7S2833C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2833C7__8S2833C14__7S2833C1[] = {
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2833C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2833C7__7S2833C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2833C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C11__7S2833C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2833C10__A2__7S2833C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2833C10[0]),
};
static  VTT_ENTRY vtt_S2833C1[] = {
  {&(_ZTV7S2833C1[8]),  8,33},
  {&(_tg__ZTV7S2833C2__7S2833C1[8]),  8,10},
  {&(_tg__ZTV7S2833C47S2833C2__7S2833C1[8]),  8,10},
  {&(_tg__ZTV7S2833C57S2833C47S2833C2__7S2833C1[5]),  5,5},
  {&(_tg__ZTV7S2833C67S2833C57S2833C47S2833C2__7S2833C1[4]),  4,4},
  {&(_tg__ZTV7S2833C7__7S2833C67S2833C57S2833C47S2833C2__7S2833C1[3]),  3,3},
  {&(_tg__ZTV8S2833C107S2833C57S2833C47S2833C2__7S2833C1[3]),  3,3},
  {&(_tg__ZTV7S2833C7__7S2833C57S2833C47S2833C2__7S2833C1[3]),  3,3},
  {&(_tg__ZTV8S2833C10__7S2833C57S2833C47S2833C2__7S2833C1[3]),  3,3},
  {&(_tg__ZTV8S2833C107S2833C47S2833C2__A1__7S2833C1[3]),  3,3},
  {&(_tg__ZTV7S2833C7__7S2833C47S2833C2__7S2833C1[3]),  3,3},
  {&(_tg__ZTV8S2833C107S2833C5__7S2833C47S2833C2__7S2833C1[3]),  3,3},
  {&(_tg__ZTV8S2833C10__A__7S2833C47S2833C2__7S2833C1[3]),  3,3},
  {&(_tg__ZTV8S2833C11__7S2833C47S2833C2__7S2833C1[5]),  5,5},
  {&(_tg__ZTV8S2833C11__7S2833C47S2833C2__7S2833C1[5]),  5,5},
  {&(_tg__ZTV8S2833C137S2833C2__7S2833C1[3]),  3,5},
  {&(_tg__ZTV7S2833C7__7S2833C2__7S2833C1[3]),  3,3},
  {&(_tg__ZTV8S2833C107S2833C57S2833C4__7S2833C2__7S2833C1[3]),  3,3},
  {&(_tg__ZTV8S2833C107S2833C4__A1__7S2833C2__7S2833C1[3]),  3,3},
  {&(_tg__ZTV8S2833C11__7S2833C2__7S2833C1[5]),  5,5},
  {&(_tg__ZTV8S2833C11__7S2833C2__7S2833C1[5]),  5,5},
  {&(_tg__ZTV8S2833C13__7S2833C2__7S2833C1[3]),  3,5},
  {&(_tg__ZTV8S2833C14__7S2833C1[4]),  4,4},
  {&(_tg__ZTV7S2833C7__8S2833C14__7S2833C1[3]),  3,3},
  {&(_ZTV7S2833C1[28]),  28,33},
  {&(_ZTV7S2833C1[13]),  13,33},
  {&(_ZTV7S2833C1[16]),  16,33},
  {&(_ZTV7S2833C1[33]),  33,33},
  {&(_ZTV7S2833C1[33]),  33,33},
  {&(_ZTV7S2833C1[19]),  19,33},
  {&(_ZTV7S2833C1[25]),  25,33},
  {&(_tg__ZTV7S2833C7__7S2833C1[3]),  3,3},
  {&(_tg__ZTV8S2833C11__7S2833C1[5]),  5,5},
  {&(_tg__ZTV8S2833C11__7S2833C1[5]),  5,5},
  {&(_tg__ZTV8S2833C10__A2__7S2833C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2833C1[];
extern  VTBL_ENTRY _ZTV7S2833C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2833C1[];
Class_Descriptor cd_S2833C1 = {  "S2833C1", // class name
  bases_S2833C1, 25,
  &(vtc_S2833C1[0]), // expected_vtbl_contents
  &(vtt_S2833C1[0]), // expected_vtt_contents
  ABISELECT(184,124), // object size
  NSPAIRA(_ZTI7S2833C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2833C1),33, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2833C1),35, //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  S19251C3  {
  void *s19251c3f0;
  short s19251c3f1;
  long double s19251c3f2;
  virtual void  v1(); // _ZN8S19251C32v1Ev
  ~S19251C3(); // tgen
  S19251C3(); // tgen
};
//SIG(-1 S19251C3) C1{ v1 Fp Fs FD}


void  S19251C3 ::v1(){vfunc_called(this, "_ZN8S19251C32v1Ev");}
S19251C3 ::~S19251C3(){ note_dtor("S19251C3", this);} // tgen
S19251C3 ::S19251C3(){ note_ctor("S19251C3", this);} // tgen

static void Test_S19251C3()
{
  extern Class_Descriptor cd_S19251C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S19251C3, buf);
    S19251C3 *dp, &lv = *(dp=new (buf) S19251C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19251C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19251C3)");
    check_field_offset(lv, s19251c3f0, ABISELECT(8,4), "S19251C3.s19251c3f0");
    check_field_offset(lv, s19251c3f1, ABISELECT(16,8), "S19251C3.s19251c3f1");
    check_field_offset(lv, s19251c3f2, ABISELECT(32,12), "S19251C3.s19251c3f2");
    test_class_info(&lv, &cd_S19251C3);
    dp->~S19251C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19251C3(Test_S19251C3, "S19251C3", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19251C3C1Ev();
extern void _ZN8S19251C3D1Ev();
Name_Map name_map_S19251C3[] = {
  NSPAIR(_ZN8S19251C3C1Ev),
  NSPAIR(_ZN8S19251C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19251C3[];
extern void _ZN8S19251C32v1Ev();
static  VTBL_ENTRY vtc_S19251C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19251C3[0]),
  (VTBL_ENTRY)&_ZN8S19251C32v1Ev,
};
extern VTBL_ENTRY _ZTI8S19251C3[];
extern  VTBL_ENTRY _ZTV8S19251C3[];
Class_Descriptor cd_S19251C3 = {  "S19251C3", // class name
  0,0,//no base classes
  &(vtc_S19251C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19251C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19251C3),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  S19251C9  {
  void *s19251c9f0;
  void *s19251c9f1;
  long double s19251c9f2[10];
  void *s19251c9f3;
  short s19251c9f4;
  void *s19251c9f5;
  void *s19251c9f6;
  virtual void  v2(); // _ZN8S19251C92v2Ev
  ~S19251C9(); // tgen
  S19251C9(); // tgen
};
//SIG(-1 S19251C9) C1{ v1 Fp[2] FD[10] Fp Fs Fp[2]}


void  S19251C9 ::v2(){vfunc_called(this, "_ZN8S19251C92v2Ev");}
S19251C9 ::~S19251C9(){ note_dtor("S19251C9", this);} // tgen
S19251C9 ::S19251C9(){ note_ctor("S19251C9", this);} // tgen

static void Test_S19251C9()
{
  extern Class_Descriptor cd_S19251C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,38)];
    init_test(&cd_S19251C9, buf);
    S19251C9 *dp, &lv = *(dp=new (buf) S19251C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,148), "sizeof(S19251C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19251C9)");
    check_field_offset(lv, s19251c9f0, ABISELECT(8,4), "S19251C9.s19251c9f0");
    check_field_offset(lv, s19251c9f1, ABISELECT(16,8), "S19251C9.s19251c9f1");
    check_field_offset(lv, s19251c9f2, ABISELECT(32,12), "S19251C9.s19251c9f2");
    check_field_offset(lv, s19251c9f3, ABISELECT(192,132), "S19251C9.s19251c9f3");
    check_field_offset(lv, s19251c9f4, ABISELECT(200,136), "S19251C9.s19251c9f4");
    check_field_offset(lv, s19251c9f5, ABISELECT(208,140), "S19251C9.s19251c9f5");
    check_field_offset(lv, s19251c9f6, ABISELECT(216,144), "S19251C9.s19251c9f6");
    test_class_info(&lv, &cd_S19251C9);
    dp->~S19251C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19251C9(Test_S19251C9, "S19251C9", ABISELECT(224,148));

#else // __cplusplus

extern void _ZN8S19251C9C1Ev();
extern void _ZN8S19251C9D1Ev();
Name_Map name_map_S19251C9[] = {
  NSPAIR(_ZN8S19251C9C1Ev),
  NSPAIR(_ZN8S19251C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19251C9[];
extern void _ZN8S19251C92v2Ev();
static  VTBL_ENTRY vtc_S19251C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19251C9[0]),
  (VTBL_ENTRY)&_ZN8S19251C92v2Ev,
};
extern VTBL_ENTRY _ZTI8S19251C9[];
extern  VTBL_ENTRY _ZTV8S19251C9[];
Class_Descriptor cd_S19251C9 = {  "S19251C9", // class name
  0,0,//no base classes
  &(vtc_S19251C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,148), // object size
  NSPAIRA(_ZTI8S19251C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19251C9),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  S19251C2  : S19251C3 , virtual S19252C4 , virtual S19252C6 , S19251C9 {
  int s19251c2f0;
  int s19251c2f1[9];
  long double s19251c2f2;
  ::S19252C8_nt s19251c2f3;
  void *s19251c2f4;
  virtual void  v3(); // _ZN8S19251C22v3Ev
  ~S19251C2(); // tgen
  S19251C2(); // tgen
};
//SIG(-1 S19251C2) C1{ BC2{ v2 Fp Fs FD} VBC3{ m Fi Fc Fp FC4{}} VBC5{ m Fi[2] Fs FC6{ vd v4 v5 Fi FU7{ m Fp} Fs:16 FC8{ v6 Fp Fp FD[10] Fp Fs Fp Fp} FC4}} BC9{ v3 Fp Fp FD[10] Fp Fs Fp Fp} v1 Fi Fi[9] FD FU7 Fp}


void  S19251C2 ::v3(){vfunc_called(this, "_ZN8S19251C22v3Ev");}
S19251C2 ::~S19251C2(){ note_dtor("S19251C2", this);} // tgen
S19251C2 ::S19251C2(){ note_ctor("S19251C2", this);} // tgen

static void Test_S19251C2()
{
  extern Class_Descriptor cd_S19251C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(43,108)];
    init_test(&cd_S19251C2, buf);
    S19251C2 *dp, &lv = *(dp=new (buf) S19251C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(672,428), "sizeof(S19251C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19251C2)");
    check_base_class_offset(lv, (S19251C3*), 0, "S19251C2");
    check_base_class_offset(lv, (S19252C4*), ABISELECT(352,232), "S19251C2");
    check_base_class_offset(lv, (S19252C6*), ABISELECT(384,248), "S19251C2");
    check_base_class_offset(lv, (S19251C9*), ABISELECT(48,24), "S19251C2");
    check_field_offset(lv, s19251c2f0, ABISELECT(272,172), "S19251C2.s19251c2f0");
    check_field_offset(lv, s19251c2f1, ABISELECT(276,176), "S19251C2.s19251c2f1");
    check_field_offset(lv, s19251c2f2, ABISELECT(320,212), "S19251C2.s19251c2f2");
    check_field_offset(lv, s19251c2f3, ABISELECT(336,224), "S19251C2.s19251c2f3");
    check_field_offset(lv, s19251c2f4, ABISELECT(344,228), "S19251C2.s19251c2f4");
    test_class_info(&lv, &cd_S19251C2);
    dp->~S19251C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19251C2(Test_S19251C2, "S19251C2", ABISELECT(672,428));

#else // __cplusplus

extern void _ZN8S19251C2C1Ev();
extern void _ZN8S19251C2D1Ev();
Name_Map name_map_S19251C2[] = {
  NSPAIR(_ZN8S19251C2C1Ev),
  NSPAIR(_ZN8S19251C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19251C3;
extern VTBL_ENTRY _ZTI8S19251C3[];
extern  VTBL_ENTRY _ZTV8S19251C3[];
extern Class_Descriptor cd_S19252C4;
extern VTBL_ENTRY _ZTI8S19252C4[];
extern Class_Descriptor cd_S19252C6;
extern VTBL_ENTRY _ZTI8S19252C6[];
extern Class_Descriptor cd_S19251C9;
extern VTBL_ENTRY _ZTI8S19251C9[];
extern  VTBL_ENTRY _ZTV8S19251C9[];
static Base_Class bases_S19251C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19251C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19252C4,    ABISELECT(352,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19252C6,    ABISELECT(384,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19251C9,    ABISELECT(48,24), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S19251C2[];
extern void _ZN8S19251C32v1Ev();
extern void _ZN8S19251C22v3Ev();
extern void _ZN8S19251C92v2Ev();
static  VTBL_ENTRY vtc_S19251C2[] = {
  ABISELECT(384,248),
  ABISELECT(352,232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19251C2[0]),
  (VTBL_ENTRY)&_ZN8S19251C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19251C22v3Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19251C2[0]),
  (VTBL_ENTRY)&_ZN8S19251C92v2Ev,
};
extern VTBL_ENTRY _ZTV8S19251C2[];
static  VTT_ENTRY vtt_S19251C2[] = {
  {&(_ZTV8S19251C2[4]),  4,9},
};
extern VTBL_ENTRY _ZTI8S19251C2[];
extern  VTBL_ENTRY _ZTV8S19251C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19251C2[];
Class_Descriptor cd_S19251C2 = {  "S19251C2", // class name
  bases_S19251C2, 4,
  &(vtc_S19251C2[0]), // expected_vtbl_contents
  &(vtt_S19251C2[0]), // expected_vtt_contents
  ABISELECT(672,428), // object size
  NSPAIRA(_ZTI8S19251C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19251C2),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19251C2),1, //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  S19251C1  : virtual S19251C2 {
  ~S19251C1(); // tgen
  S19251C1(); // tgen
};
//SIG(1 S19251C1) C1{ VBC2{ BC3{ v1 Fp Fs FD} VBC4{ m Fi Fc Fp FC5{}} VBC6{ m Fi[2] Fs FC7{ vd v4 v5 Fi FU8{ m Fp} Fs:16 FC9{ v6 Fp Fp FD[10] Fp Fs Fp Fp} FC5}} BC10{ v2 Fp Fp FD[10] Fp Fs Fp Fp} v3 Fi Fi[9] FD FU8 Fp}}


S19251C1 ::~S19251C1(){ note_dtor("S19251C1", this);} // tgen
S19251C1 ::S19251C1(){ note_ctor("S19251C1", this);} // tgen

static void Test_S19251C1()
{
  extern Class_Descriptor cd_S19251C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(44,109)];
    init_test(&cd_S19251C1, buf);
    S19251C1 *dp, &lv = *(dp=new (buf) S19251C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,432), "sizeof(S19251C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19251C1)");
    check_base_class_offset(lv, (S19251C3*)(S19251C2*), ABISELECT(16,4), "S19251C1");
    check_base_class_offset(lv, (S19252C4*)(S19251C2*), ABISELECT(368,236), "S19251C1");
    check_base_class_offset(lv, (S19252C6*)(S19251C2*), ABISELECT(400,252), "S19251C1");
    check_base_class_offset(lv, (S19251C9*)(S19251C2*), ABISELECT(64,28), "S19251C1");
    check_base_class_offset(lv, (S19251C2*), ABISELECT(16,4), "S19251C1");
    test_class_info(&lv, &cd_S19251C1);
    dp->~S19251C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19251C1(Test_S19251C1, "S19251C1", ABISELECT(688,432));

#else // __cplusplus

extern void _ZN8S19251C1C1Ev();
extern void _ZN8S19251C1D1Ev();
Name_Map name_map_S19251C1[] = {
  NSPAIR(_ZN8S19251C1C1Ev),
  NSPAIR(_ZN8S19251C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19251C3;
extern VTBL_ENTRY _ZTI8S19251C3[];
extern  VTBL_ENTRY _ZTV8S19251C3[];
extern Class_Descriptor cd_S19252C4;
extern VTBL_ENTRY _ZTI8S19252C4[];
extern Class_Descriptor cd_S19252C6;
extern VTBL_ENTRY _ZTI8S19252C6[];
extern Class_Descriptor cd_S19251C9;
extern VTBL_ENTRY _ZTI8S19251C9[];
extern  VTBL_ENTRY _ZTV8S19251C9[];
extern Class_Descriptor cd_S19251C2;
extern VTBL_ENTRY _ZTI8S19251C2[];
extern  VTBL_ENTRY _ZTV8S19251C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19251C2[];
static Base_Class bases_S19251C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19251C3,    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
    4, //immediately_derived
  0, 0},
  {&cd_S19252C4,    ABISELECT(368,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19252C6,    ABISELECT(400,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19251C9,    ABISELECT(64,28), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19251C2,    ABISELECT(16,4), //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 _ZTI8S19251C1[];
extern void _ZN8S19251C32v1Ev();
extern void _ZN8S19251C22v3Ev();
extern void _ZN8S19251C92v2Ev();
static  VTBL_ENTRY vtc_S19251C1[] = {
  ABISELECT(400,252),
  ABISELECT(368,236),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19251C1[0]),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(384,248),
  ABISELECT(352,232),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19251C1[0]),
  (VTBL_ENTRY)&_ZN8S19251C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19251C22v3Ev,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S19251C1[0]),
  (VTBL_ENTRY)&_ZN8S19251C92v2Ev,
};
extern VTBL_ENTRY _ZTV8S19251C1[];
extern void _ZN8S19251C32v1Ev();
extern void _ZN8S19251C22v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19251C2__8S19251C1[] = {
  ABISELECT(384,248),
  ABISELECT(352,232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19251C2[0]),
  (VTBL_ENTRY)&_ZN8S19251C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19251C22v3Ev,
};
static  VTT_ENTRY vtt_S19251C1[] = {
  {&(_ZTV8S19251C1[5]),  5,17},
  {&(_ZTV8S19251C1[12]),  12,17},
  {&(_ZTV8S19251C1[16]),  16,17},
  {&(_tg__ZTV8S19251C2__8S19251C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19251C1[];
extern  VTBL_ENTRY _ZTV8S19251C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19251C1[];
Class_Descriptor cd_S19251C1 = {  "S19251C1", // class name
  bases_S19251C1, 5,
  &(vtc_S19251C1[0]), // expected_vtbl_contents
  &(vtt_S19251C1[0]), // expected_vtt_contents
  ABISELECT(688,432), // object size
  NSPAIRA(_ZTI8S19251C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19251C1),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19251C1),4, //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  S19478C3  : virtual S3600C29_nt , S3600C19 {
  ~S19478C3(); // tgen
  S19478C3(); // tgen
};
//SIG(-1 S19478C3) C1{ VBC2{ m Fp} BC3{ m}}


S19478C3 ::~S19478C3(){ note_dtor("S19478C3", this);} // tgen
S19478C3 ::S19478C3(){ note_ctor("S19478C3", this);} // tgen

static void Test_S19478C3()
{
  extern Class_Descriptor cd_S19478C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19478C3, buf);
    S19478C3 *dp, &lv = *(dp=new (buf) S19478C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19478C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19478C3)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S19478C3");
    check_base_class_offset(lv, (S3600C19*), 0, "S19478C3");
    test_class_info(&lv, &cd_S19478C3);
    dp->~S19478C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19478C3(Test_S19478C3, "S19478C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19478C3C1Ev();
extern void _ZN8S19478C3D1Ev();
Name_Map name_map_S19478C3[] = {
  NSPAIR(_ZN8S19478C3C1Ev),
  NSPAIR(_ZN8S19478C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S19478C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S19478C3[];
static  VTBL_ENTRY vtc_S19478C3[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C3[0]),
};
extern VTBL_ENTRY _ZTV8S19478C3[];
static  VTT_ENTRY vtt_S19478C3[] = {
  {&(_ZTV8S19478C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19478C3[];
extern  VTBL_ENTRY _ZTV8S19478C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C3[];
Class_Descriptor cd_S19478C3 = {  "S19478C3", // class name
  bases_S19478C3, 2,
  &(vtc_S19478C3[0]), // expected_vtbl_contents
  &(vtt_S19478C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19478C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19478C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19478C3),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  S19478C2  : S19478C3 {
  ~S19478C2(); // tgen
  S19478C2(); // tgen
};
//SIG(-1 S19478C2) C1{ BC2{ VBC3{ m Fp} BC4{ m}}}


S19478C2 ::~S19478C2(){ note_dtor("S19478C2", this);} // tgen
S19478C2 ::S19478C2(){ note_ctor("S19478C2", this);} // tgen

static void Test_S19478C2()
{
  extern Class_Descriptor cd_S19478C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19478C2, buf);
    S19478C2 *dp, &lv = *(dp=new (buf) S19478C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19478C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19478C2)");
    check_base_class_offset(lv, (S3600C29_nt*)(S19478C3*), ABISELECT(8,4), "S19478C2");
    check_base_class_offset(lv, (S3600C19*)(S19478C3*), 0, "S19478C2");
    check_base_class_offset(lv, (S19478C3*), 0, "S19478C2");
    test_class_info(&lv, &cd_S19478C2);
    dp->~S19478C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19478C2(Test_S19478C2, "S19478C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19478C2C1Ev();
extern void _ZN8S19478C2D1Ev();
Name_Map name_map_S19478C2[] = {
  NSPAIR(_ZN8S19478C2C1Ev),
  NSPAIR(_ZN8S19478C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19478C3;
extern VTBL_ENTRY _ZTI8S19478C3[];
extern  VTBL_ENTRY _ZTV8S19478C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C3[];
static Base_Class bases_S19478C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19478C3,    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 _ZTI8S19478C2[];
static  VTBL_ENTRY vtc_S19478C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C2[0]),
};
extern VTBL_ENTRY _ZTV8S19478C2[];
static  VTBL_ENTRY _tg__ZTV8S19478C3__8S19478C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C3[0]),
};
static  VTT_ENTRY vtt_S19478C2[] = {
  {&(_ZTV8S19478C2[3]),  3,3},
  {&(_tg__ZTV8S19478C3__8S19478C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19478C2[];
extern  VTBL_ENTRY _ZTV8S19478C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C2[];
Class_Descriptor cd_S19478C2 = {  "S19478C2", // class name
  bases_S19478C2, 3,
  &(vtc_S19478C2[0]), // expected_vtbl_contents
  &(vtt_S19478C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19478C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19478C2),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19478C2),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  S19478C9  : S3600C29_nt , virtual S3600C19 {
  ::S19426C9_nt s19478c9f0;
  ~S19478C9(); // tgen
  S19478C9(); // tgen
};
//SIG(-1 S19478C9) C1{ BC2{ m Fp} VBC3{ m} FU4{ m}}


S19478C9 ::~S19478C9(){ note_dtor("S19478C9", this);} // tgen
S19478C9 ::S19478C9(){ note_ctor("S19478C9", this);} // tgen

static void Test_S19478C9()
{
  extern Class_Descriptor cd_S19478C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19478C9, buf);
    S19478C9 *dp, &lv = *(dp=new (buf) S19478C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19478C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19478C9)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S19478C9");
    check_base_class_offset(lv, (S3600C19*), 0, "S19478C9");
    check_field_offset(lv, s19478c9f0, ABISELECT(16,8), "S19478C9.s19478c9f0");
    test_class_info(&lv, &cd_S19478C9);
    dp->~S19478C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19478C9(Test_S19478C9, "S19478C9", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19478C9C1Ev();
extern void _ZN8S19478C9D1Ev();
Name_Map name_map_S19478C9[] = {
  NSPAIR(_ZN8S19478C9C1Ev),
  NSPAIR(_ZN8S19478C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S19478C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19478C9[];
static  VTBL_ENTRY vtc_S19478C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C9[0]),
};
extern VTBL_ENTRY _ZTV8S19478C9[];
static  VTT_ENTRY vtt_S19478C9[] = {
  {&(_ZTV8S19478C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19478C9[];
extern  VTBL_ENTRY _ZTV8S19478C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C9[];
Class_Descriptor cd_S19478C9 = {  "S19478C9", // class name
  bases_S19478C9, 2,
  &(vtc_S19478C9[0]), // expected_vtbl_contents
  &(vtt_S19478C9[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19478C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19478C9),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19478C9),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  S19478C8  : virtual S3600C19 , virtual S19478C9 {
  int s19478c8f0;
  ~S19478C8(); // tgen
  S19478C8(); // tgen
};
//SIG(-1 S19478C8) C1{ VBC2{ m} VBC3{ BC4{ m Fp} VBC2 FU5{ m}} Fi}


S19478C8 ::~S19478C8(){ note_dtor("S19478C8", this);} // tgen
S19478C8 ::S19478C8(){ note_ctor("S19478C8", this);} // tgen

static void Test_S19478C8()
{
  extern Class_Descriptor cd_S19478C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19478C8, buf);
    S19478C8 *dp, &lv = *(dp=new (buf) S19478C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19478C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19478C8)");
    check_base_class_offset(lv, (S3600C19*), 0, "S19478C8");
    check_base_class_offset(lv, (S3600C19*)(S19478C9*), 0, "S19478C8");
    check_base_class_offset(lv, (S3600C29_nt*)(S19478C9*), ABISELECT(24,12), "S19478C8");
    check_base_class_offset(lv, (S19478C9*), ABISELECT(16,8), "S19478C8");
    check_field_offset(lv, s19478c8f0, ABISELECT(8,4), "S19478C8.s19478c8f0");
    test_class_info(&lv, &cd_S19478C8);
    dp->~S19478C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19478C8(Test_S19478C8, "S19478C8", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19478C8C1Ev();
extern void _ZN8S19478C8D1Ev();
Name_Map name_map_S19478C8[] = {
  NSPAIR(_ZN8S19478C8C1Ev),
  NSPAIR(_ZN8S19478C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19478C9;
extern VTBL_ENTRY _ZTI8S19478C9[];
extern  VTBL_ENTRY _ZTV8S19478C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C9[];
static Base_Class bases_S19478C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19478C9,    ABISELECT(16,8), //bcp->offset
    4, //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 _ZTI8S19478C8[];
static  VTBL_ENTRY vtc_S19478C8[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C8[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19478C8[0]),
};
extern VTBL_ENTRY _ZTV8S19478C8[];
static  VTBL_ENTRY _tg__ZTV8S19478C9__8S19478C8[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C9[0]),
};
static  VTT_ENTRY vtt_S19478C8[] = {
  {&(_ZTV8S19478C8[4]),  4,7},
  {&(_ZTV8S19478C8[7]),  7,7},
  {&(_tg__ZTV8S19478C9__8S19478C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19478C8[];
extern  VTBL_ENTRY _ZTV8S19478C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C8[];
Class_Descriptor cd_S19478C8 = {  "S19478C8", // class name
  bases_S19478C8, 3,
  &(vtc_S19478C8[0]), // expected_vtbl_contents
  &(vtt_S19478C8[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19478C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19478C8),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19478C8),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  S19478C7  : S19478C8 , S19478C3 {
  ::S3600C19 s19478c7f0;
  ~S19478C7(); // tgen
  S19478C7(); // tgen
};
//SIG(-1 S19478C7) C1{ BC2{ VBC3{ m} VBC4{ BC5{ m Fp} VBC3 FU6{ m}} Fi} BC7{ VBC5 BC3} FC3}


S19478C7 ::~S19478C7(){ note_dtor("S19478C7", this);} // tgen
S19478C7 ::S19478C7(){ note_ctor("S19478C7", this);} // tgen

static void Test_S19478C7()
{
  extern Class_Descriptor cd_S19478C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S19478C7, buf);
    S19478C7 *dp, &lv = *(dp=new (buf) S19478C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S19478C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19478C7)");
    check_base_class_offset(lv, (S3600C19*)(S19478C8*), 0, "S19478C7");
    check_base_class_offset(lv, (S3600C19*)(S19478C9*), 0, "S19478C7");
    check_base_class_offset(lv, (S3600C29_nt*)(S19478C9*), ABISELECT(40,20), "S19478C7");
    check_base_class_offset(lv, (S19478C9*)(S19478C8*), ABISELECT(32,16), "S19478C7");
    check_base_class_offset(lv, (S19478C8*), 0, "S19478C7");
    check_base_class_offset(lv, (S3600C29_nt*)(S19478C3*), ABISELECT(56,28), "S19478C7");
    check_base_class_offset(lv, (S3600C19*)(S19478C3*), ABISELECT(16,8), "S19478C7");
    check_base_class_offset(lv, (S19478C3*), ABISELECT(16,8), "S19478C7");
    check_field_offset(lv, s19478c7f0, ABISELECT(24,12), "S19478C7.s19478c7f0");
    test_class_info(&lv, &cd_S19478C7);
    dp->~S19478C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19478C7(Test_S19478C7, "S19478C7", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S19478C7C1Ev();
extern void _ZN8S19478C7D1Ev();
Name_Map name_map_S19478C7[] = {
  NSPAIR(_ZN8S19478C7C1Ev),
  NSPAIR(_ZN8S19478C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19478C9;
extern VTBL_ENTRY _ZTI8S19478C9[];
extern  VTBL_ENTRY _ZTV8S19478C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C9[];
extern Class_Descriptor cd_S19478C8;
extern VTBL_ENTRY _ZTI8S19478C8[];
extern  VTBL_ENTRY _ZTV8S19478C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C8[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19478C3;
extern VTBL_ENTRY _ZTI8S19478C3[];
extern  VTBL_ENTRY _ZTV8S19478C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C3[];
static Base_Class bases_S19478C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19478C9,    ABISELECT(32,16), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19478C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C29_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S19478C3,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI8S19478C7[];
static  VTBL_ENTRY vtc_S19478C7[] = {
  ABISELECT(56,28),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C7[0]),
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19478C7[0]),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19478C7[0]),
};
extern VTBL_ENTRY _ZTV8S19478C7[];
static  VTBL_ENTRY _tg__ZTV8S19478C8__8S19478C7[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C9__8S19478C8__8S19478C7[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19478C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C3__8S19478C7[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C9__8S19478C7[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C9[0]),
};
static  VTT_ENTRY vtt_S19478C7[] = {
  {&(_ZTV8S19478C7[5]),  5,11},
  {&(_tg__ZTV8S19478C8__8S19478C7[4]),  4,4},
  {&(_tg__ZTV8S19478C9__8S19478C8__8S19478C7[3]),  3,3},
  {&(_tg__ZTV8S19478C3__8S19478C7[3]),  3,3},
  {&(_ZTV8S19478C7[11]),  11,11},
  {&(_ZTV8S19478C7[8]),  8,11},
  {&(_tg__ZTV8S19478C9__8S19478C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19478C7[];
extern  VTBL_ENTRY _ZTV8S19478C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C7[];
Class_Descriptor cd_S19478C7 = {  "S19478C7", // class name
  bases_S19478C7, 7,
  &(vtc_S19478C7[0]), // expected_vtbl_contents
  &(vtt_S19478C7[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S19478C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19478C7),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19478C7),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  S19478C11  {
  virtual void  v1(); // _ZN9S19478C112v1Ev
  ~S19478C11(); // tgen
  S19478C11(); // tgen
};
//SIG(-1 S19478C11) C1{ v1}


void  S19478C11 ::v1(){vfunc_called(this, "_ZN9S19478C112v1Ev");}
S19478C11 ::~S19478C11(){ note_dtor("S19478C11", this);} // tgen
S19478C11 ::S19478C11(){ note_ctor("S19478C11", this);} // tgen

static void Test_S19478C11()
{
  extern Class_Descriptor cd_S19478C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19478C11, buf);
    S19478C11 *dp, &lv = *(dp=new (buf) S19478C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19478C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19478C11)");
    test_class_info(&lv, &cd_S19478C11);
    dp->~S19478C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19478C11(Test_S19478C11, "S19478C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19478C11C1Ev();
extern void _ZN9S19478C11D1Ev();
Name_Map name_map_S19478C11[] = {
  NSPAIR(_ZN9S19478C11C1Ev),
  NSPAIR(_ZN9S19478C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19478C11[];
extern void _ZN9S19478C112v1Ev();
static  VTBL_ENTRY vtc_S19478C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19478C11[0]),
  (VTBL_ENTRY)&_ZN9S19478C112v1Ev,
};
extern VTBL_ENTRY _ZTI9S19478C11[];
extern  VTBL_ENTRY _ZTV9S19478C11[];
Class_Descriptor cd_S19478C11 = {  "S19478C11", // class name
  0,0,//no base classes
  &(vtc_S19478C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19478C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19478C11),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  S19478C13  : S3600C19 , S3600C29_nt {
};
//SIG(-1 S19478C13) C1{ BC2{ m} BC3{ m Fp}}



static void Test_S19478C13()
{
  extern Class_Descriptor cd_S19478C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19478C13, buf);
    S19478C13 &lv = *(new (buf) S19478C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19478C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19478C13)");
    check_base_class_offset(lv, (S3600C19*), 0, "S19478C13");
    check_base_class_offset(lv, (S3600C29_nt*), 0, "S19478C13");
    test_class_info(&lv, &cd_S19478C13);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19478C13(Test_S19478C13, "S19478C13", ABISELECT(8,4));

#else // __cplusplus

extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S19478C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3600C29_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 _ZTI9S19478C13[];
Class_Descriptor cd_S19478C13 = {  "S19478C13", // class name
  bases_S19478C13, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19478C13),ABISELECT(56,32), //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  S19478C12  : virtual S19478C13 , virtual S19478C3 , S3600C29_nt {
  __tsi64 s19478c12f0[8];
  ~S19478C12(); // tgen
  S19478C12(); // tgen
};
//SIG(-1 S19478C12) C1{ VBC2{ BC3{ m} BC4{ m Fp}} VBC5{ VBC4 BC3} BC4 FL[8]}


S19478C12 ::~S19478C12(){ note_dtor("S19478C12", this);} // tgen
S19478C12 ::S19478C12(){ note_ctor("S19478C12", this);} // tgen

static void Test_S19478C12()
{
  extern Class_Descriptor cd_S19478C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,21)];
    init_test(&cd_S19478C12, buf);
    S19478C12 *dp, &lv = *(dp=new (buf) S19478C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,80), "sizeof(S19478C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19478C12)");
    check_base_class_offset(lv, (S3600C19*)(S19478C13*), ABISELECT(80,72), "S19478C12");
    check_base_class_offset(lv, (S3600C29_nt*)(S19478C13*), ABISELECT(80,72), "S19478C12");
    check_base_class_offset(lv, (S19478C13*), ABISELECT(80,72), "S19478C12");
    check_base_class_offset(lv, (S3600C29_nt*)(S19478C3*), ABISELECT(88,76), "S19478C12");
    check_base_class_offset(lv, (S3600C19*)(S19478C3*), 0, "S19478C12");
    check_base_class_offset(lv, (S19478C3*), 0, "S19478C12");
    /*is_ambiguous_... S19478C12::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S19478C12");
    check_field_offset(lv, s19478c12f0, ABISELECT(16,8), "S19478C12.s19478c12f0");
    test_class_info(&lv, &cd_S19478C12);
    dp->~S19478C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19478C12(Test_S19478C12, "S19478C12", ABISELECT(96,80));

#else // __cplusplus

extern void _ZN9S19478C12C1Ev();
extern void _ZN9S19478C12D1Ev();
Name_Map name_map_S19478C12[] = {
  NSPAIR(_ZN9S19478C12C1Ev),
  NSPAIR(_ZN9S19478C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19478C13;
extern VTBL_ENTRY _ZTI9S19478C13[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19478C3;
extern VTBL_ENTRY _ZTI8S19478C3[];
extern  VTBL_ENTRY _ZTV8S19478C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C3[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S19478C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S19478C13,    ABISELECT(80,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_S3600C29_nt,    ABISELECT(88,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19478C3,    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},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19478C12[];
static  VTBL_ENTRY vtc_S19478C12[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19478C12[0]),
};
extern VTBL_ENTRY _ZTV9S19478C12[];
static  VTBL_ENTRY _tg__ZTV8S19478C3__9S19478C12[] = {
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C3[0]),
};
static  VTT_ENTRY vtt_S19478C12[] = {
  {&(_ZTV9S19478C12[5]),  5,5},
  {&(_ZTV9S19478C12[5]),  5,5},
  {&(_tg__ZTV8S19478C3__9S19478C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19478C12[];
extern  VTBL_ENTRY _ZTV9S19478C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19478C12[];
Class_Descriptor cd_S19478C12 = {  "S19478C12", // class name
  bases_S19478C12, 7,
  &(vtc_S19478C12[0]), // expected_vtbl_contents
  &(vtt_S19478C12[0]), // expected_vtt_contents
  ABISELECT(96,80), // object size
  NSPAIRA(_ZTI9S19478C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19478C12),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19478C12),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  S19478C6  : virtual S19478C7 , virtual S19478C11 , virtual S19478C12 {
  ~S19478C6(); // tgen
  S19478C6(); // tgen
};
//SIG(-1 S19478C6) C1{ VBC2{ BC3{ VBC4{ m} VBC5{ BC6{ m Fp} VBC4 FU7{ m}} Fi} BC8{ VBC6 BC4} FC4} VBC9{ v1} VBC10{ VBC11{ BC4 BC6} VBC8 BC6 FL[8]}}


S19478C6 ::~S19478C6(){ note_dtor("S19478C6", this);} // tgen
S19478C6 ::S19478C6(){ note_ctor("S19478C6", this);} // tgen

static void Test_S19478C6()
{
  extern Class_Descriptor cd_S19478C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S19478C6, buf);
    S19478C6 *dp, &lv = *(dp=new (buf) S19478C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S19478C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19478C6)");
    check_base_class_offset(lv, (S3600C19*)(S19478C8*)(S19478C7*), 0, "S19478C6");
    check_base_class_offset(lv, (S3600C19*)(S19478C9*), 0, "S19478C6");
    check_base_class_offset(lv, (S3600C29_nt*)(S19478C9*), ABISELECT(48,24), "S19478C6");
    check_base_class_offset(lv, (S19478C9*)(S19478C8*)(S19478C7*), ABISELECT(40,20), "S19478C6");
    check_base_class_offset(lv, (S19478C8*)(S19478C7*), ABISELECT(8,4), "S19478C6");
    check_base_class_offset(lv, (S3600C29_nt*)(S19478C3*)(S19478C7*), ABISELECT(64,32), "S19478C6");
    /*is_ambiguous_... S19478C6::S19478C3 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19478C3*), ABISELECT(64,32), "S19478C6");
    check_base_class_offset(lv, (S3600C19*)(S19478C3*)(S19478C7*), ABISELECT(24,12), "S19478C6");
    check_base_class_offset(lv, (S19478C3*)(S19478C7*), ABISELECT(24,12), "S19478C6");
    check_base_class_offset(lv, (S19478C7*), ABISELECT(8,4), "S19478C6");
    check_base_class_offset(lv, (S19478C11*), 0, "S19478C6");
    check_base_class_offset(lv, (S3600C19*)(S19478C13*), ABISELECT(152,108), "S19478C6");
    check_base_class_offset(lv, (S3600C29_nt*)(S19478C13*), ABISELECT(152,108), "S19478C6");
    check_base_class_offset(lv, (S19478C13*)(S19478C12*), ABISELECT(152,108), "S19478C6");
    /*is_ambiguous_... S19478C6::S19478C3 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19478C3*), ABISELECT(72,36), "S19478C6");
    check_base_class_offset(lv, (S19478C3*)(S19478C12*), ABISELECT(72,36), "S19478C6");
    /*is_ambiguous_... S19478C12::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19478C12*), ABISELECT(80,40), "S19478C6");
    check_base_class_offset(lv, (S19478C12*), ABISELECT(72,36), "S19478C6");
    test_class_info(&lv, &cd_S19478C6);
    dp->~S19478C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19478C6(Test_S19478C6, "S19478C6", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN8S19478C6C1Ev();
extern void _ZN8S19478C6D1Ev();
Name_Map name_map_S19478C6[] = {
  NSPAIR(_ZN8S19478C6C1Ev),
  NSPAIR(_ZN8S19478C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19478C9;
extern VTBL_ENTRY _ZTI8S19478C9[];
extern  VTBL_ENTRY _ZTV8S19478C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C9[];
extern Class_Descriptor cd_S19478C8;
extern VTBL_ENTRY _ZTI8S19478C8[];
extern  VTBL_ENTRY _ZTV8S19478C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C8[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19478C3;
extern VTBL_ENTRY _ZTI8S19478C3[];
extern  VTBL_ENTRY _ZTV8S19478C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C3[];
extern Class_Descriptor cd_S19478C7;
extern VTBL_ENTRY _ZTI8S19478C7[];
extern  VTBL_ENTRY _ZTV8S19478C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C7[];
extern Class_Descriptor cd_S19478C11;
extern VTBL_ENTRY _ZTI9S19478C11[];
extern  VTBL_ENTRY _ZTV9S19478C11[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19478C13;
extern VTBL_ENTRY _ZTI9S19478C13[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19478C3;
extern VTBL_ENTRY _ZTI8S19478C3[];
extern  VTBL_ENTRY _ZTV8S19478C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C3[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19478C12;
extern VTBL_ENTRY _ZTI9S19478C12[];
extern  VTBL_ENTRY _ZTV9S19478C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19478C12[];
static Base_Class bases_S19478C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19478C9,    ABISELECT(40,20), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19478C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S19478C3,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //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
    7, //immediately_derived
  0, 0},
  {&cd_S19478C7,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19478C11,    0, //bcp->offset
    -1, //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
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19478C13,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19478C3,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    15, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19478C12,    ABISELECT(72,36), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19478C6[];
extern void _ZN9S19478C112v1Ev();
static  VTBL_ENTRY vtc_S19478C6[] = {
  ABISELECT(72,36),
  ABISELECT(152,108),
  ABISELECT(72,36),
  0,
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C6[0]),
  (VTBL_ENTRY)&_ZN9S19478C112v1Ev,
  ABISELECT(56,28),
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19478C6[0]),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19478C6[0]),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19478C6[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S19478C6[0]),
};
extern VTBL_ENTRY _ZTV8S19478C6[];
static  VTBL_ENTRY _tg__ZTV8S19478C7__8S19478C6[] = {
  ABISELECT(56,28),
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C88S19478C7__8S19478C6[] = {
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C9__8S19478C88S19478C7__8S19478C6[] = {
  ABISELECT(-40,-20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19478C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C38S19478C7__8S19478C6[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C9__8S19478C7__8S19478C6[] = {
  ABISELECT(-40,-20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19478C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C3__8S19478C7__8S19478C6[] = {
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19478C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C9__8S19478C6[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19478C12__8S19478C6[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19478C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C3__A1__8S19478C6[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C3[0]),
};
static  VTT_ENTRY vtt_S19478C6[] = {
  {&(_ZTV8S19478C6[11]),  11,28},
  {&(_ZTV8S19478C6[17]),  17,28},
  {&(_ZTV8S19478C6[23]),  23,28},
  {&(_ZTV8S19478C6[20]),  20,28},
  {&(_ZTV8S19478C6[11]),  11,28},
  {&(_ZTV8S19478C6[28]),  28,28},
  {&(_ZTV8S19478C6[28]),  28,28},
  {&(_tg__ZTV8S19478C7__8S19478C6[5]),  5,5},
  {&(_tg__ZTV8S19478C88S19478C7__8S19478C6[4]),  4,4},
  {&(_tg__ZTV8S19478C9__8S19478C88S19478C7__8S19478C6[3]),  3,3},
  {&(_tg__ZTV8S19478C38S19478C7__8S19478C6[3]),  3,3},
  {&(_tg__ZTV8S19478C9__8S19478C7__8S19478C6[3]),  3,3},
  {&(_tg__ZTV8S19478C3__8S19478C7__8S19478C6[3]),  3,3},
  {&(_tg__ZTV8S19478C9__8S19478C6[3]),  3,3},
  {&(_tg__ZTV9S19478C12__8S19478C6[5]),  5,5},
  {&(_tg__ZTV9S19478C12__8S19478C6[5]),  5,5},
  {&(_tg__ZTV8S19478C3__A1__8S19478C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19478C6[];
extern  VTBL_ENTRY _ZTV8S19478C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C6[];
Class_Descriptor cd_S19478C6 = {  "S19478C6", // class name
  bases_S19478C6, 16,
  &(vtc_S19478C6[0]), // expected_vtbl_contents
  &(vtt_S19478C6[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S19478C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19478C6),28, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19478C6),17, //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  S19478C14  : virtual S3600C29_nt {
  virtual  ~S19478C14(); // _ZN9S19478C14D2Ev
  S19478C14(); // tgen
};
//SIG(-1 S19478C14) C1{ VBC2{ m Fp} vd}


 S19478C14 ::~S19478C14(){ note_dtor("S19478C14", this);}
S19478C14 ::S19478C14(){ note_ctor("S19478C14", this);} // tgen

static void Test_S19478C14()
{
  extern Class_Descriptor cd_S19478C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19478C14, buf);
    S19478C14 *dp, &lv = *(dp=new (buf) S19478C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19478C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19478C14)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S19478C14");
    test_class_info(&lv, &cd_S19478C14);
    dp->~S19478C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19478C14(Test_S19478C14, "S19478C14", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19478C14C1Ev();
extern void _ZN9S19478C14D2Ev();
Name_Map name_map_S19478C14[] = {
  NSPAIR(_ZN9S19478C14C1Ev),
  NSPAIR(_ZN9S19478C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S19478C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19478C14[];
extern void _ZN9S19478C14D1Ev();
extern void _ZN9S19478C14D0Ev();
static  VTBL_ENTRY vtc_S19478C14[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19478C14[0]),
  (VTBL_ENTRY)&_ZN9S19478C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19478C14D0Ev,
};
extern VTBL_ENTRY _ZTV9S19478C14[];
static  VTT_ENTRY vtt_S19478C14[] = {
  {&(_ZTV9S19478C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19478C14[];
extern  VTBL_ENTRY _ZTV9S19478C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19478C14[];
Class_Descriptor cd_S19478C14 = {  "S19478C14", // class name
  bases_S19478C14, 1,
  &(vtc_S19478C14[0]), // expected_vtbl_contents
  &(vtt_S19478C14[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19478C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19478C14),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19478C14),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  S19478C1  : virtual S19478C2 , S19478C6 , S19478C14 , S19478C13 , S19478C3 {
  virtual  ~S19478C1(); // _ZN8S19478C1D2Ev
  S19478C1(); // tgen
};
//SIG(1 S19478C1) C1{ VBC2{ BC3{ VBC4{ m Fp} BC5{ m}}} BC6{ VBC7{ BC8{ VBC5 VBC9{ BC4 VBC5 FU10{ m}} Fi} BC3 FC5} VBC11{ v1} VBC12{ VBC13{ BC5 BC4} VBC3 BC4 FL[8]}} BC14{ VBC4 vd} BC13 BC3 vd}


 S19478C1 ::~S19478C1(){ note_dtor("S19478C1", this);}
S19478C1 ::S19478C1(){ note_ctor("S19478C1", this);} // tgen

static void Test_S19478C1()
{
  extern Class_Descriptor cd_S19478C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,33)];
    init_test(&cd_S19478C1, buf);
    S19478C1 *dp, &lv = *(dp=new (buf) S19478C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S19478C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19478C1)");
    check_base_class_offset(lv, (S3600C29_nt*)(S19478C3*)(S19478C2*), ABISELECT(40,20), "S19478C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S19478C3*)(S19478C7*), ABISELECT(40,20), "S19478C1");
    /*is_ambiguous_... S19478C1::S19478C3 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19478C3*), ABISELECT(40,20), "S19478C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S19478C14*), ABISELECT(40,20), "S19478C1");
    /*is_ambiguous_... S19478C1::S19478C3 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19478C3*), ABISELECT(40,20), "S19478C1");
    check_base_class_offset(lv, (S3600C19*)(S19478C3*)(S19478C2*), ABISELECT(32,16), "S19478C1");
    check_base_class_offset(lv, (S19478C3*)(S19478C2*), ABISELECT(32,16), "S19478C1");
    check_base_class_offset(lv, (S19478C2*), ABISELECT(32,16), "S19478C1");
    check_base_class_offset(lv, (S3600C19*)(S19478C8*)(S19478C7*), 0, "S19478C1");
    check_base_class_offset(lv, (S3600C19*)(S19478C9*), 0, "S19478C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S19478C9*), ABISELECT(88,44), "S19478C1");
    check_base_class_offset(lv, (S19478C9*)(S19478C8*)(S19478C7*), ABISELECT(80,40), "S19478C1");
    check_base_class_offset(lv, (S19478C8*)(S19478C7*), ABISELECT(48,24), "S19478C1");
    check_base_class_offset(lv, (S3600C19*)(S19478C3*)(S19478C7*), ABISELECT(64,32), "S19478C1");
    check_base_class_offset(lv, (S19478C3*)(S19478C7*), ABISELECT(64,32), "S19478C1");
    check_base_class_offset(lv, (S19478C7*)(S19478C6*), ABISELECT(48,24), "S19478C1");
    check_base_class_offset(lv, (S19478C11*)(S19478C6*), 0, "S19478C1");
    /*is_ambiguous_... S19478C1::S19478C13 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19478C13*), ABISELECT(184,124), "S19478C1");
    /*is_ambiguous_... S19478C1::S19478C13 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19478C13*), ABISELECT(184,124), "S19478C1");
    check_base_class_offset(lv, (S19478C13*)(S19478C12*), ABISELECT(184,124), "S19478C1");
    /*is_ambiguous_... S19478C1::S19478C3 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19478C3*), ABISELECT(104,52), "S19478C1");
    check_base_class_offset(lv, (S19478C3*)(S19478C12*), ABISELECT(104,52), "S19478C1");
    /*is_ambiguous_... S19478C12::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19478C12*), ABISELECT(112,56), "S19478C1");
    check_base_class_offset(lv, (S19478C12*)(S19478C6*), ABISELECT(104,52), "S19478C1");
    check_base_class_offset(lv, (S19478C6*), 0, "S19478C1");
    check_base_class_offset(lv, (S19478C14*), ABISELECT(8,4), "S19478C1");
    /*is_ambiguous_... S19478C1::S19478C13 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19478C13*), ABISELECT(16,8), "S19478C1");
    /*is_ambiguous_... S19478C1::S19478C13 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S19478C13*), ABISELECT(16,8), "S19478C1");
    /*is_ambiguous_... S19478C1::S19478C13 */ AMB_check_base_class_offset(lv, (S19478C13*), ABISELECT(16,8), "S19478C1");
    /*is_ambiguous_... S19478C1::S19478C3 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19478C3*), ABISELECT(24,12), "S19478C1");
    /*is_ambiguous_... S19478C1::S19478C3 */ AMB_check_base_class_offset(lv, (S19478C3*), ABISELECT(24,12), "S19478C1");
    test_class_info(&lv, &cd_S19478C1);
    dp->~S19478C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19478C1(Test_S19478C1, "S19478C1", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN8S19478C1C1Ev();
extern void _ZN8S19478C1D2Ev();
Name_Map name_map_S19478C1[] = {
  NSPAIR(_ZN8S19478C1C1Ev),
  NSPAIR(_ZN8S19478C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19478C3;
extern VTBL_ENTRY _ZTI8S19478C3[];
extern  VTBL_ENTRY _ZTV8S19478C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C3[];
extern Class_Descriptor cd_S19478C2;
extern VTBL_ENTRY _ZTI8S19478C2[];
extern  VTBL_ENTRY _ZTV8S19478C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C2[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19478C9;
extern VTBL_ENTRY _ZTI8S19478C9[];
extern  VTBL_ENTRY _ZTV8S19478C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C9[];
extern Class_Descriptor cd_S19478C8;
extern VTBL_ENTRY _ZTI8S19478C8[];
extern  VTBL_ENTRY _ZTV8S19478C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C8[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19478C3;
extern VTBL_ENTRY _ZTI8S19478C3[];
extern  VTBL_ENTRY _ZTV8S19478C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C3[];
extern Class_Descriptor cd_S19478C7;
extern VTBL_ENTRY _ZTI8S19478C7[];
extern  VTBL_ENTRY _ZTV8S19478C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C7[];
extern Class_Descriptor cd_S19478C11;
extern VTBL_ENTRY _ZTI9S19478C11[];
extern  VTBL_ENTRY _ZTV9S19478C11[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19478C13;
extern VTBL_ENTRY _ZTI9S19478C13[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19478C3;
extern VTBL_ENTRY _ZTI8S19478C3[];
extern  VTBL_ENTRY _ZTV8S19478C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C3[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19478C12;
extern VTBL_ENTRY _ZTI9S19478C12[];
extern  VTBL_ENTRY _ZTV9S19478C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19478C12[];
extern Class_Descriptor cd_S19478C6;
extern VTBL_ENTRY _ZTI8S19478C6[];
extern  VTBL_ENTRY _ZTV8S19478C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C6[];
extern Class_Descriptor cd_S19478C14;
extern VTBL_ENTRY _ZTI9S19478C14[];
extern  VTBL_ENTRY _ZTV9S19478C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19478C14[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S19478C13;
extern VTBL_ENTRY _ZTI9S19478C13[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19478C3;
extern VTBL_ENTRY _ZTI8S19478C3[];
extern  VTBL_ENTRY _ZTV8S19478C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C3[];
static Base_Class bases_S19478C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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
    2, //immediately_derived
  0, 0},
  {&cd_S19478C3,    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
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19478C2,    ABISELECT(32,16), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19478C9,    ABISELECT(80,40), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19478C8,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19478C3,    ABISELECT(64,32), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19478C7,    ABISELECT(48,24), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19478C11,    0, //bcp->offset
    -1, //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
    7, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(184,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
    14, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(184,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
    14, //immediately_derived
  0, 0},
  {&cd_S19478C13,    ABISELECT(184,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
    18, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19478C3,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19478C12,    ABISELECT(104,52), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19478C6,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19478C14,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19478C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    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
    25, //immediately_derived
  0, 0},
  {&cd_S19478C3,    ABISELECT(24,12), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19478C1[];
extern void _ZN9S19478C112v1Ev();
extern void _ZN8S19478C1D1Ev();
extern void _ZN8S19478C1D0Ev();
extern void ABISELECT(_ZThn8_N8S19478C1D1Ev,_ZThn4_N8S19478C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19478C1D0Ev,_ZThn4_N8S19478C1D0Ev)();
static  VTBL_ENTRY vtc_S19478C1[] = {
  ABISELECT(32,16),
  ABISELECT(104,52),
  ABISELECT(184,124),
  ABISELECT(104,52),
  0,
  ABISELECT(40,20),
  ABISELECT(80,40),
  0,
  ABISELECT(48,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C1[0]),
  (VTBL_ENTRY)&_ZN9S19478C112v1Ev,
  (VTBL_ENTRY)&_ZN8S19478C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19478C1D0Ev,
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19478C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19478C1D1Ev,_ZThn4_N8S19478C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19478C1D0Ev,_ZThn4_N8S19478C1D0Ev),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19478C1[0]),
  ABISELECT(8,4),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19478C1[0]),
  ABISELECT(-8,-4),
  ABISELECT(32,16),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19478C1[0]),
  ABISELECT(-24,-12),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19478C1[0]),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19478C1[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-64,-32),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S19478C1[0]),
};
extern VTBL_ENTRY _ZTV8S19478C1[];
extern void _ZN9S19478C112v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19478C6__8S19478C1[] = {
  ABISELECT(104,52),
  ABISELECT(184,124),
  ABISELECT(104,52),
  0,
  ABISELECT(40,20),
  ABISELECT(80,40),
  0,
  ABISELECT(48,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C6[0]),
  (VTBL_ENTRY)&_ZN9S19478C112v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19478C7__8S19478C6__8S19478C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(32,16),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19478C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C9__8S19478C6__8S19478C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19478C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C38S19478C7__8S19478C6__8S19478C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19478C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19478C12__8S19478C6__8S19478C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-64,-32),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S19478C6[0]),
};
extern void _ZN9S19478C14D1Ev();
extern void _ZN9S19478C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19478C14__8S19478C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19478C14[0]),
  (VTBL_ENTRY)&_ZN9S19478C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19478C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19478C3__A__8S19478C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C2__8S19478C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C38S19478C2__8S19478C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C7__8S19478C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(32,16),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C88S19478C7__8S19478C1[] = {
  ABISELECT(32,16),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C9__8S19478C88S19478C7__8S19478C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19478C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C38S19478C7__A1__8S19478C1[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C9__8S19478C7__8S19478C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19478C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C3__8S19478C7__8S19478C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19478C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C9__8S19478C1[] = {
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19478C12__8S19478C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19478C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19478C3__A2__8S19478C1[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19478C3[0]),
};
static  VTT_ENTRY vtt_S19478C1[] = {
  {&(_ZTV8S19478C1[12]),  12,42},
  {&(_tg__ZTV8S19478C6__8S19478C1[11]),  11,12},
  {&(_tg__ZTV8S19478C7__8S19478C6__8S19478C1[5]),  5,5},
  {&(_tg__ZTV8S19478C9__8S19478C6__8S19478C1[3]),  3,3},
  {&(_tg__ZTV8S19478C38S19478C7__8S19478C6__8S19478C1[3]),  3,3},
  {&(_tg__ZTV8S19478C6__8S19478C1[11]),  11,12},
  {&(_tg__ZTV9S19478C12__8S19478C6__8S19478C1[5]),  5,5},
  {&(_tg__ZTV9S19478C12__8S19478C6__8S19478C1[5]),  5,5},
  {&(_tg__ZTV9S19478C14__8S19478C1[3]),  3,5},
  {&(_tg__ZTV8S19478C3__A__8S19478C1[3]),  3,3},
  {&(_ZTV8S19478C1[26]),  26,42},
  {&(_ZTV8S19478C1[31]),  31,42},
  {&(_ZTV8S19478C1[37]),  37,42},
  {&(_ZTV8S19478C1[34]),  34,42},
  {&(_ZTV8S19478C1[12]),  12,42},
  {&(_ZTV8S19478C1[42]),  42,42},
  {&(_ZTV8S19478C1[42]),  42,42},
  {&(_ZTV8S19478C1[18]),  18,42},
  {&(_ZTV8S19478C1[23]),  23,42},
  {&(_tg__ZTV8S19478C2__8S19478C1[3]),  3,3},
  {&(_tg__ZTV8S19478C38S19478C2__8S19478C1[3]),  3,3},
  {&(_tg__ZTV8S19478C7__8S19478C1[5]),  5,5},
  {&(_tg__ZTV8S19478C88S19478C7__8S19478C1[4]),  4,4},
  {&(_tg__ZTV8S19478C9__8S19478C88S19478C7__8S19478C1[3]),  3,3},
  {&(_tg__ZTV8S19478C38S19478C7__A1__8S19478C1[3]),  3,3},
  {&(_tg__ZTV8S19478C9__8S19478C7__8S19478C1[3]),  3,3},
  {&(_tg__ZTV8S19478C3__8S19478C7__8S19478C1[3]),  3,3},
  {&(_tg__ZTV8S19478C9__8S19478C1[3]),  3,3},
  {&(_tg__ZTV9S19478C12__8S19478C1[5]),  5,5},
  {&(_tg__ZTV9S19478C12__8S19478C1[5]),  5,5},
  {&(_tg__ZTV8S19478C3__A2__8S19478C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19478C1[];
extern  VTBL_ENTRY _ZTV8S19478C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19478C1[];
Class_Descriptor cd_S19478C1 = {  "S19478C1", // class name
  bases_S19478C1, 26,
  &(vtc_S19478C1[0]), // expected_vtbl_contents
  &(vtt_S19478C1[0]), // expected_vtt_contents
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI8S19478C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19478C1),42, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19478C1),31, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9803C2  {
  int s9803c2f0[28];
  virtual  ~S9803C2(); // _ZN7S9803C2D1Ev
  virtual void  v4(); // _ZN7S9803C22v4Ev
  virtual void  v5(); // _ZN7S9803C22v5Ev
  virtual void  v6(); // _ZN7S9803C22v6Ev
  virtual void  v7(); // _ZN7S9803C22v7Ev
  virtual void  v8(); // _ZN7S9803C22v8Ev
  virtual void  v9(); // _ZN7S9803C22v9Ev
  virtual void  v10(); // _ZN7S9803C23v10Ev
  virtual void  v11(); // _ZN7S9803C23v11Ev
  virtual void  v12(); // _ZN7S9803C23v12Ev
  virtual void  v13(); // _ZN7S9803C23v13Ev
  virtual void  v14(); // _ZN7S9803C23v14Ev
  virtual void  v15(); // _ZN7S9803C23v15Ev
  virtual void  v16(); // _ZN7S9803C23v16Ev
  virtual void  v17(); // _ZN7S9803C23v17Ev
  virtual void  v18(); // _ZN7S9803C23v18Ev
  virtual void  v19(); // _ZN7S9803C23v19Ev
  virtual void  v20(); // _ZN7S9803C23v20Ev
  virtual void  v21(); // _ZN7S9803C23v21Ev
  virtual void  v22(); // _ZN7S9803C23v22Ev
  virtual void  v23(); // _ZN7S9803C23v23Ev
  virtual void  v24(); // _ZN7S9803C23v24Ev
  virtual void  v25(); // _ZN7S9803C23v25Ev
  virtual void  v26(); // _ZN7S9803C23v26Ev
  virtual void  v27(); // _ZN7S9803C23v27Ev
  virtual void  v28(); // _ZN7S9803C23v28Ev
  S9803C2(); // tgen
};
//SIG(-1 S9803C2) 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 Fi[28]}


 S9803C2 ::~S9803C2(){ note_dtor("S9803C2", this);}
void  S9803C2 ::v4(){vfunc_called(this, "_ZN7S9803C22v4Ev");}
void  S9803C2 ::v5(){vfunc_called(this, "_ZN7S9803C22v5Ev");}
void  S9803C2 ::v6(){vfunc_called(this, "_ZN7S9803C22v6Ev");}
void  S9803C2 ::v7(){vfunc_called(this, "_ZN7S9803C22v7Ev");}
void  S9803C2 ::v8(){vfunc_called(this, "_ZN7S9803C22v8Ev");}
void  S9803C2 ::v9(){vfunc_called(this, "_ZN7S9803C22v9Ev");}
void  S9803C2 ::v10(){vfunc_called(this, "_ZN7S9803C23v10Ev");}
void  S9803C2 ::v11(){vfunc_called(this, "_ZN7S9803C23v11Ev");}
void  S9803C2 ::v12(){vfunc_called(this, "_ZN7S9803C23v12Ev");}
void  S9803C2 ::v13(){vfunc_called(this, "_ZN7S9803C23v13Ev");}
void  S9803C2 ::v14(){vfunc_called(this, "_ZN7S9803C23v14Ev");}
void  S9803C2 ::v15(){vfunc_called(this, "_ZN7S9803C23v15Ev");}
void  S9803C2 ::v16(){vfunc_called(this, "_ZN7S9803C23v16Ev");}
void  S9803C2 ::v17(){vfunc_called(this, "_ZN7S9803C23v17Ev");}
void  S9803C2 ::v18(){vfunc_called(this, "_ZN7S9803C23v18Ev");}
void  S9803C2 ::v19(){vfunc_called(this, "_ZN7S9803C23v19Ev");}
void  S9803C2 ::v20(){vfunc_called(this, "_ZN7S9803C23v20Ev");}
void  S9803C2 ::v21(){vfunc_called(this, "_ZN7S9803C23v21Ev");}
void  S9803C2 ::v22(){vfunc_called(this, "_ZN7S9803C23v22Ev");}
void  S9803C2 ::v23(){vfunc_called(this, "_ZN7S9803C23v23Ev");}
void  S9803C2 ::v24(){vfunc_called(this, "_ZN7S9803C23v24Ev");}
void  S9803C2 ::v25(){vfunc_called(this, "_ZN7S9803C23v25Ev");}
void  S9803C2 ::v26(){vfunc_called(this, "_ZN7S9803C23v26Ev");}
void  S9803C2 ::v27(){vfunc_called(this, "_ZN7S9803C23v27Ev");}
void  S9803C2 ::v28(){vfunc_called(this, "_ZN7S9803C23v28Ev");}
S9803C2 ::S9803C2(){ note_ctor("S9803C2", this);} // tgen

static void Test_S9803C2()
{
  extern Class_Descriptor cd_S9803C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S9803C2, buf);
    S9803C2 *dp, &lv = *(dp=new (buf) S9803C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S9803C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9803C2)");
    check_field_offset(lv, s9803c2f0, ABISELECT(8,4), "S9803C2.s9803c2f0");
    test_class_info(&lv, &cd_S9803C2);
    dp->~S9803C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9803C2(Test_S9803C2, "S9803C2", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN7S9803C2C1Ev();
extern void _ZN7S9803C2D1Ev();
Name_Map name_map_S9803C2[] = {
  NSPAIR(_ZN7S9803C2C1Ev),
  NSPAIR(_ZN7S9803C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9803C2[];
extern void _ZN7S9803C2D1Ev();
extern void _ZN7S9803C2D0Ev();
extern void _ZN7S9803C22v4Ev();
extern void _ZN7S9803C22v5Ev();
extern void _ZN7S9803C22v6Ev();
extern void _ZN7S9803C22v7Ev();
extern void _ZN7S9803C22v8Ev();
extern void _ZN7S9803C22v9Ev();
extern void _ZN7S9803C23v10Ev();
extern void _ZN7S9803C23v11Ev();
extern void _ZN7S9803C23v12Ev();
extern void _ZN7S9803C23v13Ev();
extern void _ZN7S9803C23v14Ev();
extern void _ZN7S9803C23v15Ev();
extern void _ZN7S9803C23v16Ev();
extern void _ZN7S9803C23v17Ev();
extern void _ZN7S9803C23v18Ev();
extern void _ZN7S9803C23v19Ev();
extern void _ZN7S9803C23v20Ev();
extern void _ZN7S9803C23v21Ev();
extern void _ZN7S9803C23v22Ev();
extern void _ZN7S9803C23v23Ev();
extern void _ZN7S9803C23v24Ev();
extern void _ZN7S9803C23v25Ev();
extern void _ZN7S9803C23v26Ev();
extern void _ZN7S9803C23v27Ev();
extern void _ZN7S9803C23v28Ev();
static  VTBL_ENTRY vtc_S9803C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9803C2[0]),
  (VTBL_ENTRY)&_ZN7S9803C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9803C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9803C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9803C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9803C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9803C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9803C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9803C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v16Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v17Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v18Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v19Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v20Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v21Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v22Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v23Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v24Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v25Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v26Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v27Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v28Ev,
};
extern VTBL_ENTRY _ZTI7S9803C2[];
extern  VTBL_ENTRY _ZTV7S9803C2[];
Class_Descriptor cd_S9803C2 = {  "S9803C2", // class name
  0,0,//no base classes
  &(vtc_S9803C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI7S9803C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9803C2),29, //virtual function table var
  2, // 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  S9803C1  : S9803C2 {
  void *s9803c1f0;
  __tsi64 s9803c1f1;
  ::S1566C29 s9803c1f2;
  virtual void  v1(); // _ZN7S9803C12v1Ev
  virtual void  v2(); // _ZN7S9803C12v2Ev
  virtual void  v3(); // _ZN7S9803C12v3Ev
  ~S9803C1(); // tgen
  S9803C1(); // tgen
};
//SIG(1 S9803C1) C1{ BC2{ 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 Fi[28]} v1 v2 v3 Fp FL FC3{ BC4{ m Fp Fi[2]}}}


void  S9803C1 ::v1(){vfunc_called(this, "_ZN7S9803C12v1Ev");}
void  S9803C1 ::v2(){vfunc_called(this, "_ZN7S9803C12v2Ev");}
void  S9803C1 ::v3(){vfunc_called(this, "_ZN7S9803C12v3Ev");}
S9803C1 ::~S9803C1(){ note_dtor("S9803C1", this);} // tgen
S9803C1 ::S9803C1(){ note_ctor("S9803C1", this);} // tgen

static void Test_S9803C1()
{
  extern Class_Descriptor cd_S9803C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,36)];
    init_test(&cd_S9803C1, buf);
    S9803C1 *dp, &lv = *(dp=new (buf) S9803C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,140), "sizeof(S9803C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9803C1)");
    check_base_class_offset(lv, (S9803C2*), 0, "S9803C1");
    check_field_offset(lv, s9803c1f0, ABISELECT(120,116), "S9803C1.s9803c1f0");
    check_field_offset(lv, s9803c1f1, ABISELECT(128,120), "S9803C1.s9803c1f1");
    check_field_offset(lv, s9803c1f2, ABISELECT(136,128), "S9803C1.s9803c1f2");
    test_class_info(&lv, &cd_S9803C1);
    dp->~S9803C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9803C1(Test_S9803C1, "S9803C1", ABISELECT(152,140));

#else // __cplusplus

extern void _ZN7S9803C1C1Ev();
extern void _ZN7S9803C1D1Ev();
Name_Map name_map_S9803C1[] = {
  NSPAIR(_ZN7S9803C1C1Ev),
  NSPAIR(_ZN7S9803C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9803C2;
extern VTBL_ENTRY _ZTI7S9803C2[];
extern  VTBL_ENTRY _ZTV7S9803C2[];
static Base_Class bases_S9803C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9803C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9803C1[];
extern void _ZN7S9803C1D1Ev();
extern void _ZN7S9803C1D0Ev();
extern void _ZN7S9803C22v4Ev();
extern void _ZN7S9803C22v5Ev();
extern void _ZN7S9803C22v6Ev();
extern void _ZN7S9803C22v7Ev();
extern void _ZN7S9803C22v8Ev();
extern void _ZN7S9803C22v9Ev();
extern void _ZN7S9803C23v10Ev();
extern void _ZN7S9803C23v11Ev();
extern void _ZN7S9803C23v12Ev();
extern void _ZN7S9803C23v13Ev();
extern void _ZN7S9803C23v14Ev();
extern void _ZN7S9803C23v15Ev();
extern void _ZN7S9803C23v16Ev();
extern void _ZN7S9803C23v17Ev();
extern void _ZN7S9803C23v18Ev();
extern void _ZN7S9803C23v19Ev();
extern void _ZN7S9803C23v20Ev();
extern void _ZN7S9803C23v21Ev();
extern void _ZN7S9803C23v22Ev();
extern void _ZN7S9803C23v23Ev();
extern void _ZN7S9803C23v24Ev();
extern void _ZN7S9803C23v25Ev();
extern void _ZN7S9803C23v26Ev();
extern void _ZN7S9803C23v27Ev();
extern void _ZN7S9803C23v28Ev();
extern void _ZN7S9803C12v1Ev();
extern void _ZN7S9803C12v2Ev();
extern void _ZN7S9803C12v3Ev();
static  VTBL_ENTRY vtc_S9803C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9803C1[0]),
  (VTBL_ENTRY)&_ZN7S9803C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9803C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9803C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9803C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9803C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9803C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9803C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9803C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v16Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v17Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v18Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v19Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v20Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v21Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v22Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v23Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v24Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v25Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v26Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v27Ev,
  (VTBL_ENTRY)&_ZN7S9803C23v28Ev,
  (VTBL_ENTRY)&_ZN7S9803C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9803C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9803C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9803C1[];
extern  VTBL_ENTRY _ZTV7S9803C1[];
Class_Descriptor cd_S9803C1 = {  "S9803C1", // class name
  bases_S9803C1, 1,
  &(vtc_S9803C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,140), // object size
  NSPAIRA(_ZTI7S9803C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9803C1),32, //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  S9491C2  {
  int s9491c2f0[28];
  virtual  ~S9491C2(); // _ZN7S9491C2D1Ev
  virtual void  v3(); // _ZN7S9491C22v3Ev
  virtual void  v4(); // _ZN7S9491C22v4Ev
  virtual void  v5(); // _ZN7S9491C22v5Ev
  virtual void  v6(); // _ZN7S9491C22v6Ev
  virtual void  v7(); // _ZN7S9491C22v7Ev
  virtual void  v8(); // _ZN7S9491C22v8Ev
  virtual void  v9(); // _ZN7S9491C22v9Ev
  virtual void  v10(); // _ZN7S9491C23v10Ev
  virtual void  v11(); // _ZN7S9491C23v11Ev
  virtual void  v12(); // _ZN7S9491C23v12Ev
  virtual void  v13(); // _ZN7S9491C23v13Ev
  virtual void  v14(); // _ZN7S9491C23v14Ev
  virtual void  v15(); // _ZN7S9491C23v15Ev
  virtual void  v16(); // _ZN7S9491C23v16Ev
  virtual void  v17(); // _ZN7S9491C23v17Ev
  virtual void  v18(); // _ZN7S9491C23v18Ev
  virtual void  v19(); // _ZN7S9491C23v19Ev
  virtual void  v20(); // _ZN7S9491C23v20Ev
  virtual void  v21(); // _ZN7S9491C23v21Ev
  virtual void  v22(); // _ZN7S9491C23v22Ev
  virtual void  v23(); // _ZN7S9491C23v23Ev
  virtual void  v24(); // _ZN7S9491C23v24Ev
  virtual void  v25(); // _ZN7S9491C23v25Ev
  virtual void  v26(); // _ZN7S9491C23v26Ev
  virtual void  v27(); // _ZN7S9491C23v27Ev
  S9491C2(); // tgen
};
//SIG(-1 S9491C2) 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 Fi[28]}


 S9491C2 ::~S9491C2(){ note_dtor("S9491C2", this);}
void  S9491C2 ::v3(){vfunc_called(this, "_ZN7S9491C22v3Ev");}
void  S9491C2 ::v4(){vfunc_called(this, "_ZN7S9491C22v4Ev");}
void  S9491C2 ::v5(){vfunc_called(this, "_ZN7S9491C22v5Ev");}
void  S9491C2 ::v6(){vfunc_called(this, "_ZN7S9491C22v6Ev");}
void  S9491C2 ::v7(){vfunc_called(this, "_ZN7S9491C22v7Ev");}
void  S9491C2 ::v8(){vfunc_called(this, "_ZN7S9491C22v8Ev");}
void  S9491C2 ::v9(){vfunc_called(this, "_ZN7S9491C22v9Ev");}
void  S9491C2 ::v10(){vfunc_called(this, "_ZN7S9491C23v10Ev");}
void  S9491C2 ::v11(){vfunc_called(this, "_ZN7S9491C23v11Ev");}
void  S9491C2 ::v12(){vfunc_called(this, "_ZN7S9491C23v12Ev");}
void  S9491C2 ::v13(){vfunc_called(this, "_ZN7S9491C23v13Ev");}
void  S9491C2 ::v14(){vfunc_called(this, "_ZN7S9491C23v14Ev");}
void  S9491C2 ::v15(){vfunc_called(this, "_ZN7S9491C23v15Ev");}
void  S9491C2 ::v16(){vfunc_called(this, "_ZN7S9491C23v16Ev");}
void  S9491C2 ::v17(){vfunc_called(this, "_ZN7S9491C23v17Ev");}
void  S9491C2 ::v18(){vfunc_called(this, "_ZN7S9491C23v18Ev");}
void  S9491C2 ::v19(){vfunc_called(this, "_ZN7S9491C23v19Ev");}
void  S9491C2 ::v20(){vfunc_called(this, "_ZN7S9491C23v20Ev");}
void  S9491C2 ::v21(){vfunc_called(this, "_ZN7S9491C23v21Ev");}
void  S9491C2 ::v22(){vfunc_called(this, "_ZN7S9491C23v22Ev");}
void  S9491C2 ::v23(){vfunc_called(this, "_ZN7S9491C23v23Ev");}
void  S9491C2 ::v24(){vfunc_called(this, "_ZN7S9491C23v24Ev");}
void  S9491C2 ::v25(){vfunc_called(this, "_ZN7S9491C23v25Ev");}
void  S9491C2 ::v26(){vfunc_called(this, "_ZN7S9491C23v26Ev");}
void  S9491C2 ::v27(){vfunc_called(this, "_ZN7S9491C23v27Ev");}
S9491C2 ::S9491C2(){ note_ctor("S9491C2", this);} // tgen

static void Test_S9491C2()
{
  extern Class_Descriptor cd_S9491C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S9491C2, buf);
    S9491C2 *dp, &lv = *(dp=new (buf) S9491C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S9491C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9491C2)");
    check_field_offset(lv, s9491c2f0, ABISELECT(8,4), "S9491C2.s9491c2f0");
    test_class_info(&lv, &cd_S9491C2);
    dp->~S9491C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9491C2(Test_S9491C2, "S9491C2", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN7S9491C2C1Ev();
extern void _ZN7S9491C2D1Ev();
Name_Map name_map_S9491C2[] = {
  NSPAIR(_ZN7S9491C2C1Ev),
  NSPAIR(_ZN7S9491C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9491C2[];
extern void _ZN7S9491C2D1Ev();
extern void _ZN7S9491C2D0Ev();
extern void _ZN7S9491C22v3Ev();
extern void _ZN7S9491C22v4Ev();
extern void _ZN7S9491C22v5Ev();
extern void _ZN7S9491C22v6Ev();
extern void _ZN7S9491C22v7Ev();
extern void _ZN7S9491C22v8Ev();
extern void _ZN7S9491C22v9Ev();
extern void _ZN7S9491C23v10Ev();
extern void _ZN7S9491C23v11Ev();
extern void _ZN7S9491C23v12Ev();
extern void _ZN7S9491C23v13Ev();
extern void _ZN7S9491C23v14Ev();
extern void _ZN7S9491C23v15Ev();
extern void _ZN7S9491C23v16Ev();
extern void _ZN7S9491C23v17Ev();
extern void _ZN7S9491C23v18Ev();
extern void _ZN7S9491C23v19Ev();
extern void _ZN7S9491C23v20Ev();
extern void _ZN7S9491C23v21Ev();
extern void _ZN7S9491C23v22Ev();
extern void _ZN7S9491C23v23Ev();
extern void _ZN7S9491C23v24Ev();
extern void _ZN7S9491C23v25Ev();
extern void _ZN7S9491C23v26Ev();
extern void _ZN7S9491C23v27Ev();
static  VTBL_ENTRY vtc_S9491C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9491C2[0]),
  (VTBL_ENTRY)&_ZN7S9491C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9491C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9491C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9491C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9491C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9491C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9491C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9491C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9491C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v16Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v17Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v18Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v19Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v20Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v21Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v22Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v23Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v24Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v25Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v26Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v27Ev,
};
extern VTBL_ENTRY _ZTI7S9491C2[];
extern  VTBL_ENTRY _ZTV7S9491C2[];
Class_Descriptor cd_S9491C2 = {  "S9491C2", // class name
  0,0,//no base classes
  &(vtc_S9491C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI7S9491C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9491C2),29, //virtual function table var
  2, // 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  S9491C1  : S9491C2 {
  void *s9491c1f0;
  int s9491c1f1[2];
  ::S1566C29 s9491c1f2;
  virtual void  v1(); // _ZN7S9491C12v1Ev
  virtual void  v2(); // _ZN7S9491C12v2Ev
  ~S9491C1(); // tgen
  S9491C1(); // tgen
};
//SIG(1 S9491C1) C1{ BC2{ 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 Fi[28]} v1 v2 Fp Fi[2] FC3{ BC4{ m Fp Fi[2]}}}


void  S9491C1 ::v1(){vfunc_called(this, "_ZN7S9491C12v1Ev");}
void  S9491C1 ::v2(){vfunc_called(this, "_ZN7S9491C12v2Ev");}
S9491C1 ::~S9491C1(){ note_dtor("S9491C1", this);} // tgen
S9491C1 ::S9491C1(){ note_ctor("S9491C1", this);} // tgen

static void Test_S9491C1()
{
  extern Class_Descriptor cd_S9491C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,36)];
    init_test(&cd_S9491C1, buf);
    S9491C1 *dp, &lv = *(dp=new (buf) S9491C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,140), "sizeof(S9491C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9491C1)");
    check_base_class_offset(lv, (S9491C2*), 0, "S9491C1");
    check_field_offset(lv, s9491c1f0, ABISELECT(120,116), "S9491C1.s9491c1f0");
    check_field_offset(lv, s9491c1f1, ABISELECT(128,120), "S9491C1.s9491c1f1");
    check_field_offset(lv, s9491c1f2, ABISELECT(136,128), "S9491C1.s9491c1f2");
    test_class_info(&lv, &cd_S9491C1);
    dp->~S9491C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9491C1(Test_S9491C1, "S9491C1", ABISELECT(152,140));

#else // __cplusplus

extern void _ZN7S9491C1C1Ev();
extern void _ZN7S9491C1D1Ev();
Name_Map name_map_S9491C1[] = {
  NSPAIR(_ZN7S9491C1C1Ev),
  NSPAIR(_ZN7S9491C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9491C2;
extern VTBL_ENTRY _ZTI7S9491C2[];
extern  VTBL_ENTRY _ZTV7S9491C2[];
static Base_Class bases_S9491C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9491C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9491C1[];
extern void _ZN7S9491C1D1Ev();
extern void _ZN7S9491C1D0Ev();
extern void _ZN7S9491C22v3Ev();
extern void _ZN7S9491C22v4Ev();
extern void _ZN7S9491C22v5Ev();
extern void _ZN7S9491C22v6Ev();
extern void _ZN7S9491C22v7Ev();
extern void _ZN7S9491C22v8Ev();
extern void _ZN7S9491C22v9Ev();
extern void _ZN7S9491C23v10Ev();
extern void _ZN7S9491C23v11Ev();
extern void _ZN7S9491C23v12Ev();
extern void _ZN7S9491C23v13Ev();
extern void _ZN7S9491C23v14Ev();
extern void _ZN7S9491C23v15Ev();
extern void _ZN7S9491C23v16Ev();
extern void _ZN7S9491C23v17Ev();
extern void _ZN7S9491C23v18Ev();
extern void _ZN7S9491C23v19Ev();
extern void _ZN7S9491C23v20Ev();
extern void _ZN7S9491C23v21Ev();
extern void _ZN7S9491C23v22Ev();
extern void _ZN7S9491C23v23Ev();
extern void _ZN7S9491C23v24Ev();
extern void _ZN7S9491C23v25Ev();
extern void _ZN7S9491C23v26Ev();
extern void _ZN7S9491C23v27Ev();
extern void _ZN7S9491C12v1Ev();
extern void _ZN7S9491C12v2Ev();
static  VTBL_ENTRY vtc_S9491C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9491C1[0]),
  (VTBL_ENTRY)&_ZN7S9491C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9491C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9491C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9491C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9491C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9491C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9491C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9491C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9491C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v16Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v17Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v18Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v19Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v20Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v21Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v22Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v23Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v24Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v25Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v26Ev,
  (VTBL_ENTRY)&_ZN7S9491C23v27Ev,
  (VTBL_ENTRY)&_ZN7S9491C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9491C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9491C1[];
extern  VTBL_ENTRY _ZTV7S9491C1[];
Class_Descriptor cd_S9491C1 = {  "S9491C1", // class name
  bases_S9491C1, 1,
  &(vtc_S9491C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,140), // object size
  NSPAIRA(_ZTI7S9491C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9491C1),31, //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  S10209C2  {
  int s10209c2f0[28];
  virtual  ~S10209C2(); // _ZN8S10209C2D1Ev
  virtual void  v8(); // _ZN8S10209C22v8Ev
  virtual void  v9(); // _ZN8S10209C22v9Ev
  virtual void  v10(); // _ZN8S10209C23v10Ev
  virtual void  v11(); // _ZN8S10209C23v11Ev
  virtual void  v12(); // _ZN8S10209C23v12Ev
  virtual void  v13(); // _ZN8S10209C23v13Ev
  virtual void  v14(); // _ZN8S10209C23v14Ev
  virtual void  v15(); // _ZN8S10209C23v15Ev
  virtual void  v16(); // _ZN8S10209C23v16Ev
  virtual void  v17(); // _ZN8S10209C23v17Ev
  virtual void  v18(); // _ZN8S10209C23v18Ev
  virtual void  v19(); // _ZN8S10209C23v19Ev
  virtual void  v20(); // _ZN8S10209C23v20Ev
  virtual void  v21(); // _ZN8S10209C23v21Ev
  virtual void  v22(); // _ZN8S10209C23v22Ev
  virtual void  v23(); // _ZN8S10209C23v23Ev
  virtual void  v24(); // _ZN8S10209C23v24Ev
  virtual void  v25(); // _ZN8S10209C23v25Ev
  virtual void  v26(); // _ZN8S10209C23v26Ev
  virtual void  v27(); // _ZN8S10209C23v27Ev
  virtual void  v28(); // _ZN8S10209C23v28Ev
  virtual void  v29(); // _ZN8S10209C23v29Ev
  virtual void  v30(); // _ZN8S10209C23v30Ev
  virtual void  v31(); // _ZN8S10209C23v31Ev
  virtual void  v32(); // _ZN8S10209C23v32Ev
  S10209C2(); // tgen
};
//SIG(-1 S10209C2) 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 Fi[28]}


 S10209C2 ::~S10209C2(){ note_dtor("S10209C2", this);}
void  S10209C2 ::v8(){vfunc_called(this, "_ZN8S10209C22v8Ev");}
void  S10209C2 ::v9(){vfunc_called(this, "_ZN8S10209C22v9Ev");}
void  S10209C2 ::v10(){vfunc_called(this, "_ZN8S10209C23v10Ev");}
void  S10209C2 ::v11(){vfunc_called(this, "_ZN8S10209C23v11Ev");}
void  S10209C2 ::v12(){vfunc_called(this, "_ZN8S10209C23v12Ev");}
void  S10209C2 ::v13(){vfunc_called(this, "_ZN8S10209C23v13Ev");}
void  S10209C2 ::v14(){vfunc_called(this, "_ZN8S10209C23v14Ev");}
void  S10209C2 ::v15(){vfunc_called(this, "_ZN8S10209C23v15Ev");}
void  S10209C2 ::v16(){vfunc_called(this, "_ZN8S10209C23v16Ev");}
void  S10209C2 ::v17(){vfunc_called(this, "_ZN8S10209C23v17Ev");}
void  S10209C2 ::v18(){vfunc_called(this, "_ZN8S10209C23v18Ev");}
void  S10209C2 ::v19(){vfunc_called(this, "_ZN8S10209C23v19Ev");}
void  S10209C2 ::v20(){vfunc_called(this, "_ZN8S10209C23v20Ev");}
void  S10209C2 ::v21(){vfunc_called(this, "_ZN8S10209C23v21Ev");}
void  S10209C2 ::v22(){vfunc_called(this, "_ZN8S10209C23v22Ev");}
void  S10209C2 ::v23(){vfunc_called(this, "_ZN8S10209C23v23Ev");}
void  S10209C2 ::v24(){vfunc_called(this, "_ZN8S10209C23v24Ev");}
void  S10209C2 ::v25(){vfunc_called(this, "_ZN8S10209C23v25Ev");}
void  S10209C2 ::v26(){vfunc_called(this, "_ZN8S10209C23v26Ev");}
void  S10209C2 ::v27(){vfunc_called(this, "_ZN8S10209C23v27Ev");}
void  S10209C2 ::v28(){vfunc_called(this, "_ZN8S10209C23v28Ev");}
void  S10209C2 ::v29(){vfunc_called(this, "_ZN8S10209C23v29Ev");}
void  S10209C2 ::v30(){vfunc_called(this, "_ZN8S10209C23v30Ev");}
void  S10209C2 ::v31(){vfunc_called(this, "_ZN8S10209C23v31Ev");}
void  S10209C2 ::v32(){vfunc_called(this, "_ZN8S10209C23v32Ev");}
S10209C2 ::S10209C2(){ note_ctor("S10209C2", this);} // tgen

static void Test_S10209C2()
{
  extern Class_Descriptor cd_S10209C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S10209C2, buf);
    S10209C2 *dp, &lv = *(dp=new (buf) S10209C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S10209C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10209C2)");
    check_field_offset(lv, s10209c2f0, ABISELECT(8,4), "S10209C2.s10209c2f0");
    test_class_info(&lv, &cd_S10209C2);
    dp->~S10209C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10209C2(Test_S10209C2, "S10209C2", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN8S10209C2C1Ev();
extern void _ZN8S10209C2D1Ev();
Name_Map name_map_S10209C2[] = {
  NSPAIR(_ZN8S10209C2C1Ev),
  NSPAIR(_ZN8S10209C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10209C2[];
extern void _ZN8S10209C2D1Ev();
extern void _ZN8S10209C2D0Ev();
extern void _ZN8S10209C22v8Ev();
extern void _ZN8S10209C22v9Ev();
extern void _ZN8S10209C23v10Ev();
extern void _ZN8S10209C23v11Ev();
extern void _ZN8S10209C23v12Ev();
extern void _ZN8S10209C23v13Ev();
extern void _ZN8S10209C23v14Ev();
extern void _ZN8S10209C23v15Ev();
extern void _ZN8S10209C23v16Ev();
extern void _ZN8S10209C23v17Ev();
extern void _ZN8S10209C23v18Ev();
extern void _ZN8S10209C23v19Ev();
extern void _ZN8S10209C23v20Ev();
extern void _ZN8S10209C23v21Ev();
extern void _ZN8S10209C23v22Ev();
extern void _ZN8S10209C23v23Ev();
extern void _ZN8S10209C23v24Ev();
extern void _ZN8S10209C23v25Ev();
extern void _ZN8S10209C23v26Ev();
extern void _ZN8S10209C23v27Ev();
extern void _ZN8S10209C23v28Ev();
extern void _ZN8S10209C23v29Ev();
extern void _ZN8S10209C23v30Ev();
extern void _ZN8S10209C23v31Ev();
extern void _ZN8S10209C23v32Ev();
static  VTBL_ENTRY vtc_S10209C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10209C2[0]),
  (VTBL_ENTRY)&_ZN8S10209C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10209C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10209C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10209C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v20Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v21Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v22Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v23Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v24Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v25Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v26Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v27Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v28Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v29Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v30Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v31Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v32Ev,
};
extern VTBL_ENTRY _ZTI8S10209C2[];
extern  VTBL_ENTRY _ZTV8S10209C2[];
Class_Descriptor cd_S10209C2 = {  "S10209C2", // class name
  0,0,//no base classes
  &(vtc_S10209C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI8S10209C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10209C2),29, //virtual function table var
  2, // 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  S10209C1  : S10209C2 {
  void *s10209c1f0[2];
  int s10209c1f1;
  virtual void  v1(); // _ZN8S10209C12v1Ev
  virtual void  v2(); // _ZN8S10209C12v2Ev
  virtual void  v3(); // _ZN8S10209C12v3Ev
  virtual void  v4(); // _ZN8S10209C12v4Ev
  virtual void  v5(); // _ZN8S10209C12v5Ev
  virtual void  v6(); // _ZN8S10209C12v6Ev
  virtual void  v7(); // _ZN8S10209C12v7Ev
  ~S10209C1(); // tgen
  S10209C1(); // tgen
};
//SIG(1 S10209C1) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fi[28]} v1 v2 v3 v4 v5 v6 v7 Fp[2] Fi}


void  S10209C1 ::v1(){vfunc_called(this, "_ZN8S10209C12v1Ev");}
void  S10209C1 ::v2(){vfunc_called(this, "_ZN8S10209C12v2Ev");}
void  S10209C1 ::v3(){vfunc_called(this, "_ZN8S10209C12v3Ev");}
void  S10209C1 ::v4(){vfunc_called(this, "_ZN8S10209C12v4Ev");}
void  S10209C1 ::v5(){vfunc_called(this, "_ZN8S10209C12v5Ev");}
void  S10209C1 ::v6(){vfunc_called(this, "_ZN8S10209C12v6Ev");}
void  S10209C1 ::v7(){vfunc_called(this, "_ZN8S10209C12v7Ev");}
S10209C1 ::~S10209C1(){ note_dtor("S10209C1", this);} // tgen
S10209C1 ::S10209C1(){ note_ctor("S10209C1", this);} // tgen

static void Test_S10209C1()
{
  extern Class_Descriptor cd_S10209C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,33)];
    init_test(&cd_S10209C1, buf);
    S10209C1 *dp, &lv = *(dp=new (buf) S10209C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,128), "sizeof(S10209C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10209C1)");
    check_base_class_offset(lv, (S10209C2*), 0, "S10209C1");
    check_field_offset(lv, s10209c1f0, ABISELECT(120,116), "S10209C1.s10209c1f0");
    check_field_offset(lv, s10209c1f1, ABISELECT(136,124), "S10209C1.s10209c1f1");
    test_class_info(&lv, &cd_S10209C1);
    dp->~S10209C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10209C1(Test_S10209C1, "S10209C1", ABISELECT(144,128));

#else // __cplusplus

extern void _ZN8S10209C1C1Ev();
extern void _ZN8S10209C1D1Ev();
Name_Map name_map_S10209C1[] = {
  NSPAIR(_ZN8S10209C1C1Ev),
  NSPAIR(_ZN8S10209C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10209C2;
extern VTBL_ENTRY _ZTI8S10209C2[];
extern  VTBL_ENTRY _ZTV8S10209C2[];
static Base_Class bases_S10209C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10209C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10209C1[];
extern void _ZN8S10209C1D1Ev();
extern void _ZN8S10209C1D0Ev();
extern void _ZN8S10209C22v8Ev();
extern void _ZN8S10209C22v9Ev();
extern void _ZN8S10209C23v10Ev();
extern void _ZN8S10209C23v11Ev();
extern void _ZN8S10209C23v12Ev();
extern void _ZN8S10209C23v13Ev();
extern void _ZN8S10209C23v14Ev();
extern void _ZN8S10209C23v15Ev();
extern void _ZN8S10209C23v16Ev();
extern void _ZN8S10209C23v17Ev();
extern void _ZN8S10209C23v18Ev();
extern void _ZN8S10209C23v19Ev();
extern void _ZN8S10209C23v20Ev();
extern void _ZN8S10209C23v21Ev();
extern void _ZN8S10209C23v22Ev();
extern void _ZN8S10209C23v23Ev();
extern void _ZN8S10209C23v24Ev();
extern void _ZN8S10209C23v25Ev();
extern void _ZN8S10209C23v26Ev();
extern void _ZN8S10209C23v27Ev();
extern void _ZN8S10209C23v28Ev();
extern void _ZN8S10209C23v29Ev();
extern void _ZN8S10209C23v30Ev();
extern void _ZN8S10209C23v31Ev();
extern void _ZN8S10209C23v32Ev();
extern void _ZN8S10209C12v1Ev();
extern void _ZN8S10209C12v2Ev();
extern void _ZN8S10209C12v3Ev();
extern void _ZN8S10209C12v4Ev();
extern void _ZN8S10209C12v5Ev();
extern void _ZN8S10209C12v6Ev();
extern void _ZN8S10209C12v7Ev();
static  VTBL_ENTRY vtc_S10209C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10209C1[0]),
  (VTBL_ENTRY)&_ZN8S10209C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10209C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10209C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10209C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v20Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v21Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v22Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v23Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v24Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v25Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v26Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v27Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v28Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v29Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v30Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v31Ev,
  (VTBL_ENTRY)&_ZN8S10209C23v32Ev,
  (VTBL_ENTRY)&_ZN8S10209C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10209C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10209C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10209C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10209C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10209C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10209C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S10209C1[];
extern  VTBL_ENTRY _ZTV8S10209C1[];
Class_Descriptor cd_S10209C1 = {  "S10209C1", // class name
  bases_S10209C1, 1,
  &(vtc_S10209C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,128), // object size
  NSPAIRA(_ZTI8S10209C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10209C1),36, //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  S9493C2  {
  int s9493c2f0[28];
  virtual  ~S9493C2(); // _ZN7S9493C2D1Ev
  virtual void  v3(); // _ZN7S9493C22v3Ev
  virtual void  v4(); // _ZN7S9493C22v4Ev
  virtual void  v5(); // _ZN7S9493C22v5Ev
  virtual void  v6(); // _ZN7S9493C22v6Ev
  virtual void  v7(); // _ZN7S9493C22v7Ev
  virtual void  v8(); // _ZN7S9493C22v8Ev
  virtual void  v9(); // _ZN7S9493C22v9Ev
  virtual void  v10(); // _ZN7S9493C23v10Ev
  virtual void  v11(); // _ZN7S9493C23v11Ev
  virtual void  v12(); // _ZN7S9493C23v12Ev
  virtual void  v13(); // _ZN7S9493C23v13Ev
  virtual void  v14(); // _ZN7S9493C23v14Ev
  virtual void  v15(); // _ZN7S9493C23v15Ev
  virtual void  v16(); // _ZN7S9493C23v16Ev
  virtual void  v17(); // _ZN7S9493C23v17Ev
  virtual void  v18(); // _ZN7S9493C23v18Ev
  virtual void  v19(); // _ZN7S9493C23v19Ev
  virtual void  v20(); // _ZN7S9493C23v20Ev
  virtual void  v21(); // _ZN7S9493C23v21Ev
  virtual void  v22(); // _ZN7S9493C23v22Ev
  virtual void  v23(); // _ZN7S9493C23v23Ev
  virtual void  v24(); // _ZN7S9493C23v24Ev
  virtual void  v25(); // _ZN7S9493C23v25Ev
  virtual void  v26(); // _ZN7S9493C23v26Ev
  virtual void  v27(); // _ZN7S9493C23v27Ev
  S9493C2(); // tgen
};
//SIG(-1 S9493C2) 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 Fi[28]}


 S9493C2 ::~S9493C2(){ note_dtor("S9493C2", this);}
void  S9493C2 ::v3(){vfunc_called(this, "_ZN7S9493C22v3Ev");}
void  S9493C2 ::v4(){vfunc_called(this, "_ZN7S9493C22v4Ev");}
void  S9493C2 ::v5(){vfunc_called(this, "_ZN7S9493C22v5Ev");}
void  S9493C2 ::v6(){vfunc_called(this, "_ZN7S9493C22v6Ev");}
void  S9493C2 ::v7(){vfunc_called(this, "_ZN7S9493C22v7Ev");}
void  S9493C2 ::v8(){vfunc_called(this, "_ZN7S9493C22v8Ev");}
void  S9493C2 ::v9(){vfunc_called(this, "_ZN7S9493C22v9Ev");}
void  S9493C2 ::v10(){vfunc_called(this, "_ZN7S9493C23v10Ev");}
void  S9493C2 ::v11(){vfunc_called(this, "_ZN7S9493C23v11Ev");}
void  S9493C2 ::v12(){vfunc_called(this, "_ZN7S9493C23v12Ev");}
void  S9493C2 ::v13(){vfunc_called(this, "_ZN7S9493C23v13Ev");}
void  S9493C2 ::v14(){vfunc_called(this, "_ZN7S9493C23v14Ev");}
void  S9493C2 ::v15(){vfunc_called(this, "_ZN7S9493C23v15Ev");}
void  S9493C2 ::v16(){vfunc_called(this, "_ZN7S9493C23v16Ev");}
void  S9493C2 ::v17(){vfunc_called(this, "_ZN7S9493C23v17Ev");}
void  S9493C2 ::v18(){vfunc_called(this, "_ZN7S9493C23v18Ev");}
void  S9493C2 ::v19(){vfunc_called(this, "_ZN7S9493C23v19Ev");}
void  S9493C2 ::v20(){vfunc_called(this, "_ZN7S9493C23v20Ev");}
void  S9493C2 ::v21(){vfunc_called(this, "_ZN7S9493C23v21Ev");}
void  S9493C2 ::v22(){vfunc_called(this, "_ZN7S9493C23v22Ev");}
void  S9493C2 ::v23(){vfunc_called(this, "_ZN7S9493C23v23Ev");}
void  S9493C2 ::v24(){vfunc_called(this, "_ZN7S9493C23v24Ev");}
void  S9493C2 ::v25(){vfunc_called(this, "_ZN7S9493C23v25Ev");}
void  S9493C2 ::v26(){vfunc_called(this, "_ZN7S9493C23v26Ev");}
void  S9493C2 ::v27(){vfunc_called(this, "_ZN7S9493C23v27Ev");}
S9493C2 ::S9493C2(){ note_ctor("S9493C2", this);} // tgen

static void Test_S9493C2()
{
  extern Class_Descriptor cd_S9493C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S9493C2, buf);
    S9493C2 *dp, &lv = *(dp=new (buf) S9493C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S9493C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9493C2)");
    check_field_offset(lv, s9493c2f0, ABISELECT(8,4), "S9493C2.s9493c2f0");
    test_class_info(&lv, &cd_S9493C2);
    dp->~S9493C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9493C2(Test_S9493C2, "S9493C2", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN7S9493C2C1Ev();
extern void _ZN7S9493C2D1Ev();
Name_Map name_map_S9493C2[] = {
  NSPAIR(_ZN7S9493C2C1Ev),
  NSPAIR(_ZN7S9493C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9493C2[];
extern void _ZN7S9493C2D1Ev();
extern void _ZN7S9493C2D0Ev();
extern void _ZN7S9493C22v3Ev();
extern void _ZN7S9493C22v4Ev();
extern void _ZN7S9493C22v5Ev();
extern void _ZN7S9493C22v6Ev();
extern void _ZN7S9493C22v7Ev();
extern void _ZN7S9493C22v8Ev();
extern void _ZN7S9493C22v9Ev();
extern void _ZN7S9493C23v10Ev();
extern void _ZN7S9493C23v11Ev();
extern void _ZN7S9493C23v12Ev();
extern void _ZN7S9493C23v13Ev();
extern void _ZN7S9493C23v14Ev();
extern void _ZN7S9493C23v15Ev();
extern void _ZN7S9493C23v16Ev();
extern void _ZN7S9493C23v17Ev();
extern void _ZN7S9493C23v18Ev();
extern void _ZN7S9493C23v19Ev();
extern void _ZN7S9493C23v20Ev();
extern void _ZN7S9493C23v21Ev();
extern void _ZN7S9493C23v22Ev();
extern void _ZN7S9493C23v23Ev();
extern void _ZN7S9493C23v24Ev();
extern void _ZN7S9493C23v25Ev();
extern void _ZN7S9493C23v26Ev();
extern void _ZN7S9493C23v27Ev();
static  VTBL_ENTRY vtc_S9493C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9493C2[0]),
  (VTBL_ENTRY)&_ZN7S9493C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9493C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9493C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9493C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9493C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9493C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9493C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9493C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9493C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v16Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v17Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v18Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v19Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v20Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v21Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v22Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v23Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v24Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v25Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v26Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v27Ev,
};
extern VTBL_ENTRY _ZTI7S9493C2[];
extern  VTBL_ENTRY _ZTV7S9493C2[];
Class_Descriptor cd_S9493C2 = {  "S9493C2", // class name
  0,0,//no base classes
  &(vtc_S9493C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI7S9493C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9493C2),29, //virtual function table var
  2, // 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  S9493C1  : S9493C2 {
  void *s9493c1f0[4];
  ::S1566C29 s9493c1f1;
  int s9493c1f2;
  virtual void  v1(); // _ZN7S9493C12v1Ev
  virtual void  v2(); // _ZN7S9493C12v2Ev
  ~S9493C1(); // tgen
  S9493C1(); // tgen
};
//SIG(1 S9493C1) C1{ BC2{ 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 Fi[28]} v1 v2 Fp[4] FC3{ BC4{ m Fp Fi[2]}} Fi}


void  S9493C1 ::v1(){vfunc_called(this, "_ZN7S9493C12v1Ev");}
void  S9493C1 ::v2(){vfunc_called(this, "_ZN7S9493C12v2Ev");}
S9493C1 ::~S9493C1(){ note_dtor("S9493C1", this);} // tgen
S9493C1 ::S9493C1(){ note_ctor("S9493C1", this);} // tgen

static void Test_S9493C1()
{
  extern Class_Descriptor cd_S9493C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,38)];
    init_test(&cd_S9493C1, buf);
    S9493C1 *dp, &lv = *(dp=new (buf) S9493C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,148), "sizeof(S9493C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9493C1)");
    check_base_class_offset(lv, (S9493C2*), 0, "S9493C1");
    check_field_offset(lv, s9493c1f0, ABISELECT(120,116), "S9493C1.s9493c1f0");
    check_field_offset(lv, s9493c1f1, ABISELECT(152,132), "S9493C1.s9493c1f1");
    check_field_offset(lv, s9493c1f2, ABISELECT(168,144), "S9493C1.s9493c1f2");
    test_class_info(&lv, &cd_S9493C1);
    dp->~S9493C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9493C1(Test_S9493C1, "S9493C1", ABISELECT(176,148));

#else // __cplusplus

extern void _ZN7S9493C1C1Ev();
extern void _ZN7S9493C1D1Ev();
Name_Map name_map_S9493C1[] = {
  NSPAIR(_ZN7S9493C1C1Ev),
  NSPAIR(_ZN7S9493C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9493C2;
extern VTBL_ENTRY _ZTI7S9493C2[];
extern  VTBL_ENTRY _ZTV7S9493C2[];
static Base_Class bases_S9493C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9493C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9493C1[];
extern void _ZN7S9493C1D1Ev();
extern void _ZN7S9493C1D0Ev();
extern void _ZN7S9493C22v3Ev();
extern void _ZN7S9493C22v4Ev();
extern void _ZN7S9493C22v5Ev();
extern void _ZN7S9493C22v6Ev();
extern void _ZN7S9493C22v7Ev();
extern void _ZN7S9493C22v8Ev();
extern void _ZN7S9493C22v9Ev();
extern void _ZN7S9493C23v10Ev();
extern void _ZN7S9493C23v11Ev();
extern void _ZN7S9493C23v12Ev();
extern void _ZN7S9493C23v13Ev();
extern void _ZN7S9493C23v14Ev();
extern void _ZN7S9493C23v15Ev();
extern void _ZN7S9493C23v16Ev();
extern void _ZN7S9493C23v17Ev();
extern void _ZN7S9493C23v18Ev();
extern void _ZN7S9493C23v19Ev();
extern void _ZN7S9493C23v20Ev();
extern void _ZN7S9493C23v21Ev();
extern void _ZN7S9493C23v22Ev();
extern void _ZN7S9493C23v23Ev();
extern void _ZN7S9493C23v24Ev();
extern void _ZN7S9493C23v25Ev();
extern void _ZN7S9493C23v26Ev();
extern void _ZN7S9493C23v27Ev();
extern void _ZN7S9493C12v1Ev();
extern void _ZN7S9493C12v2Ev();
static  VTBL_ENTRY vtc_S9493C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9493C1[0]),
  (VTBL_ENTRY)&_ZN7S9493C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9493C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9493C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9493C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9493C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9493C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9493C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9493C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9493C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v16Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v17Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v18Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v19Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v20Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v21Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v22Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v23Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v24Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v25Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v26Ev,
  (VTBL_ENTRY)&_ZN7S9493C23v27Ev,
  (VTBL_ENTRY)&_ZN7S9493C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9493C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9493C1[];
extern  VTBL_ENTRY _ZTV7S9493C1[];
Class_Descriptor cd_S9493C1 = {  "S9493C1", // class name
  bases_S9493C1, 1,
  &(vtc_S9493C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,148), // object size
  NSPAIRA(_ZTI7S9493C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9493C1),31, //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  S8974C2  {
  int s8974c2f0[28];
  virtual  ~S8974C2(); // _ZN7S8974C2D1Ev
  virtual void  v2(); // _ZN7S8974C22v2Ev
  virtual void  v3(); // _ZN7S8974C22v3Ev
  virtual void  v4(); // _ZN7S8974C22v4Ev
  virtual void  v5(); // _ZN7S8974C22v5Ev
  virtual void  v6(); // _ZN7S8974C22v6Ev
  virtual void  v7(); // _ZN7S8974C22v7Ev
  virtual void  v8(); // _ZN7S8974C22v8Ev
  virtual void  v9(); // _ZN7S8974C22v9Ev
  virtual void  v10(); // _ZN7S8974C23v10Ev
  virtual void  v11(); // _ZN7S8974C23v11Ev
  virtual void  v12(); // _ZN7S8974C23v12Ev
  virtual void  v13(); // _ZN7S8974C23v13Ev
  virtual void  v14(); // _ZN7S8974C23v14Ev
  virtual void  v15(); // _ZN7S8974C23v15Ev
  virtual void  v16(); // _ZN7S8974C23v16Ev
  virtual void  v17(); // _ZN7S8974C23v17Ev
  virtual void  v18(); // _ZN7S8974C23v18Ev
  virtual void  v19(); // _ZN7S8974C23v19Ev
  virtual void  v20(); // _ZN7S8974C23v20Ev
  virtual void  v21(); // _ZN7S8974C23v21Ev
  virtual void  v22(); // _ZN7S8974C23v22Ev
  virtual void  v23(); // _ZN7S8974C23v23Ev
  virtual void  v24(); // _ZN7S8974C23v24Ev
  virtual void  v25(); // _ZN7S8974C23v25Ev
  virtual void  v26(); // _ZN7S8974C23v26Ev
  S8974C2(); // tgen
};
//SIG(-1 S8974C2) 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 Fi[28]}


 S8974C2 ::~S8974C2(){ note_dtor("S8974C2", this);}
void  S8974C2 ::v2(){vfunc_called(this, "_ZN7S8974C22v2Ev");}
void  S8974C2 ::v3(){vfunc_called(this, "_ZN7S8974C22v3Ev");}
void  S8974C2 ::v4(){vfunc_called(this, "_ZN7S8974C22v4Ev");}
void  S8974C2 ::v5(){vfunc_called(this, "_ZN7S8974C22v5Ev");}
void  S8974C2 ::v6(){vfunc_called(this, "_ZN7S8974C22v6Ev");}
void  S8974C2 ::v7(){vfunc_called(this, "_ZN7S8974C22v7Ev");}
void  S8974C2 ::v8(){vfunc_called(this, "_ZN7S8974C22v8Ev");}
void  S8974C2 ::v9(){vfunc_called(this, "_ZN7S8974C22v9Ev");}
void  S8974C2 ::v10(){vfunc_called(this, "_ZN7S8974C23v10Ev");}
void  S8974C2 ::v11(){vfunc_called(this, "_ZN7S8974C23v11Ev");}
void  S8974C2 ::v12(){vfunc_called(this, "_ZN7S8974C23v12Ev");}
void  S8974C2 ::v13(){vfunc_called(this, "_ZN7S8974C23v13Ev");}
void  S8974C2 ::v14(){vfunc_called(this, "_ZN7S8974C23v14Ev");}
void  S8974C2 ::v15(){vfunc_called(this, "_ZN7S8974C23v15Ev");}
void  S8974C2 ::v16(){vfunc_called(this, "_ZN7S8974C23v16Ev");}
void  S8974C2 ::v17(){vfunc_called(this, "_ZN7S8974C23v17Ev");}
void  S8974C2 ::v18(){vfunc_called(this, "_ZN7S8974C23v18Ev");}
void  S8974C2 ::v19(){vfunc_called(this, "_ZN7S8974C23v19Ev");}
void  S8974C2 ::v20(){vfunc_called(this, "_ZN7S8974C23v20Ev");}
void  S8974C2 ::v21(){vfunc_called(this, "_ZN7S8974C23v21Ev");}
void  S8974C2 ::v22(){vfunc_called(this, "_ZN7S8974C23v22Ev");}
void  S8974C2 ::v23(){vfunc_called(this, "_ZN7S8974C23v23Ev");}
void  S8974C2 ::v24(){vfunc_called(this, "_ZN7S8974C23v24Ev");}
void  S8974C2 ::v25(){vfunc_called(this, "_ZN7S8974C23v25Ev");}
void  S8974C2 ::v26(){vfunc_called(this, "_ZN7S8974C23v26Ev");}
S8974C2 ::S8974C2(){ note_ctor("S8974C2", this);} // tgen

static void Test_S8974C2()
{
  extern Class_Descriptor cd_S8974C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S8974C2, buf);
    S8974C2 *dp, &lv = *(dp=new (buf) S8974C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S8974C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8974C2)");
    check_field_offset(lv, s8974c2f0, ABISELECT(8,4), "S8974C2.s8974c2f0");
    test_class_info(&lv, &cd_S8974C2);
    dp->~S8974C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8974C2(Test_S8974C2, "S8974C2", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN7S8974C2C1Ev();
extern void _ZN7S8974C2D1Ev();
Name_Map name_map_S8974C2[] = {
  NSPAIR(_ZN7S8974C2C1Ev),
  NSPAIR(_ZN7S8974C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8974C2[];
extern void _ZN7S8974C2D1Ev();
extern void _ZN7S8974C2D0Ev();
extern void _ZN7S8974C22v2Ev();
extern void _ZN7S8974C22v3Ev();
extern void _ZN7S8974C22v4Ev();
extern void _ZN7S8974C22v5Ev();
extern void _ZN7S8974C22v6Ev();
extern void _ZN7S8974C22v7Ev();
extern void _ZN7S8974C22v8Ev();
extern void _ZN7S8974C22v9Ev();
extern void _ZN7S8974C23v10Ev();
extern void _ZN7S8974C23v11Ev();
extern void _ZN7S8974C23v12Ev();
extern void _ZN7S8974C23v13Ev();
extern void _ZN7S8974C23v14Ev();
extern void _ZN7S8974C23v15Ev();
extern void _ZN7S8974C23v16Ev();
extern void _ZN7S8974C23v17Ev();
extern void _ZN7S8974C23v18Ev();
extern void _ZN7S8974C23v19Ev();
extern void _ZN7S8974C23v20Ev();
extern void _ZN7S8974C23v21Ev();
extern void _ZN7S8974C23v22Ev();
extern void _ZN7S8974C23v23Ev();
extern void _ZN7S8974C23v24Ev();
extern void _ZN7S8974C23v25Ev();
extern void _ZN7S8974C23v26Ev();
static  VTBL_ENTRY vtc_S8974C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8974C2[0]),
  (VTBL_ENTRY)&_ZN7S8974C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8974C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8974C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8974C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8974C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8974C22v7Ev,
  (VTBL_ENTRY)&_ZN7S8974C22v8Ev,
  (VTBL_ENTRY)&_ZN7S8974C22v9Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v24Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v25Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v26Ev,
};
extern VTBL_ENTRY _ZTI7S8974C2[];
extern  VTBL_ENTRY _ZTV7S8974C2[];
Class_Descriptor cd_S8974C2 = {  "S8974C2", // class name
  0,0,//no base classes
  &(vtc_S8974C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI7S8974C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8974C2),29, //virtual function table var
  2, // 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  S8974C1  : S8974C2 {
  ::S1566C29 s8974c1f0;
  void *s8974c1f1[3];
  int s8974c1f2[2];
  virtual void  v1(); // _ZN7S8974C12v1Ev
  ~S8974C1(); // tgen
  S8974C1(); // tgen
};
//SIG(1 S8974C1) C1{ BC2{ vd 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 Fi[28]} v1 FC3{ BC4{ m Fp Fi[2]}} Fp[3] Fi[2]}


void  S8974C1 ::v1(){vfunc_called(this, "_ZN7S8974C12v1Ev");}
S8974C1 ::~S8974C1(){ note_dtor("S8974C1", this);} // tgen
S8974C1 ::S8974C1(){ note_ctor("S8974C1", this);} // tgen

static void Test_S8974C1()
{
  extern Class_Descriptor cd_S8974C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,38)];
    init_test(&cd_S8974C1, buf);
    S8974C1 *dp, &lv = *(dp=new (buf) S8974C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,148), "sizeof(S8974C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8974C1)");
    check_base_class_offset(lv, (S8974C2*), 0, "S8974C1");
    check_field_offset(lv, s8974c1f0, ABISELECT(120,116), "S8974C1.s8974c1f0");
    check_field_offset(lv, s8974c1f1, ABISELECT(136,128), "S8974C1.s8974c1f1");
    check_field_offset(lv, s8974c1f2, ABISELECT(160,140), "S8974C1.s8974c1f2");
    test_class_info(&lv, &cd_S8974C1);
    dp->~S8974C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8974C1(Test_S8974C1, "S8974C1", ABISELECT(168,148));

#else // __cplusplus

extern void _ZN7S8974C1C1Ev();
extern void _ZN7S8974C1D1Ev();
Name_Map name_map_S8974C1[] = {
  NSPAIR(_ZN7S8974C1C1Ev),
  NSPAIR(_ZN7S8974C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8974C2;
extern VTBL_ENTRY _ZTI7S8974C2[];
extern  VTBL_ENTRY _ZTV7S8974C2[];
static Base_Class bases_S8974C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8974C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S8974C1[];
extern void _ZN7S8974C1D1Ev();
extern void _ZN7S8974C1D0Ev();
extern void _ZN7S8974C22v2Ev();
extern void _ZN7S8974C22v3Ev();
extern void _ZN7S8974C22v4Ev();
extern void _ZN7S8974C22v5Ev();
extern void _ZN7S8974C22v6Ev();
extern void _ZN7S8974C22v7Ev();
extern void _ZN7S8974C22v8Ev();
extern void _ZN7S8974C22v9Ev();
extern void _ZN7S8974C23v10Ev();
extern void _ZN7S8974C23v11Ev();
extern void _ZN7S8974C23v12Ev();
extern void _ZN7S8974C23v13Ev();
extern void _ZN7S8974C23v14Ev();
extern void _ZN7S8974C23v15Ev();
extern void _ZN7S8974C23v16Ev();
extern void _ZN7S8974C23v17Ev();
extern void _ZN7S8974C23v18Ev();
extern void _ZN7S8974C23v19Ev();
extern void _ZN7S8974C23v20Ev();
extern void _ZN7S8974C23v21Ev();
extern void _ZN7S8974C23v22Ev();
extern void _ZN7S8974C23v23Ev();
extern void _ZN7S8974C23v24Ev();
extern void _ZN7S8974C23v25Ev();
extern void _ZN7S8974C23v26Ev();
extern void _ZN7S8974C12v1Ev();
static  VTBL_ENTRY vtc_S8974C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8974C1[0]),
  (VTBL_ENTRY)&_ZN7S8974C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8974C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8974C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8974C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8974C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8974C22v7Ev,
  (VTBL_ENTRY)&_ZN7S8974C22v8Ev,
  (VTBL_ENTRY)&_ZN7S8974C22v9Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v24Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v25Ev,
  (VTBL_ENTRY)&_ZN7S8974C23v26Ev,
  (VTBL_ENTRY)&_ZN7S8974C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8974C1[];
extern  VTBL_ENTRY _ZTV7S8974C1[];
Class_Descriptor cd_S8974C1 = {  "S8974C1", // class name
  bases_S8974C1, 1,
  &(vtc_S8974C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,148), // object size
  NSPAIRA(_ZTI7S8974C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8974C1),30, //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  S3063C3  {
  void *s3063c3f0;
  long s3063c3f1[6];
  char s3063c3f2:5;
  virtual void  v2(); // _ZN7S3063C32v2Ev
  virtual void  v3(); // _ZN7S3063C32v3Ev
  virtual void  v4(); // _ZN7S3063C32v4Ev
  virtual void  v5(); // _ZN7S3063C32v5Ev
  ~S3063C3(); // tgen
  S3063C3(); // tgen
};
//SIG(-1 S3063C3) C1{ v1 v2 v3 v4 Fp Fl[6] Fc:5}


void  S3063C3 ::v2(){vfunc_called(this, "_ZN7S3063C32v2Ev");}
void  S3063C3 ::v3(){vfunc_called(this, "_ZN7S3063C32v3Ev");}
void  S3063C3 ::v4(){vfunc_called(this, "_ZN7S3063C32v4Ev");}
void  S3063C3 ::v5(){vfunc_called(this, "_ZN7S3063C32v5Ev");}
S3063C3 ::~S3063C3(){ note_dtor("S3063C3", this);} // tgen
S3063C3 ::S3063C3(){ note_ctor("S3063C3", this);} // tgen

static void Test_S3063C3()
{
  extern Class_Descriptor cd_S3063C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S3063C3, buf);
    S3063C3 *dp, &lv = *(dp=new (buf) S3063C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S3063C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3063C3)");
    check_field_offset(lv, s3063c3f0, ABISELECT(8,4), "S3063C3.s3063c3f0");
    check_field_offset(lv, s3063c3f1, ABISELECT(16,8), "S3063C3.s3063c3f1");
    set_bf_and_test(lv, s3063c3f2, ABISELECT(64,32), 0, 5, 1, "S3063C3");
    set_bf_and_test(lv, s3063c3f2, ABISELECT(64,32), 0, 5, hide_sll(1LL<<4), "S3063C3");
    test_class_info(&lv, &cd_S3063C3);
    dp->~S3063C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3063C3(Test_S3063C3, "S3063C3", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S3063C3C1Ev();
extern void _ZN7S3063C3D1Ev();
Name_Map name_map_S3063C3[] = {
  NSPAIR(_ZN7S3063C3C1Ev),
  NSPAIR(_ZN7S3063C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3063C3[];
extern void _ZN7S3063C32v2Ev();
extern void _ZN7S3063C32v3Ev();
extern void _ZN7S3063C32v4Ev();
extern void _ZN7S3063C32v5Ev();
static  VTBL_ENTRY vtc_S3063C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3063C3[0]),
  (VTBL_ENTRY)&_ZN7S3063C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3063C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3063C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3063C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S3063C3[];
extern  VTBL_ENTRY _ZTV7S3063C3[];
Class_Descriptor cd_S3063C3 = {  "S3063C3", // class name
  0,0,//no base classes
  &(vtc_S3063C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S3063C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3063C3),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  S3063C2  : S3063C3 {
  void *s3063c2f0[11];
  char s3063c2f1[4];
  __tsi64 s3063c2f2;
  virtual void  v6(); // _ZN7S3063C22v6Ev
  virtual void  v7(); // _ZN7S3063C22v7Ev
  virtual void  v8(); // _ZN7S3063C22v8Ev
  virtual void  v9(); // _ZN7S3063C22v9Ev
  ~S3063C2(); // tgen
  S3063C2(); // tgen
};
//SIG(-1 S3063C2) C1{ BC2{ v5 v6 v7 v8 Fp Fl[6] Fc:5} v1 v2 v3 v4 Fp[11] Fc[4] FL}


void  S3063C2 ::v6(){vfunc_called(this, "_ZN7S3063C22v6Ev");}
void  S3063C2 ::v7(){vfunc_called(this, "_ZN7S3063C22v7Ev");}
void  S3063C2 ::v8(){vfunc_called(this, "_ZN7S3063C22v8Ev");}
void  S3063C2 ::v9(){vfunc_called(this, "_ZN7S3063C22v9Ev");}
S3063C2 ::~S3063C2(){ note_dtor("S3063C2", this);} // tgen
S3063C2 ::S3063C2(){ note_ctor("S3063C2", this);} // tgen

static void Test_S3063C2()
{
  extern Class_Descriptor cd_S3063C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,24)];
    init_test(&cd_S3063C2, buf);
    S3063C2 *dp, &lv = *(dp=new (buf) S3063C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,92), "sizeof(S3063C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3063C2)");
    check_base_class_offset(lv, (S3063C3*), 0, "S3063C2");
    check_field_offset(lv, s3063c2f0, ABISELECT(72,36), "S3063C2.s3063c2f0");
    check_field_offset(lv, s3063c2f1, ABISELECT(160,80), "S3063C2.s3063c2f1");
    check_field_offset(lv, s3063c2f2, ABISELECT(168,84), "S3063C2.s3063c2f2");
    test_class_info(&lv, &cd_S3063C2);
    dp->~S3063C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3063C2(Test_S3063C2, "S3063C2", ABISELECT(176,92));

#else // __cplusplus

extern void _ZN7S3063C2C1Ev();
extern void _ZN7S3063C2D1Ev();
Name_Map name_map_S3063C2[] = {
  NSPAIR(_ZN7S3063C2C1Ev),
  NSPAIR(_ZN7S3063C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3063C3;
extern VTBL_ENTRY _ZTI7S3063C3[];
extern  VTBL_ENTRY _ZTV7S3063C3[];
static Base_Class bases_S3063C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3063C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S3063C2[];
extern void _ZN7S3063C32v2Ev();
extern void _ZN7S3063C32v3Ev();
extern void _ZN7S3063C32v4Ev();
extern void _ZN7S3063C32v5Ev();
extern void _ZN7S3063C22v6Ev();
extern void _ZN7S3063C22v7Ev();
extern void _ZN7S3063C22v8Ev();
extern void _ZN7S3063C22v9Ev();
static  VTBL_ENTRY vtc_S3063C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3063C2[0]),
  (VTBL_ENTRY)&_ZN7S3063C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3063C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3063C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3063C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3063C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3063C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3063C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3063C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S3063C2[];
extern  VTBL_ENTRY _ZTV7S3063C2[];
Class_Descriptor cd_S3063C2 = {  "S3063C2", // class name
  bases_S3063C2, 1,
  &(vtc_S3063C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,92), // object size
  NSPAIRA(_ZTI7S3063C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3063C2),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3063C5  {
  int s3063c5f0;
  void *s3063c5f1[2];
  char s3063c5f2[4];
  virtual void  v10(); // _ZN7S3063C53v10Ev
  virtual void  v11(); // _ZN7S3063C53v11Ev
  virtual void  v12(); // _ZN7S3063C53v12Ev
  virtual void  v13(); // _ZN7S3063C53v13Ev
  virtual void  v14(); // _ZN7S3063C53v14Ev
  ~S3063C5(); // tgen
  S3063C5(); // tgen
};
//SIG(-1 S3063C5) C1{ v1 v2 v3 v4 v5 Fi Fp[2] Fc[4]}


void  S3063C5 ::v10(){vfunc_called(this, "_ZN7S3063C53v10Ev");}
void  S3063C5 ::v11(){vfunc_called(this, "_ZN7S3063C53v11Ev");}
void  S3063C5 ::v12(){vfunc_called(this, "_ZN7S3063C53v12Ev");}
void  S3063C5 ::v13(){vfunc_called(this, "_ZN7S3063C53v13Ev");}
void  S3063C5 ::v14(){vfunc_called(this, "_ZN7S3063C53v14Ev");}
S3063C5 ::~S3063C5(){ note_dtor("S3063C5", this);} // tgen
S3063C5 ::S3063C5(){ note_ctor("S3063C5", this);} // tgen

static void Test_S3063C5()
{
  extern Class_Descriptor cd_S3063C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3063C5, buf);
    S3063C5 *dp, &lv = *(dp=new (buf) S3063C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3063C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3063C5)");
    check_field_offset(lv, s3063c5f0, ABISELECT(8,4), "S3063C5.s3063c5f0");
    check_field_offset(lv, s3063c5f1, ABISELECT(16,8), "S3063C5.s3063c5f1");
    check_field_offset(lv, s3063c5f2, ABISELECT(32,16), "S3063C5.s3063c5f2");
    test_class_info(&lv, &cd_S3063C5);
    dp->~S3063C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3063C5(Test_S3063C5, "S3063C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3063C5C1Ev();
extern void _ZN7S3063C5D1Ev();
Name_Map name_map_S3063C5[] = {
  NSPAIR(_ZN7S3063C5C1Ev),
  NSPAIR(_ZN7S3063C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3063C5[];
extern void _ZN7S3063C53v10Ev();
extern void _ZN7S3063C53v11Ev();
extern void _ZN7S3063C53v12Ev();
extern void _ZN7S3063C53v13Ev();
extern void _ZN7S3063C53v14Ev();
static  VTBL_ENTRY vtc_S3063C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3063C5[0]),
  (VTBL_ENTRY)&_ZN7S3063C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3063C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3063C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3063C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3063C53v14Ev,
};
extern VTBL_ENTRY _ZTI7S3063C5[];
extern  VTBL_ENTRY _ZTV7S3063C5[];
Class_Descriptor cd_S3063C5 = {  "S3063C5", // class name
  0,0,//no base classes
  &(vtc_S3063C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3063C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3063C5),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  S3063C4  : S3063C5 , S3063C3 {
  short s3063c4f0;
  void *s3063c4f1;
  virtual void  v15(); // _ZN7S3063C43v15Ev
  virtual void  v16(); // _ZN7S3063C43v16Ev
  virtual void  v17(); // _ZN7S3063C43v17Ev
  virtual void  v18(); // _ZN7S3063C43v18Ev
  virtual void  v19(); // _ZN7S3063C43v19Ev
  ~S3063C4(); // tgen
  S3063C4(); // tgen
};
//SIG(-1 S3063C4) C1{ BC2{ v6 v7 v8 v9 v10 Fi Fp[2] Fc[4]} BC3{ v11 v12 v13 v14 Fp Fl[6] Fc:5} v1 v2 v3 v4 v5 Fs Fp}


void  S3063C4 ::v15(){vfunc_called(this, "_ZN7S3063C43v15Ev");}
void  S3063C4 ::v16(){vfunc_called(this, "_ZN7S3063C43v16Ev");}
void  S3063C4 ::v17(){vfunc_called(this, "_ZN7S3063C43v17Ev");}
void  S3063C4 ::v18(){vfunc_called(this, "_ZN7S3063C43v18Ev");}
void  S3063C4 ::v19(){vfunc_called(this, "_ZN7S3063C43v19Ev");}
S3063C4 ::~S3063C4(){ note_dtor("S3063C4", this);} // tgen
S3063C4 ::S3063C4(){ note_ctor("S3063C4", this);} // tgen

static void Test_S3063C4()
{
  extern Class_Descriptor cd_S3063C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S3063C4, buf);
    S3063C4 *dp, &lv = *(dp=new (buf) S3063C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S3063C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3063C4)");
    check_base_class_offset(lv, (S3063C5*), 0, "S3063C4");
    check_base_class_offset(lv, (S3063C3*), ABISELECT(40,20), "S3063C4");
    check_field_offset(lv, s3063c4f0, ABISELECT(106,54), "S3063C4.s3063c4f0");
    check_field_offset(lv, s3063c4f1, ABISELECT(112,56), "S3063C4.s3063c4f1");
    test_class_info(&lv, &cd_S3063C4);
    dp->~S3063C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3063C4(Test_S3063C4, "S3063C4", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN7S3063C4C1Ev();
extern void _ZN7S3063C4D1Ev();
Name_Map name_map_S3063C4[] = {
  NSPAIR(_ZN7S3063C4C1Ev),
  NSPAIR(_ZN7S3063C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3063C5;
extern VTBL_ENTRY _ZTI7S3063C5[];
extern  VTBL_ENTRY _ZTV7S3063C5[];
extern Class_Descriptor cd_S3063C3;
extern VTBL_ENTRY _ZTI7S3063C3[];
extern  VTBL_ENTRY _ZTV7S3063C3[];
static Base_Class bases_S3063C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3063C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3063C3,    ABISELECT(40,20), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3063C4[];
extern void _ZN7S3063C53v10Ev();
extern void _ZN7S3063C53v11Ev();
extern void _ZN7S3063C53v12Ev();
extern void _ZN7S3063C53v13Ev();
extern void _ZN7S3063C53v14Ev();
extern void _ZN7S3063C43v15Ev();
extern void _ZN7S3063C43v16Ev();
extern void _ZN7S3063C43v17Ev();
extern void _ZN7S3063C43v18Ev();
extern void _ZN7S3063C43v19Ev();
extern void _ZN7S3063C32v2Ev();
extern void _ZN7S3063C32v3Ev();
extern void _ZN7S3063C32v4Ev();
extern void _ZN7S3063C32v5Ev();
static  VTBL_ENTRY vtc_S3063C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3063C4[0]),
  (VTBL_ENTRY)&_ZN7S3063C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3063C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3063C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3063C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3063C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3063C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3063C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3063C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3063C43v18Ev,
  (VTBL_ENTRY)&_ZN7S3063C43v19Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3063C4[0]),
  (VTBL_ENTRY)&_ZN7S3063C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3063C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3063C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3063C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S3063C4[];
extern  VTBL_ENTRY _ZTV7S3063C4[];
Class_Descriptor cd_S3063C4 = {  "S3063C4", // class name
  bases_S3063C4, 2,
  &(vtc_S3063C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI7S3063C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3063C4),18, //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  S3063C1  : S3063C2 , S3063C4 {
  virtual void  v1(); // _ZN7S3063C12v1Ev
  ~S3063C1(); // tgen
  S3063C1(); // tgen
};
//SIG(1 S3063C1) C1{ BC2{ BC3{ v2 v3 v4 v5 Fp Fl[6] Fc:5} v6 v7 v8 v9 Fp[11] Fc[4] FL} BC4{ BC5{ v10 v11 v12 v13 v14 Fi Fp[2] Fc[4]} BC3 v15 v16 v17 v18 v19 Fs Fp} v1}


void  S3063C1 ::v1(){vfunc_called(this, "_ZN7S3063C12v1Ev");}
S3063C1 ::~S3063C1(){ note_dtor("S3063C1", this);} // tgen
S3063C1 ::S3063C1(){ note_ctor("S3063C1", this);} // tgen

static void Test_S3063C1()
{
  extern Class_Descriptor cd_S3063C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,39)];
    init_test(&cd_S3063C1, buf);
    S3063C1 *dp, &lv = *(dp=new (buf) S3063C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,152), "sizeof(S3063C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3063C1)");
    check_base_class_offset(lv, (S3063C3*)(S3063C2*), 0, "S3063C1");
    check_base_class_offset(lv, (S3063C2*), 0, "S3063C1");
    check_base_class_offset(lv, (S3063C5*)(S3063C4*), ABISELECT(176,92), "S3063C1");
    check_base_class_offset(lv, (S3063C3*)(S3063C4*), ABISELECT(216,112), "S3063C1");
    check_base_class_offset(lv, (S3063C4*), ABISELECT(176,92), "S3063C1");
    test_class_info(&lv, &cd_S3063C1);
    dp->~S3063C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3063C1(Test_S3063C1, "S3063C1", ABISELECT(296,152));

#else // __cplusplus

extern void _ZN7S3063C1C1Ev();
extern void _ZN7S3063C1D1Ev();
Name_Map name_map_S3063C1[] = {
  NSPAIR(_ZN7S3063C1C1Ev),
  NSPAIR(_ZN7S3063C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3063C3;
extern VTBL_ENTRY _ZTI7S3063C3[];
extern  VTBL_ENTRY _ZTV7S3063C3[];
extern Class_Descriptor cd_S3063C2;
extern VTBL_ENTRY _ZTI7S3063C2[];
extern  VTBL_ENTRY _ZTV7S3063C2[];
extern Class_Descriptor cd_S3063C5;
extern VTBL_ENTRY _ZTI7S3063C5[];
extern  VTBL_ENTRY _ZTV7S3063C5[];
extern Class_Descriptor cd_S3063C3;
extern VTBL_ENTRY _ZTI7S3063C3[];
extern  VTBL_ENTRY _ZTV7S3063C3[];
extern Class_Descriptor cd_S3063C4;
extern VTBL_ENTRY _ZTI7S3063C4[];
extern  VTBL_ENTRY _ZTV7S3063C4[];
static Base_Class bases_S3063C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3063C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3063C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3063C5,    ABISELECT(176,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3063C3,    ABISELECT(216,112), //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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3063C4,    ABISELECT(176,92), //bcp->offset
    11, //bcp->virtual_function_table_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 _ZTI7S3063C1[];
extern void _ZN7S3063C32v2Ev();
extern void _ZN7S3063C32v3Ev();
extern void _ZN7S3063C32v4Ev();
extern void _ZN7S3063C32v5Ev();
extern void _ZN7S3063C22v6Ev();
extern void _ZN7S3063C22v7Ev();
extern void _ZN7S3063C22v8Ev();
extern void _ZN7S3063C22v9Ev();
extern void _ZN7S3063C12v1Ev();
extern void _ZN7S3063C53v10Ev();
extern void _ZN7S3063C53v11Ev();
extern void _ZN7S3063C53v12Ev();
extern void _ZN7S3063C53v13Ev();
extern void _ZN7S3063C53v14Ev();
extern void _ZN7S3063C43v15Ev();
extern void _ZN7S3063C43v16Ev();
extern void _ZN7S3063C43v17Ev();
extern void _ZN7S3063C43v18Ev();
extern void _ZN7S3063C43v19Ev();
extern void _ZN7S3063C32v2Ev();
extern void _ZN7S3063C32v3Ev();
extern void _ZN7S3063C32v4Ev();
extern void _ZN7S3063C32v5Ev();
static  VTBL_ENTRY vtc_S3063C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3063C1[0]),
  (VTBL_ENTRY)&_ZN7S3063C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3063C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3063C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3063C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3063C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3063C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3063C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3063C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3063C12v1Ev,
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI7S3063C1[0]),
  (VTBL_ENTRY)&_ZN7S3063C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3063C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3063C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3063C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3063C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3063C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3063C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3063C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3063C43v18Ev,
  (VTBL_ENTRY)&_ZN7S3063C43v19Ev,
  ABISELECT(-216,-112),
  (VTBL_ENTRY)&(_ZTI7S3063C1[0]),
  (VTBL_ENTRY)&_ZN7S3063C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3063C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3063C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3063C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S3063C1[];
extern  VTBL_ENTRY _ZTV7S3063C1[];
Class_Descriptor cd_S3063C1 = {  "S3063C1", // class name
  bases_S3063C1, 5,
  &(vtc_S3063C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,152), // object size
  NSPAIRA(_ZTI7S3063C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3063C1),29, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7444C4  : virtual S1537C9_nt , S4304C8_nt , S3600C19 {
  ::S19426C9_nt s7444c4f0;
  ~S7444C4(); // tgen
  S7444C4(); // tgen
};
//SIG(-1 S7444C4) C1{ VBC2{ m Fi} BC3{ m Fp Fi} BC4{ m} FU5{ m}}


S7444C4 ::~S7444C4(){ note_dtor("S7444C4", this);} // tgen
S7444C4 ::S7444C4(){ note_ctor("S7444C4", this);} // tgen

static void Test_S7444C4()
{
  extern Class_Descriptor cd_S7444C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7444C4, buf);
    S7444C4 *dp, &lv = *(dp=new (buf) S7444C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7444C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7444C4)");
    check_base_class_offset(lv, (S1537C9_nt*), ABISELECT(28,16), "S7444C4");
    check_base_class_offset(lv, (S4304C8_nt*), ABISELECT(8,4), "S7444C4");
    check_base_class_offset(lv, (S3600C19*), 0, "S7444C4");
    check_field_offset(lv, s7444c4f0, ABISELECT(24,12), "S7444C4.s7444c4f0");
    test_class_info(&lv, &cd_S7444C4);
    dp->~S7444C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7444C4(Test_S7444C4, "S7444C4", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S7444C4C1Ev();
extern void _ZN7S7444C4D1Ev();
Name_Map name_map_S7444C4[] = {
  NSPAIR(_ZN7S7444C4C1Ev),
  NSPAIR(_ZN7S7444C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S7444C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C9_nt,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S4304C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S7444C4[];
static  VTBL_ENTRY vtc_S7444C4[] = {
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C4[0]),
};
extern VTBL_ENTRY _ZTV7S7444C4[];
static  VTT_ENTRY vtt_S7444C4[] = {
  {&(_ZTV7S7444C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7444C4[];
extern  VTBL_ENTRY _ZTV7S7444C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C4[];
Class_Descriptor cd_S7444C4 = {  "S7444C4", // class name
  bases_S7444C4, 3,
  &(vtc_S7444C4[0]), // expected_vtbl_contents
  &(vtt_S7444C4[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S7444C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7444C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7444C4),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  S7444C2  : virtual S4304C8_nt , virtual S7444C4 , virtual S3600C19 {
  ~S7444C2(); // tgen
  S7444C2(); // tgen
};
//SIG(-1 S7444C2) C1{ VBC2{ m Fp Fi} VBC3{ VBC4{ m Fi} BC2 BC5{ m} FU6{ m}} VBC5}


S7444C2 ::~S7444C2(){ note_dtor("S7444C2", this);} // tgen
S7444C2 ::S7444C2(){ note_ctor("S7444C2", this);} // tgen

static void Test_S7444C2()
{
  extern Class_Descriptor cd_S7444C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S7444C2, buf);
    S7444C2 *dp, &lv = *(dp=new (buf) S7444C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S7444C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7444C2)");
    /*is_ambiguous_... S7444C2::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*), ABISELECT(8,4), "S7444C2");
    check_base_class_offset(lv, (S1537C9_nt*)(S7444C4*), ABISELECT(52,28), "S7444C2");
    check_base_class_offset(lv, (S4304C8_nt*)(S7444C4*), ABISELECT(32,16), "S7444C2");
    check_base_class_offset(lv, (S3600C19*)(S7444C4*), ABISELECT(24,12), "S7444C2");
    check_base_class_offset(lv, (S7444C4*), ABISELECT(24,12), "S7444C2");
    /*is_ambiguous_... S7444C2::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), 0, "S7444C2");
    test_class_info(&lv, &cd_S7444C2);
    dp->~S7444C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7444C2(Test_S7444C2, "S7444C2", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S7444C2C1Ev();
extern void _ZN7S7444C2D1Ev();
Name_Map name_map_S7444C2[] = {
  NSPAIR(_ZN7S7444C2C1Ev),
  NSPAIR(_ZN7S7444C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7444C4;
extern VTBL_ENTRY _ZTI7S7444C4[];
extern  VTBL_ENTRY _ZTV7S7444C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C4[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S7444C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4304C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1537C9_nt,    ABISELECT(52,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7444C4,    ABISELECT(24,12), //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},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7444C2[];
static  VTBL_ENTRY vtc_S7444C2[] = {
  0,
  ABISELECT(52,28),
  ABISELECT(24,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C2[0]),
  ABISELECT(28,16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7444C2[0]),
};
extern VTBL_ENTRY _ZTV7S7444C2[];
static  VTBL_ENTRY _tg__ZTV7S7444C4__7S7444C2[] = {
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C4[0]),
};
static  VTT_ENTRY vtt_S7444C2[] = {
  {&(_ZTV7S7444C2[6]),  6,9},
  {&(_ZTV7S7444C2[9]),  9,9},
  {&(_tg__ZTV7S7444C4__7S7444C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7444C2[];
extern  VTBL_ENTRY _ZTV7S7444C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C2[];
Class_Descriptor cd_S7444C2 = {  "S7444C2", // class name
  bases_S7444C2, 6,
  &(vtc_S7444C2[0]), // expected_vtbl_contents
  &(vtt_S7444C2[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S7444C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7444C2),9, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7444C2),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  S7444C10  : virtual S3600C19 {
  ~S7444C10(); // tgen
  S7444C10(); // tgen
};
//SIG(-1 S7444C10) C1{ VBC2{ m}}


S7444C10 ::~S7444C10(){ note_dtor("S7444C10", this);} // tgen
S7444C10 ::S7444C10(){ note_ctor("S7444C10", this);} // tgen

static void Test_S7444C10()
{
  extern Class_Descriptor cd_S7444C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7444C10, buf);
    S7444C10 *dp, &lv = *(dp=new (buf) S7444C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7444C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7444C10)");
    check_base_class_offset(lv, (S3600C19*), 0, "S7444C10");
    test_class_info(&lv, &cd_S7444C10);
    dp->~S7444C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7444C10(Test_S7444C10, "S7444C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S7444C10C1Ev();
extern void _ZN8S7444C10D1Ev();
Name_Map name_map_S7444C10[] = {
  NSPAIR(_ZN8S7444C10C1Ev),
  NSPAIR(_ZN8S7444C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S7444C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S7444C10[];
static  VTBL_ENTRY vtc_S7444C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7444C10[0]),
};
extern VTBL_ENTRY _ZTV8S7444C10[];
static  VTT_ENTRY vtt_S7444C10[] = {
  {&(_ZTV8S7444C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7444C10[];
extern  VTBL_ENTRY _ZTV8S7444C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7444C10[];
Class_Descriptor cd_S7444C10 = {  "S7444C10", // class name
  bases_S7444C10, 1,
  &(vtc_S7444C10[0]), // expected_vtbl_contents
  &(vtt_S7444C10[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7444C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7444C10),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7444C10),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  S7444C11  : S3600C19 , S4304C8_nt , S1537C9_nt , S7444C4 {
  ~S7444C11(); // tgen
  S7444C11(); // tgen
};
//SIG(-1 S7444C11) C1{ BC2{ m} BC3{ m Fp Fi} BC4{ m Fi} BC5{ VBC4 BC3 BC2 FU6{ m}}}


S7444C11 ::~S7444C11(){ note_dtor("S7444C11", this);} // tgen
S7444C11 ::S7444C11(){ note_ctor("S7444C11", this);} // tgen

static void Test_S7444C11()
{
  extern Class_Descriptor cd_S7444C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S7444C11, buf);
    S7444C11 *dp, &lv = *(dp=new (buf) S7444C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S7444C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7444C11)");
    /*is_ambiguous_... S7444C11::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), ABISELECT(25,13), "S7444C11");
    /*is_ambiguous_... S7444C11::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*), ABISELECT(32,16), "S7444C11");
    /*is_ambiguous_... S7444C11::S1537C9_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*), ABISELECT(48,24), "S7444C11");
    check_base_class_offset(lv, (S1537C9_nt*)(S7444C4*), ABISELECT(52,28), "S7444C11");
    check_base_class_offset(lv, (S4304C8_nt*)(S7444C4*), ABISELECT(8,4), "S7444C11");
    check_base_class_offset(lv, (S3600C19*)(S7444C4*), 0, "S7444C11");
    check_base_class_offset(lv, (S7444C4*), 0, "S7444C11");
    test_class_info(&lv, &cd_S7444C11);
    dp->~S7444C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7444C11(Test_S7444C11, "S7444C11", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S7444C11C1Ev();
extern void _ZN8S7444C11D1Ev();
Name_Map name_map_S7444C11[] = {
  NSPAIR(_ZN8S7444C11C1Ev),
  NSPAIR(_ZN8S7444C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7444C4;
extern VTBL_ENTRY _ZTI7S7444C4[];
extern  VTBL_ENTRY _ZTV7S7444C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C4[];
static Base_Class bases_S7444C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(25,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4304C8_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1537C9_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1537C9_nt,    ABISELECT(52,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
    6, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7444C4,    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 _ZTI8S7444C11[];
static  VTBL_ENTRY vtc_S7444C11[] = {
  ABISELECT(52,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S7444C11[0]),
};
extern VTBL_ENTRY _ZTV8S7444C11[];
static  VTBL_ENTRY _tg__ZTV7S7444C4__8S7444C11[] = {
  ABISELECT(52,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C4[0]),
};
static  VTT_ENTRY vtt_S7444C11[] = {
  {&(_ZTV8S7444C11[3]),  3,3},
  {&(_tg__ZTV7S7444C4__8S7444C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7444C11[];
extern  VTBL_ENTRY _ZTV8S7444C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7444C11[];
Class_Descriptor cd_S7444C11 = {  "S7444C11", // class name
  bases_S7444C11, 7,
  &(vtc_S7444C11[0]), // expected_vtbl_contents
  &(vtt_S7444C11[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S7444C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7444C11),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7444C11),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  S7444C9  : virtual S7444C4 , S7444C2 , virtual S7444C10 , virtual S7444C11 {
  int s7444c9f0;
  virtual  ~S7444C9(); // _ZN7S7444C9D2Ev
  S7444C9(); // tgen
};
//SIG(-1 S7444C9) C1{ VBC2{ VBC3{ m Fi} BC4{ m Fp Fi} BC5{ m} FU6{ m}} BC7{ VBC4 VBC2 VBC5} VBC8{ VBC5} VBC9{ BC5 BC4 BC3 BC2} vd Fi}


 S7444C9 ::~S7444C9(){ note_dtor("S7444C9", this);}
S7444C9 ::S7444C9(){ note_ctor("S7444C9", this);} // tgen

static void Test_S7444C9()
{
  extern Class_Descriptor cd_S7444C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,18)];
    init_test(&cd_S7444C9, buf);
    S7444C9 *dp, &lv = *(dp=new (buf) S7444C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,68), "sizeof(S7444C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7444C9)");
    /*is_ambiguous_... S7444C9::S7444C4 */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S7444C4*), ABISELECT(44,24), "S7444C9");
    check_base_class_offset(lv, (S1537C9_nt*)(S7444C4*)(S7444C11*), ABISELECT(44,24), "S7444C9");
    /*is_ambiguous_... S7444C9::S7444C4 */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S7444C4*), ABISELECT(24,12), "S7444C9");
    /*is_ambiguous_... S7444C9::S7444C4 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7444C4*), ABISELECT(16,8), "S7444C9");
    /*is_ambiguous_... S7444C9::S7444C4 */ AMB_check_base_class_offset(lv, (S7444C4*), ABISELECT(16,8), "S7444C9");
    check_base_class_offset(lv, (S7444C4*)(S7444C2*), ABISELECT(16,8), "S7444C9");
    /*is_ambiguous_... S7444C2::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S7444C2*), ABISELECT(48,28), "S7444C9");
    /*is_ambiguous_... S7444C2::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7444C2*), 0, "S7444C9");
    check_base_class_offset(lv, (S3600C19*)(S7444C10*), 0, "S7444C9");
    check_base_class_offset(lv, (S7444C2*), 0, "S7444C9");
    check_base_class_offset(lv, (S7444C10*), ABISELECT(64,36), "S7444C9");
    /*is_ambiguous_... S7444C11::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7444C11*), ABISELECT(97,53), "S7444C9");
    /*is_ambiguous_... S7444C11::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S7444C11*), ABISELECT(104,56), "S7444C9");
    /*is_ambiguous_... S7444C11::S1537C9_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S7444C11*), ABISELECT(120,64), "S7444C9");
    check_base_class_offset(lv, (S4304C8_nt*)(S7444C4*)(S7444C11*), ABISELECT(80,44), "S7444C9");
    check_base_class_offset(lv, (S3600C19*)(S7444C4*)(S7444C11*), ABISELECT(72,40), "S7444C9");
    check_base_class_offset(lv, (S7444C4*)(S7444C11*), ABISELECT(72,40), "S7444C9");
    check_base_class_offset(lv, (S7444C11*), ABISELECT(72,40), "S7444C9");
    check_field_offset(lv, s7444c9f0, ABISELECT(8,4), "S7444C9.s7444c9f0");
    test_class_info(&lv, &cd_S7444C9);
    dp->~S7444C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7444C9(Test_S7444C9, "S7444C9", ABISELECT(128,68));

#else // __cplusplus

extern void _ZN7S7444C9C1Ev();
extern void _ZN7S7444C9D2Ev();
Name_Map name_map_S7444C9[] = {
  NSPAIR(_ZN7S7444C9C1Ev),
  NSPAIR(_ZN7S7444C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7444C4;
extern VTBL_ENTRY _ZTI7S7444C4[];
extern  VTBL_ENTRY _ZTV7S7444C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C4[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7444C2;
extern VTBL_ENTRY _ZTI7S7444C2[];
extern  VTBL_ENTRY _ZTV7S7444C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C2[];
extern Class_Descriptor cd_S7444C10;
extern VTBL_ENTRY _ZTI8S7444C10[];
extern  VTBL_ENTRY _ZTV8S7444C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7444C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7444C4;
extern VTBL_ENTRY _ZTI7S7444C4[];
extern  VTBL_ENTRY _ZTV7S7444C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C4[];
extern Class_Descriptor cd_S7444C11;
extern VTBL_ENTRY _ZTI8S7444C11[];
extern  VTBL_ENTRY _ZTV8S7444C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7444C11[];
static Base_Class bases_S7444C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C9_nt,    ABISELECT(44,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7444C4,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S4304C8_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7444C2,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7444C10,    ABISELECT(64,36), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    ABISELECT(97,53), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4304C8_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1537C9_nt,    ABISELECT(120,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_S4304C8_nt,    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
    13, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    13, //immediately_derived
  0, 0},
  {&cd_S7444C4,    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
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7444C11,    ABISELECT(72,40), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7444C9[];
extern void _ZN7S7444C9D1Ev();
extern void _ZN7S7444C9D0Ev();
static  VTBL_ENTRY vtc_S7444C9[] = {
  ABISELECT(72,40),
  ABISELECT(64,36),
  0,
  ABISELECT(44,24),
  ABISELECT(16,8),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C9[0]),
  (VTBL_ENTRY)&_ZN7S7444C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7444C9D0Ev,
  ABISELECT(28,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7444C9[0]),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7444C9[0]),
  ABISELECT(-28,-16),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7444C9[0]),
};
extern VTBL_ENTRY _ZTV7S7444C9[];
static  VTBL_ENTRY _tg__ZTV7S7444C2__7S7444C9[] = {
  0,
  ABISELECT(44,24),
  ABISELECT(16,8),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7444C4__7S7444C2__7S7444C9[] = {
  ABISELECT(28,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7444C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7444C4__7S7444C9[] = {
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7444C10__7S7444C9[] = {
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7444C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7444C11__7S7444C9[] = {
  ABISELECT(-28,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7444C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7444C48S7444C11__A1__7S7444C9[] = {
  ABISELECT(-28,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C4[0]),
};
static  VTT_ENTRY vtt_S7444C9[] = {
  {&(_ZTV7S7444C9[8]),  8,19},
  {&(_tg__ZTV7S7444C2__7S7444C9[6]),  6,6},
  {&(_tg__ZTV7S7444C4__7S7444C2__7S7444C9[3]),  3,3},
  {&(_ZTV7S7444C9[13]),  13,19},
  {&(_ZTV7S7444C9[16]),  16,19},
  {&(_ZTV7S7444C9[19]),  19,19},
  {&(_tg__ZTV7S7444C4__7S7444C9[3]),  3,3},
  {&(_tg__ZTV8S7444C10__7S7444C9[3]),  3,3},
  {&(_tg__ZTV8S7444C11__7S7444C9[3]),  3,3},
  {&(_tg__ZTV7S7444C48S7444C11__A1__7S7444C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7444C9[];
extern  VTBL_ENTRY _ZTV7S7444C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C9[];
Class_Descriptor cd_S7444C9 = {  "S7444C9", // class name
  bases_S7444C9, 15,
  &(vtc_S7444C9[0]), // expected_vtbl_contents
  &(vtt_S7444C9[0]), // expected_vtt_contents
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI7S7444C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7444C9),19, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7444C9),10, //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  S7444C12  : S3600C19 , S4304C8_nt , virtual S7444C11 {
  int s7444c12f0;
  ~S7444C12(); // tgen
  S7444C12(); // tgen
};
//SIG(-1 S7444C12) C1{ BC2{ m} BC3{ m Fp Fi} VBC4{ BC2 BC3 BC5{ m Fi} BC6{ VBC5 BC3 BC2 FU7{ m}}} Fi}


S7444C12 ::~S7444C12(){ note_dtor("S7444C12", this);} // tgen
S7444C12 ::S7444C12(){ note_ctor("S7444C12", this);} // tgen

static void Test_S7444C12()
{
  extern Class_Descriptor cd_S7444C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S7444C12, buf);
    S7444C12 *dp, &lv = *(dp=new (buf) S7444C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S7444C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7444C12)");
    /*is_ambiguous_... S7444C12::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), 0, "S7444C12");
    /*is_ambiguous_... S7444C12::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*), ABISELECT(8,4), "S7444C12");
    /*is_ambiguous_... S7444C11::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7444C11*), ABISELECT(57,29), "S7444C12");
    /*is_ambiguous_... S7444C11::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S7444C11*), ABISELECT(64,32), "S7444C12");
    /*is_ambiguous_... S7444C11::S1537C9_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S7444C11*), ABISELECT(80,40), "S7444C12");
    check_base_class_offset(lv, (S1537C9_nt*)(S7444C4*)(S7444C11*), ABISELECT(84,44), "S7444C12");
    check_base_class_offset(lv, (S4304C8_nt*)(S7444C4*)(S7444C11*), ABISELECT(40,20), "S7444C12");
    check_base_class_offset(lv, (S3600C19*)(S7444C4*)(S7444C11*), ABISELECT(32,16), "S7444C12");
    check_base_class_offset(lv, (S7444C4*)(S7444C11*), ABISELECT(32,16), "S7444C12");
    check_base_class_offset(lv, (S7444C11*), ABISELECT(32,16), "S7444C12");
    check_field_offset(lv, s7444c12f0, ABISELECT(24,12), "S7444C12.s7444c12f0");
    test_class_info(&lv, &cd_S7444C12);
    dp->~S7444C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7444C12(Test_S7444C12, "S7444C12", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S7444C12C1Ev();
extern void _ZN8S7444C12D1Ev();
Name_Map name_map_S7444C12[] = {
  NSPAIR(_ZN8S7444C12C1Ev),
  NSPAIR(_ZN8S7444C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7444C4;
extern VTBL_ENTRY _ZTI7S7444C4[];
extern  VTBL_ENTRY _ZTV7S7444C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C4[];
extern Class_Descriptor cd_S7444C11;
extern VTBL_ENTRY _ZTI8S7444C11[];
extern  VTBL_ENTRY _ZTV8S7444C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7444C11[];
static Base_Class bases_S7444C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S4304C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(57,29), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4304C8_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S1537C9_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S1537C9_nt,    ABISELECT(84,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, 1},
  {&cd_S4304C8_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    8, //immediately_derived
  0, 0},
  {&cd_S7444C4,    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
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7444C11,    ABISELECT(32,16), //bcp->offset
    4, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7444C12[];
static  VTBL_ENTRY vtc_S7444C12[] = {
  ABISELECT(84,44),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7444C12[0]),
  ABISELECT(52,28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7444C12[0]),
};
extern VTBL_ENTRY _ZTV8S7444C12[];
static  VTBL_ENTRY _tg__ZTV8S7444C11__8S7444C12[] = {
  ABISELECT(52,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S7444C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7444C48S7444C11__8S7444C12[] = {
  ABISELECT(52,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C4[0]),
};
static  VTT_ENTRY vtt_S7444C12[] = {
  {&(_ZTV8S7444C12[4]),  4,7},
  {&(_ZTV8S7444C12[7]),  7,7},
  {&(_tg__ZTV8S7444C11__8S7444C12[3]),  3,3},
  {&(_tg__ZTV7S7444C48S7444C11__8S7444C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7444C12[];
extern  VTBL_ENTRY _ZTV8S7444C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7444C12[];
Class_Descriptor cd_S7444C12 = {  "S7444C12", // class name
  bases_S7444C12, 10,
  &(vtc_S7444C12[0]), // expected_vtbl_contents
  &(vtt_S7444C12[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S7444C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7444C12),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7444C12),4, //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  S7444C8  : S7444C9 , S7444C12 {
  virtual  ~S7444C8(); // _ZN7S7444C8D2Ev
  S7444C8(); // tgen
};
//SIG(-1 S7444C8) C1{ BC2{ VBC3{ VBC4{ m Fi} BC5{ m Fp Fi} BC6{ m} FU7{ m}} BC8{ VBC5 VBC3 VBC6} VBC9{ VBC6} VBC10{ BC6 BC5 BC4 BC3} vd Fi} BC11{ BC6 BC5 VBC10 Fi} vd}


 S7444C8 ::~S7444C8(){ note_dtor("S7444C8", this);}
S7444C8 ::S7444C8(){ note_ctor("S7444C8", this);} // tgen

static void Test_S7444C8()
{
  extern Class_Descriptor cd_S7444C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,22)];
    init_test(&cd_S7444C8, buf);
    S7444C8 *dp, &lv = *(dp=new (buf) S7444C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,84), "sizeof(S7444C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7444C8)");
    /*is_ambiguous_... S7444C8::S7444C4 */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S7444C4*), ABISELECT(76,40), "S7444C8");
    check_base_class_offset(lv, (S1537C9_nt*)(S7444C4*)(S7444C11*), ABISELECT(76,40), "S7444C8");
    /*is_ambiguous_... S7444C8::S7444C4 */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S7444C4*), ABISELECT(56,28), "S7444C8");
    /*is_ambiguous_... S7444C8::S7444C4 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7444C4*), ABISELECT(48,24), "S7444C8");
    /*is_ambiguous_... S7444C9::S7444C4 */ AMB_check_base_class_offset(lv, (S7444C4*)(S7444C9*), ABISELECT(48,24), "S7444C8");
    check_base_class_offset(lv, (S7444C4*)(S7444C2*)(S7444C9*), ABISELECT(48,24), "S7444C8");
    /*is_ambiguous_... S7444C2::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S7444C2*)(S7444C9*), ABISELECT(80,44), "S7444C8");
    /*is_ambiguous_... S7444C2::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7444C2*)(S7444C9*), 0, "S7444C8");
    check_base_class_offset(lv, (S3600C19*)(S7444C10*), 0, "S7444C8");
    check_base_class_offset(lv, (S7444C2*)(S7444C9*), 0, "S7444C8");
    check_base_class_offset(lv, (S7444C10*)(S7444C9*), ABISELECT(96,52), "S7444C8");
    /*is_ambiguous_... S7444C11::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7444C11*), ABISELECT(129,69), "S7444C8");
    /*is_ambiguous_... S7444C11::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S7444C11*), ABISELECT(136,72), "S7444C8");
    /*is_ambiguous_... S7444C11::S1537C9_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S7444C11*), ABISELECT(152,80), "S7444C8");
    check_base_class_offset(lv, (S4304C8_nt*)(S7444C4*)(S7444C11*), ABISELECT(112,60), "S7444C8");
    check_base_class_offset(lv, (S3600C19*)(S7444C4*)(S7444C11*), ABISELECT(104,56), "S7444C8");
    check_base_class_offset(lv, (S7444C4*)(S7444C11*), ABISELECT(104,56), "S7444C8");
    check_base_class_offset(lv, (S7444C11*)(S7444C9*), ABISELECT(104,56), "S7444C8");
    check_base_class_offset(lv, (S7444C11*)(S7444C12*), ABISELECT(104,56), "S7444C8");
    check_base_class_offset(lv, (S7444C9*), 0, "S7444C8");
    /*is_ambiguous_... S7444C12::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7444C12*), ABISELECT(16,8), "S7444C8");
    /*is_ambiguous_... S7444C12::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S7444C12*), ABISELECT(24,12), "S7444C8");
    check_base_class_offset(lv, (S7444C12*), ABISELECT(16,8), "S7444C8");
    test_class_info(&lv, &cd_S7444C8);
    dp->~S7444C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7444C8(Test_S7444C8, "S7444C8", ABISELECT(160,84));

#else // __cplusplus

extern void _ZN7S7444C8C1Ev();
extern void _ZN7S7444C8D2Ev();
Name_Map name_map_S7444C8[] = {
  NSPAIR(_ZN7S7444C8C1Ev),
  NSPAIR(_ZN7S7444C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7444C4;
extern VTBL_ENTRY _ZTI7S7444C4[];
extern  VTBL_ENTRY _ZTV7S7444C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C4[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7444C2;
extern VTBL_ENTRY _ZTI7S7444C2[];
extern  VTBL_ENTRY _ZTV7S7444C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C2[];
extern Class_Descriptor cd_S7444C10;
extern VTBL_ENTRY _ZTI8S7444C10[];
extern  VTBL_ENTRY _ZTV8S7444C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7444C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7444C4;
extern VTBL_ENTRY _ZTI7S7444C4[];
extern  VTBL_ENTRY _ZTV7S7444C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C4[];
extern Class_Descriptor cd_S7444C11;
extern VTBL_ENTRY _ZTI8S7444C11[];
extern  VTBL_ENTRY _ZTV8S7444C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7444C11[];
extern Class_Descriptor cd_S7444C9;
extern VTBL_ENTRY _ZTI7S7444C9[];
extern  VTBL_ENTRY _ZTV7S7444C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C9[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S7444C12;
extern VTBL_ENTRY _ZTI8S7444C12[];
extern  VTBL_ENTRY _ZTV8S7444C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7444C12[];
static Base_Class bases_S7444C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C9_nt,    ABISELECT(76,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
    3, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7444C4,    ABISELECT(48,24), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    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
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7444C2,    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
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7444C10,    ABISELECT(96,52), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(129,69), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4304C8_nt,    ABISELECT(136,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_S1537C9_nt,    ABISELECT(152,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_S4304C8_nt,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7444C4,    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
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7444C11,    ABISELECT(104,56), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7444C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    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
    18, //immediately_derived
  0, 0},
  {&cd_S4304C8_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7444C12,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7444C8[];
extern void _ZN7S7444C8D1Ev();
extern void _ZN7S7444C8D0Ev();
static  VTBL_ENTRY vtc_S7444C8[] = {
  ABISELECT(104,56),
  ABISELECT(96,52),
  0,
  ABISELECT(76,40),
  ABISELECT(48,24),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C8[0]),
  (VTBL_ENTRY)&_ZN7S7444C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7444C8D0Ev,
  ABISELECT(60,32),
  ABISELECT(88,48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7444C8[0]),
  ABISELECT(28,16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7444C8[0]),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7444C8[0]),
  ABISELECT(-28,-16),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7444C8[0]),
};
extern VTBL_ENTRY _ZTV7S7444C8[];
extern void _ZN7S7444C9D1Ev();
extern void _ZN7S7444C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7444C9__7S7444C8[] = {
  ABISELECT(104,56),
  ABISELECT(96,52),
  0,
  ABISELECT(76,40),
  ABISELECT(48,24),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C9[0]),
  (VTBL_ENTRY)&_ZN7S7444C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7444C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7444C27S7444C9__7S7444C8[] = {
  0,
  ABISELECT(76,40),
  ABISELECT(48,24),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7444C4__7S7444C27S7444C9__7S7444C8[] = {
  ABISELECT(28,16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7444C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7444C4__7S7444C9__7S7444C8[] = {
  ABISELECT(28,16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7444C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7444C10__7S7444C9__7S7444C8[] = {
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7444C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7444C11__7S7444C9__7S7444C8[] = {
  ABISELECT(-28,-16),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7444C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7444C12__7S7444C8[] = {
  ABISELECT(60,32),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7444C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7444C11__8S7444C12__7S7444C8[] = {
  ABISELECT(-28,-16),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S7444C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7444C4__7S7444C8[] = {
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7444C10__7S7444C8[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S7444C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7444C11__7S7444C8[] = {
  ABISELECT(-28,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7444C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7444C48S7444C11__A1__7S7444C8[] = {
  ABISELECT(-28,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C4[0]),
};
static  VTT_ENTRY vtt_S7444C8[] = {
  {&(_ZTV7S7444C8[8]),  8,23},
  {&(_tg__ZTV7S7444C9__7S7444C8[8]),  8,10},
  {&(_tg__ZTV7S7444C27S7444C9__7S7444C8[6]),  6,6},
  {&(_tg__ZTV7S7444C4__7S7444C27S7444C9__7S7444C8[3]),  3,3},
  {&(_tg__ZTV7S7444C4__7S7444C9__7S7444C8[3]),  3,3},
  {&(_tg__ZTV8S7444C10__7S7444C9__7S7444C8[3]),  3,3},
  {&(_tg__ZTV8S7444C11__7S7444C9__7S7444C8[3]),  3,3},
  {&(_tg__ZTV8S7444C12__7S7444C8[4]),  4,4},
  {&(_tg__ZTV8S7444C11__8S7444C12__7S7444C8[3]),  3,3},
  {&(_ZTV7S7444C8[17]),  17,23},
  {&(_ZTV7S7444C8[20]),  20,23},
  {&(_ZTV7S7444C8[23]),  23,23},
  {&(_ZTV7S7444C8[14]),  14,23},
  {&(_tg__ZTV7S7444C4__7S7444C8[3]),  3,3},
  {&(_tg__ZTV8S7444C10__7S7444C8[3]),  3,3},
  {&(_tg__ZTV8S7444C11__7S7444C8[3]),  3,3},
  {&(_tg__ZTV7S7444C48S7444C11__A1__7S7444C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7444C8[];
extern  VTBL_ENTRY _ZTV7S7444C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C8[];
Class_Descriptor cd_S7444C8 = {  "S7444C8", // class name
  bases_S7444C8, 19,
  &(vtc_S7444C8[0]), // expected_vtbl_contents
  &(vtt_S7444C8[0]), // expected_vtt_contents
  ABISELECT(160,84), // object size
  NSPAIRA(_ZTI7S7444C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7444C8),23, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7444C8),17, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7444C1  : S7444C2 , S7444C8 {
  virtual  ~S7444C1(); // _ZN7S7444C1D2Ev
  S7444C1(); // tgen
};
//SIG(1 S7444C1) C1{ BC2{ VBC3{ m Fp Fi} VBC4{ VBC5{ m Fi} BC3 BC6{ m} FU7{ m}} VBC6} BC8{ BC9{ VBC4 BC2 VBC10{ VBC6} VBC11{ BC6 BC3 BC5 BC4} vd Fi} BC12{ BC6 BC3 VBC11 Fi} vd} vd}


 S7444C1 ::~S7444C1(){ note_dtor("S7444C1", this);}
S7444C1 ::S7444C1(){ note_ctor("S7444C1", this);} // tgen

static void Test_S7444C1()
{
  extern Class_Descriptor cd_S7444C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,23)];
    init_test(&cd_S7444C1, buf);
    S7444C1 *dp, &lv = *(dp=new (buf) S7444C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,88), "sizeof(S7444C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7444C1)");
    /*is_ambiguous_... S7444C1::S7444C2 */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S7444C2*), ABISELECT(56,28), "S7444C1");
    /*is_ambiguous_... S7444C2::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S7444C2*)(S7444C9*)(S7444C8*), ABISELECT(56,28), "S7444C1");
    /*is_ambiguous_... S7444C1::S7444C4 */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S7444C4*), ABISELECT(100,52), "S7444C1");
    check_base_class_offset(lv, (S1537C9_nt*)(S7444C4*)(S7444C11*), ABISELECT(100,52), "S7444C1");
    /*is_ambiguous_... S7444C1::S7444C4 */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S7444C4*), ABISELECT(80,40), "S7444C1");
    /*is_ambiguous_... S7444C1::S7444C4 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7444C4*), ABISELECT(72,36), "S7444C1");
    /*is_ambiguous_... S7444C1::S7444C2 */ AMB_check_base_class_offset(lv, (S7444C4*)(S7444C2*), ABISELECT(72,36), "S7444C1");
    /*is_ambiguous_... S7444C9::S7444C4 */ AMB_check_base_class_offset(lv, (S7444C4*)(S7444C9*)(S7444C8*), ABISELECT(72,36), "S7444C1");
    check_base_class_offset(lv, (S7444C4*)(S7444C2*)(S7444C9*)(S7444C8*), ABISELECT(72,36), "S7444C1");
    /*is_ambiguous_... S7444C1::S7444C2 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7444C2*), 0, "S7444C1");
    /*is_ambiguous_... S7444C2::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7444C2*)(S7444C9*)(S7444C8*), 0, "S7444C1");
    check_base_class_offset(lv, (S3600C19*)(S7444C10*), 0, "S7444C1");
    /*is_ambiguous_... S7444C1::S7444C2 */ AMB_check_base_class_offset(lv, (S7444C2*), 0, "S7444C1");
    check_base_class_offset(lv, (S7444C2*)(S7444C9*)(S7444C8*), ABISELECT(8,4), "S7444C1");
    check_base_class_offset(lv, (S7444C10*)(S7444C9*)(S7444C8*), ABISELECT(104,56), "S7444C1");
    /*is_ambiguous_... S7444C11::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7444C11*), ABISELECT(137,73), "S7444C1");
    /*is_ambiguous_... S7444C11::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S7444C11*), ABISELECT(144,76), "S7444C1");
    /*is_ambiguous_... S7444C11::S1537C9_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S7444C11*), ABISELECT(160,84), "S7444C1");
    check_base_class_offset(lv, (S4304C8_nt*)(S7444C4*)(S7444C11*), ABISELECT(120,64), "S7444C1");
    check_base_class_offset(lv, (S3600C19*)(S7444C4*)(S7444C11*), ABISELECT(112,60), "S7444C1");
    check_base_class_offset(lv, (S7444C4*)(S7444C11*), ABISELECT(112,60), "S7444C1");
    check_base_class_offset(lv, (S7444C11*)(S7444C9*)(S7444C8*), ABISELECT(112,60), "S7444C1");
    check_base_class_offset(lv, (S7444C11*)(S7444C12*)(S7444C8*), ABISELECT(112,60), "S7444C1");
    check_base_class_offset(lv, (S7444C9*)(S7444C8*), ABISELECT(8,4), "S7444C1");
    /*is_ambiguous_... S7444C12::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S7444C12*)(S7444C8*), ABISELECT(24,12), "S7444C1");
    /*is_ambiguous_... S7444C12::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S7444C12*)(S7444C8*), ABISELECT(32,16), "S7444C1");
    check_base_class_offset(lv, (S7444C12*)(S7444C8*), ABISELECT(24,12), "S7444C1");
    check_base_class_offset(lv, (S7444C8*), ABISELECT(8,4), "S7444C1");
    test_class_info(&lv, &cd_S7444C1);
    dp->~S7444C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7444C1(Test_S7444C1, "S7444C1", ABISELECT(168,88));

#else // __cplusplus

extern void _ZN7S7444C1C1Ev();
extern void _ZN7S7444C1D2Ev();
Name_Map name_map_S7444C1[] = {
  NSPAIR(_ZN7S7444C1C1Ev),
  NSPAIR(_ZN7S7444C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7444C4;
extern VTBL_ENTRY _ZTI7S7444C4[];
extern  VTBL_ENTRY _ZTV7S7444C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C4[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7444C2;
extern VTBL_ENTRY _ZTI7S7444C2[];
extern  VTBL_ENTRY _ZTV7S7444C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C2[];
extern Class_Descriptor cd_S7444C2;
extern VTBL_ENTRY _ZTI7S7444C2[];
extern  VTBL_ENTRY _ZTV7S7444C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C2[];
extern Class_Descriptor cd_S7444C10;
extern VTBL_ENTRY _ZTI8S7444C10[];
extern  VTBL_ENTRY _ZTV8S7444C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7444C10[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7444C4;
extern VTBL_ENTRY _ZTI7S7444C4[];
extern  VTBL_ENTRY _ZTV7S7444C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C4[];
extern Class_Descriptor cd_S7444C11;
extern VTBL_ENTRY _ZTI8S7444C11[];
extern  VTBL_ENTRY _ZTV8S7444C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7444C11[];
extern Class_Descriptor cd_S7444C9;
extern VTBL_ENTRY _ZTI7S7444C9[];
extern  VTBL_ENTRY _ZTV7S7444C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C9[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S7444C12;
extern VTBL_ENTRY _ZTI8S7444C12[];
extern  VTBL_ENTRY _ZTV8S7444C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7444C12[];
extern Class_Descriptor cd_S7444C8;
extern VTBL_ENTRY _ZTI7S7444C8[];
extern  VTBL_ENTRY _ZTV7S7444C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C8[];
static Base_Class bases_S7444C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4304C8_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1537C9_nt,    ABISELECT(100,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
    4, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7444C4,    ABISELECT(72,36), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7444C2,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7444C2,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7444C10,    ABISELECT(104,56), //bcp->offset
    27, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(137,73), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4304C8_nt,    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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1537C9_nt,    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
    15, //immediately_derived
  0, 0},
  {&cd_S4304C8_nt,    ABISELECT(120,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_S3600C19,    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
    14, //immediately_derived
  0, 0},
  {&cd_S7444C4,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7444C11,    ABISELECT(112,60), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7444C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    19, //immediately_derived
  0, 0},
  {&cd_S4304C8_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7444C12,    ABISELECT(24,12), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7444C8,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7444C1[];
extern void _ZN7S7444C1D1Ev();
extern void _ZN7S7444C1D0Ev();
extern void ABISELECT(_ZThn8_N7S7444C1D1Ev,_ZThn4_N7S7444C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7444C1D0Ev,_ZThn4_N7S7444C1D0Ev)();
static  VTBL_ENTRY vtc_S7444C1[] = {
  ABISELECT(112,60),
  ABISELECT(104,56),
  0,
  ABISELECT(100,52),
  ABISELECT(72,36),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C1[0]),
  (VTBL_ENTRY)&_ZN7S7444C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7444C1D0Ev,
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(-8,-4),
  ABISELECT(92,48),
  ABISELECT(64,32),
  ABISELECT(48,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7444C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7444C1D1Ev,_ZThn4_N7S7444C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7444C1D0Ev,_ZThn4_N7S7444C1D0Ev),
  ABISELECT(76,40),
  ABISELECT(88,48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7444C1[0]),
  ABISELECT(28,16),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S7444C1[0]),
  ABISELECT(-104,-56),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7444C1[0]),
  ABISELECT(-12,-8),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7444C1[0]),
};
extern VTBL_ENTRY _ZTV7S7444C1[];
static  VTBL_ENTRY _tg__ZTV7S7444C2__7S7444C1[] = {
  0,
  ABISELECT(100,52),
  ABISELECT(72,36),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7444C4__7S7444C2__7S7444C1[] = {
  ABISELECT(28,16),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S7444C2[0]),
};
extern void _ZN7S7444C8D1Ev();
extern void _ZN7S7444C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7444C8__7S7444C1[] = {
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(-8,-4),
  ABISELECT(92,48),
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C8[0]),
  (VTBL_ENTRY)&_ZN7S7444C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7444C8D0Ev,
};
extern void _ZN7S7444C9D1Ev();
extern void _ZN7S7444C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7444C97S7444C8__7S7444C1[] = {
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(-8,-4),
  ABISELECT(92,48),
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C9[0]),
  (VTBL_ENTRY)&_ZN7S7444C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7444C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7444C27S7444C97S7444C8__A1__7S7444C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(92,48),
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7444C4__7S7444C27S7444C97S7444C8__A1__7S7444C1[] = {
  ABISELECT(28,16),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7444C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7444C4__7S7444C97S7444C8__7S7444C1[] = {
  ABISELECT(28,16),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7444C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7444C10__7S7444C97S7444C8__7S7444C1[] = {
  ABISELECT(-104,-56),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7444C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7444C11__7S7444C97S7444C8__7S7444C1[] = {
  ABISELECT(-12,-8),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7444C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7444C127S7444C8__7S7444C1[] = {
  ABISELECT(76,40),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7444C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7444C11__8S7444C127S7444C8__7S7444C1[] = {
  ABISELECT(-12,-8),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S7444C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7444C4__7S7444C8__7S7444C1[] = {
  ABISELECT(28,16),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7444C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7444C10__7S7444C8__7S7444C1[] = {
  ABISELECT(-104,-56),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7444C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7444C11__7S7444C8__7S7444C1[] = {
  ABISELECT(-12,-8),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7444C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7444C12__7S7444C8__7S7444C1[] = {
  ABISELECT(76,40),
  ABISELECT(88,48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7444C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7444C4__7S7444C1[] = {
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7444C10__7S7444C1[] = {
  ABISELECT(-104,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S7444C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7444C11__7S7444C1[] = {
  ABISELECT(-12,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7444C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7444C48S7444C11__A1__7S7444C1[] = {
  ABISELECT(-12,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7444C4[0]),
};
static  VTT_ENTRY vtt_S7444C1[] = {
  {&(_ZTV7S7444C1[8]),  8,33},
  {&(_tg__ZTV7S7444C2__7S7444C1[6]),  6,6},
  {&(_tg__ZTV7S7444C4__7S7444C2__7S7444C1[3]),  3,3},
  {&(_tg__ZTV7S7444C8__7S7444C1[8]),  8,10},
  {&(_tg__ZTV7S7444C97S7444C8__7S7444C1[8]),  8,10},
  {&(_tg__ZTV7S7444C27S7444C97S7444C8__A1__7S7444C1[6]),  6,6},
  {&(_tg__ZTV7S7444C4__7S7444C27S7444C97S7444C8__A1__7S7444C1[3]),  3,3},
  {&(_tg__ZTV7S7444C4__7S7444C97S7444C8__7S7444C1[3]),  3,3},
  {&(_tg__ZTV8S7444C10__7S7444C97S7444C8__7S7444C1[3]),  3,3},
  {&(_tg__ZTV8S7444C11__7S7444C97S7444C8__7S7444C1[3]),  3,3},
  {&(_tg__ZTV8S7444C127S7444C8__7S7444C1[4]),  4,4},
  {&(_tg__ZTV8S7444C11__8S7444C127S7444C8__7S7444C1[3]),  3,3},
  {&(_tg__ZTV7S7444C4__7S7444C8__7S7444C1[3]),  3,3},
  {&(_tg__ZTV8S7444C10__7S7444C8__7S7444C1[3]),  3,3},
  {&(_tg__ZTV8S7444C11__7S7444C8__7S7444C1[3]),  3,3},
  {&(_tg__ZTV8S7444C12__7S7444C8__7S7444C1[4]),  4,4},
  {&(_ZTV7S7444C1[27]),  27,33},
  {&(_ZTV7S7444C1[18]),  18,33},
  {&(_ZTV7S7444C1[30]),  30,33},
  {&(_ZTV7S7444C1[33]),  33,33},
  {&(_ZTV7S7444C1[24]),  24,33},
  {&(_tg__ZTV7S7444C4__7S7444C1[3]),  3,3},
  {&(_tg__ZTV8S7444C10__7S7444C1[3]),  3,3},
  {&(_tg__ZTV8S7444C11__7S7444C1[3]),  3,3},
  {&(_tg__ZTV7S7444C48S7444C11__A1__7S7444C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7444C1[];
extern  VTBL_ENTRY _ZTV7S7444C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7444C1[];
Class_Descriptor cd_S7444C1 = {  "S7444C1", // class name
  bases_S7444C1, 21,
  &(vtc_S7444C1[0]), // expected_vtbl_contents
  &(vtt_S7444C1[0]), // expected_vtt_contents
  ABISELECT(168,88), // object size
  NSPAIRA(_ZTI7S7444C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7444C1),33, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7444C1),25, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20484C3  : S3600C29_nt , virtual S3600C19 {
  ::S19426C9_nt s20484c3f0;
  ~S20484C3(); // tgen
  S20484C3(); // tgen
};
//SIG(-1 S20484C3) C1{ BC2{ m Fp} VBC3{ m} FU4{ m}}


S20484C3 ::~S20484C3(){ note_dtor("S20484C3", this);} // tgen
S20484C3 ::S20484C3(){ note_ctor("S20484C3", this);} // tgen

static void Test_S20484C3()
{
  extern Class_Descriptor cd_S20484C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20484C3, buf);
    S20484C3 *dp, &lv = *(dp=new (buf) S20484C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20484C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20484C3)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20484C3");
    check_base_class_offset(lv, (S3600C19*), 0, "S20484C3");
    check_field_offset(lv, s20484c3f0, ABISELECT(16,8), "S20484C3.s20484c3f0");
    test_class_info(&lv, &cd_S20484C3);
    dp->~S20484C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20484C3(Test_S20484C3, "S20484C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20484C3C1Ev();
extern void _ZN8S20484C3D1Ev();
Name_Map name_map_S20484C3[] = {
  NSPAIR(_ZN8S20484C3C1Ev),
  NSPAIR(_ZN8S20484C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S20484C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20484C3[];
static  VTBL_ENTRY vtc_S20484C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20484C3[0]),
};
extern VTBL_ENTRY _ZTV8S20484C3[];
static  VTT_ENTRY vtt_S20484C3[] = {
  {&(_ZTV8S20484C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20484C3[];
extern  VTBL_ENTRY _ZTV8S20484C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20484C3[];
Class_Descriptor cd_S20484C3 = {  "S20484C3", // class name
  bases_S20484C3, 2,
  &(vtc_S20484C3[0]), // expected_vtbl_contents
  &(vtt_S20484C3[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20484C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20484C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20484C3),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  S20484C7  : S3600C19 , S3600C29_nt {
};
//SIG(-1 S20484C7) C1{ BC2{ m} BC3{ m Fp}}



static void Test_S20484C7()
{
  extern Class_Descriptor cd_S20484C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20484C7, buf);
    S20484C7 &lv = *(new (buf) S20484C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20484C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20484C7)");
    check_base_class_offset(lv, (S3600C19*), 0, "S20484C7");
    check_base_class_offset(lv, (S3600C29_nt*), 0, "S20484C7");
    test_class_info(&lv, &cd_S20484C7);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20484C7(Test_S20484C7, "S20484C7", ABISELECT(8,4));

#else // __cplusplus

extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S20484C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3600C29_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 _ZTI8S20484C7[];
Class_Descriptor cd_S20484C7 = {  "S20484C7", // class name
  bases_S20484C7, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20484C7),ABISELECT(56,32), //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  S20484C2  : virtual S20484C3 , S20484C7 {
  ~S20484C2(); // tgen
  S20484C2(); // tgen
};
//SIG(-1 S20484C2) C1{ VBC2{ BC3{ m Fp} VBC4{ m} FU5{ m}} BC6{ BC4 BC3}}


S20484C2 ::~S20484C2(){ note_dtor("S20484C2", this);} // tgen
S20484C2 ::S20484C2(){ note_ctor("S20484C2", this);} // tgen

static void Test_S20484C2()
{
  extern Class_Descriptor cd_S20484C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20484C2, buf);
    S20484C2 *dp, &lv = *(dp=new (buf) S20484C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20484C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20484C2)");
    check_base_class_offset(lv, (S3600C29_nt*)(S20484C3*), ABISELECT(24,12), "S20484C2");
    check_base_class_offset(lv, (S3600C19*)(S20484C3*), 0, "S20484C2");
    check_base_class_offset(lv, (S20484C3*), ABISELECT(16,8), "S20484C2");
    check_base_class_offset(lv, (S3600C19*)(S20484C7*), ABISELECT(8,4), "S20484C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S20484C7*), ABISELECT(8,4), "S20484C2");
    check_base_class_offset(lv, (S20484C7*), ABISELECT(8,4), "S20484C2");
    test_class_info(&lv, &cd_S20484C2);
    dp->~S20484C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20484C2(Test_S20484C2, "S20484C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20484C2C1Ev();
extern void _ZN8S20484C2D1Ev();
Name_Map name_map_S20484C2[] = {
  NSPAIR(_ZN8S20484C2C1Ev),
  NSPAIR(_ZN8S20484C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20484C3;
extern VTBL_ENTRY _ZTI8S20484C3[];
extern  VTBL_ENTRY _ZTV8S20484C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20484C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20484C7;
extern VTBL_ENTRY _ZTI8S20484C7[];
static Base_Class bases_S20484C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20484C3,    ABISELECT(16,8), //bcp->offset
    4, //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},
  {&cd_S3600C19,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20484C7,    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 _ZTI8S20484C2[];
static  VTBL_ENTRY vtc_S20484C2[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20484C2[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20484C2[0]),
};
extern VTBL_ENTRY _ZTV8S20484C2[];
static  VTBL_ENTRY _tg__ZTV8S20484C3__8S20484C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20484C3[0]),
};
static  VTT_ENTRY vtt_S20484C2[] = {
  {&(_ZTV8S20484C2[4]),  4,7},
  {&(_ZTV8S20484C2[7]),  7,7},
  {&(_tg__ZTV8S20484C3__8S20484C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20484C2[];
extern  VTBL_ENTRY _ZTV8S20484C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20484C2[];
Class_Descriptor cd_S20484C2 = {  "S20484C2", // class name
  bases_S20484C2, 6,
  &(vtc_S20484C2[0]), // expected_vtbl_contents
  &(vtt_S20484C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20484C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20484C2),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20484C2),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  S20484C10  : virtual S3600C19 , virtual S20484C3 {
  int s20484c10f0;
  ~S20484C10(); // tgen
  S20484C10(); // tgen
};
//SIG(-1 S20484C10) C1{ VBC2{ m} VBC3{ BC4{ m Fp} VBC2 FU5{ m}} Fi}


S20484C10 ::~S20484C10(){ note_dtor("S20484C10", this);} // tgen
S20484C10 ::S20484C10(){ note_ctor("S20484C10", this);} // tgen

static void Test_S20484C10()
{
  extern Class_Descriptor cd_S20484C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20484C10, buf);
    S20484C10 *dp, &lv = *(dp=new (buf) S20484C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20484C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20484C10)");
    check_base_class_offset(lv, (S3600C19*), 0, "S20484C10");
    check_base_class_offset(lv, (S3600C19*)(S20484C3*), 0, "S20484C10");
    check_base_class_offset(lv, (S3600C29_nt*)(S20484C3*), ABISELECT(24,12), "S20484C10");
    check_base_class_offset(lv, (S20484C3*), ABISELECT(16,8), "S20484C10");
    check_field_offset(lv, s20484c10f0, ABISELECT(8,4), "S20484C10.s20484c10f0");
    test_class_info(&lv, &cd_S20484C10);
    dp->~S20484C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20484C10(Test_S20484C10, "S20484C10", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S20484C10C1Ev();
extern void _ZN9S20484C10D1Ev();
Name_Map name_map_S20484C10[] = {
  NSPAIR(_ZN9S20484C10C1Ev),
  NSPAIR(_ZN9S20484C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20484C3;
extern VTBL_ENTRY _ZTI8S20484C3[];
extern  VTBL_ENTRY _ZTV8S20484C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20484C3[];
static Base_Class bases_S20484C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20484C3,    ABISELECT(16,8), //bcp->offset
    4, //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 _ZTI9S20484C10[];
static  VTBL_ENTRY vtc_S20484C10[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20484C10[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20484C10[0]),
};
extern VTBL_ENTRY _ZTV9S20484C10[];
static  VTBL_ENTRY _tg__ZTV8S20484C3__9S20484C10[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20484C3[0]),
};
static  VTT_ENTRY vtt_S20484C10[] = {
  {&(_ZTV9S20484C10[4]),  4,7},
  {&(_ZTV9S20484C10[7]),  7,7},
  {&(_tg__ZTV8S20484C3__9S20484C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20484C10[];
extern  VTBL_ENTRY _ZTV9S20484C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20484C10[];
Class_Descriptor cd_S20484C10 = {  "S20484C10", // class name
  bases_S20484C10, 3,
  &(vtc_S20484C10[0]), // expected_vtbl_contents
  &(vtt_S20484C10[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S20484C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20484C10),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20484C10),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  S20484C11  : virtual S3600C29_nt , S3600C19 {
  ~S20484C11(); // tgen
  S20484C11(); // tgen
};
//SIG(-1 S20484C11) C1{ VBC2{ m Fp} BC3{ m}}


S20484C11 ::~S20484C11(){ note_dtor("S20484C11", this);} // tgen
S20484C11 ::S20484C11(){ note_ctor("S20484C11", this);} // tgen

static void Test_S20484C11()
{
  extern Class_Descriptor cd_S20484C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20484C11, buf);
    S20484C11 *dp, &lv = *(dp=new (buf) S20484C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20484C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20484C11)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20484C11");
    check_base_class_offset(lv, (S3600C19*), 0, "S20484C11");
    test_class_info(&lv, &cd_S20484C11);
    dp->~S20484C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20484C11(Test_S20484C11, "S20484C11", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S20484C11C1Ev();
extern void _ZN9S20484C11D1Ev();
Name_Map name_map_S20484C11[] = {
  NSPAIR(_ZN9S20484C11C1Ev),
  NSPAIR(_ZN9S20484C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S20484C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI9S20484C11[];
static  VTBL_ENTRY vtc_S20484C11[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20484C11[0]),
};
extern VTBL_ENTRY _ZTV9S20484C11[];
static  VTT_ENTRY vtt_S20484C11[] = {
  {&(_ZTV9S20484C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20484C11[];
extern  VTBL_ENTRY _ZTV9S20484C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20484C11[];
Class_Descriptor cd_S20484C11 = {  "S20484C11", // class name
  bases_S20484C11, 2,
  &(vtc_S20484C11[0]), // expected_vtbl_contents
  &(vtt_S20484C11[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S20484C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20484C11),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20484C11),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  S20484C9  : S20484C10 , S20484C11 {
  ::S3600C19 s20484c9f0;
  ~S20484C9(); // tgen
  S20484C9(); // tgen
};
//SIG(-1 S20484C9) C1{ BC2{ VBC3{ m} VBC4{ BC5{ m Fp} VBC3 FU6{ m}} Fi} BC7{ VBC5 BC3} FC3}


S20484C9 ::~S20484C9(){ note_dtor("S20484C9", this);} // tgen
S20484C9 ::S20484C9(){ note_ctor("S20484C9", this);} // tgen

static void Test_S20484C9()
{
  extern Class_Descriptor cd_S20484C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20484C9, buf);
    S20484C9 *dp, &lv = *(dp=new (buf) S20484C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20484C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20484C9)");
    check_base_class_offset(lv, (S3600C19*)(S20484C10*), 0, "S20484C9");
    check_base_class_offset(lv, (S3600C19*)(S20484C3*), 0, "S20484C9");
    check_base_class_offset(lv, (S3600C29_nt*)(S20484C3*), ABISELECT(40,20), "S20484C9");
    check_base_class_offset(lv, (S20484C3*)(S20484C10*), ABISELECT(32,16), "S20484C9");
    check_base_class_offset(lv, (S20484C10*), 0, "S20484C9");
    check_base_class_offset(lv, (S3600C29_nt*)(S20484C11*), ABISELECT(56,28), "S20484C9");
    check_base_class_offset(lv, (S3600C19*)(S20484C11*), ABISELECT(16,8), "S20484C9");
    check_base_class_offset(lv, (S20484C11*), ABISELECT(16,8), "S20484C9");
    check_field_offset(lv, s20484c9f0, ABISELECT(24,12), "S20484C9.s20484c9f0");
    test_class_info(&lv, &cd_S20484C9);
    dp->~S20484C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20484C9(Test_S20484C9, "S20484C9", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20484C9C1Ev();
extern void _ZN8S20484C9D1Ev();
Name_Map name_map_S20484C9[] = {
  NSPAIR(_ZN8S20484C9C1Ev),
  NSPAIR(_ZN8S20484C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20484C3;
extern VTBL_ENTRY _ZTI8S20484C3[];
extern  VTBL_ENTRY _ZTV8S20484C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20484C3[];
extern Class_Descriptor cd_S20484C10;
extern VTBL_ENTRY _ZTI9S20484C10[];
extern  VTBL_ENTRY _ZTV9S20484C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20484C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20484C11;
extern VTBL_ENTRY _ZTI9S20484C11[];
extern  VTBL_ENTRY _ZTV9S20484C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20484C11[];
static Base_Class bases_S20484C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20484C3,    ABISELECT(32,16), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20484C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C29_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S20484C11,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI8S20484C9[];
static  VTBL_ENTRY vtc_S20484C9[] = {
  ABISELECT(56,28),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20484C9[0]),
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20484C9[0]),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20484C9[0]),
};
extern VTBL_ENTRY _ZTV8S20484C9[];
static  VTBL_ENTRY _tg__ZTV9S20484C10__8S20484C9[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20484C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20484C3__9S20484C10__8S20484C9[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20484C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20484C11__8S20484C9[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20484C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20484C3__8S20484C9[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20484C3[0]),
};
static  VTT_ENTRY vtt_S20484C9[] = {
  {&(_ZTV8S20484C9[5]),  5,11},
  {&(_tg__ZTV9S20484C10__8S20484C9[4]),  4,4},
  {&(_tg__ZTV8S20484C3__9S20484C10__8S20484C9[3]),  3,3},
  {&(_tg__ZTV9S20484C11__8S20484C9[3]),  3,3},
  {&(_ZTV8S20484C9[11]),  11,11},
  {&(_ZTV8S20484C9[8]),  8,11},
  {&(_tg__ZTV8S20484C3__8S20484C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20484C9[];
extern  VTBL_ENTRY _ZTV8S20484C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20484C9[];
Class_Descriptor cd_S20484C9 = {  "S20484C9", // class name
  bases_S20484C9, 7,
  &(vtc_S20484C9[0]), // expected_vtbl_contents
  &(vtt_S20484C9[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20484C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20484C9),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20484C9),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  S20484C12  : virtual S20484C7 , virtual S20484C11 , S3600C29_nt {
  __tsi64 s20484c12f0[8];
  ~S20484C12(); // tgen
  S20484C12(); // tgen
};
//SIG(-1 S20484C12) C1{ VBC2{ BC3{ m} BC4{ m Fp}} VBC5{ VBC4 BC3} BC4 FL[8]}


S20484C12 ::~S20484C12(){ note_dtor("S20484C12", this);} // tgen
S20484C12 ::S20484C12(){ note_ctor("S20484C12", this);} // tgen

static void Test_S20484C12()
{
  extern Class_Descriptor cd_S20484C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,21)];
    init_test(&cd_S20484C12, buf);
    S20484C12 *dp, &lv = *(dp=new (buf) S20484C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,80), "sizeof(S20484C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20484C12)");
    check_base_class_offset(lv, (S3600C19*)(S20484C7*), ABISELECT(80,72), "S20484C12");
    check_base_class_offset(lv, (S3600C29_nt*)(S20484C7*), ABISELECT(80,72), "S20484C12");
    check_base_class_offset(lv, (S20484C7*), ABISELECT(80,72), "S20484C12");
    check_base_class_offset(lv, (S3600C29_nt*)(S20484C11*), ABISELECT(88,76), "S20484C12");
    check_base_class_offset(lv, (S3600C19*)(S20484C11*), 0, "S20484C12");
    check_base_class_offset(lv, (S20484C11*), 0, "S20484C12");
    /*is_ambiguous_... S20484C12::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S20484C12");
    check_field_offset(lv, s20484c12f0, ABISELECT(16,8), "S20484C12.s20484c12f0");
    test_class_info(&lv, &cd_S20484C12);
    dp->~S20484C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20484C12(Test_S20484C12, "S20484C12", ABISELECT(96,80));

#else // __cplusplus

extern void _ZN9S20484C12C1Ev();
extern void _ZN9S20484C12D1Ev();
Name_Map name_map_S20484C12[] = {
  NSPAIR(_ZN9S20484C12C1Ev),
  NSPAIR(_ZN9S20484C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20484C7;
extern VTBL_ENTRY _ZTI8S20484C7[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20484C11;
extern VTBL_ENTRY _ZTI9S20484C11[];
extern  VTBL_ENTRY _ZTV9S20484C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20484C11[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S20484C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(80,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
    2, //immediately_derived
  0, 0},
  {&cd_S20484C7,    ABISELECT(80,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_S3600C29_nt,    ABISELECT(88,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
    5, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20484C11,    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},
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20484C12[];
static  VTBL_ENTRY vtc_S20484C12[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S20484C12[0]),
};
extern VTBL_ENTRY _ZTV9S20484C12[];
static  VTBL_ENTRY _tg__ZTV9S20484C11__9S20484C12[] = {
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S20484C11[0]),
};
static  VTT_ENTRY vtt_S20484C12[] = {
  {&(_ZTV9S20484C12[5]),  5,5},
  {&(_ZTV9S20484C12[5]),  5,5},
  {&(_tg__ZTV9S20484C11__9S20484C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20484C12[];
extern  VTBL_ENTRY _ZTV9S20484C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20484C12[];
Class_Descriptor cd_S20484C12 = {  "S20484C12", // class name
  bases_S20484C12, 7,
  &(vtc_S20484C12[0]), // expected_vtbl_contents
  &(vtt_S20484C12[0]), // expected_vtt_contents
  ABISELECT(96,80), // object size
  NSPAIRA(_ZTI9S20484C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20484C12),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20484C12),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  S20484C8  : virtual S3600C19 , S20484C9 , S20484C11 , virtual S20484C12 {
  virtual  ~S20484C8(); // _ZN8S20484C8D2Ev
  S20484C8(); // tgen
};
//SIG(-1 S20484C8) C1{ VBC2{ m} BC3{ BC4{ VBC2 VBC5{ BC6{ m Fp} VBC2 FU7{ m}} Fi} BC8{ VBC6 BC2} FC2} BC8 VBC9{ VBC10{ BC2 BC6} VBC8 BC6 FL[8]} vd}


 S20484C8 ::~S20484C8(){ note_dtor("S20484C8", this);}
S20484C8 ::S20484C8(){ note_ctor("S20484C8", this);} // tgen

static void Test_S20484C8()
{
  extern Class_Descriptor cd_S20484C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S20484C8, buf);
    S20484C8 *dp, &lv = *(dp=new (buf) S20484C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20484C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20484C8)");
    /*is_ambiguous_... S20484C8::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), 0, "S20484C8");
    check_base_class_offset(lv, (S3600C19*)(S20484C10*)(S20484C9*), 0, "S20484C8");
    check_base_class_offset(lv, (S3600C19*)(S20484C3*), 0, "S20484C8");
    check_base_class_offset(lv, (S3600C29_nt*)(S20484C3*), ABISELECT(48,24), "S20484C8");
    check_base_class_offset(lv, (S20484C3*)(S20484C10*)(S20484C9*), ABISELECT(40,20), "S20484C8");
    check_base_class_offset(lv, (S20484C10*)(S20484C9*), 0, "S20484C8");
    check_base_class_offset(lv, (S3600C29_nt*)(S20484C11*)(S20484C9*), ABISELECT(64,32), "S20484C8");
    /*is_ambiguous_... S20484C8::S20484C11 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20484C11*), ABISELECT(64,32), "S20484C8");
    /*is_ambiguous_... S20484C8::S20484C11 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20484C11*), ABISELECT(64,32), "S20484C8");
    check_base_class_offset(lv, (S3600C19*)(S20484C11*)(S20484C9*), ABISELECT(16,8), "S20484C8");
    check_base_class_offset(lv, (S20484C11*)(S20484C9*), ABISELECT(16,8), "S20484C8");
    check_base_class_offset(lv, (S20484C9*), 0, "S20484C8");
    /*is_ambiguous_... S20484C8::S20484C11 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20484C11*), ABISELECT(32,16), "S20484C8");
    /*is_ambiguous_... S20484C8::S20484C11 */ AMB_check_base_class_offset(lv, (S20484C11*), ABISELECT(32,16), "S20484C8");
    check_base_class_offset(lv, (S3600C19*)(S20484C7*), ABISELECT(152,108), "S20484C8");
    check_base_class_offset(lv, (S3600C29_nt*)(S20484C7*), ABISELECT(152,108), "S20484C8");
    check_base_class_offset(lv, (S20484C7*)(S20484C12*), ABISELECT(152,108), "S20484C8");
    /*is_ambiguous_... S20484C8::S20484C11 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20484C11*), ABISELECT(72,36), "S20484C8");
    check_base_class_offset(lv, (S20484C11*)(S20484C12*), ABISELECT(72,36), "S20484C8");
    /*is_ambiguous_... S20484C12::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20484C12*), ABISELECT(80,40), "S20484C8");
    check_base_class_offset(lv, (S20484C12*), ABISELECT(72,36), "S20484C8");
    test_class_info(&lv, &cd_S20484C8);
    dp->~S20484C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20484C8(Test_S20484C8, "S20484C8", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN8S20484C8C1Ev();
extern void _ZN8S20484C8D2Ev();
Name_Map name_map_S20484C8[] = {
  NSPAIR(_ZN8S20484C8C1Ev),
  NSPAIR(_ZN8S20484C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20484C3;
extern VTBL_ENTRY _ZTI8S20484C3[];
extern  VTBL_ENTRY _ZTV8S20484C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20484C3[];
extern Class_Descriptor cd_S20484C10;
extern VTBL_ENTRY _ZTI9S20484C10[];
extern  VTBL_ENTRY _ZTV9S20484C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20484C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20484C11;
extern VTBL_ENTRY _ZTI9S20484C11[];
extern  VTBL_ENTRY _ZTV9S20484C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20484C11[];
extern Class_Descriptor cd_S20484C9;
extern VTBL_ENTRY _ZTI8S20484C9[];
extern  VTBL_ENTRY _ZTV8S20484C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20484C9[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20484C11;
extern VTBL_ENTRY _ZTI9S20484C11[];
extern  VTBL_ENTRY _ZTV9S20484C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20484C11[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20484C7;
extern VTBL_ENTRY _ZTI8S20484C7[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20484C11;
extern VTBL_ENTRY _ZTI9S20484C11[];
extern  VTBL_ENTRY _ZTV9S20484C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20484C11[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20484C12;
extern VTBL_ENTRY _ZTI9S20484C12[];
extern  VTBL_ENTRY _ZTV9S20484C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20484C12[];
static Base_Class bases_S20484C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20484C3,    ABISELECT(40,20), //bcp->offset
    16, //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
    3, //immediately_derived
  0, 1},
  {&cd_S20484C10,    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
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S20484C11,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20484C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20484C11,    ABISELECT(32,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20484C7,    ABISELECT(152,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20484C11,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20484C12,    ABISELECT(72,36), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20484C8[];
extern void _ZN8S20484C8D1Ev();
extern void _ZN8S20484C8D0Ev();
static  VTBL_ENTRY vtc_S20484C8[] = {
  ABISELECT(72,36),
  ABISELECT(152,108),
  ABISELECT(72,36),
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20484C8[0]),
  (VTBL_ENTRY)&_ZN8S20484C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20484C8D0Ev,
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20484C8[0]),
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20484C8[0]),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20484C8[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20484C8[0]),
};
extern VTBL_ENTRY _ZTV8S20484C8[];
static  VTBL_ENTRY _tg__ZTV8S20484C9__8S20484C8[] = {
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20484C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20484C108S20484C9__8S20484C8[] = {
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20484C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20484C3__9S20484C108S20484C9__8S20484C8[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20484C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20484C118S20484C9__8S20484C8[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20484C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20484C3__8S20484C9__8S20484C8[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20484C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20484C11__8S20484C9__8S20484C8[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20484C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20484C11__A__8S20484C8[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20484C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20484C3__8S20484C8[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20484C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20484C12__8S20484C8[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20484C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20484C11__A2__8S20484C8[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20484C11[0]),
};
static  VTT_ENTRY vtt_S20484C8[] = {
  {&(_ZTV8S20484C8[8]),  8,24},
  {&(_tg__ZTV8S20484C9__8S20484C8[5]),  5,5},
  {&(_tg__ZTV9S20484C108S20484C9__8S20484C8[4]),  4,4},
  {&(_tg__ZTV8S20484C3__9S20484C108S20484C9__8S20484C8[3]),  3,3},
  {&(_tg__ZTV9S20484C118S20484C9__8S20484C8[3]),  3,3},
  {&(_tg__ZTV8S20484C3__8S20484C9__8S20484C8[3]),  3,3},
  {&(_tg__ZTV9S20484C11__8S20484C9__8S20484C8[3]),  3,3},
  {&(_tg__ZTV9S20484C11__A__8S20484C8[3]),  3,3},
  {&(_ZTV8S20484C8[19]),  19,24},
  {&(_ZTV8S20484C8[13]),  13,24},
  {&(_ZTV8S20484C8[16]),  16,24},
  {&(_ZTV8S20484C8[24]),  24,24},
  {&(_ZTV8S20484C8[24]),  24,24},
  {&(_tg__ZTV8S20484C3__8S20484C8[3]),  3,3},
  {&(_tg__ZTV9S20484C12__8S20484C8[5]),  5,5},
  {&(_tg__ZTV9S20484C12__8S20484C8[5]),  5,5},
  {&(_tg__ZTV9S20484C11__A2__8S20484C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20484C8[];
extern  VTBL_ENTRY _ZTV8S20484C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20484C8[];
Class_Descriptor cd_S20484C8 = {  "S20484C8", // class name
  bases_S20484C8, 17,
  &(vtc_S20484C8[0]), // expected_vtbl_contents
  &(vtt_S20484C8[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S20484C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20484C8),24, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20484C8),17, //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  S20484C1  : virtual S20484C2 , S20484C8 {
  virtual  ~S20484C1(); // _ZN8S20484C1D2Ev
  S20484C1(); // tgen
};
//SIG(1 S20484C1) C1{ VBC2{ VBC3{ BC4{ m Fp} VBC5{ m} FU6{ m}} BC7{ BC5 BC4}} BC8{ VBC5 BC9{ BC10{ VBC5 VBC3 Fi} BC11{ VBC4 BC5} FC5} BC11 VBC12{ VBC7 VBC11 BC4 FL[8]} vd} vd}


 S20484C1 ::~S20484C1(){ note_dtor("S20484C1", this);}
S20484C1 ::S20484C1(){ note_ctor("S20484C1", this);} // tgen

static void Test_S20484C1()
{
  extern Class_Descriptor cd_S20484C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,31)];
    init_test(&cd_S20484C1, buf);
    S20484C1 *dp, &lv = *(dp=new (buf) S20484C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,120), "sizeof(S20484C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20484C1)");
    check_base_class_offset(lv, (S3600C29_nt*)(S20484C3*), ABISELECT(64,32), "S20484C1");
    check_base_class_offset(lv, (S3600C19*)(S20484C3*), 0, "S20484C1");
    /*is_ambiguous_... S20484C8::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20484C8*), 0, "S20484C1");
    check_base_class_offset(lv, (S3600C19*)(S20484C10*)(S20484C9*)(S20484C8*), 0, "S20484C1");
    check_base_class_offset(lv, (S20484C3*)(S20484C2*), ABISELECT(56,28), "S20484C1");
    check_base_class_offset(lv, (S20484C3*)(S20484C10*)(S20484C9*)(S20484C8*), ABISELECT(56,28), "S20484C1");
    check_base_class_offset(lv, (S3600C19*)(S20484C7*)(S20484C2*), ABISELECT(48,24), "S20484C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S20484C7*)(S20484C2*), ABISELECT(48,24), "S20484C1");
    check_base_class_offset(lv, (S20484C7*)(S20484C2*), ABISELECT(48,24), "S20484C1");
    check_base_class_offset(lv, (S20484C2*), ABISELECT(40,20), "S20484C1");
    check_base_class_offset(lv, (S20484C10*)(S20484C9*)(S20484C8*), 0, "S20484C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S20484C11*)(S20484C9*)(S20484C8*), ABISELECT(80,40), "S20484C1");
    /*is_ambiguous_... S20484C8::S20484C11 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20484C11*)(S20484C8*), ABISELECT(80,40), "S20484C1");
    /*is_ambiguous_... S20484C1::S20484C11 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20484C11*), ABISELECT(80,40), "S20484C1");
    check_base_class_offset(lv, (S3600C19*)(S20484C11*)(S20484C9*)(S20484C8*), ABISELECT(16,8), "S20484C1");
    check_base_class_offset(lv, (S20484C11*)(S20484C9*)(S20484C8*), ABISELECT(16,8), "S20484C1");
    check_base_class_offset(lv, (S20484C9*)(S20484C8*), 0, "S20484C1");
    /*is_ambiguous_... S20484C8::S20484C11 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20484C11*)(S20484C8*), ABISELECT(32,16), "S20484C1");
    /*is_ambiguous_... S20484C8::S20484C11 */ AMB_check_base_class_offset(lv, (S20484C11*)(S20484C8*), ABISELECT(32,16), "S20484C1");
    /*is_ambiguous_... S20484C1::S20484C7 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20484C7*), ABISELECT(168,116), "S20484C1");
    /*is_ambiguous_... S20484C1::S20484C7 */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20484C7*), ABISELECT(168,116), "S20484C1");
    check_base_class_offset(lv, (S20484C7*)(S20484C12*), ABISELECT(168,116), "S20484C1");
    /*is_ambiguous_... S20484C1::S20484C11 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20484C11*), ABISELECT(88,44), "S20484C1");
    check_base_class_offset(lv, (S20484C11*)(S20484C12*), ABISELECT(88,44), "S20484C1");
    /*is_ambiguous_... S20484C12::S3600C29_nt */ AMB_check_base_class_offset(lv, (S3600C29_nt*)(S20484C12*), ABISELECT(96,48), "S20484C1");
    check_base_class_offset(lv, (S20484C12*)(S20484C8*), ABISELECT(88,44), "S20484C1");
    check_base_class_offset(lv, (S20484C8*), 0, "S20484C1");
    test_class_info(&lv, &cd_S20484C1);
    dp->~S20484C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20484C1(Test_S20484C1, "S20484C1", ABISELECT(176,120));

#else // __cplusplus

extern void _ZN8S20484C1C1Ev();
extern void _ZN8S20484C1D2Ev();
Name_Map name_map_S20484C1[] = {
  NSPAIR(_ZN8S20484C1C1Ev),
  NSPAIR(_ZN8S20484C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20484C3;
extern VTBL_ENTRY _ZTI8S20484C3[];
extern  VTBL_ENTRY _ZTV8S20484C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20484C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20484C7;
extern VTBL_ENTRY _ZTI8S20484C7[];
extern Class_Descriptor cd_S20484C2;
extern VTBL_ENTRY _ZTI8S20484C2[];
extern  VTBL_ENTRY _ZTV8S20484C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20484C2[];
extern Class_Descriptor cd_S20484C10;
extern VTBL_ENTRY _ZTI9S20484C10[];
extern  VTBL_ENTRY _ZTV9S20484C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20484C10[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20484C11;
extern VTBL_ENTRY _ZTI9S20484C11[];
extern  VTBL_ENTRY _ZTV9S20484C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20484C11[];
extern Class_Descriptor cd_S20484C9;
extern VTBL_ENTRY _ZTI8S20484C9[];
extern  VTBL_ENTRY _ZTV8S20484C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20484C9[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20484C11;
extern VTBL_ENTRY _ZTI9S20484C11[];
extern  VTBL_ENTRY _ZTV9S20484C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20484C11[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20484C7;
extern VTBL_ENTRY _ZTI8S20484C7[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20484C11;
extern VTBL_ENTRY _ZTI9S20484C11[];
extern  VTBL_ENTRY _ZTV9S20484C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20484C11[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S20484C12;
extern VTBL_ENTRY _ZTI9S20484C12[];
extern  VTBL_ENTRY _ZTV9S20484C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20484C12[];
extern Class_Descriptor cd_S20484C8;
extern VTBL_ENTRY _ZTI8S20484C8[];
extern  VTBL_ENTRY _ZTV8S20484C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20484C8[];
static Base_Class bases_S20484C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20484C3,    ABISELECT(56,28), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S3600C29_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20484C7,    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_S20484C2,    ABISELECT(40,20), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20484C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20484C11,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20484C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    13, //immediately_derived
  0, 0},
  {&cd_S20484C11,    ABISELECT(32,16), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    16, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    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
    16, //immediately_derived
  0, 0},
  {&cd_S20484C7,    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
    20, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20484C11,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3600C29_nt,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20484C12,    ABISELECT(88,44), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S20484C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20484C1[];
extern void _ZN8S20484C1D1Ev();
extern void _ZN8S20484C1D0Ev();
static  VTBL_ENTRY vtc_S20484C1[] = {
  ABISELECT(40,20),
  ABISELECT(88,44),
  ABISELECT(168,116),
  ABISELECT(88,44),
  ABISELECT(80,40),
  ABISELECT(56,28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20484C1[0]),
  (VTBL_ENTRY)&_ZN8S20484C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20484C1D0Ev,
  ABISELECT(64,32),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20484C1[0]),
  ABISELECT(48,24),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20484C1[0]),
  ABISELECT(-40,-20),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20484C1[0]),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20484C1[0]),
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S20484C1[0]),
};
extern VTBL_ENTRY _ZTV8S20484C1[];
extern void _ZN8S20484C8D1Ev();
extern void _ZN8S20484C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20484C8__8S20484C1[] = {
  ABISELECT(88,44),
  ABISELECT(168,116),
  ABISELECT(88,44),
  ABISELECT(80,40),
  ABISELECT(56,28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20484C8[0]),
  (VTBL_ENTRY)&_ZN8S20484C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20484C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20484C98S20484C8__8S20484C1[] = {
  ABISELECT(80,40),
  ABISELECT(56,28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20484C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20484C108S20484C98S20484C8__8S20484C1[] = {
  ABISELECT(56,28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20484C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20484C3__9S20484C108S20484C98S20484C8__8S20484C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S20484C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20484C118S20484C98S20484C8__8S20484C1[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S20484C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20484C3__8S20484C98S20484C8__8S20484C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20484C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20484C11__8S20484C98S20484C8__8S20484C1[] = {
  ABISELECT(64,32),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20484C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20484C118S20484C8__A1__8S20484C1[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20484C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20484C3__8S20484C8__8S20484C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20484C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20484C118S20484C9__8S20484C8__8S20484C1[] = {
  ABISELECT(64,32),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20484C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20484C11__A__8S20484C8__8S20484C1[] = {
  ABISELECT(48,24),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20484C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20484C12__8S20484C8__8S20484C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S20484C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20484C2__8S20484C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20484C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20484C3__8S20484C2__8S20484C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20484C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20484C3__8S20484C1[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20484C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20484C12__8S20484C1[] = {
  0,
  ABISELECT(80,72),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20484C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20484C11__A2__8S20484C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20484C11[0]),
};
static  VTT_ENTRY vtt_S20484C1[] = {
  {&(_ZTV8S20484C1[9]),  9,29},
  {&(_tg__ZTV8S20484C8__8S20484C1[8]),  8,10},
  {&(_tg__ZTV8S20484C98S20484C8__8S20484C1[5]),  5,5},
  {&(_tg__ZTV9S20484C108S20484C98S20484C8__8S20484C1[4]),  4,4},
  {&(_tg__ZTV8S20484C3__9S20484C108S20484C98S20484C8__8S20484C1[3]),  3,3},
  {&(_tg__ZTV9S20484C118S20484C98S20484C8__8S20484C1[3]),  3,3},
  {&(_tg__ZTV8S20484C3__8S20484C98S20484C8__8S20484C1[3]),  3,3},
  {&(_tg__ZTV9S20484C11__8S20484C98S20484C8__8S20484C1[3]),  3,3},
  {&(_tg__ZTV9S20484C118S20484C8__A1__8S20484C1[3]),  3,3},
  {&(_tg__ZTV8S20484C3__8S20484C8__8S20484C1[3]),  3,3},
  {&(_tg__ZTV9S20484C118S20484C9__8S20484C8__8S20484C1[3]),  3,3},
  {&(_tg__ZTV9S20484C11__A__8S20484C8__8S20484C1[3]),  3,3},
  {&(_tg__ZTV9S20484C12__8S20484C8__8S20484C1[5]),  5,5},
  {&(_tg__ZTV9S20484C12__8S20484C8__8S20484C1[5]),  5,5},
  {&(_ZTV8S20484C1[21]),  21,29},
  {&(_ZTV8S20484C1[24]),  24,29},
  {&(_ZTV8S20484C1[14]),  14,29},
  {&(_ZTV8S20484C1[17]),  17,29},
  {&(_ZTV8S20484C1[29]),  29,29},
  {&(_ZTV8S20484C1[29]),  29,29},
  {&(_tg__ZTV8S20484C2__8S20484C1[4]),  4,4},
  {&(_tg__ZTV8S20484C3__8S20484C2__8S20484C1[3]),  3,3},
  {&(_tg__ZTV8S20484C3__8S20484C1[3]),  3,3},
  {&(_tg__ZTV9S20484C12__8S20484C1[5]),  5,5},
  {&(_tg__ZTV9S20484C12__8S20484C1[5]),  5,5},
  {&(_tg__ZTV9S20484C11__A2__8S20484C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20484C1[];
extern  VTBL_ENTRY _ZTV8S20484C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20484C1[];
Class_Descriptor cd_S20484C1 = {  "S20484C1", // class name
  bases_S20484C1, 22,
  &(vtc_S20484C1[0]), // expected_vtbl_contents
  &(vtt_S20484C1[0]), // expected_vtt_contents
  ABISELECT(176,120), // object size
  NSPAIRA(_ZTI8S20484C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20484C1),29, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20484C1),26, //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  S8977C2  {
  int s8977c2f0[28];
  virtual  ~S8977C2(); // _ZN7S8977C2D1Ev
  virtual void  v2(); // _ZN7S8977C22v2Ev
  virtual void  v3(); // _ZN7S8977C22v3Ev
  virtual void  v4(); // _ZN7S8977C22v4Ev
  virtual void  v5(); // _ZN7S8977C22v5Ev
  virtual void  v6(); // _ZN7S8977C22v6Ev
  virtual void  v7(); // _ZN7S8977C22v7Ev
  virtual void  v8(); // _ZN7S8977C22v8Ev
  virtual void  v9(); // _ZN7S8977C22v9Ev
  virtual void  v10(); // _ZN7S8977C23v10Ev
  virtual void  v11(); // _ZN7S8977C23v11Ev
  virtual void  v12(); // _ZN7S8977C23v12Ev
  virtual void  v13(); // _ZN7S8977C23v13Ev
  virtual void  v14(); // _ZN7S8977C23v14Ev
  virtual void  v15(); // _ZN7S8977C23v15Ev
  virtual void  v16(); // _ZN7S8977C23v16Ev
  virtual void  v17(); // _ZN7S8977C23v17Ev
  virtual void  v18(); // _ZN7S8977C23v18Ev
  virtual void  v19(); // _ZN7S8977C23v19Ev
  virtual void  v20(); // _ZN7S8977C23v20Ev
  virtual void  v21(); // _ZN7S8977C23v21Ev
  virtual void  v22(); // _ZN7S8977C23v22Ev
  virtual void  v23(); // _ZN7S8977C23v23Ev
  virtual void  v24(); // _ZN7S8977C23v24Ev
  virtual void  v25(); // _ZN7S8977C23v25Ev
  virtual void  v26(); // _ZN7S8977C23v26Ev
  S8977C2(); // tgen
};
//SIG(-1 S8977C2) 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 Fi[28]}


 S8977C2 ::~S8977C2(){ note_dtor("S8977C2", this);}
void  S8977C2 ::v2(){vfunc_called(this, "_ZN7S8977C22v2Ev");}
void  S8977C2 ::v3(){vfunc_called(this, "_ZN7S8977C22v3Ev");}
void  S8977C2 ::v4(){vfunc_called(this, "_ZN7S8977C22v4Ev");}
void  S8977C2 ::v5(){vfunc_called(this, "_ZN7S8977C22v5Ev");}
void  S8977C2 ::v6(){vfunc_called(this, "_ZN7S8977C22v6Ev");}
void  S8977C2 ::v7(){vfunc_called(this, "_ZN7S8977C22v7Ev");}
void  S8977C2 ::v8(){vfunc_called(this, "_ZN7S8977C22v8Ev");}
void  S8977C2 ::v9(){vfunc_called(this, "_ZN7S8977C22v9Ev");}
void  S8977C2 ::v10(){vfunc_called(this, "_ZN7S8977C23v10Ev");}
void  S8977C2 ::v11(){vfunc_called(this, "_ZN7S8977C23v11Ev");}
void  S8977C2 ::v12(){vfunc_called(this, "_ZN7S8977C23v12Ev");}
void  S8977C2 ::v13(){vfunc_called(this, "_ZN7S8977C23v13Ev");}
void  S8977C2 ::v14(){vfunc_called(this, "_ZN7S8977C23v14Ev");}
void  S8977C2 ::v15(){vfunc_called(this, "_ZN7S8977C23v15Ev");}
void  S8977C2 ::v16(){vfunc_called(this, "_ZN7S8977C23v16Ev");}
void  S8977C2 ::v17(){vfunc_called(this, "_ZN7S8977C23v17Ev");}
void  S8977C2 ::v18(){vfunc_called(this, "_ZN7S8977C23v18Ev");}
void  S8977C2 ::v19(){vfunc_called(this, "_ZN7S8977C23v19Ev");}
void  S8977C2 ::v20(){vfunc_called(this, "_ZN7S8977C23v20Ev");}
void  S8977C2 ::v21(){vfunc_called(this, "_ZN7S8977C23v21Ev");}
void  S8977C2 ::v22(){vfunc_called(this, "_ZN7S8977C23v22Ev");}
void  S8977C2 ::v23(){vfunc_called(this, "_ZN7S8977C23v23Ev");}
void  S8977C2 ::v24(){vfunc_called(this, "_ZN7S8977C23v24Ev");}
void  S8977C2 ::v25(){vfunc_called(this, "_ZN7S8977C23v25Ev");}
void  S8977C2 ::v26(){vfunc_called(this, "_ZN7S8977C23v26Ev");}
S8977C2 ::S8977C2(){ note_ctor("S8977C2", this);} // tgen

static void Test_S8977C2()
{
  extern Class_Descriptor cd_S8977C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S8977C2, buf);
    S8977C2 *dp, &lv = *(dp=new (buf) S8977C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S8977C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8977C2)");
    check_field_offset(lv, s8977c2f0, ABISELECT(8,4), "S8977C2.s8977c2f0");
    test_class_info(&lv, &cd_S8977C2);
    dp->~S8977C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8977C2(Test_S8977C2, "S8977C2", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN7S8977C2C1Ev();
extern void _ZN7S8977C2D1Ev();
Name_Map name_map_S8977C2[] = {
  NSPAIR(_ZN7S8977C2C1Ev),
  NSPAIR(_ZN7S8977C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8977C2[];
extern void _ZN7S8977C2D1Ev();
extern void _ZN7S8977C2D0Ev();
extern void _ZN7S8977C22v2Ev();
extern void _ZN7S8977C22v3Ev();
extern void _ZN7S8977C22v4Ev();
extern void _ZN7S8977C22v5Ev();
extern void _ZN7S8977C22v6Ev();
extern void _ZN7S8977C22v7Ev();
extern void _ZN7S8977C22v8Ev();
extern void _ZN7S8977C22v9Ev();
extern void _ZN7S8977C23v10Ev();
extern void _ZN7S8977C23v11Ev();
extern void _ZN7S8977C23v12Ev();
extern void _ZN7S8977C23v13Ev();
extern void _ZN7S8977C23v14Ev();
extern void _ZN7S8977C23v15Ev();
extern void _ZN7S8977C23v16Ev();
extern void _ZN7S8977C23v17Ev();
extern void _ZN7S8977C23v18Ev();
extern void _ZN7S8977C23v19Ev();
extern void _ZN7S8977C23v20Ev();
extern void _ZN7S8977C23v21Ev();
extern void _ZN7S8977C23v22Ev();
extern void _ZN7S8977C23v23Ev();
extern void _ZN7S8977C23v24Ev();
extern void _ZN7S8977C23v25Ev();
extern void _ZN7S8977C23v26Ev();
static  VTBL_ENTRY vtc_S8977C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8977C2[0]),
  (VTBL_ENTRY)&_ZN7S8977C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8977C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8977C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8977C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8977C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8977C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8977C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8977C22v7Ev,
  (VTBL_ENTRY)&_ZN7S8977C22v8Ev,
  (VTBL_ENTRY)&_ZN7S8977C22v9Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v24Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v25Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v26Ev,
};
extern VTBL_ENTRY _ZTI7S8977C2[];
extern  VTBL_ENTRY _ZTV7S8977C2[];
Class_Descriptor cd_S8977C2 = {  "S8977C2", // class name
  0,0,//no base classes
  &(vtc_S8977C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI7S8977C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8977C2),29, //virtual function table var
  2, // 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  S8977C1  : S8977C2 {
  void *s8977c1f0;
  ::S1566C29 s8977c1f1;
  virtual void  v1(); // _ZN7S8977C12v1Ev
  ~S8977C1(); // tgen
  S8977C1(); // tgen
};
//SIG(1 S8977C1) C1{ BC2{ vd 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 Fi[28]} v1 Fp FC3{ BC4{ m Fp Fi[2]}}}


void  S8977C1 ::v1(){vfunc_called(this, "_ZN7S8977C12v1Ev");}
S8977C1 ::~S8977C1(){ note_dtor("S8977C1", this);} // tgen
S8977C1 ::S8977C1(){ note_ctor("S8977C1", this);} // tgen

static void Test_S8977C1()
{
  extern Class_Descriptor cd_S8977C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,34)];
    init_test(&cd_S8977C1, buf);
    S8977C1 *dp, &lv = *(dp=new (buf) S8977C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,132), "sizeof(S8977C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8977C1)");
    check_base_class_offset(lv, (S8977C2*), 0, "S8977C1");
    check_field_offset(lv, s8977c1f0, ABISELECT(120,116), "S8977C1.s8977c1f0");
    check_field_offset(lv, s8977c1f1, ABISELECT(128,120), "S8977C1.s8977c1f1");
    test_class_info(&lv, &cd_S8977C1);
    dp->~S8977C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8977C1(Test_S8977C1, "S8977C1", ABISELECT(144,132));

#else // __cplusplus

extern void _ZN7S8977C1C1Ev();
extern void _ZN7S8977C1D1Ev();
Name_Map name_map_S8977C1[] = {
  NSPAIR(_ZN7S8977C1C1Ev),
  NSPAIR(_ZN7S8977C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8977C2;
extern VTBL_ENTRY _ZTI7S8977C2[];
extern  VTBL_ENTRY _ZTV7S8977C2[];
static Base_Class bases_S8977C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8977C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S8977C1[];
extern void _ZN7S8977C1D1Ev();
extern void _ZN7S8977C1D0Ev();
extern void _ZN7S8977C22v2Ev();
extern void _ZN7S8977C22v3Ev();
extern void _ZN7S8977C22v4Ev();
extern void _ZN7S8977C22v5Ev();
extern void _ZN7S8977C22v6Ev();
extern void _ZN7S8977C22v7Ev();
extern void _ZN7S8977C22v8Ev();
extern void _ZN7S8977C22v9Ev();
extern void _ZN7S8977C23v10Ev();
extern void _ZN7S8977C23v11Ev();
extern void _ZN7S8977C23v12Ev();
extern void _ZN7S8977C23v13Ev();
extern void _ZN7S8977C23v14Ev();
extern void _ZN7S8977C23v15Ev();
extern void _ZN7S8977C23v16Ev();
extern void _ZN7S8977C23v17Ev();
extern void _ZN7S8977C23v18Ev();
extern void _ZN7S8977C23v19Ev();
extern void _ZN7S8977C23v20Ev();
extern void _ZN7S8977C23v21Ev();
extern void _ZN7S8977C23v22Ev();
extern void _ZN7S8977C23v23Ev();
extern void _ZN7S8977C23v24Ev();
extern void _ZN7S8977C23v25Ev();
extern void _ZN7S8977C23v26Ev();
extern void _ZN7S8977C12v1Ev();
static  VTBL_ENTRY vtc_S8977C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8977C1[0]),
  (VTBL_ENTRY)&_ZN7S8977C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8977C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8977C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8977C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8977C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8977C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8977C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8977C22v7Ev,
  (VTBL_ENTRY)&_ZN7S8977C22v8Ev,
  (VTBL_ENTRY)&_ZN7S8977C22v9Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v24Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v25Ev,
  (VTBL_ENTRY)&_ZN7S8977C23v26Ev,
  (VTBL_ENTRY)&_ZN7S8977C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8977C1[];
extern  VTBL_ENTRY _ZTV7S8977C1[];
Class_Descriptor cd_S8977C1 = {  "S8977C1", // class name
  bases_S8977C1, 1,
  &(vtc_S8977C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,132), // object size
  NSPAIRA(_ZTI7S8977C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8977C1),30, //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  S9490C2  {
  int s9490c2f0[28];
  virtual  ~S9490C2(); // _ZN7S9490C2D1Ev
  virtual void  v3(); // _ZN7S9490C22v3Ev
  virtual void  v4(); // _ZN7S9490C22v4Ev
  virtual void  v5(); // _ZN7S9490C22v5Ev
  virtual void  v6(); // _ZN7S9490C22v6Ev
  virtual void  v7(); // _ZN7S9490C22v7Ev
  virtual void  v8(); // _ZN7S9490C22v8Ev
  virtual void  v9(); // _ZN7S9490C22v9Ev
  virtual void  v10(); // _ZN7S9490C23v10Ev
  virtual void  v11(); // _ZN7S9490C23v11Ev
  virtual void  v12(); // _ZN7S9490C23v12Ev
  virtual void  v13(); // _ZN7S9490C23v13Ev
  virtual void  v14(); // _ZN7S9490C23v14Ev
  virtual void  v15(); // _ZN7S9490C23v15Ev
  virtual void  v16(); // _ZN7S9490C23v16Ev
  virtual void  v17(); // _ZN7S9490C23v17Ev
  virtual void  v18(); // _ZN7S9490C23v18Ev
  virtual void  v19(); // _ZN7S9490C23v19Ev
  virtual void  v20(); // _ZN7S9490C23v20Ev
  virtual void  v21(); // _ZN7S9490C23v21Ev
  virtual void  v22(); // _ZN7S9490C23v22Ev
  virtual void  v23(); // _ZN7S9490C23v23Ev
  virtual void  v24(); // _ZN7S9490C23v24Ev
  virtual void  v25(); // _ZN7S9490C23v25Ev
  virtual void  v26(); // _ZN7S9490C23v26Ev
  virtual void  v27(); // _ZN7S9490C23v27Ev
  S9490C2(); // tgen
};
//SIG(-1 S9490C2) 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 Fi[28]}


 S9490C2 ::~S9490C2(){ note_dtor("S9490C2", this);}
void  S9490C2 ::v3(){vfunc_called(this, "_ZN7S9490C22v3Ev");}
void  S9490C2 ::v4(){vfunc_called(this, "_ZN7S9490C22v4Ev");}
void  S9490C2 ::v5(){vfunc_called(this, "_ZN7S9490C22v5Ev");}
void  S9490C2 ::v6(){vfunc_called(this, "_ZN7S9490C22v6Ev");}
void  S9490C2 ::v7(){vfunc_called(this, "_ZN7S9490C22v7Ev");}
void  S9490C2 ::v8(){vfunc_called(this, "_ZN7S9490C22v8Ev");}
void  S9490C2 ::v9(){vfunc_called(this, "_ZN7S9490C22v9Ev");}
void  S9490C2 ::v10(){vfunc_called(this, "_ZN7S9490C23v10Ev");}
void  S9490C2 ::v11(){vfunc_called(this, "_ZN7S9490C23v11Ev");}
void  S9490C2 ::v12(){vfunc_called(this, "_ZN7S9490C23v12Ev");}
void  S9490C2 ::v13(){vfunc_called(this, "_ZN7S9490C23v13Ev");}
void  S9490C2 ::v14(){vfunc_called(this, "_ZN7S9490C23v14Ev");}
void  S9490C2 ::v15(){vfunc_called(this, "_ZN7S9490C23v15Ev");}
void  S9490C2 ::v16(){vfunc_called(this, "_ZN7S9490C23v16Ev");}
void  S9490C2 ::v17(){vfunc_called(this, "_ZN7S9490C23v17Ev");}
void  S9490C2 ::v18(){vfunc_called(this, "_ZN7S9490C23v18Ev");}
void  S9490C2 ::v19(){vfunc_called(this, "_ZN7S9490C23v19Ev");}
void  S9490C2 ::v20(){vfunc_called(this, "_ZN7S9490C23v20Ev");}
void  S9490C2 ::v21(){vfunc_called(this, "_ZN7S9490C23v21Ev");}
void  S9490C2 ::v22(){vfunc_called(this, "_ZN7S9490C23v22Ev");}
void  S9490C2 ::v23(){vfunc_called(this, "_ZN7S9490C23v23Ev");}
void  S9490C2 ::v24(){vfunc_called(this, "_ZN7S9490C23v24Ev");}
void  S9490C2 ::v25(){vfunc_called(this, "_ZN7S9490C23v25Ev");}
void  S9490C2 ::v26(){vfunc_called(this, "_ZN7S9490C23v26Ev");}
void  S9490C2 ::v27(){vfunc_called(this, "_ZN7S9490C23v27Ev");}
S9490C2 ::S9490C2(){ note_ctor("S9490C2", this);} // tgen

static void Test_S9490C2()
{
  extern Class_Descriptor cd_S9490C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S9490C2, buf);
    S9490C2 *dp, &lv = *(dp=new (buf) S9490C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S9490C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9490C2)");
    check_field_offset(lv, s9490c2f0, ABISELECT(8,4), "S9490C2.s9490c2f0");
    test_class_info(&lv, &cd_S9490C2);
    dp->~S9490C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9490C2(Test_S9490C2, "S9490C2", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN7S9490C2C1Ev();
extern void _ZN7S9490C2D1Ev();
Name_Map name_map_S9490C2[] = {
  NSPAIR(_ZN7S9490C2C1Ev),
  NSPAIR(_ZN7S9490C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9490C2[];
extern void _ZN7S9490C2D1Ev();
extern void _ZN7S9490C2D0Ev();
extern void _ZN7S9490C22v3Ev();
extern void _ZN7S9490C22v4Ev();
extern void _ZN7S9490C22v5Ev();
extern void _ZN7S9490C22v6Ev();
extern void _ZN7S9490C22v7Ev();
extern void _ZN7S9490C22v8Ev();
extern void _ZN7S9490C22v9Ev();
extern void _ZN7S9490C23v10Ev();
extern void _ZN7S9490C23v11Ev();
extern void _ZN7S9490C23v12Ev();
extern void _ZN7S9490C23v13Ev();
extern void _ZN7S9490C23v14Ev();
extern void _ZN7S9490C23v15Ev();
extern void _ZN7S9490C23v16Ev();
extern void _ZN7S9490C23v17Ev();
extern void _ZN7S9490C23v18Ev();
extern void _ZN7S9490C23v19Ev();
extern void _ZN7S9490C23v20Ev();
extern void _ZN7S9490C23v21Ev();
extern void _ZN7S9490C23v22Ev();
extern void _ZN7S9490C23v23Ev();
extern void _ZN7S9490C23v24Ev();
extern void _ZN7S9490C23v25Ev();
extern void _ZN7S9490C23v26Ev();
extern void _ZN7S9490C23v27Ev();
static  VTBL_ENTRY vtc_S9490C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9490C2[0]),
  (VTBL_ENTRY)&_ZN7S9490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9490C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9490C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9490C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9490C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9490C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9490C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9490C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9490C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v16Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v17Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v18Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v19Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v20Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v21Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v22Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v23Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v24Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v25Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v26Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v27Ev,
};
extern VTBL_ENTRY _ZTI7S9490C2[];
extern  VTBL_ENTRY _ZTV7S9490C2[];
Class_Descriptor cd_S9490C2 = {  "S9490C2", // class name
  0,0,//no base classes
  &(vtc_S9490C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI7S9490C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9490C2),29, //virtual function table var
  2, // 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  S9490C1  : S9490C2 {
  void *s9490c1f0;
  int s9490c1f1;
  void *s9490c1f2;
  int s9490c1f3;
  virtual void  v1(); // _ZN7S9490C12v1Ev
  virtual void  v2(); // _ZN7S9490C12v2Ev
  ~S9490C1(); // tgen
  S9490C1(); // tgen
};
//SIG(1 S9490C1) C1{ BC2{ 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 Fi[28]} v1 v2 Fp Fi Fp Fi}


void  S9490C1 ::v1(){vfunc_called(this, "_ZN7S9490C12v1Ev");}
void  S9490C1 ::v2(){vfunc_called(this, "_ZN7S9490C12v2Ev");}
S9490C1 ::~S9490C1(){ note_dtor("S9490C1", this);} // tgen
S9490C1 ::S9490C1(){ note_ctor("S9490C1", this);} // tgen

static void Test_S9490C1()
{
  extern Class_Descriptor cd_S9490C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,34)];
    init_test(&cd_S9490C1, buf);
    S9490C1 *dp, &lv = *(dp=new (buf) S9490C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,132), "sizeof(S9490C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9490C1)");
    check_base_class_offset(lv, (S9490C2*), 0, "S9490C1");
    check_field_offset(lv, s9490c1f0, ABISELECT(120,116), "S9490C1.s9490c1f0");
    check_field_offset(lv, s9490c1f1, ABISELECT(128,120), "S9490C1.s9490c1f1");
    check_field_offset(lv, s9490c1f2, ABISELECT(136,124), "S9490C1.s9490c1f2");
    check_field_offset(lv, s9490c1f3, ABISELECT(144,128), "S9490C1.s9490c1f3");
    test_class_info(&lv, &cd_S9490C1);
    dp->~S9490C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9490C1(Test_S9490C1, "S9490C1", ABISELECT(152,132));

#else // __cplusplus

extern void _ZN7S9490C1C1Ev();
extern void _ZN7S9490C1D1Ev();
Name_Map name_map_S9490C1[] = {
  NSPAIR(_ZN7S9490C1C1Ev),
  NSPAIR(_ZN7S9490C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9490C2;
extern VTBL_ENTRY _ZTI7S9490C2[];
extern  VTBL_ENTRY _ZTV7S9490C2[];
static Base_Class bases_S9490C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9490C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9490C1[];
extern void _ZN7S9490C1D1Ev();
extern void _ZN7S9490C1D0Ev();
extern void _ZN7S9490C22v3Ev();
extern void _ZN7S9490C22v4Ev();
extern void _ZN7S9490C22v5Ev();
extern void _ZN7S9490C22v6Ev();
extern void _ZN7S9490C22v7Ev();
extern void _ZN7S9490C22v8Ev();
extern void _ZN7S9490C22v9Ev();
extern void _ZN7S9490C23v10Ev();
extern void _ZN7S9490C23v11Ev();
extern void _ZN7S9490C23v12Ev();
extern void _ZN7S9490C23v13Ev();
extern void _ZN7S9490C23v14Ev();
extern void _ZN7S9490C23v15Ev();
extern void _ZN7S9490C23v16Ev();
extern void _ZN7S9490C23v17Ev();
extern void _ZN7S9490C23v18Ev();
extern void _ZN7S9490C23v19Ev();
extern void _ZN7S9490C23v20Ev();
extern void _ZN7S9490C23v21Ev();
extern void _ZN7S9490C23v22Ev();
extern void _ZN7S9490C23v23Ev();
extern void _ZN7S9490C23v24Ev();
extern void _ZN7S9490C23v25Ev();
extern void _ZN7S9490C23v26Ev();
extern void _ZN7S9490C23v27Ev();
extern void _ZN7S9490C12v1Ev();
extern void _ZN7S9490C12v2Ev();
static  VTBL_ENTRY vtc_S9490C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9490C1[0]),
  (VTBL_ENTRY)&_ZN7S9490C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9490C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9490C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9490C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9490C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9490C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9490C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9490C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9490C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v16Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v17Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v18Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v19Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v20Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v21Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v22Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v23Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v24Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v25Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v26Ev,
  (VTBL_ENTRY)&_ZN7S9490C23v27Ev,
  (VTBL_ENTRY)&_ZN7S9490C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9490C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9490C1[];
extern  VTBL_ENTRY _ZTV7S9490C1[];
Class_Descriptor cd_S9490C1 = {  "S9490C1", // class name
  bases_S9490C1, 1,
  &(vtc_S9490C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,132), // object size
  NSPAIRA(_ZTI7S9490C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9490C1),31, //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  S5800C1  : S19252C6 {
  __tsi64 s5800c1f0:3;
  void *s5800c1f1;
  void *s5800c1f2;
  __tsi64 s5800c1f3[9];
  char s5800c1f4;
  char s5800c1f5;
  __tsi64 s5800c1f6:12;
  virtual  ~S5800C1(); // _ZN7S5800C1D1Ev
  virtual void  v1(); // _ZN7S5800C12v1Ev
  virtual void  v2(); // _ZN7S5800C12v2Ev
  S5800C1(); // tgen
};
//SIG(1 S5800C1) C1{ BC2{ m Fi[2] Fs FC3{ vd v3 v4 Fi FU4{ m Fp} Fs:16 FC5{ v5 Fp Fp FD[10] Fp Fs Fp Fp} FC6{}}} vd v1 v2 FL:3 Fp Fp FL[9] Fc Fc FL:12}


 S5800C1 ::~S5800C1(){ note_dtor("S5800C1", this);}
void  S5800C1 ::v1(){vfunc_called(this, "_ZN7S5800C12v1Ev");}
void  S5800C1 ::v2(){vfunc_called(this, "_ZN7S5800C12v2Ev");}
S5800C1 ::S5800C1(){ note_ctor("S5800C1", this);} // tgen

static void Test_S5800C1()
{
  extern Class_Descriptor cd_S5800C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,69)];
    init_test(&cd_S5800C1, buf);
    S5800C1 *dp, &lv = *(dp=new (buf) S5800C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,272), "sizeof(S5800C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5800C1)");
    check_base_class_offset(lv, (S19252C6*), ABISELECT(16,4), "S5800C1");
    set_bf_and_test(lv, s5800c1f0, ABISELECT(304,184), 0, 3, 1, "S5800C1");
    set_bf_and_test(lv, s5800c1f0, ABISELECT(304,184), 0, 3, hide_sll(1LL<<2), "S5800C1");
    check_field_offset(lv, s5800c1f1, ABISELECT(312,188), "S5800C1.s5800c1f1");
    check_field_offset(lv, s5800c1f2, ABISELECT(320,192), "S5800C1.s5800c1f2");
    check_field_offset(lv, s5800c1f3, ABISELECT(328,196), "S5800C1.s5800c1f3");
    check_field_offset(lv, s5800c1f4, ABISELECT(400,268), "S5800C1.s5800c1f4");
    check_field_offset(lv, s5800c1f5, ABISELECT(401,269), "S5800C1.s5800c1f5");
    set_bf_and_test(lv, s5800c1f6, ABISELECT(402,270), 0, 12, 1, "S5800C1");
    set_bf_and_test(lv, s5800c1f6, ABISELECT(402,270), 0, 12, hide_sll(1LL<<11), "S5800C1");
    test_class_info(&lv, &cd_S5800C1);
    dp->~S5800C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5800C1(Test_S5800C1, "S5800C1", ABISELECT(416,272));

#else // __cplusplus

extern void _ZN7S5800C1C1Ev();
extern void _ZN7S5800C1D1Ev();
Name_Map name_map_S5800C1[] = {
  NSPAIR(_ZN7S5800C1C1Ev),
  NSPAIR(_ZN7S5800C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19252C6;
extern VTBL_ENTRY _ZTI8S19252C6[];
static Base_Class bases_S5800C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19252C6,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S5800C1[];
extern void _ZN7S5800C1D1Ev();
extern void _ZN7S5800C1D0Ev();
extern void _ZN7S5800C12v1Ev();
extern void _ZN7S5800C12v2Ev();
static  VTBL_ENTRY vtc_S5800C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5800C1[0]),
  (VTBL_ENTRY)&_ZN7S5800C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5800C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5800C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5800C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S5800C1[];
extern  VTBL_ENTRY _ZTV7S5800C1[];
Class_Descriptor cd_S5800C1 = {  "S5800C1", // class name
  bases_S5800C1, 1,
  &(vtc_S5800C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,272), // object size
  NSPAIRA(_ZTI7S5800C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S5800C1),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  S5799C1  : S19252C6 {
  __tsi64 s5799c1f0:3;
  void *s5799c1f1;
  void *s5799c1f2;
  long s5799c1f3[9];
  char s5799c1f4;
  char s5799c1f5;
  __tsi64 s5799c1f6:12;
  virtual  ~S5799C1(); // _ZN7S5799C1D1Ev
  virtual void  v1(); // _ZN7S5799C12v1Ev
  virtual void  v2(); // _ZN7S5799C12v2Ev
  S5799C1(); // tgen
};
//SIG(1 S5799C1) C1{ BC2{ m Fi[2] Fs FC3{ vd v3 v4 Fi FU4{ m Fp} Fs:16 FC5{ v5 Fp Fp FD[10] Fp Fs Fp Fp} FC6{}}} vd v1 v2 FL:3 Fp Fp Fl[9] Fc Fc FL:12}


 S5799C1 ::~S5799C1(){ note_dtor("S5799C1", this);}
void  S5799C1 ::v1(){vfunc_called(this, "_ZN7S5799C12v1Ev");}
void  S5799C1 ::v2(){vfunc_called(this, "_ZN7S5799C12v2Ev");}
S5799C1 ::S5799C1(){ note_ctor("S5799C1", this);} // tgen

static void Test_S5799C1()
{
  extern Class_Descriptor cd_S5799C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,60)];
    init_test(&cd_S5799C1, buf);
    S5799C1 *dp, &lv = *(dp=new (buf) S5799C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,236), "sizeof(S5799C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5799C1)");
    check_base_class_offset(lv, (S19252C6*), ABISELECT(16,4), "S5799C1");
    set_bf_and_test(lv, s5799c1f0, ABISELECT(304,184), 0, 3, 1, "S5799C1");
    set_bf_and_test(lv, s5799c1f0, ABISELECT(304,184), 0, 3, hide_sll(1LL<<2), "S5799C1");
    check_field_offset(lv, s5799c1f1, ABISELECT(312,188), "S5799C1.s5799c1f1");
    check_field_offset(lv, s5799c1f2, ABISELECT(320,192), "S5799C1.s5799c1f2");
    check_field_offset(lv, s5799c1f3, ABISELECT(328,196), "S5799C1.s5799c1f3");
    check_field_offset(lv, s5799c1f4, ABISELECT(400,232), "S5799C1.s5799c1f4");
    check_field_offset(lv, s5799c1f5, ABISELECT(401,233), "S5799C1.s5799c1f5");
    set_bf_and_test(lv, s5799c1f6, ABISELECT(402,234), 0, 12, 1, "S5799C1");
    set_bf_and_test(lv, s5799c1f6, ABISELECT(402,234), 0, 12, hide_sll(1LL<<11), "S5799C1");
    test_class_info(&lv, &cd_S5799C1);
    dp->~S5799C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5799C1(Test_S5799C1, "S5799C1", ABISELECT(416,236));

#else // __cplusplus

extern void _ZN7S5799C1C1Ev();
extern void _ZN7S5799C1D1Ev();
Name_Map name_map_S5799C1[] = {
  NSPAIR(_ZN7S5799C1C1Ev),
  NSPAIR(_ZN7S5799C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19252C6;
extern VTBL_ENTRY _ZTI8S19252C6[];
static Base_Class bases_S5799C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19252C6,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S5799C1[];
extern void _ZN7S5799C1D1Ev();
extern void _ZN7S5799C1D0Ev();
extern void _ZN7S5799C12v1Ev();
extern void _ZN7S5799C12v2Ev();
static  VTBL_ENTRY vtc_S5799C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5799C1[0]),
  (VTBL_ENTRY)&_ZN7S5799C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5799C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5799C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5799C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S5799C1[];
extern  VTBL_ENTRY _ZTV7S5799C1[];
Class_Descriptor cd_S5799C1 = {  "S5799C1", // class name
  bases_S5799C1, 1,
  &(vtc_S5799C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,236), // object size
  NSPAIRA(_ZTI7S5799C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S5799C1),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  S9489C2  {
  int s9489c2f0[28];
  virtual  ~S9489C2(); // _ZN7S9489C2D1Ev
  virtual void  v3(); // _ZN7S9489C22v3Ev
  virtual void  v4(); // _ZN7S9489C22v4Ev
  virtual void  v5(); // _ZN7S9489C22v5Ev
  virtual void  v6(); // _ZN7S9489C22v6Ev
  virtual void  v7(); // _ZN7S9489C22v7Ev
  virtual void  v8(); // _ZN7S9489C22v8Ev
  virtual void  v9(); // _ZN7S9489C22v9Ev
  virtual void  v10(); // _ZN7S9489C23v10Ev
  virtual void  v11(); // _ZN7S9489C23v11Ev
  virtual void  v12(); // _ZN7S9489C23v12Ev
  virtual void  v13(); // _ZN7S9489C23v13Ev
  virtual void  v14(); // _ZN7S9489C23v14Ev
  virtual void  v15(); // _ZN7S9489C23v15Ev
  virtual void  v16(); // _ZN7S9489C23v16Ev
  virtual void  v17(); // _ZN7S9489C23v17Ev
  virtual void  v18(); // _ZN7S9489C23v18Ev
  virtual void  v19(); // _ZN7S9489C23v19Ev
  virtual void  v20(); // _ZN7S9489C23v20Ev
  virtual void  v21(); // _ZN7S9489C23v21Ev
  virtual void  v22(); // _ZN7S9489C23v22Ev
  virtual void  v23(); // _ZN7S9489C23v23Ev
  virtual void  v24(); // _ZN7S9489C23v24Ev
  virtual void  v25(); // _ZN7S9489C23v25Ev
  virtual void  v26(); // _ZN7S9489C23v26Ev
  virtual void  v27(); // _ZN7S9489C23v27Ev
  S9489C2(); // tgen
};
//SIG(-1 S9489C2) 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 Fi[28]}


 S9489C2 ::~S9489C2(){ note_dtor("S9489C2", this);}
void  S9489C2 ::v3(){vfunc_called(this, "_ZN7S9489C22v3Ev");}
void  S9489C2 ::v4(){vfunc_called(this, "_ZN7S9489C22v4Ev");}
void  S9489C2 ::v5(){vfunc_called(this, "_ZN7S9489C22v5Ev");}
void  S9489C2 ::v6(){vfunc_called(this, "_ZN7S9489C22v6Ev");}
void  S9489C2 ::v7(){vfunc_called(this, "_ZN7S9489C22v7Ev");}
void  S9489C2 ::v8(){vfunc_called(this, "_ZN7S9489C22v8Ev");}
void  S9489C2 ::v9(){vfunc_called(this, "_ZN7S9489C22v9Ev");}
void  S9489C2 ::v10(){vfunc_called(this, "_ZN7S9489C23v10Ev");}
void  S9489C2 ::v11(){vfunc_called(this, "_ZN7S9489C23v11Ev");}
void  S9489C2 ::v12(){vfunc_called(this, "_ZN7S9489C23v12Ev");}
void  S9489C2 ::v13(){vfunc_called(this, "_ZN7S9489C23v13Ev");}
void  S9489C2 ::v14(){vfunc_called(this, "_ZN7S9489C23v14Ev");}
void  S9489C2 ::v15(){vfunc_called(this, "_ZN7S9489C23v15Ev");}
void  S9489C2 ::v16(){vfunc_called(this, "_ZN7S9489C23v16Ev");}
void  S9489C2 ::v17(){vfunc_called(this, "_ZN7S9489C23v17Ev");}
void  S9489C2 ::v18(){vfunc_called(this, "_ZN7S9489C23v18Ev");}
void  S9489C2 ::v19(){vfunc_called(this, "_ZN7S9489C23v19Ev");}
void  S9489C2 ::v20(){vfunc_called(this, "_ZN7S9489C23v20Ev");}
void  S9489C2 ::v21(){vfunc_called(this, "_ZN7S9489C23v21Ev");}
void  S9489C2 ::v22(){vfunc_called(this, "_ZN7S9489C23v22Ev");}
void  S9489C2 ::v23(){vfunc_called(this, "_ZN7S9489C23v23Ev");}
void  S9489C2 ::v24(){vfunc_called(this, "_ZN7S9489C23v24Ev");}
void  S9489C2 ::v25(){vfunc_called(this, "_ZN7S9489C23v25Ev");}
void  S9489C2 ::v26(){vfunc_called(this, "_ZN7S9489C23v26Ev");}
void  S9489C2 ::v27(){vfunc_called(this, "_ZN7S9489C23v27Ev");}
S9489C2 ::S9489C2(){ note_ctor("S9489C2", this);} // tgen

static void Test_S9489C2()
{
  extern Class_Descriptor cd_S9489C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S9489C2, buf);
    S9489C2 *dp, &lv = *(dp=new (buf) S9489C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S9489C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9489C2)");
    check_field_offset(lv, s9489c2f0, ABISELECT(8,4), "S9489C2.s9489c2f0");
    test_class_info(&lv, &cd_S9489C2);
    dp->~S9489C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9489C2(Test_S9489C2, "S9489C2", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN7S9489C2C1Ev();
extern void _ZN7S9489C2D1Ev();
Name_Map name_map_S9489C2[] = {
  NSPAIR(_ZN7S9489C2C1Ev),
  NSPAIR(_ZN7S9489C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9489C2[];
extern void _ZN7S9489C2D1Ev();
extern void _ZN7S9489C2D0Ev();
extern void _ZN7S9489C22v3Ev();
extern void _ZN7S9489C22v4Ev();
extern void _ZN7S9489C22v5Ev();
extern void _ZN7S9489C22v6Ev();
extern void _ZN7S9489C22v7Ev();
extern void _ZN7S9489C22v8Ev();
extern void _ZN7S9489C22v9Ev();
extern void _ZN7S9489C23v10Ev();
extern void _ZN7S9489C23v11Ev();
extern void _ZN7S9489C23v12Ev();
extern void _ZN7S9489C23v13Ev();
extern void _ZN7S9489C23v14Ev();
extern void _ZN7S9489C23v15Ev();
extern void _ZN7S9489C23v16Ev();
extern void _ZN7S9489C23v17Ev();
extern void _ZN7S9489C23v18Ev();
extern void _ZN7S9489C23v19Ev();
extern void _ZN7S9489C23v20Ev();
extern void _ZN7S9489C23v21Ev();
extern void _ZN7S9489C23v22Ev();
extern void _ZN7S9489C23v23Ev();
extern void _ZN7S9489C23v24Ev();
extern void _ZN7S9489C23v25Ev();
extern void _ZN7S9489C23v26Ev();
extern void _ZN7S9489C23v27Ev();
static  VTBL_ENTRY vtc_S9489C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9489C2[0]),
  (VTBL_ENTRY)&_ZN7S9489C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9489C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9489C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9489C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9489C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9489C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9489C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9489C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9489C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v16Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v17Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v18Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v19Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v20Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v21Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v22Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v23Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v24Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v25Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v26Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v27Ev,
};
extern VTBL_ENTRY _ZTI7S9489C2[];
extern  VTBL_ENTRY _ZTV7S9489C2[];
Class_Descriptor cd_S9489C2 = {  "S9489C2", // class name
  0,0,//no base classes
  &(vtc_S9489C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI7S9489C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9489C2),29, //virtual function table var
  2, // 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  S9489C1  : S9489C2 {
  long s9489c1f0[2];
  virtual void  v1(); // _ZN7S9489C12v1Ev
  virtual void  v2(); // _ZN7S9489C12v2Ev
  ~S9489C1(); // tgen
  S9489C1(); // tgen
};
//SIG(1 S9489C1) C1{ BC2{ 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 Fi[28]} v1 v2 Fl[2]}


void  S9489C1 ::v1(){vfunc_called(this, "_ZN7S9489C12v1Ev");}
void  S9489C1 ::v2(){vfunc_called(this, "_ZN7S9489C12v2Ev");}
S9489C1 ::~S9489C1(){ note_dtor("S9489C1", this);} // tgen
S9489C1 ::S9489C1(){ note_ctor("S9489C1", this);} // tgen

static void Test_S9489C1()
{
  extern Class_Descriptor cd_S9489C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,32)];
    init_test(&cd_S9489C1, buf);
    S9489C1 *dp, &lv = *(dp=new (buf) S9489C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,124), "sizeof(S9489C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9489C1)");
    check_base_class_offset(lv, (S9489C2*), 0, "S9489C1");
    check_field_offset(lv, s9489c1f0, ABISELECT(120,116), "S9489C1.s9489c1f0");
    test_class_info(&lv, &cd_S9489C1);
    dp->~S9489C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9489C1(Test_S9489C1, "S9489C1", ABISELECT(136,124));

#else // __cplusplus

extern void _ZN7S9489C1C1Ev();
extern void _ZN7S9489C1D1Ev();
Name_Map name_map_S9489C1[] = {
  NSPAIR(_ZN7S9489C1C1Ev),
  NSPAIR(_ZN7S9489C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9489C2;
extern VTBL_ENTRY _ZTI7S9489C2[];
extern  VTBL_ENTRY _ZTV7S9489C2[];
static Base_Class bases_S9489C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9489C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9489C1[];
extern void _ZN7S9489C1D1Ev();
extern void _ZN7S9489C1D0Ev();
extern void _ZN7S9489C22v3Ev();
extern void _ZN7S9489C22v4Ev();
extern void _ZN7S9489C22v5Ev();
extern void _ZN7S9489C22v6Ev();
extern void _ZN7S9489C22v7Ev();
extern void _ZN7S9489C22v8Ev();
extern void _ZN7S9489C22v9Ev();
extern void _ZN7S9489C23v10Ev();
extern void _ZN7S9489C23v11Ev();
extern void _ZN7S9489C23v12Ev();
extern void _ZN7S9489C23v13Ev();
extern void _ZN7S9489C23v14Ev();
extern void _ZN7S9489C23v15Ev();
extern void _ZN7S9489C23v16Ev();
extern void _ZN7S9489C23v17Ev();
extern void _ZN7S9489C23v18Ev();
extern void _ZN7S9489C23v19Ev();
extern void _ZN7S9489C23v20Ev();
extern void _ZN7S9489C23v21Ev();
extern void _ZN7S9489C23v22Ev();
extern void _ZN7S9489C23v23Ev();
extern void _ZN7S9489C23v24Ev();
extern void _ZN7S9489C23v25Ev();
extern void _ZN7S9489C23v26Ev();
extern void _ZN7S9489C23v27Ev();
extern void _ZN7S9489C12v1Ev();
extern void _ZN7S9489C12v2Ev();
static  VTBL_ENTRY vtc_S9489C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9489C1[0]),
  (VTBL_ENTRY)&_ZN7S9489C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9489C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9489C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9489C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9489C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9489C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9489C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9489C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9489C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v16Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v17Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v18Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v19Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v20Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v21Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v22Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v23Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v24Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v25Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v26Ev,
  (VTBL_ENTRY)&_ZN7S9489C23v27Ev,
  (VTBL_ENTRY)&_ZN7S9489C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9489C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9489C1[];
extern  VTBL_ENTRY _ZTV7S9489C1[];
Class_Descriptor cd_S9489C1 = {  "S9489C1", // class name
  bases_S9489C1, 1,
  &(vtc_S9489C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,124), // object size
  NSPAIRA(_ZTI7S9489C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9489C1),31, //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  S9494C2  {
  int s9494c2f0[28];
  virtual  ~S9494C2(); // _ZN7S9494C2D1Ev
  virtual void  v3(); // _ZN7S9494C22v3Ev
  virtual void  v4(); // _ZN7S9494C22v4Ev
  virtual void  v5(); // _ZN7S9494C22v5Ev
  virtual void  v6(); // _ZN7S9494C22v6Ev
  virtual void  v7(); // _ZN7S9494C22v7Ev
  virtual void  v8(); // _ZN7S9494C22v8Ev
  virtual void  v9(); // _ZN7S9494C22v9Ev
  virtual void  v10(); // _ZN7S9494C23v10Ev
  virtual void  v11(); // _ZN7S9494C23v11Ev
  virtual void  v12(); // _ZN7S9494C23v12Ev
  virtual void  v13(); // _ZN7S9494C23v13Ev
  virtual void  v14(); // _ZN7S9494C23v14Ev
  virtual void  v15(); // _ZN7S9494C23v15Ev
  virtual void  v16(); // _ZN7S9494C23v16Ev
  virtual void  v17(); // _ZN7S9494C23v17Ev
  virtual void  v18(); // _ZN7S9494C23v18Ev
  virtual void  v19(); // _ZN7S9494C23v19Ev
  virtual void  v20(); // _ZN7S9494C23v20Ev
  virtual void  v21(); // _ZN7S9494C23v21Ev
  virtual void  v22(); // _ZN7S9494C23v22Ev
  virtual void  v23(); // _ZN7S9494C23v23Ev
  virtual void  v24(); // _ZN7S9494C23v24Ev
  virtual void  v25(); // _ZN7S9494C23v25Ev
  virtual void  v26(); // _ZN7S9494C23v26Ev
  virtual void  v27(); // _ZN7S9494C23v27Ev
  S9494C2(); // tgen
};
//SIG(-1 S9494C2) 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 Fi[28]}


 S9494C2 ::~S9494C2(){ note_dtor("S9494C2", this);}
void  S9494C2 ::v3(){vfunc_called(this, "_ZN7S9494C22v3Ev");}
void  S9494C2 ::v4(){vfunc_called(this, "_ZN7S9494C22v4Ev");}
void  S9494C2 ::v5(){vfunc_called(this, "_ZN7S9494C22v5Ev");}
void  S9494C2 ::v6(){vfunc_called(this, "_ZN7S9494C22v6Ev");}
void  S9494C2 ::v7(){vfunc_called(this, "_ZN7S9494C22v7Ev");}
void  S9494C2 ::v8(){vfunc_called(this, "_ZN7S9494C22v8Ev");}
void  S9494C2 ::v9(){vfunc_called(this, "_ZN7S9494C22v9Ev");}
void  S9494C2 ::v10(){vfunc_called(this, "_ZN7S9494C23v10Ev");}
void  S9494C2 ::v11(){vfunc_called(this, "_ZN7S9494C23v11Ev");}
void  S9494C2 ::v12(){vfunc_called(this, "_ZN7S9494C23v12Ev");}
void  S9494C2 ::v13(){vfunc_called(this, "_ZN7S9494C23v13Ev");}
void  S9494C2 ::v14(){vfunc_called(this, "_ZN7S9494C23v14Ev");}
void  S9494C2 ::v15(){vfunc_called(this, "_ZN7S9494C23v15Ev");}
void  S9494C2 ::v16(){vfunc_called(this, "_ZN7S9494C23v16Ev");}
void  S9494C2 ::v17(){vfunc_called(this, "_ZN7S9494C23v17Ev");}
void  S9494C2 ::v18(){vfunc_called(this, "_ZN7S9494C23v18Ev");}
void  S9494C2 ::v19(){vfunc_called(this, "_ZN7S9494C23v19Ev");}
void  S9494C2 ::v20(){vfunc_called(this, "_ZN7S9494C23v20Ev");}
void  S9494C2 ::v21(){vfunc_called(this, "_ZN7S9494C23v21Ev");}
void  S9494C2 ::v22(){vfunc_called(this, "_ZN7S9494C23v22Ev");}
void  S9494C2 ::v23(){vfunc_called(this, "_ZN7S9494C23v23Ev");}
void  S9494C2 ::v24(){vfunc_called(this, "_ZN7S9494C23v24Ev");}
void  S9494C2 ::v25(){vfunc_called(this, "_ZN7S9494C23v25Ev");}
void  S9494C2 ::v26(){vfunc_called(this, "_ZN7S9494C23v26Ev");}
void  S9494C2 ::v27(){vfunc_called(this, "_ZN7S9494C23v27Ev");}
S9494C2 ::S9494C2(){ note_ctor("S9494C2", this);} // tgen

static void Test_S9494C2()
{
  extern Class_Descriptor cd_S9494C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S9494C2, buf);
    S9494C2 *dp, &lv = *(dp=new (buf) S9494C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S9494C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9494C2)");
    check_field_offset(lv, s9494c2f0, ABISELECT(8,4), "S9494C2.s9494c2f0");
    test_class_info(&lv, &cd_S9494C2);
    dp->~S9494C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9494C2(Test_S9494C2, "S9494C2", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN7S9494C2C1Ev();
extern void _ZN7S9494C2D1Ev();
Name_Map name_map_S9494C2[] = {
  NSPAIR(_ZN7S9494C2C1Ev),
  NSPAIR(_ZN7S9494C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9494C2[];
extern void _ZN7S9494C2D1Ev();
extern void _ZN7S9494C2D0Ev();
extern void _ZN7S9494C22v3Ev();
extern void _ZN7S9494C22v4Ev();
extern void _ZN7S9494C22v5Ev();
extern void _ZN7S9494C22v6Ev();
extern void _ZN7S9494C22v7Ev();
extern void _ZN7S9494C22v8Ev();
extern void _ZN7S9494C22v9Ev();
extern void _ZN7S9494C23v10Ev();
extern void _ZN7S9494C23v11Ev();
extern void _ZN7S9494C23v12Ev();
extern void _ZN7S9494C23v13Ev();
extern void _ZN7S9494C23v14Ev();
extern void _ZN7S9494C23v15Ev();
extern void _ZN7S9494C23v16Ev();
extern void _ZN7S9494C23v17Ev();
extern void _ZN7S9494C23v18Ev();
extern void _ZN7S9494C23v19Ev();
extern void _ZN7S9494C23v20Ev();
extern void _ZN7S9494C23v21Ev();
extern void _ZN7S9494C23v22Ev();
extern void _ZN7S9494C23v23Ev();
extern void _ZN7S9494C23v24Ev();
extern void _ZN7S9494C23v25Ev();
extern void _ZN7S9494C23v26Ev();
extern void _ZN7S9494C23v27Ev();
static  VTBL_ENTRY vtc_S9494C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9494C2[0]),
  (VTBL_ENTRY)&_ZN7S9494C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9494C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9494C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9494C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9494C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9494C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9494C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9494C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9494C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v16Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v17Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v18Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v19Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v20Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v21Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v22Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v23Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v24Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v25Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v26Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v27Ev,
};
extern VTBL_ENTRY _ZTI7S9494C2[];
extern  VTBL_ENTRY _ZTV7S9494C2[];
Class_Descriptor cd_S9494C2 = {  "S9494C2", // class name
  0,0,//no base classes
  &(vtc_S9494C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI7S9494C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9494C2),29, //virtual function table var
  2, // 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  S9494C1  : S9494C2 {
  void *s9494c1f0;
  virtual void  v1(); // _ZN7S9494C12v1Ev
  virtual void  v2(); // _ZN7S9494C12v2Ev
  ~S9494C1(); // tgen
  S9494C1(); // tgen
};
//SIG(1 S9494C1) C1{ BC2{ 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 Fi[28]} v1 v2 Fp}


void  S9494C1 ::v1(){vfunc_called(this, "_ZN7S9494C12v1Ev");}
void  S9494C1 ::v2(){vfunc_called(this, "_ZN7S9494C12v2Ev");}
S9494C1 ::~S9494C1(){ note_dtor("S9494C1", this);} // tgen
S9494C1 ::S9494C1(){ note_ctor("S9494C1", this);} // tgen

static void Test_S9494C1()
{
  extern Class_Descriptor cd_S9494C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,31)];
    init_test(&cd_S9494C1, buf);
    S9494C1 *dp, &lv = *(dp=new (buf) S9494C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,120), "sizeof(S9494C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9494C1)");
    check_base_class_offset(lv, (S9494C2*), 0, "S9494C1");
    check_field_offset(lv, s9494c1f0, ABISELECT(120,116), "S9494C1.s9494c1f0");
    test_class_info(&lv, &cd_S9494C1);
    dp->~S9494C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9494C1(Test_S9494C1, "S9494C1", ABISELECT(128,120));

#else // __cplusplus

extern void _ZN7S9494C1C1Ev();
extern void _ZN7S9494C1D1Ev();
Name_Map name_map_S9494C1[] = {
  NSPAIR(_ZN7S9494C1C1Ev),
  NSPAIR(_ZN7S9494C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9494C2;
extern VTBL_ENTRY _ZTI7S9494C2[];
extern  VTBL_ENTRY _ZTV7S9494C2[];
static Base_Class bases_S9494C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9494C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9494C1[];
extern void _ZN7S9494C1D1Ev();
extern void _ZN7S9494C1D0Ev();
extern void _ZN7S9494C22v3Ev();
extern void _ZN7S9494C22v4Ev();
extern void _ZN7S9494C22v5Ev();
extern void _ZN7S9494C22v6Ev();
extern void _ZN7S9494C22v7Ev();
extern void _ZN7S9494C22v8Ev();
extern void _ZN7S9494C22v9Ev();
extern void _ZN7S9494C23v10Ev();
extern void _ZN7S9494C23v11Ev();
extern void _ZN7S9494C23v12Ev();
extern void _ZN7S9494C23v13Ev();
extern void _ZN7S9494C23v14Ev();
extern void _ZN7S9494C23v15Ev();
extern void _ZN7S9494C23v16Ev();
extern void _ZN7S9494C23v17Ev();
extern void _ZN7S9494C23v18Ev();
extern void _ZN7S9494C23v19Ev();
extern void _ZN7S9494C23v20Ev();
extern void _ZN7S9494C23v21Ev();
extern void _ZN7S9494C23v22Ev();
extern void _ZN7S9494C23v23Ev();
extern void _ZN7S9494C23v24Ev();
extern void _ZN7S9494C23v25Ev();
extern void _ZN7S9494C23v26Ev();
extern void _ZN7S9494C23v27Ev();
extern void _ZN7S9494C12v1Ev();
extern void _ZN7S9494C12v2Ev();
static  VTBL_ENTRY vtc_S9494C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9494C1[0]),
  (VTBL_ENTRY)&_ZN7S9494C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9494C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9494C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9494C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9494C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9494C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9494C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9494C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9494C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v16Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v17Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v18Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v19Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v20Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v21Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v22Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v23Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v24Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v25Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v26Ev,
  (VTBL_ENTRY)&_ZN7S9494C23v27Ev,
  (VTBL_ENTRY)&_ZN7S9494C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9494C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9494C1[];
extern  VTBL_ENTRY _ZTV7S9494C1[];
Class_Descriptor cd_S9494C1 = {  "S9494C1", // class name
  bases_S9494C1, 1,
  &(vtc_S9494C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,120), // object size
  NSPAIRA(_ZTI7S9494C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9494C1),31, //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  S8975C2  {
  int s8975c2f0[28];
  virtual  ~S8975C2(); // _ZN7S8975C2D1Ev
  virtual void  v2(); // _ZN7S8975C22v2Ev
  virtual void  v3(); // _ZN7S8975C22v3Ev
  virtual void  v4(); // _ZN7S8975C22v4Ev
  virtual void  v5(); // _ZN7S8975C22v5Ev
  virtual void  v6(); // _ZN7S8975C22v6Ev
  virtual void  v7(); // _ZN7S8975C22v7Ev
  virtual void  v8(); // _ZN7S8975C22v8Ev
  virtual void  v9(); // _ZN7S8975C22v9Ev
  virtual void  v10(); // _ZN7S8975C23v10Ev
  virtual void  v11(); // _ZN7S8975C23v11Ev
  virtual void  v12(); // _ZN7S8975C23v12Ev
  virtual void  v13(); // _ZN7S8975C23v13Ev
  virtual void  v14(); // _ZN7S8975C23v14Ev
  virtual void  v15(); // _ZN7S8975C23v15Ev
  virtual void  v16(); // _ZN7S8975C23v16Ev
  virtual void  v17(); // _ZN7S8975C23v17Ev
  virtual void  v18(); // _ZN7S8975C23v18Ev
  virtual void  v19(); // _ZN7S8975C23v19Ev
  virtual void  v20(); // _ZN7S8975C23v20Ev
  virtual void  v21(); // _ZN7S8975C23v21Ev
  virtual void  v22(); // _ZN7S8975C23v22Ev
  virtual void  v23(); // _ZN7S8975C23v23Ev
  virtual void  v24(); // _ZN7S8975C23v24Ev
  virtual void  v25(); // _ZN7S8975C23v25Ev
  virtual void  v26(); // _ZN7S8975C23v26Ev
  S8975C2(); // tgen
};
//SIG(-1 S8975C2) 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 Fi[28]}


 S8975C2 ::~S8975C2(){ note_dtor("S8975C2", this);}
void  S8975C2 ::v2(){vfunc_called(this, "_ZN7S8975C22v2Ev");}
void  S8975C2 ::v3(){vfunc_called(this, "_ZN7S8975C22v3Ev");}
void  S8975C2 ::v4(){vfunc_called(this, "_ZN7S8975C22v4Ev");}
void  S8975C2 ::v5(){vfunc_called(this, "_ZN7S8975C22v5Ev");}
void  S8975C2 ::v6(){vfunc_called(this, "_ZN7S8975C22v6Ev");}
void  S8975C2 ::v7(){vfunc_called(this, "_ZN7S8975C22v7Ev");}
void  S8975C2 ::v8(){vfunc_called(this, "_ZN7S8975C22v8Ev");}
void  S8975C2 ::v9(){vfunc_called(this, "_ZN7S8975C22v9Ev");}
void  S8975C2 ::v10(){vfunc_called(this, "_ZN7S8975C23v10Ev");}
void  S8975C2 ::v11(){vfunc_called(this, "_ZN7S8975C23v11Ev");}
void  S8975C2 ::v12(){vfunc_called(this, "_ZN7S8975C23v12Ev");}
void  S8975C2 ::v13(){vfunc_called(this, "_ZN7S8975C23v13Ev");}
void  S8975C2 ::v14(){vfunc_called(this, "_ZN7S8975C23v14Ev");}
void  S8975C2 ::v15(){vfunc_called(this, "_ZN7S8975C23v15Ev");}
void  S8975C2 ::v16(){vfunc_called(this, "_ZN7S8975C23v16Ev");}
void  S8975C2 ::v17(){vfunc_called(this, "_ZN7S8975C23v17Ev");}
void  S8975C2 ::v18(){vfunc_called(this, "_ZN7S8975C23v18Ev");}
void  S8975C2 ::v19(){vfunc_called(this, "_ZN7S8975C23v19Ev");}
void  S8975C2 ::v20(){vfunc_called(this, "_ZN7S8975C23v20Ev");}
void  S8975C2 ::v21(){vfunc_called(this, "_ZN7S8975C23v21Ev");}
void  S8975C2 ::v22(){vfunc_called(this, "_ZN7S8975C23v22Ev");}
void  S8975C2 ::v23(){vfunc_called(this, "_ZN7S8975C23v23Ev");}
void  S8975C2 ::v24(){vfunc_called(this, "_ZN7S8975C23v24Ev");}
void  S8975C2 ::v25(){vfunc_called(this, "_ZN7S8975C23v25Ev");}
void  S8975C2 ::v26(){vfunc_called(this, "_ZN7S8975C23v26Ev");}
S8975C2 ::S8975C2(){ note_ctor("S8975C2", this);} // tgen

static void Test_S8975C2()
{
  extern Class_Descriptor cd_S8975C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S8975C2, buf);
    S8975C2 *dp, &lv = *(dp=new (buf) S8975C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S8975C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8975C2)");
    check_field_offset(lv, s8975c2f0, ABISELECT(8,4), "S8975C2.s8975c2f0");
    test_class_info(&lv, &cd_S8975C2);
    dp->~S8975C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8975C2(Test_S8975C2, "S8975C2", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN7S8975C2C1Ev();
extern void _ZN7S8975C2D1Ev();
Name_Map name_map_S8975C2[] = {
  NSPAIR(_ZN7S8975C2C1Ev),
  NSPAIR(_ZN7S8975C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8975C2[];
extern void _ZN7S8975C2D1Ev();
extern void _ZN7S8975C2D0Ev();
extern void _ZN7S8975C22v2Ev();
extern void _ZN7S8975C22v3Ev();
extern void _ZN7S8975C22v4Ev();
extern void _ZN7S8975C22v5Ev();
extern void _ZN7S8975C22v6Ev();
extern void _ZN7S8975C22v7Ev();
extern void _ZN7S8975C22v8Ev();
extern void _ZN7S8975C22v9Ev();
extern void _ZN7S8975C23v10Ev();
extern void _ZN7S8975C23v11Ev();
extern void _ZN7S8975C23v12Ev();
extern void _ZN7S8975C23v13Ev();
extern void _ZN7S8975C23v14Ev();
extern void _ZN7S8975C23v15Ev();
extern void _ZN7S8975C23v16Ev();
extern void _ZN7S8975C23v17Ev();
extern void _ZN7S8975C23v18Ev();
extern void _ZN7S8975C23v19Ev();
extern void _ZN7S8975C23v20Ev();
extern void _ZN7S8975C23v21Ev();
extern void _ZN7S8975C23v22Ev();
extern void _ZN7S8975C23v23Ev();
extern void _ZN7S8975C23v24Ev();
extern void _ZN7S8975C23v25Ev();
extern void _ZN7S8975C23v26Ev();
static  VTBL_ENTRY vtc_S8975C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8975C2[0]),
  (VTBL_ENTRY)&_ZN7S8975C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8975C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8975C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8975C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8975C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8975C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8975C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8975C22v7Ev,
  (VTBL_ENTRY)&_ZN7S8975C22v8Ev,
  (VTBL_ENTRY)&_ZN7S8975C22v9Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v24Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v25Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v26Ev,
};
extern VTBL_ENTRY _ZTI7S8975C2[];
extern  VTBL_ENTRY _ZTV7S8975C2[];
Class_Descriptor cd_S8975C2 = {  "S8975C2", // class name
  0,0,//no base classes
  &(vtc_S8975C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI7S8975C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8975C2),29, //virtual function table var
  2, // 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  S8975C1  : S8975C2 {
  long s8975c1f0[2];
  virtual void  v1(); // _ZN7S8975C12v1Ev
  ~S8975C1(); // tgen
  S8975C1(); // tgen
};
//SIG(1 S8975C1) C1{ BC2{ vd 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 Fi[28]} v1 Fl[2]}


void  S8975C1 ::v1(){vfunc_called(this, "_ZN7S8975C12v1Ev");}
S8975C1 ::~S8975C1(){ note_dtor("S8975C1", this);} // tgen
S8975C1 ::S8975C1(){ note_ctor("S8975C1", this);} // tgen

static void Test_S8975C1()
{
  extern Class_Descriptor cd_S8975C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,32)];
    init_test(&cd_S8975C1, buf);
    S8975C1 *dp, &lv = *(dp=new (buf) S8975C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,124), "sizeof(S8975C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8975C1)");
    check_base_class_offset(lv, (S8975C2*), 0, "S8975C1");
    check_field_offset(lv, s8975c1f0, ABISELECT(120,116), "S8975C1.s8975c1f0");
    test_class_info(&lv, &cd_S8975C1);
    dp->~S8975C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8975C1(Test_S8975C1, "S8975C1", ABISELECT(136,124));

#else // __cplusplus

extern void _ZN7S8975C1C1Ev();
extern void _ZN7S8975C1D1Ev();
Name_Map name_map_S8975C1[] = {
  NSPAIR(_ZN7S8975C1C1Ev),
  NSPAIR(_ZN7S8975C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8975C2;
extern VTBL_ENTRY _ZTI7S8975C2[];
extern  VTBL_ENTRY _ZTV7S8975C2[];
static Base_Class bases_S8975C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8975C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S8975C1[];
extern void _ZN7S8975C1D1Ev();
extern void _ZN7S8975C1D0Ev();
extern void _ZN7S8975C22v2Ev();
extern void _ZN7S8975C22v3Ev();
extern void _ZN7S8975C22v4Ev();
extern void _ZN7S8975C22v5Ev();
extern void _ZN7S8975C22v6Ev();
extern void _ZN7S8975C22v7Ev();
extern void _ZN7S8975C22v8Ev();
extern void _ZN7S8975C22v9Ev();
extern void _ZN7S8975C23v10Ev();
extern void _ZN7S8975C23v11Ev();
extern void _ZN7S8975C23v12Ev();
extern void _ZN7S8975C23v13Ev();
extern void _ZN7S8975C23v14Ev();
extern void _ZN7S8975C23v15Ev();
extern void _ZN7S8975C23v16Ev();
extern void _ZN7S8975C23v17Ev();
extern void _ZN7S8975C23v18Ev();
extern void _ZN7S8975C23v19Ev();
extern void _ZN7S8975C23v20Ev();
extern void _ZN7S8975C23v21Ev();
extern void _ZN7S8975C23v22Ev();
extern void _ZN7S8975C23v23Ev();
extern void _ZN7S8975C23v24Ev();
extern void _ZN7S8975C23v25Ev();
extern void _ZN7S8975C23v26Ev();
extern void _ZN7S8975C12v1Ev();
static  VTBL_ENTRY vtc_S8975C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8975C1[0]),
  (VTBL_ENTRY)&_ZN7S8975C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8975C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8975C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8975C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8975C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8975C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8975C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8975C22v7Ev,
  (VTBL_ENTRY)&_ZN7S8975C22v8Ev,
  (VTBL_ENTRY)&_ZN7S8975C22v9Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v24Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v25Ev,
  (VTBL_ENTRY)&_ZN7S8975C23v26Ev,
  (VTBL_ENTRY)&_ZN7S8975C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8975C1[];
extern  VTBL_ENTRY _ZTV7S8975C1[];
Class_Descriptor cd_S8975C1 = {  "S8975C1", // class name
  bases_S8975C1, 1,
  &(vtc_S8975C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,124), // object size
  NSPAIRA(_ZTI7S8975C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8975C1),30, //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  S20994C3  : virtual S1537C9_nt , S4304C8_nt , S3600C19 {
  ::S19426C9_nt s20994c3f0;
  ~S20994C3(); // tgen
  S20994C3(); // tgen
};
//SIG(-1 S20994C3) C1{ VBC2{ m Fi} BC3{ m Fp Fi} BC4{ m} FU5{ m}}


S20994C3 ::~S20994C3(){ note_dtor("S20994C3", this);} // tgen
S20994C3 ::S20994C3(){ note_ctor("S20994C3", this);} // tgen

static void Test_S20994C3()
{
  extern Class_Descriptor cd_S20994C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20994C3, buf);
    S20994C3 *dp, &lv = *(dp=new (buf) S20994C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20994C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20994C3)");
    check_base_class_offset(lv, (S1537C9_nt*), ABISELECT(28,16), "S20994C3");
    check_base_class_offset(lv, (S4304C8_nt*), ABISELECT(8,4), "S20994C3");
    check_base_class_offset(lv, (S3600C19*), 0, "S20994C3");
    check_field_offset(lv, s20994c3f0, ABISELECT(24,12), "S20994C3.s20994c3f0");
    test_class_info(&lv, &cd_S20994C3);
    dp->~S20994C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20994C3(Test_S20994C3, "S20994C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S20994C3C1Ev();
extern void _ZN8S20994C3D1Ev();
Name_Map name_map_S20994C3[] = {
  NSPAIR(_ZN8S20994C3C1Ev),
  NSPAIR(_ZN8S20994C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S20994C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C9_nt,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S4304C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S20994C3[];
static  VTBL_ENTRY vtc_S20994C3[] = {
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20994C3[0]),
};
extern VTBL_ENTRY _ZTV8S20994C3[];
static  VTT_ENTRY vtt_S20994C3[] = {
  {&(_ZTV8S20994C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20994C3[];
extern  VTBL_ENTRY _ZTV8S20994C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20994C3[];
Class_Descriptor cd_S20994C3 = {  "S20994C3", // class name
  bases_S20994C3, 3,
  &(vtc_S20994C3[0]), // expected_vtbl_contents
  &(vtt_S20994C3[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S20994C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20994C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20994C3),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  S20994C8  : virtual S4304C8_nt , virtual S20994C3 , virtual S3600C19 {
  ~S20994C8(); // tgen
  S20994C8(); // tgen
};
//SIG(-1 S20994C8) C1{ VBC2{ m Fp Fi} VBC3{ VBC4{ m Fi} BC2 BC5{ m} FU6{ m}} VBC5}


S20994C8 ::~S20994C8(){ note_dtor("S20994C8", this);} // tgen
S20994C8 ::S20994C8(){ note_ctor("S20994C8", this);} // tgen

static void Test_S20994C8()
{
  extern Class_Descriptor cd_S20994C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S20994C8, buf);
    S20994C8 *dp, &lv = *(dp=new (buf) S20994C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S20994C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20994C8)");
    /*is_ambiguous_... S20994C8::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*), ABISELECT(8,4), "S20994C8");
    check_base_class_offset(lv, (S1537C9_nt*)(S20994C3*), ABISELECT(52,28), "S20994C8");
    check_base_class_offset(lv, (S4304C8_nt*)(S20994C3*), ABISELECT(32,16), "S20994C8");
    check_base_class_offset(lv, (S3600C19*)(S20994C3*), ABISELECT(24,12), "S20994C8");
    check_base_class_offset(lv, (S20994C3*), ABISELECT(24,12), "S20994C8");
    /*is_ambiguous_... S20994C8::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), 0, "S20994C8");
    test_class_info(&lv, &cd_S20994C8);
    dp->~S20994C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20994C8(Test_S20994C8, "S20994C8", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S20994C8C1Ev();
extern void _ZN8S20994C8D1Ev();
Name_Map name_map_S20994C8[] = {
  NSPAIR(_ZN8S20994C8C1Ev),
  NSPAIR(_ZN8S20994C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20994C3;
extern VTBL_ENTRY _ZTI8S20994C3[];
extern  VTBL_ENTRY _ZTV8S20994C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20994C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S20994C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4304C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1537C9_nt,    ABISELECT(52,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20994C3,    ABISELECT(24,12), //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},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20994C8[];
static  VTBL_ENTRY vtc_S20994C8[] = {
  0,
  ABISELECT(52,28),
  ABISELECT(24,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20994C8[0]),
  ABISELECT(28,16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20994C8[0]),
};
extern VTBL_ENTRY _ZTV8S20994C8[];
static  VTBL_ENTRY _tg__ZTV8S20994C3__8S20994C8[] = {
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20994C3[0]),
};
static  VTT_ENTRY vtt_S20994C8[] = {
  {&(_ZTV8S20994C8[6]),  6,9},
  {&(_ZTV8S20994C8[9]),  9,9},
  {&(_tg__ZTV8S20994C3__8S20994C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20994C8[];
extern  VTBL_ENTRY _ZTV8S20994C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20994C8[];
Class_Descriptor cd_S20994C8 = {  "S20994C8", // class name
  bases_S20994C8, 6,
  &(vtc_S20994C8[0]), // expected_vtbl_contents
  &(vtt_S20994C8[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S20994C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20994C8),9, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20994C8),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  S20994C9  : virtual S3600C19 {
  ~S20994C9(); // tgen
  S20994C9(); // tgen
};
//SIG(-1 S20994C9) C1{ VBC2{ m}}


S20994C9 ::~S20994C9(){ note_dtor("S20994C9", this);} // tgen
S20994C9 ::S20994C9(){ note_ctor("S20994C9", this);} // tgen

static void Test_S20994C9()
{
  extern Class_Descriptor cd_S20994C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20994C9, buf);
    S20994C9 *dp, &lv = *(dp=new (buf) S20994C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20994C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20994C9)");
    check_base_class_offset(lv, (S3600C19*), 0, "S20994C9");
    test_class_info(&lv, &cd_S20994C9);
    dp->~S20994C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20994C9(Test_S20994C9, "S20994C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20994C9C1Ev();
extern void _ZN8S20994C9D1Ev();
Name_Map name_map_S20994C9[] = {
  NSPAIR(_ZN8S20994C9C1Ev),
  NSPAIR(_ZN8S20994C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S20994C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20994C9[];
static  VTBL_ENTRY vtc_S20994C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20994C9[0]),
};
extern VTBL_ENTRY _ZTV8S20994C9[];
static  VTT_ENTRY vtt_S20994C9[] = {
  {&(_ZTV8S20994C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20994C9[];
extern  VTBL_ENTRY _ZTV8S20994C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20994C9[];
Class_Descriptor cd_S20994C9 = {  "S20994C9", // class name
  bases_S20994C9, 1,
  &(vtc_S20994C9[0]), // expected_vtbl_contents
  &(vtt_S20994C9[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20994C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20994C9),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20994C9),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  S20994C10  : S3600C19 , S4304C8_nt , S1537C9_nt , S20994C3 {
  ~S20994C10(); // tgen
  S20994C10(); // tgen
};
//SIG(-1 S20994C10) C1{ BC2{ m} BC3{ m Fp Fi} BC4{ m Fi} BC5{ VBC4 BC3 BC2 FU6{ m}}}


S20994C10 ::~S20994C10(){ note_dtor("S20994C10", this);} // tgen
S20994C10 ::S20994C10(){ note_ctor("S20994C10", this);} // tgen

static void Test_S20994C10()
{
  extern Class_Descriptor cd_S20994C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S20994C10, buf);
    S20994C10 *dp, &lv = *(dp=new (buf) S20994C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S20994C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20994C10)");
    /*is_ambiguous_... S20994C10::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), ABISELECT(25,13), "S20994C10");
    /*is_ambiguous_... S20994C10::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*), ABISELECT(32,16), "S20994C10");
    /*is_ambiguous_... S20994C10::S1537C9_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*), ABISELECT(48,24), "S20994C10");
    check_base_class_offset(lv, (S1537C9_nt*)(S20994C3*), ABISELECT(52,28), "S20994C10");
    check_base_class_offset(lv, (S4304C8_nt*)(S20994C3*), ABISELECT(8,4), "S20994C10");
    check_base_class_offset(lv, (S3600C19*)(S20994C3*), 0, "S20994C10");
    check_base_class_offset(lv, (S20994C3*), 0, "S20994C10");
    test_class_info(&lv, &cd_S20994C10);
    dp->~S20994C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20994C10(Test_S20994C10, "S20994C10", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN9S20994C10C1Ev();
extern void _ZN9S20994C10D1Ev();
Name_Map name_map_S20994C10[] = {
  NSPAIR(_ZN9S20994C10C1Ev),
  NSPAIR(_ZN9S20994C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20994C3;
extern VTBL_ENTRY _ZTI8S20994C3[];
extern  VTBL_ENTRY _ZTV8S20994C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20994C3[];
static Base_Class bases_S20994C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(25,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4304C8_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1537C9_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1537C9_nt,    ABISELECT(52,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
    6, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20994C3,    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 _ZTI9S20994C10[];
static  VTBL_ENTRY vtc_S20994C10[] = {
  ABISELECT(52,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S20994C10[0]),
};
extern VTBL_ENTRY _ZTV9S20994C10[];
static  VTBL_ENTRY _tg__ZTV8S20994C3__9S20994C10[] = {
  ABISELECT(52,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20994C3[0]),
};
static  VTT_ENTRY vtt_S20994C10[] = {
  {&(_ZTV9S20994C10[3]),  3,3},
  {&(_tg__ZTV8S20994C3__9S20994C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20994C10[];
extern  VTBL_ENTRY _ZTV9S20994C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20994C10[];
Class_Descriptor cd_S20994C10 = {  "S20994C10", // class name
  bases_S20994C10, 7,
  &(vtc_S20994C10[0]), // expected_vtbl_contents
  &(vtt_S20994C10[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI9S20994C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20994C10),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20994C10),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  S20994C2  : virtual S20994C3 , S20994C8 , virtual S20994C9 , virtual S20994C10 {
  int s20994c2f0;
  virtual  ~S20994C2(); // _ZN8S20994C2D2Ev
  S20994C2(); // tgen
};
//SIG(-1 S20994C2) C1{ VBC2{ VBC3{ m Fi} BC4{ m Fp Fi} BC5{ m} FU6{ m}} BC7{ VBC4 VBC2 VBC5} VBC8{ VBC5} VBC9{ BC5 BC4 BC3 BC2} vd Fi}


 S20994C2 ::~S20994C2(){ note_dtor("S20994C2", this);}
S20994C2 ::S20994C2(){ note_ctor("S20994C2", this);} // tgen

static void Test_S20994C2()
{
  extern Class_Descriptor cd_S20994C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,18)];
    init_test(&cd_S20994C2, buf);
    S20994C2 *dp, &lv = *(dp=new (buf) S20994C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,68), "sizeof(S20994C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20994C2)");
    /*is_ambiguous_... S20994C2::S20994C3 */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S20994C3*), ABISELECT(44,24), "S20994C2");
    check_base_class_offset(lv, (S1537C9_nt*)(S20994C3*)(S20994C10*), ABISELECT(44,24), "S20994C2");
    /*is_ambiguous_... S20994C2::S20994C3 */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S20994C3*), ABISELECT(24,12), "S20994C2");
    /*is_ambiguous_... S20994C2::S20994C3 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20994C3*), ABISELECT(16,8), "S20994C2");
    /*is_ambiguous_... S20994C2::S20994C3 */ AMB_check_base_class_offset(lv, (S20994C3*), ABISELECT(16,8), "S20994C2");
    check_base_class_offset(lv, (S20994C3*)(S20994C8*), ABISELECT(16,8), "S20994C2");
    /*is_ambiguous_... S20994C8::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S20994C8*), ABISELECT(48,28), "S20994C2");
    /*is_ambiguous_... S20994C8::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20994C8*), 0, "S20994C2");
    check_base_class_offset(lv, (S3600C19*)(S20994C9*), 0, "S20994C2");
    check_base_class_offset(lv, (S20994C8*), 0, "S20994C2");
    check_base_class_offset(lv, (S20994C9*), ABISELECT(64,36), "S20994C2");
    /*is_ambiguous_... S20994C10::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20994C10*), ABISELECT(97,53), "S20994C2");
    /*is_ambiguous_... S20994C10::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S20994C10*), ABISELECT(104,56), "S20994C2");
    /*is_ambiguous_... S20994C10::S1537C9_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S20994C10*), ABISELECT(120,64), "S20994C2");
    check_base_class_offset(lv, (S4304C8_nt*)(S20994C3*)(S20994C10*), ABISELECT(80,44), "S20994C2");
    check_base_class_offset(lv, (S3600C19*)(S20994C3*)(S20994C10*), ABISELECT(72,40), "S20994C2");
    check_base_class_offset(lv, (S20994C3*)(S20994C10*), ABISELECT(72,40), "S20994C2");
    check_base_class_offset(lv, (S20994C10*), ABISELECT(72,40), "S20994C2");
    check_field_offset(lv, s20994c2f0, ABISELECT(8,4), "S20994C2.s20994c2f0");
    test_class_info(&lv, &cd_S20994C2);
    dp->~S20994C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20994C2(Test_S20994C2, "S20994C2", ABISELECT(128,68));

#else // __cplusplus

extern void _ZN8S20994C2C1Ev();
extern void _ZN8S20994C2D2Ev();
Name_Map name_map_S20994C2[] = {
  NSPAIR(_ZN8S20994C2C1Ev),
  NSPAIR(_ZN8S20994C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20994C3;
extern VTBL_ENTRY _ZTI8S20994C3[];
extern  VTBL_ENTRY _ZTV8S20994C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20994C3[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20994C8;
extern VTBL_ENTRY _ZTI8S20994C8[];
extern  VTBL_ENTRY _ZTV8S20994C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20994C8[];
extern Class_Descriptor cd_S20994C9;
extern VTBL_ENTRY _ZTI8S20994C9[];
extern  VTBL_ENTRY _ZTV8S20994C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20994C9[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20994C3;
extern VTBL_ENTRY _ZTI8S20994C3[];
extern  VTBL_ENTRY _ZTV8S20994C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20994C3[];
extern Class_Descriptor cd_S20994C10;
extern VTBL_ENTRY _ZTI9S20994C10[];
extern  VTBL_ENTRY _ZTV9S20994C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20994C10[];
static Base_Class bases_S20994C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C9_nt,    ABISELECT(44,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20994C3,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S4304C8_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20994C8,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20994C9,    ABISELECT(64,36), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    ABISELECT(97,53), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4304C8_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1537C9_nt,    ABISELECT(120,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_S4304C8_nt,    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
    13, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    13, //immediately_derived
  0, 0},
  {&cd_S20994C3,    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
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20994C10,    ABISELECT(72,40), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20994C2[];
extern void _ZN8S20994C2D1Ev();
extern void _ZN8S20994C2D0Ev();
static  VTBL_ENTRY vtc_S20994C2[] = {
  ABISELECT(72,40),
  ABISELECT(64,36),
  0,
  ABISELECT(44,24),
  ABISELECT(16,8),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20994C2[0]),
  (VTBL_ENTRY)&_ZN8S20994C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20994C2D0Ev,
  ABISELECT(28,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20994C2[0]),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20994C2[0]),
  ABISELECT(-28,-16),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S20994C2[0]),
};
extern VTBL_ENTRY _ZTV8S20994C2[];
static  VTBL_ENTRY _tg__ZTV8S20994C8__8S20994C2[] = {
  0,
  ABISELECT(44,24),
  ABISELECT(16,8),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20994C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20994C3__8S20994C8__8S20994C2[] = {
  ABISELECT(28,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20994C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20994C3__8S20994C2[] = {
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20994C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20994C9__8S20994C2[] = {
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20994C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20994C10__8S20994C2[] = {
  ABISELECT(-28,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20994C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20994C39S20994C10__A1__8S20994C2[] = {
  ABISELECT(-28,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20994C3[0]),
};
static  VTT_ENTRY vtt_S20994C2[] = {
  {&(_ZTV8S20994C2[8]),  8,19},
  {&(_tg__ZTV8S20994C8__8S20994C2[6]),  6,6},
  {&(_tg__ZTV8S20994C3__8S20994C8__8S20994C2[3]),  3,3},
  {&(_ZTV8S20994C2[13]),  13,19},
  {&(_ZTV8S20994C2[16]),  16,19},
  {&(_ZTV8S20994C2[19]),  19,19},
  {&(_tg__ZTV8S20994C3__8S20994C2[3]),  3,3},
  {&(_tg__ZTV8S20994C9__8S20994C2[3]),  3,3},
  {&(_tg__ZTV9S20994C10__8S20994C2[3]),  3,3},
  {&(_tg__ZTV8S20994C39S20994C10__A1__8S20994C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20994C2[];
extern  VTBL_ENTRY _ZTV8S20994C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20994C2[];
Class_Descriptor cd_S20994C2 = {  "S20994C2", // class name
  bases_S20994C2, 15,
  &(vtc_S20994C2[0]), // expected_vtbl_contents
  &(vtt_S20994C2[0]), // expected_vtt_contents
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI8S20994C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20994C2),19, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20994C2),10, //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  S20994C1  : virtual S20994C2 {
  char s20994c1f0;
  virtual  ~S20994C1(); // _ZN8S20994C1D2Ev
  S20994C1(); // tgen
};
//SIG(1 S20994C1) C1{ VBC2{ VBC3{ VBC4{ m Fi} BC5{ m Fp Fi} BC6{ m} FU7{ m}} BC8{ VBC5 VBC3 VBC6} VBC9{ VBC6} VBC10{ BC6 BC5 BC4 BC3} vd Fi} vd Fc}


 S20994C1 ::~S20994C1(){ note_dtor("S20994C1", this);}
S20994C1 ::S20994C1(){ note_ctor("S20994C1", this);} // tgen

static void Test_S20994C1()
{
  extern Class_Descriptor cd_S20994C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,19)];
    init_test(&cd_S20994C1, buf);
    S20994C1 *dp, &lv = *(dp=new (buf) S20994C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,72), "sizeof(S20994C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20994C1)");
    /*is_ambiguous_... S20994C1::S20994C3 */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S20994C3*), ABISELECT(60,32), "S20994C1");
    check_base_class_offset(lv, (S1537C9_nt*)(S20994C3*)(S20994C10*), ABISELECT(60,32), "S20994C1");
    /*is_ambiguous_... S20994C1::S20994C3 */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S20994C3*), ABISELECT(40,20), "S20994C1");
    /*is_ambiguous_... S20994C1::S20994C3 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20994C3*), ABISELECT(32,16), "S20994C1");
    /*is_ambiguous_... S20994C2::S20994C3 */ AMB_check_base_class_offset(lv, (S20994C3*)(S20994C2*), ABISELECT(32,16), "S20994C1");
    check_base_class_offset(lv, (S20994C3*)(S20994C8*)(S20994C2*), ABISELECT(32,16), "S20994C1");
    /*is_ambiguous_... S20994C8::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S20994C8*)(S20994C2*), ABISELECT(64,36), "S20994C1");
    /*is_ambiguous_... S20994C8::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20994C8*)(S20994C2*), 0, "S20994C1");
    check_base_class_offset(lv, (S3600C19*)(S20994C9*), 0, "S20994C1");
    check_base_class_offset(lv, (S20994C8*)(S20994C2*), ABISELECT(16,8), "S20994C1");
    check_base_class_offset(lv, (S20994C9*)(S20994C2*), 0, "S20994C1");
    /*is_ambiguous_... S20994C10::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S20994C10*), ABISELECT(105,57), "S20994C1");
    /*is_ambiguous_... S20994C10::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S20994C10*), ABISELECT(112,60), "S20994C1");
    /*is_ambiguous_... S20994C10::S1537C9_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S20994C10*), ABISELECT(128,68), "S20994C1");
    check_base_class_offset(lv, (S4304C8_nt*)(S20994C3*)(S20994C10*), ABISELECT(88,48), "S20994C1");
    check_base_class_offset(lv, (S3600C19*)(S20994C3*)(S20994C10*), ABISELECT(80,44), "S20994C1");
    check_base_class_offset(lv, (S20994C3*)(S20994C10*), ABISELECT(80,44), "S20994C1");
    check_base_class_offset(lv, (S20994C10*)(S20994C2*), ABISELECT(80,44), "S20994C1");
    check_base_class_offset(lv, (S20994C2*), ABISELECT(16,8), "S20994C1");
    check_field_offset(lv, s20994c1f0, ABISELECT(8,4), "S20994C1.s20994c1f0");
    test_class_info(&lv, &cd_S20994C1);
    dp->~S20994C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20994C1(Test_S20994C1, "S20994C1", ABISELECT(136,72));

#else // __cplusplus

extern void _ZN8S20994C1C1Ev();
extern void _ZN8S20994C1D2Ev();
Name_Map name_map_S20994C1[] = {
  NSPAIR(_ZN8S20994C1C1Ev),
  NSPAIR(_ZN8S20994C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20994C3;
extern VTBL_ENTRY _ZTI8S20994C3[];
extern  VTBL_ENTRY _ZTV8S20994C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20994C3[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20994C8;
extern VTBL_ENTRY _ZTI8S20994C8[];
extern  VTBL_ENTRY _ZTV8S20994C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20994C8[];
extern Class_Descriptor cd_S20994C9;
extern VTBL_ENTRY _ZTI8S20994C9[];
extern  VTBL_ENTRY _ZTV8S20994C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20994C9[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S20994C3;
extern VTBL_ENTRY _ZTI8S20994C3[];
extern  VTBL_ENTRY _ZTV8S20994C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20994C3[];
extern Class_Descriptor cd_S20994C10;
extern VTBL_ENTRY _ZTI9S20994C10[];
extern  VTBL_ENTRY _ZTV9S20994C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20994C10[];
extern Class_Descriptor cd_S20994C2;
extern VTBL_ENTRY _ZTI8S20994C2[];
extern  VTBL_ENTRY _ZTV8S20994C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20994C2[];
static Base_Class bases_S20994C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C9_nt,    ABISELECT(60,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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_S20994C3,    ABISELECT(32,16), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    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
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20994C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20994C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3600C19,    ABISELECT(105,57), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4304C8_nt,    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
    14, //immediately_derived
  0, 0},
  {&cd_S1537C9_nt,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S4304C8_nt,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    13, //immediately_derived
  0, 0},
  {&cd_S20994C3,    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
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20994C10,    ABISELECT(80,44), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20994C2,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S20994C1[];
extern void _ZN8S20994C1D1Ev();
extern void _ZN8S20994C1D0Ev();
extern void ABISELECT(_ZTv0_n72_N8S20994C1D1Ev,_ZTv0_n36_N8S20994C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20994C1D1Ev,_ZThn8_N8S20994C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20994C1D0Ev,_ZTv0_n36_N8S20994C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S20994C1D0Ev,_ZThn8_N8S20994C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20994C1[] = {
  ABISELECT(80,44),
  0,
  ABISELECT(64,36),
  ABISELECT(60,32),
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20994C1[0]),
  (VTBL_ENTRY)&_ZN8S20994C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20994C1D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(64,36),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(44,24),
  ABISELECT(16,8),
  ABISELECT(48,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20994C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20994C1D1Ev,_ZTv0_n36_N8S20994C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20994C1D0Ev,_ZTv0_n36_N8S20994C1D0Ev),
  ABISELECT(28,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20994C1[0]),
  ABISELECT(-20,-12),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S20994C1[0]),
};
extern VTBL_ENTRY _ZTV8S20994C1[];
extern void _ZN8S20994C2D1Ev();
extern void _ZN8S20994C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20994C2__8S20994C1[] = {
  ABISELECT(64,36),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(44,24),
  ABISELECT(16,8),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20994C2[0]),
  (VTBL_ENTRY)&_ZN8S20994C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20994C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20994C88S20994C2__8S20994C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(44,24),
  ABISELECT(16,8),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20994C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20994C3__8S20994C88S20994C2__8S20994C1[] = {
  ABISELECT(28,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20994C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20994C3__8S20994C2__8S20994C1[] = {
  ABISELECT(28,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20994C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20994C9__8S20994C2__8S20994C1[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20994C2[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20994C10__8S20994C2__8S20994C1[] = {
  ABISELECT(-20,-12),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20994C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20994C3__8S20994C1[] = {
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20994C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20994C9__8S20994C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20994C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20994C10__8S20994C1[] = {
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S20994C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20994C39S20994C10__A1__8S20994C1[] = {
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20994C3[0]),
};
static  VTT_ENTRY vtt_S20994C1[] = {
  {&(_ZTV8S20994C1[9]),  9,28},
  {&(_ZTV8S20994C1[20]),  20,28},
  {&(_ZTV8S20994C1[25]),  25,28},
  {&(_ZTV8S20994C1[9]),  9,28},
  {&(_ZTV8S20994C1[28]),  28,28},
  {&(_tg__ZTV8S20994C2__8S20994C1[8]),  8,10},
  {&(_tg__ZTV8S20994C88S20994C2__8S20994C1[6]),  6,6},
  {&(_tg__ZTV8S20994C3__8S20994C88S20994C2__8S20994C1[3]),  3,3},
  {&(_tg__ZTV8S20994C3__8S20994C2__8S20994C1[3]),  3,3},
  {&(_tg__ZTV8S20994C9__8S20994C2__8S20994C1[3]),  3,3},
  {&(_tg__ZTV9S20994C10__8S20994C2__8S20994C1[3]),  3,3},
  {&(_tg__ZTV8S20994C3__8S20994C1[3]),  3,3},
  {&(_tg__ZTV8S20994C9__8S20994C1[3]),  3,3},
  {&(_tg__ZTV9S20994C10__8S20994C1[3]),  3,3},
  {&(_tg__ZTV8S20994C39S20994C10__A1__8S20994C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20994C1[];
extern  VTBL_ENTRY _ZTV8S20994C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20994C1[];
static VTBL_ENTRY alt_thunk_names111[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20994C1D0Ev,_ZTv0_n36_N8S20994C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20994C1D0Ev,_ZThn8_N8S20994C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20994C1D1Ev,_ZTv0_n36_N8S20994C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20994C1D1Ev,_ZThn8_N8S20994C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20994C1 = {  "S20994C1", // class name
  bases_S20994C1, 16,
  &(vtc_S20994C1[0]), // expected_vtbl_contents
  &(vtt_S20994C1[0]), // expected_vtt_contents
  ABISELECT(136,72), // object size
  NSPAIRA(_ZTI8S20994C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20994C1),28, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20994C1),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names111,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8486C2  {
  int s8486c2f0[28];
  virtual  ~S8486C2(); // _ZN7S8486C2D1Ev
  virtual void  v1(); // _ZN7S8486C22v1Ev
  virtual void  v2(); // _ZN7S8486C22v2Ev
  virtual void  v3(); // _ZN7S8486C22v3Ev
  virtual void  v4(); // _ZN7S8486C22v4Ev
  virtual void  v5(); // _ZN7S8486C22v5Ev
  virtual void  v6(); // _ZN7S8486C22v6Ev
  virtual void  v7(); // _ZN7S8486C22v7Ev
  virtual void  v8(); // _ZN7S8486C22v8Ev
  virtual void  v9(); // _ZN7S8486C22v9Ev
  virtual void  v10(); // _ZN7S8486C23v10Ev
  virtual void  v11(); // _ZN7S8486C23v11Ev
  virtual void  v12(); // _ZN7S8486C23v12Ev
  virtual void  v13(); // _ZN7S8486C23v13Ev
  virtual void  v14(); // _ZN7S8486C23v14Ev
  virtual void  v15(); // _ZN7S8486C23v15Ev
  virtual void  v16(); // _ZN7S8486C23v16Ev
  virtual void  v17(); // _ZN7S8486C23v17Ev
  virtual void  v18(); // _ZN7S8486C23v18Ev
  virtual void  v19(); // _ZN7S8486C23v19Ev
  virtual void  v20(); // _ZN7S8486C23v20Ev
  virtual void  v21(); // _ZN7S8486C23v21Ev
  virtual void  v22(); // _ZN7S8486C23v22Ev
  virtual void  v23(); // _ZN7S8486C23v23Ev
  virtual void  v24(); // _ZN7S8486C23v24Ev
  virtual void  v25(); // _ZN7S8486C23v25Ev
  S8486C2(); // tgen
};
//SIG(-1 S8486C2) 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 Fi[28]}


 S8486C2 ::~S8486C2(){ note_dtor("S8486C2", this);}
void  S8486C2 ::v1(){vfunc_called(this, "_ZN7S8486C22v1Ev");}
void  S8486C2 ::v2(){vfunc_called(this, "_ZN7S8486C22v2Ev");}
void  S8486C2 ::v3(){vfunc_called(this, "_ZN7S8486C22v3Ev");}
void  S8486C2 ::v4(){vfunc_called(this, "_ZN7S8486C22v4Ev");}
void  S8486C2 ::v5(){vfunc_called(this, "_ZN7S8486C22v5Ev");}
void  S8486C2 ::v6(){vfunc_called(this, "_ZN7S8486C22v6Ev");}
void  S8486C2 ::v7(){vfunc_called(this, "_ZN7S8486C22v7Ev");}
void  S8486C2 ::v8(){vfunc_called(this, "_ZN7S8486C22v8Ev");}
void  S8486C2 ::v9(){vfunc_called(this, "_ZN7S8486C22v9Ev");}
void  S8486C2 ::v10(){vfunc_called(this, "_ZN7S8486C23v10Ev");}
void  S8486C2 ::v11(){vfunc_called(this, "_ZN7S8486C23v11Ev");}
void  S8486C2 ::v12(){vfunc_called(this, "_ZN7S8486C23v12Ev");}
void  S8486C2 ::v13(){vfunc_called(this, "_ZN7S8486C23v13Ev");}
void  S8486C2 ::v14(){vfunc_called(this, "_ZN7S8486C23v14Ev");}
void  S8486C2 ::v15(){vfunc_called(this, "_ZN7S8486C23v15Ev");}
void  S8486C2 ::v16(){vfunc_called(this, "_ZN7S8486C23v16Ev");}
void  S8486C2 ::v17(){vfunc_called(this, "_ZN7S8486C23v17Ev");}
void  S8486C2 ::v18(){vfunc_called(this, "_ZN7S8486C23v18Ev");}
void  S8486C2 ::v19(){vfunc_called(this, "_ZN7S8486C23v19Ev");}
void  S8486C2 ::v20(){vfunc_called(this, "_ZN7S8486C23v20Ev");}
void  S8486C2 ::v21(){vfunc_called(this, "_ZN7S8486C23v21Ev");}
void  S8486C2 ::v22(){vfunc_called(this, "_ZN7S8486C23v22Ev");}
void  S8486C2 ::v23(){vfunc_called(this, "_ZN7S8486C23v23Ev");}
void  S8486C2 ::v24(){vfunc_called(this, "_ZN7S8486C23v24Ev");}
void  S8486C2 ::v25(){vfunc_called(this, "_ZN7S8486C23v25Ev");}
S8486C2 ::S8486C2(){ note_ctor("S8486C2", this);} // tgen

static void Test_S8486C2()
{
  extern Class_Descriptor cd_S8486C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S8486C2, buf);
    S8486C2 *dp, &lv = *(dp=new (buf) S8486C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S8486C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8486C2)");
    check_field_offset(lv, s8486c2f0, ABISELECT(8,4), "S8486C2.s8486c2f0");
    test_class_info(&lv, &cd_S8486C2);
    dp->~S8486C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8486C2(Test_S8486C2, "S8486C2", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN7S8486C2C1Ev();
extern void _ZN7S8486C2D1Ev();
Name_Map name_map_S8486C2[] = {
  NSPAIR(_ZN7S8486C2C1Ev),
  NSPAIR(_ZN7S8486C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8486C2[];
extern void _ZN7S8486C2D1Ev();
extern void _ZN7S8486C2D0Ev();
extern void _ZN7S8486C22v1Ev();
extern void _ZN7S8486C22v2Ev();
extern void _ZN7S8486C22v3Ev();
extern void _ZN7S8486C22v4Ev();
extern void _ZN7S8486C22v5Ev();
extern void _ZN7S8486C22v6Ev();
extern void _ZN7S8486C22v7Ev();
extern void _ZN7S8486C22v8Ev();
extern void _ZN7S8486C22v9Ev();
extern void _ZN7S8486C23v10Ev();
extern void _ZN7S8486C23v11Ev();
extern void _ZN7S8486C23v12Ev();
extern void _ZN7S8486C23v13Ev();
extern void _ZN7S8486C23v14Ev();
extern void _ZN7S8486C23v15Ev();
extern void _ZN7S8486C23v16Ev();
extern void _ZN7S8486C23v17Ev();
extern void _ZN7S8486C23v18Ev();
extern void _ZN7S8486C23v19Ev();
extern void _ZN7S8486C23v20Ev();
extern void _ZN7S8486C23v21Ev();
extern void _ZN7S8486C23v22Ev();
extern void _ZN7S8486C23v23Ev();
extern void _ZN7S8486C23v24Ev();
extern void _ZN7S8486C23v25Ev();
static  VTBL_ENTRY vtc_S8486C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8486C2[0]),
  (VTBL_ENTRY)&_ZN7S8486C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8486C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8486C22v1Ev,
  (VTBL_ENTRY)&_ZN7S8486C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8486C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8486C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8486C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8486C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8486C22v7Ev,
  (VTBL_ENTRY)&_ZN7S8486C22v8Ev,
  (VTBL_ENTRY)&_ZN7S8486C22v9Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v24Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v25Ev,
};
extern VTBL_ENTRY _ZTI7S8486C2[];
extern  VTBL_ENTRY _ZTV7S8486C2[];
Class_Descriptor cd_S8486C2 = {  "S8486C2", // class name
  0,0,//no base classes
  &(vtc_S8486C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI7S8486C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8486C2),29, //virtual function table var
  2, // 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  S8486C1  : S8486C2 {
  ~S8486C1(); // tgen
  S8486C1(); // tgen
};
//SIG(1 S8486C1) C1{ BC2{ 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 Fi[28]}}


S8486C1 ::~S8486C1(){ note_dtor("S8486C1", this);} // tgen
S8486C1 ::S8486C1(){ note_ctor("S8486C1", this);} // tgen

static void Test_S8486C1()
{
  extern Class_Descriptor cd_S8486C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,30)];
    init_test(&cd_S8486C1, buf);
    S8486C1 *dp, &lv = *(dp=new (buf) S8486C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S8486C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8486C1)");
    check_base_class_offset(lv, (S8486C2*), 0, "S8486C1");
    test_class_info(&lv, &cd_S8486C1);
    dp->~S8486C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8486C1(Test_S8486C1, "S8486C1", ABISELECT(120,116));

#else // __cplusplus

extern void _ZN7S8486C1C1Ev();
extern void _ZN7S8486C1D1Ev();
Name_Map name_map_S8486C1[] = {
  NSPAIR(_ZN7S8486C1C1Ev),
  NSPAIR(_ZN7S8486C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8486C2;
extern VTBL_ENTRY _ZTI7S8486C2[];
extern  VTBL_ENTRY _ZTV7S8486C2[];
static Base_Class bases_S8486C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8486C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S8486C1[];
extern void _ZN7S8486C1D1Ev();
extern void _ZN7S8486C1D0Ev();
extern void _ZN7S8486C22v1Ev();
extern void _ZN7S8486C22v2Ev();
extern void _ZN7S8486C22v3Ev();
extern void _ZN7S8486C22v4Ev();
extern void _ZN7S8486C22v5Ev();
extern void _ZN7S8486C22v6Ev();
extern void _ZN7S8486C22v7Ev();
extern void _ZN7S8486C22v8Ev();
extern void _ZN7S8486C22v9Ev();
extern void _ZN7S8486C23v10Ev();
extern void _ZN7S8486C23v11Ev();
extern void _ZN7S8486C23v12Ev();
extern void _ZN7S8486C23v13Ev();
extern void _ZN7S8486C23v14Ev();
extern void _ZN7S8486C23v15Ev();
extern void _ZN7S8486C23v16Ev();
extern void _ZN7S8486C23v17Ev();
extern void _ZN7S8486C23v18Ev();
extern void _ZN7S8486C23v19Ev();
extern void _ZN7S8486C23v20Ev();
extern void _ZN7S8486C23v21Ev();
extern void _ZN7S8486C23v22Ev();
extern void _ZN7S8486C23v23Ev();
extern void _ZN7S8486C23v24Ev();
extern void _ZN7S8486C23v25Ev();
static  VTBL_ENTRY vtc_S8486C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8486C1[0]),
  (VTBL_ENTRY)&_ZN7S8486C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8486C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8486C22v1Ev,
  (VTBL_ENTRY)&_ZN7S8486C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8486C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8486C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8486C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8486C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8486C22v7Ev,
  (VTBL_ENTRY)&_ZN7S8486C22v8Ev,
  (VTBL_ENTRY)&_ZN7S8486C22v9Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v24Ev,
  (VTBL_ENTRY)&_ZN7S8486C23v25Ev,
};
extern VTBL_ENTRY _ZTI7S8486C1[];
extern  VTBL_ENTRY _ZTV7S8486C1[];
Class_Descriptor cd_S8486C1 = {  "S8486C1", // class name
  bases_S8486C1, 1,
  &(vtc_S8486C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI7S8486C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8486C1),29, //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  S9810C2  {
  virtual  ~S9810C2(); // _ZN7S9810C2D1Ev
  virtual void  v4(); // _ZN7S9810C22v4Ev
  virtual void  v5(); // _ZN7S9810C22v5Ev
  virtual void  v6(); // _ZN7S9810C22v6Ev
  virtual void  v7(); // _ZN7S9810C22v7Ev
  virtual void  v8(); // _ZN7S9810C22v8Ev
  virtual void  v9(); // _ZN7S9810C22v9Ev
  S9810C2(); // tgen
};
//SIG(-1 S9810C2) C1{ vd v1 v2 v3 v4 v5 v6}


 S9810C2 ::~S9810C2(){ note_dtor("S9810C2", this);}
void  S9810C2 ::v4(){vfunc_called(this, "_ZN7S9810C22v4Ev");}
void  S9810C2 ::v5(){vfunc_called(this, "_ZN7S9810C22v5Ev");}
void  S9810C2 ::v6(){vfunc_called(this, "_ZN7S9810C22v6Ev");}
void  S9810C2 ::v7(){vfunc_called(this, "_ZN7S9810C22v7Ev");}
void  S9810C2 ::v8(){vfunc_called(this, "_ZN7S9810C22v8Ev");}
void  S9810C2 ::v9(){vfunc_called(this, "_ZN7S9810C22v9Ev");}
S9810C2 ::S9810C2(){ note_ctor("S9810C2", this);} // tgen

static void Test_S9810C2()
{
  extern Class_Descriptor cd_S9810C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9810C2, buf);
    S9810C2 *dp, &lv = *(dp=new (buf) S9810C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9810C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9810C2)");
    test_class_info(&lv, &cd_S9810C2);
    dp->~S9810C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9810C2(Test_S9810C2, "S9810C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9810C2C1Ev();
extern void _ZN7S9810C2D1Ev();
Name_Map name_map_S9810C2[] = {
  NSPAIR(_ZN7S9810C2C1Ev),
  NSPAIR(_ZN7S9810C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9810C2[];
extern void _ZN7S9810C2D1Ev();
extern void _ZN7S9810C2D0Ev();
extern void _ZN7S9810C22v4Ev();
extern void _ZN7S9810C22v5Ev();
extern void _ZN7S9810C22v6Ev();
extern void _ZN7S9810C22v7Ev();
extern void _ZN7S9810C22v8Ev();
extern void _ZN7S9810C22v9Ev();
static  VTBL_ENTRY vtc_S9810C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9810C2[0]),
  (VTBL_ENTRY)&_ZN7S9810C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9810C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9810C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9810C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9810C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9810C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9810C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9810C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S9810C2[];
extern  VTBL_ENTRY _ZTV7S9810C2[];
Class_Descriptor cd_S9810C2 = {  "S9810C2", // class name
  0,0,//no base classes
  &(vtc_S9810C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9810C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9810C2),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9810C1  : S9810C2 {
  ::S1566C32 s9810c1f0;
  char s9810c1f1[256];
  void *s9810c1f2;
  short s9810c1f3[1024];
  int s9810c1f4[3];
  virtual  ~S9810C1(); // _ZN7S9810C1D1Ev
  virtual void  v1(); // _ZN7S9810C12v1Ev
  virtual void  v2(); // _ZN7S9810C12v2Ev
  virtual void  v3(); // _ZN7S9810C12v3Ev
  S9810C1(); // tgen
};
//SIG(1 S9810C1) C1{ BC2{ vd v4 v5 v6 v7 v8 v9} vd v1 v2 v3 FC3{ m FC4{ Fc[2] Fs FC5{ Fi} Fc[8]}} Fc[256] Fp Fs[1024] Fi[3]}


 S9810C1 ::~S9810C1(){ note_dtor("S9810C1", this);}
void  S9810C1 ::v1(){vfunc_called(this, "_ZN7S9810C12v1Ev");}
void  S9810C1 ::v2(){vfunc_called(this, "_ZN7S9810C12v2Ev");}
void  S9810C1 ::v3(){vfunc_called(this, "_ZN7S9810C12v3Ev");}
S9810C1 ::S9810C1(){ note_ctor("S9810C1", this);} // tgen

static void Test_S9810C1()
{
  extern Class_Descriptor cd_S9810C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(295,586)];
    init_test(&cd_S9810C1, buf);
    S9810C1 *dp, &lv = *(dp=new (buf) S9810C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2352,2340), "sizeof(S9810C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9810C1)");
    check_base_class_offset(lv, (S9810C2*), 0, "S9810C1");
    check_field_offset(lv, s9810c1f0, ABISELECT(8,4), "S9810C1.s9810c1f0");
    check_field_offset(lv, s9810c1f1, ABISELECT(24,20), "S9810C1.s9810c1f1");
    check_field_offset(lv, s9810c1f2, ABISELECT(280,276), "S9810C1.s9810c1f2");
    check_field_offset(lv, s9810c1f3, ABISELECT(288,280), "S9810C1.s9810c1f3");
    check_field_offset(lv, s9810c1f4, ABISELECT(2336,2328), "S9810C1.s9810c1f4");
    test_class_info(&lv, &cd_S9810C1);
    dp->~S9810C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9810C1(Test_S9810C1, "S9810C1", ABISELECT(2352,2340));

#else // __cplusplus

extern void _ZN7S9810C1C1Ev();
extern void _ZN7S9810C1D1Ev();
Name_Map name_map_S9810C1[] = {
  NSPAIR(_ZN7S9810C1C1Ev),
  NSPAIR(_ZN7S9810C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9810C2;
extern VTBL_ENTRY _ZTI7S9810C2[];
extern  VTBL_ENTRY _ZTV7S9810C2[];
static Base_Class bases_S9810C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9810C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9810C1[];
extern void _ZN7S9810C1D1Ev();
extern void _ZN7S9810C1D0Ev();
extern void _ZN7S9810C22v4Ev();
extern void _ZN7S9810C22v5Ev();
extern void _ZN7S9810C22v6Ev();
extern void _ZN7S9810C22v7Ev();
extern void _ZN7S9810C22v8Ev();
extern void _ZN7S9810C22v9Ev();
extern void _ZN7S9810C12v1Ev();
extern void _ZN7S9810C12v2Ev();
extern void _ZN7S9810C12v3Ev();
static  VTBL_ENTRY vtc_S9810C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9810C1[0]),
  (VTBL_ENTRY)&_ZN7S9810C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9810C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9810C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9810C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9810C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9810C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9810C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9810C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9810C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9810C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9810C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9810C1[];
extern  VTBL_ENTRY _ZTV7S9810C1[];
Class_Descriptor cd_S9810C1 = {  "S9810C1", // class name
  bases_S9810C1, 1,
  &(vtc_S9810C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2352,2340), // object size
  NSPAIRA(_ZTI7S9810C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9810C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19888C3  : virtual S3600C19 {
  ~S19888C3(); // tgen
  S19888C3(); // tgen
};
//SIG(-1 S19888C3) C1{ VBC2{ m}}


S19888C3 ::~S19888C3(){ note_dtor("S19888C3", this);} // tgen
S19888C3 ::S19888C3(){ note_ctor("S19888C3", this);} // tgen

static void Test_S19888C3()
{
  extern Class_Descriptor cd_S19888C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19888C3, buf);
    S19888C3 *dp, &lv = *(dp=new (buf) S19888C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19888C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19888C3)");
    check_base_class_offset(lv, (S3600C19*), 0, "S19888C3");
    test_class_info(&lv, &cd_S19888C3);
    dp->~S19888C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19888C3(Test_S19888C3, "S19888C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19888C3C1Ev();
extern void _ZN8S19888C3D1Ev();
Name_Map name_map_S19888C3[] = {
  NSPAIR(_ZN8S19888C3C1Ev),
  NSPAIR(_ZN8S19888C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S19888C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19888C3[];
static  VTBL_ENTRY vtc_S19888C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19888C3[0]),
};
extern VTBL_ENTRY _ZTV8S19888C3[];
static  VTT_ENTRY vtt_S19888C3[] = {
  {&(_ZTV8S19888C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19888C3[];
extern  VTBL_ENTRY _ZTV8S19888C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19888C3[];
Class_Descriptor cd_S19888C3 = {  "S19888C3", // class name
  bases_S19888C3, 1,
  &(vtc_S19888C3[0]), // expected_vtbl_contents
  &(vtt_S19888C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19888C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19888C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19888C3),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  S19888C6  : virtual S1537C9_nt , S4304C8_nt , S3600C19 {
  ::S19426C9_nt s19888c6f0;
  ~S19888C6(); // tgen
  S19888C6(); // tgen
};
//SIG(-1 S19888C6) C1{ VBC2{ m Fi} BC3{ m Fp Fi} BC4{ m} FU5{ m}}


S19888C6 ::~S19888C6(){ note_dtor("S19888C6", this);} // tgen
S19888C6 ::S19888C6(){ note_ctor("S19888C6", this);} // tgen

static void Test_S19888C6()
{
  extern Class_Descriptor cd_S19888C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19888C6, buf);
    S19888C6 *dp, &lv = *(dp=new (buf) S19888C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19888C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19888C6)");
    check_base_class_offset(lv, (S1537C9_nt*), ABISELECT(28,16), "S19888C6");
    check_base_class_offset(lv, (S4304C8_nt*), ABISELECT(8,4), "S19888C6");
    check_base_class_offset(lv, (S3600C19*), 0, "S19888C6");
    check_field_offset(lv, s19888c6f0, ABISELECT(24,12), "S19888C6.s19888c6f0");
    test_class_info(&lv, &cd_S19888C6);
    dp->~S19888C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19888C6(Test_S19888C6, "S19888C6", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19888C6C1Ev();
extern void _ZN8S19888C6D1Ev();
Name_Map name_map_S19888C6[] = {
  NSPAIR(_ZN8S19888C6C1Ev),
  NSPAIR(_ZN8S19888C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S19888C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1537C9_nt,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S4304C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S19888C6[];
static  VTBL_ENTRY vtc_S19888C6[] = {
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19888C6[0]),
};
extern VTBL_ENTRY _ZTV8S19888C6[];
static  VTT_ENTRY vtt_S19888C6[] = {
  {&(_ZTV8S19888C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19888C6[];
extern  VTBL_ENTRY _ZTV8S19888C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19888C6[];
Class_Descriptor cd_S19888C6 = {  "S19888C6", // class name
  bases_S19888C6, 3,
  &(vtc_S19888C6[0]), // expected_vtbl_contents
  &(vtt_S19888C6[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19888C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19888C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19888C6),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  S19888C4  : virtual S4304C8_nt , virtual S19888C6 , virtual S3600C19 {
  ~S19888C4(); // tgen
  S19888C4(); // tgen
};
//SIG(-1 S19888C4) C1{ VBC2{ m Fp Fi} VBC3{ VBC4{ m Fi} BC2 BC5{ m} FU6{ m}} VBC5}


S19888C4 ::~S19888C4(){ note_dtor("S19888C4", this);} // tgen
S19888C4 ::S19888C4(){ note_ctor("S19888C4", this);} // tgen

static void Test_S19888C4()
{
  extern Class_Descriptor cd_S19888C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S19888C4, buf);
    S19888C4 *dp, &lv = *(dp=new (buf) S19888C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S19888C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19888C4)");
    /*is_ambiguous_... S19888C4::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*), ABISELECT(8,4), "S19888C4");
    check_base_class_offset(lv, (S1537C9_nt*)(S19888C6*), ABISELECT(52,28), "S19888C4");
    check_base_class_offset(lv, (S4304C8_nt*)(S19888C6*), ABISELECT(32,16), "S19888C4");
    check_base_class_offset(lv, (S3600C19*)(S19888C6*), ABISELECT(24,12), "S19888C4");
    check_base_class_offset(lv, (S19888C6*), ABISELECT(24,12), "S19888C4");
    /*is_ambiguous_... S19888C4::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), 0, "S19888C4");
    test_class_info(&lv, &cd_S19888C4);
    dp->~S19888C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19888C4(Test_S19888C4, "S19888C4", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S19888C4C1Ev();
extern void _ZN8S19888C4D1Ev();
Name_Map name_map_S19888C4[] = {
  NSPAIR(_ZN8S19888C4C1Ev),
  NSPAIR(_ZN8S19888C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19888C6;
extern VTBL_ENTRY _ZTI8S19888C6[];
extern  VTBL_ENTRY _ZTV8S19888C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19888C6[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S19888C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4304C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1537C9_nt,    ABISELECT(52,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3600C19,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19888C6,    ABISELECT(24,12), //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},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19888C4[];
static  VTBL_ENTRY vtc_S19888C4[] = {
  0,
  ABISELECT(52,28),
  ABISELECT(24,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19888C4[0]),
  ABISELECT(28,16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19888C4[0]),
};
extern VTBL_ENTRY _ZTV8S19888C4[];
static  VTBL_ENTRY _tg__ZTV8S19888C6__8S19888C4[] = {
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19888C6[0]),
};
static  VTT_ENTRY vtt_S19888C4[] = {
  {&(_ZTV8S19888C4[6]),  6,9},
  {&(_ZTV8S19888C4[9]),  9,9},
  {&(_tg__ZTV8S19888C6__8S19888C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19888C4[];
extern  VTBL_ENTRY _ZTV8S19888C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19888C4[];
Class_Descriptor cd_S19888C4 = {  "S19888C4", // class name
  bases_S19888C4, 6,
  &(vtc_S19888C4[0]), // expected_vtbl_contents
  &(vtt_S19888C4[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S19888C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19888C4),9, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19888C4),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  S19888C9  : S3600C19 , S4304C8_nt , S1537C9_nt , S19888C6 {
  ~S19888C9(); // tgen
  S19888C9(); // tgen
};
//SIG(-1 S19888C9) C1{ BC2{ m} BC3{ m Fp Fi} BC4{ m Fi} BC5{ VBC4 BC3 BC2 FU6{ m}}}


S19888C9 ::~S19888C9(){ note_dtor("S19888C9", this);} // tgen
S19888C9 ::S19888C9(){ note_ctor("S19888C9", this);} // tgen

static void Test_S19888C9()
{
  extern Class_Descriptor cd_S19888C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S19888C9, buf);
    S19888C9 *dp, &lv = *(dp=new (buf) S19888C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S19888C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19888C9)");
    /*is_ambiguous_... S19888C9::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), ABISELECT(25,13), "S19888C9");
    /*is_ambiguous_... S19888C9::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*), ABISELECT(32,16), "S19888C9");
    /*is_ambiguous_... S19888C9::S1537C9_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*), ABISELECT(48,24), "S19888C9");
    check_base_class_offset(lv, (S1537C9_nt*)(S19888C6*), ABISELECT(52,28), "S19888C9");
    check_base_class_offset(lv, (S4304C8_nt*)(S19888C6*), ABISELECT(8,4), "S19888C9");
    check_base_class_offset(lv, (S3600C19*)(S19888C6*), 0, "S19888C9");
    check_base_class_offset(lv, (S19888C6*), 0, "S19888C9");
    test_class_info(&lv, &cd_S19888C9);
    dp->~S19888C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19888C9(Test_S19888C9, "S19888C9", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S19888C9C1Ev();
extern void _ZN8S19888C9D1Ev();
Name_Map name_map_S19888C9[] = {
  NSPAIR(_ZN8S19888C9C1Ev),
  NSPAIR(_ZN8S19888C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19888C6;
extern VTBL_ENTRY _ZTI8S19888C6[];
extern  VTBL_ENTRY _ZTV8S19888C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19888C6[];
static Base_Class bases_S19888C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    ABISELECT(25,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4304C8_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1537C9_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1537C9_nt,    ABISELECT(52,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
    6, //immediately_derived
  0, 1},
  {&cd_S4304C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19888C6,    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 _ZTI8S19888C9[];
static  VTBL_ENTRY vtc_S19888C9[] = {
  ABISELECT(52,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19888C9[0]),
};
extern VTBL_ENTRY _ZTV8S19888C9[];
static  VTBL_ENTRY _tg__ZTV8S19888C6__8S19888C9[] = {
  ABISELECT(52,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19888C6[0]),
};
static  VTT_ENTRY vtt_S19888C9[] = {
  {&(_ZTV8S19888C9[3]),  3,3},
  {&(_tg__ZTV8S19888C6__8S19888C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19888C9[];
extern  VTBL_ENTRY _ZTV8S19888C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19888C9[];
Class_Descriptor cd_S19888C9 = {  "S19888C9", // class name
  bases_S19888C9, 7,
  &(vtc_S19888C9[0]), // expected_vtbl_contents
  &(vtt_S19888C9[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S19888C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19888C9),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19888C9),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  S19888C1  : virtual S3600C19 , virtual S19888C3 , virtual S19888C4 , virtual S19888C9 {
  ~S19888C1(); // tgen
  S19888C1(); // tgen
};
//SIG(1 S19888C1) C1{ VBC2{ m} VBC3{ VBC2} VBC4{ VBC5{ m Fp Fi} VBC6{ VBC7{ m Fi} BC5 BC2 FU8{ m}} VBC2} VBC9{ BC2 BC5 BC7 BC6}}


S19888C1 ::~S19888C1(){ note_dtor("S19888C1", this);} // tgen
S19888C1 ::S19888C1(){ note_ctor("S19888C1", this);} // tgen

static void Test_S19888C1()
{
  extern Class_Descriptor cd_S19888C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,17)];
    init_test(&cd_S19888C1, buf);
    S19888C1 *dp, &lv = *(dp=new (buf) S19888C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,64), "sizeof(S19888C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19888C1)");
    /*is_ambiguous_... S19888C1::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), 0, "S19888C1");
    check_base_class_offset(lv, (S3600C19*)(S19888C3*), 0, "S19888C1");
    /*is_ambiguous_... S19888C4::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19888C4*), 0, "S19888C1");
    check_base_class_offset(lv, (S19888C3*), 0, "S19888C1");
    /*is_ambiguous_... S19888C4::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S19888C4*), ABISELECT(16,8), "S19888C1");
    /*is_ambiguous_... S19888C1::S19888C6 */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S19888C6*), ABISELECT(60,32), "S19888C1");
    check_base_class_offset(lv, (S1537C9_nt*)(S19888C6*)(S19888C9*), ABISELECT(60,32), "S19888C1");
    /*is_ambiguous_... S19888C1::S19888C6 */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S19888C6*), ABISELECT(40,20), "S19888C1");
    /*is_ambiguous_... S19888C1::S19888C6 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19888C6*), ABISELECT(32,16), "S19888C1");
    check_base_class_offset(lv, (S19888C6*)(S19888C4*), ABISELECT(32,16), "S19888C1");
    check_base_class_offset(lv, (S19888C4*), ABISELECT(8,4), "S19888C1");
    /*is_ambiguous_... S19888C9::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*)(S19888C9*), ABISELECT(89,49), "S19888C1");
    /*is_ambiguous_... S19888C9::S4304C8_nt */ AMB_check_base_class_offset(lv, (S4304C8_nt*)(S19888C9*), ABISELECT(96,52), "S19888C1");
    /*is_ambiguous_... S19888C9::S1537C9_nt */ AMB_check_base_class_offset(lv, (S1537C9_nt*)(S19888C9*), ABISELECT(112,60), "S19888C1");
    check_base_class_offset(lv, (S4304C8_nt*)(S19888C6*)(S19888C9*), ABISELECT(72,40), "S19888C1");
    check_base_class_offset(lv, (S3600C19*)(S19888C6*)(S19888C9*), ABISELECT(64,36), "S19888C1");
    check_base_class_offset(lv, (S19888C6*)(S19888C9*), ABISELECT(64,36), "S19888C1");
    check_base_class_offset(lv, (S19888C9*), ABISELECT(64,36), "S19888C1");
    test_class_info(&lv, &cd_S19888C1);
    dp->~S19888C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19888C1(Test_S19888C1, "S19888C1", ABISELECT(120,64));

#else // __cplusplus

extern void _ZN8S19888C1C1Ev();
extern void _ZN8S19888C1D1Ev();
Name_Map name_map_S19888C1[] = {
  NSPAIR(_ZN8S19888C1C1Ev),
  NSPAIR(_ZN8S19888C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19888C3;
extern VTBL_ENTRY _ZTI8S19888C3[];
extern  VTBL_ENTRY _ZTV8S19888C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19888C3[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19888C6;
extern VTBL_ENTRY _ZTI8S19888C6[];
extern  VTBL_ENTRY _ZTV8S19888C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19888C6[];
extern Class_Descriptor cd_S19888C4;
extern VTBL_ENTRY _ZTI8S19888C4[];
extern  VTBL_ENTRY _ZTV8S19888C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19888C4[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S1537C9_nt;
extern VTBL_ENTRY _ZTI10S1537C9_nt[];
extern Class_Descriptor cd_S4304C8_nt;
extern VTBL_ENTRY _ZTI10S4304C8_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19888C6;
extern VTBL_ENTRY _ZTI8S19888C6[];
extern  VTBL_ENTRY _ZTV8S19888C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19888C6[];
extern Class_Descriptor cd_S19888C9;
extern VTBL_ENTRY _ZTI8S19888C9[];
extern  VTBL_ENTRY _ZTV8S19888C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19888C9[];
static Base_Class bases_S19888C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19888C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S4304C8_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1537C9_nt,    ABISELECT(60,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, 1},
  {&cd_S4304C8_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    6, //immediately_derived
  0, 0},
  {&cd_S19888C6,    ABISELECT(32,16), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19888C4,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    ABISELECT(89,49), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4304C8_nt,    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
    14, //immediately_derived
  0, 0},
  {&cd_S1537C9_nt,    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
    14, //immediately_derived
  0, 0},
  {&cd_S4304C8_nt,    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
    13, //immediately_derived
  0, 0},
  {&cd_S3600C19,    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
    13, //immediately_derived
  0, 0},
  {&cd_S19888C6,    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
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19888C9,    ABISELECT(64,36), //bcp->offset
    18, //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
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19888C1[];
static  VTBL_ENTRY vtc_S19888C1[] = {
  ABISELECT(64,36),
  ABISELECT(60,32),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19888C1[0]),
  ABISELECT(-8,-4),
  ABISELECT(52,28),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19888C1[0]),
  ABISELECT(28,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19888C1[0]),
  -4,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19888C1[0]),
};
extern VTBL_ENTRY _ZTV8S19888C1[];
static  VTBL_ENTRY _tg__ZTV8S19888C3__8S19888C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19888C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19888C4__8S19888C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(52,28),
  ABISELECT(24,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19888C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19888C6__8S19888C4__8S19888C1[] = {
  ABISELECT(28,16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19888C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19888C6__8S19888C1[] = {
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19888C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19888C9__8S19888C1[] = {
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S19888C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19888C68S19888C9__A1__8S19888C1[] = {
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S19888C6[0]),
};
static  VTT_ENTRY vtt_S19888C1[] = {
  {&(_ZTV8S19888C1[9]),  9,21},
  {&(_ZTV8S19888C1[9]),  9,21},
  {&(_ZTV8S19888C1[15]),  15,21},
  {&(_ZTV8S19888C1[18]),  18,21},
  {&(_ZTV8S19888C1[21]),  21,21},
  {&(_tg__ZTV8S19888C3__8S19888C1[3]),  3,3},
  {&(_tg__ZTV8S19888C4__8S19888C1[6]),  6,6},
  {&(_tg__ZTV8S19888C6__8S19888C4__8S19888C1[3]),  3,3},
  {&(_tg__ZTV8S19888C6__8S19888C1[3]),  3,3},
  {&(_tg__ZTV8S19888C9__8S19888C1[3]),  3,3},
  {&(_tg__ZTV8S19888C68S19888C9__A1__8S19888C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19888C1[];
extern  VTBL_ENTRY _ZTV8S19888C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19888C1[];
Class_Descriptor cd_S19888C1 = {  "S19888C1", // class name
  bases_S19888C1, 15,
  &(vtc_S19888C1[0]), // expected_vtbl_contents
  &(vtt_S19888C1[0]), // expected_vtt_contents
  ABISELECT(120,64), // object size
  NSPAIRA(_ZTI8S19888C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19888C1),21, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19888C1),11, //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  S7523C3  {
  virtual void  v1(); // _ZN7S7523C32v1Ev
  ~S7523C3(); // tgen
  S7523C3(); // tgen
};
//SIG(-1 S7523C3) C1{ v1}


void  S7523C3 ::v1(){vfunc_called(this, "_ZN7S7523C32v1Ev");}
S7523C3 ::~S7523C3(){ note_dtor("S7523C3", this);} // tgen
S7523C3 ::S7523C3(){ note_ctor("S7523C3", this);} // tgen

static void Test_S7523C3()
{
  extern Class_Descriptor cd_S7523C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7523C3, buf);
    S7523C3 *dp, &lv = *(dp=new (buf) S7523C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7523C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7523C3)");
    test_class_info(&lv, &cd_S7523C3);
    dp->~S7523C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7523C3(Test_S7523C3, "S7523C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7523C3C1Ev();
extern void _ZN7S7523C3D1Ev();
Name_Map name_map_S7523C3[] = {
  NSPAIR(_ZN7S7523C3C1Ev),
  NSPAIR(_ZN7S7523C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7523C3[];
extern void _ZN7S7523C32v1Ev();
static  VTBL_ENTRY vtc_S7523C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7523C3[0]),
  (VTBL_ENTRY)&_ZN7S7523C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S7523C3[];
extern  VTBL_ENTRY _ZTV7S7523C3[];
Class_Descriptor cd_S7523C3 = {  "S7523C3", // class name
  0,0,//no base classes
  &(vtc_S7523C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7523C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7523C3),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  S7523C7  : S3600C29_nt , virtual S3600C19 {
  ::S19426C9_nt s7523c7f0;
  ~S7523C7(); // tgen
  S7523C7(); // tgen
};
//SIG(-1 S7523C7) C1{ BC2{ m Fp} VBC3{ m} FU4{ m}}


S7523C7 ::~S7523C7(){ note_dtor("S7523C7", this);} // tgen
S7523C7 ::S7523C7(){ note_ctor("S7523C7", this);} // tgen

static void Test_S7523C7()
{
  extern Class_Descriptor cd_S7523C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7523C7, buf);
    S7523C7 *dp, &lv = *(dp=new (buf) S7523C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7523C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7523C7)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S7523C7");
    check_base_class_offset(lv, (S3600C19*), 0, "S7523C7");
    check_field_offset(lv, s7523c7f0, ABISELECT(16,8), "S7523C7.s7523c7f0");
    test_class_info(&lv, &cd_S7523C7);
    dp->~S7523C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7523C7(Test_S7523C7, "S7523C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7523C7C1Ev();
extern void _ZN7S7523C7D1Ev();
Name_Map name_map_S7523C7[] = {
  NSPAIR(_ZN7S7523C7C1Ev),
  NSPAIR(_ZN7S7523C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S7523C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7523C7[];
static  VTBL_ENTRY vtc_S7523C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7523C7[0]),
};
extern VTBL_ENTRY _ZTV7S7523C7[];
static  VTT_ENTRY vtt_S7523C7[] = {
  {&(_ZTV7S7523C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7523C7[];
extern  VTBL_ENTRY _ZTV7S7523C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7523C7[];
Class_Descriptor cd_S7523C7 = {  "S7523C7", // class name
  bases_S7523C7, 2,
  &(vtc_S7523C7[0]), // expected_vtbl_contents
  &(vtt_S7523C7[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7523C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7523C7),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7523C7),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  S7523C5  : virtual S3600C19 , virtual S7523C7 {
  int s7523c5f0;
  ~S7523C5(); // tgen
  S7523C5(); // tgen
};
//SIG(-1 S7523C5) C1{ VBC2{ m} VBC3{ BC4{ m Fp} VBC2 FU5{ m}} Fi}


S7523C5 ::~S7523C5(){ note_dtor("S7523C5", this);} // tgen
S7523C5 ::S7523C5(){ note_ctor("S7523C5", this);} // tgen

static void Test_S7523C5()
{
  extern Class_Descriptor cd_S7523C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7523C5, buf);
    S7523C5 *dp, &lv = *(dp=new (buf) S7523C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7523C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7523C5)");
    check_base_class_offset(lv, (S3600C19*), 0, "S7523C5");
    check_base_class_offset(lv, (S3600C19*)(S7523C7*), 0, "S7523C5");
    check_base_class_offset(lv, (S3600C29_nt*)(S7523C7*), ABISELECT(24,12), "S7523C5");
    check_base_class_offset(lv, (S7523C7*), ABISELECT(16,8), "S7523C5");
    check_field_offset(lv, s7523c5f0, ABISELECT(8,4), "S7523C5.s7523c5f0");
    test_class_info(&lv, &cd_S7523C5);
    dp->~S7523C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7523C5(Test_S7523C5, "S7523C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7523C5C1Ev();
extern void _ZN7S7523C5D1Ev();
Name_Map name_map_S7523C5[] = {
  NSPAIR(_ZN7S7523C5C1Ev),
  NSPAIR(_ZN7S7523C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7523C7;
extern VTBL_ENTRY _ZTI7S7523C7[];
extern  VTBL_ENTRY _ZTV7S7523C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7523C7[];
static Base_Class bases_S7523C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7523C7,    ABISELECT(16,8), //bcp->offset
    4, //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 _ZTI7S7523C5[];
static  VTBL_ENTRY vtc_S7523C5[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7523C5[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7523C5[0]),
};
extern VTBL_ENTRY _ZTV7S7523C5[];
static  VTBL_ENTRY _tg__ZTV7S7523C7__7S7523C5[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7523C7[0]),
};
static  VTT_ENTRY vtt_S7523C5[] = {
  {&(_ZTV7S7523C5[4]),  4,7},
  {&(_ZTV7S7523C5[7]),  7,7},
  {&(_tg__ZTV7S7523C7__7S7523C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7523C5[];
extern  VTBL_ENTRY _ZTV7S7523C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7523C5[];
Class_Descriptor cd_S7523C5 = {  "S7523C5", // class name
  bases_S7523C5, 3,
  &(vtc_S7523C5[0]), // expected_vtbl_contents
  &(vtt_S7523C5[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7523C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7523C5),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7523C5),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  S7523C10  : virtual S3600C29_nt , S3600C19 {
  ~S7523C10(); // tgen
  S7523C10(); // tgen
};
//SIG(-1 S7523C10) C1{ VBC2{ m Fp} BC3{ m}}


S7523C10 ::~S7523C10(){ note_dtor("S7523C10", this);} // tgen
S7523C10 ::S7523C10(){ note_ctor("S7523C10", this);} // tgen

static void Test_S7523C10()
{
  extern Class_Descriptor cd_S7523C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7523C10, buf);
    S7523C10 *dp, &lv = *(dp=new (buf) S7523C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7523C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7523C10)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S7523C10");
    check_base_class_offset(lv, (S3600C19*), 0, "S7523C10");
    test_class_info(&lv, &cd_S7523C10);
    dp->~S7523C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7523C10(Test_S7523C10, "S7523C10", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7523C10C1Ev();
extern void _ZN8S7523C10D1Ev();
Name_Map name_map_S7523C10[] = {
  NSPAIR(_ZN8S7523C10C1Ev),
  NSPAIR(_ZN8S7523C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S7523C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S7523C10[];
static  VTBL_ENTRY vtc_S7523C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7523C10[0]),
};
extern VTBL_ENTRY _ZTV8S7523C10[];
static  VTT_ENTRY vtt_S7523C10[] = {
  {&(_ZTV8S7523C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7523C10[];
extern  VTBL_ENTRY _ZTV8S7523C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7523C10[];
Class_Descriptor cd_S7523C10 = {  "S7523C10", // class name
  bases_S7523C10, 2,
  &(vtc_S7523C10[0]), // expected_vtbl_contents
  &(vtt_S7523C10[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7523C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7523C10),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7523C10),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  S7523C4  : S7523C5 , S7523C10 {
  ::S3600C19 s7523c4f0;
  ~S7523C4(); // tgen
  S7523C4(); // tgen
};
//SIG(-1 S7523C4) C1{ BC2{ VBC3{ m} VBC4{ BC5{ m Fp} VBC3 FU6{ m}} Fi} BC7{ VBC5 BC3} FC3}


S7523C4 ::~S7523C4(){ note_dtor("S7523C4", this);} // tgen
S7523C4 ::S7523C4(){ note_ctor("S7523C4", this);} // tgen

static void Test_S7523C4()
{
  extern Class_Descriptor cd_S7523C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7523C4, buf);
    S7523C4 *dp, &lv = *(dp=new (buf) S7523C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7523C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7523C4)");
    check_base_class_offset(lv, (S3600C19*)(S7523C5*), 0, "S7523C4");
    check_base_class_offset(lv, (S3600C19*)(S7523C7*), 0, "S7523C4");
    check_base_class_offset(lv, (S3600C29_nt*)(S7523C7*), ABISELECT(40,20), "S7523C4");
    check_base_class_offset(lv, (S7523C7*)(S7523C5*), ABISELECT(32,16), "S7523C4");
    check_base_class_offset(lv, (S7523C5*), 0, "S7523C4");
    check_base_class_offset(lv, (S3600C29_nt*)(S7523C10*), ABISELECT(56,28), "S7523C4");
    check_base_class_offset(lv, (S3600C19*)(S7523C10*), ABISELECT(16,8), "S7523C4");
    check_base_class_offset(lv, (S7523C10*), ABISELECT(16,8), "S7523C4");
    check_field_offset(lv, s7523c4f0, ABISELECT(24,12), "S7523C4.s7523c4f0");
    test_class_info(&lv, &cd_S7523C4);
    dp->~S7523C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7523C4(Test_S7523C4, "S7523C4", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S7523C4C1Ev();
extern void _ZN7S7523C4D1Ev();
Name_Map name_map_S7523C4[] = {
  NSPAIR(_ZN7S7523C4C1Ev),
  NSPAIR(_ZN7S7523C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7523C7;
extern VTBL_ENTRY _ZTI7S7523C7[];
extern  VTBL_ENTRY _ZTV7S7523C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7523C7[];
extern Class_Descriptor cd_S7523C5;
extern VTBL_ENTRY _ZTI7S7523C5[];
extern  VTBL_ENTRY _ZTV7S7523C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7523C5[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7523C10;
extern VTBL_ENTRY _ZTI8S7523C10[];
extern  VTBL_ENTRY _ZTV8S7523C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7523C10[];
static Base_Class bases_S7523C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7523C7,    ABISELECT(32,16), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7523C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C29_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S7523C10,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI7S7523C4[];
static  VTBL_ENTRY vtc_S7523C4[] = {
  ABISELECT(56,28),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7523C4[0]),
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7523C4[0]),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7523C4[0]),
};
extern VTBL_ENTRY _ZTV7S7523C4[];
static  VTBL_ENTRY _tg__ZTV7S7523C5__7S7523C4[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7523C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7523C7__7S7523C5__7S7523C4[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7523C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7523C10__7S7523C4[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S7523C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7523C7__7S7523C4[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7523C7[0]),
};
static  VTT_ENTRY vtt_S7523C4[] = {
  {&(_ZTV7S7523C4[5]),  5,11},
  {&(_tg__ZTV7S7523C5__7S7523C4[4]),  4,4},
  {&(_tg__ZTV7S7523C7__7S7523C5__7S7523C4[3]),  3,3},
  {&(_tg__ZTV8S7523C10__7S7523C4[3]),  3,3},
  {&(_ZTV7S7523C4[11]),  11,11},
  {&(_ZTV7S7523C4[8]),  8,11},
  {&(_tg__ZTV7S7523C7__7S7523C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7523C4[];
extern  VTBL_ENTRY _ZTV7S7523C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7523C4[];
Class_Descriptor cd_S7523C4 = {  "S7523C4", // class name
  bases_S7523C4, 7,
  &(vtc_S7523C4[0]), // expected_vtbl_contents
  &(vtt_S7523C4[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S7523C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7523C4),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7523C4),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  S7523C2  : virtual S7523C3 , S7523C4 , virtual S3600C6_nt {
  ~S7523C2(); // tgen
  S7523C2(); // tgen
};
//SIG(-1 S7523C2) C1{ VBC2{ v1} BC3{ BC4{ VBC5{ m} VBC6{ BC7{ m Fp} VBC5 FU8{ m}} Fi} BC9{ VBC7 BC5} FC5} VBC10{ m}}


S7523C2 ::~S7523C2(){ note_dtor("S7523C2", this);} // tgen
S7523C2 ::S7523C2(){ note_ctor("S7523C2", this);} // tgen

static void Test_S7523C2()
{
  extern Class_Descriptor cd_S7523C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S7523C2, buf);
    S7523C2 *dp, &lv = *(dp=new (buf) S7523C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S7523C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7523C2)");
    check_base_class_offset(lv, (S7523C3*), ABISELECT(32,16), "S7523C2");
    check_base_class_offset(lv, (S3600C19*)(S7523C5*)(S7523C4*), 0, "S7523C2");
    check_base_class_offset(lv, (S3600C19*)(S7523C7*), 0, "S7523C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S7523C7*), ABISELECT(48,24), "S7523C2");
    check_base_class_offset(lv, (S7523C7*)(S7523C5*)(S7523C4*), ABISELECT(40,20), "S7523C2");
    check_base_class_offset(lv, (S7523C5*)(S7523C4*), 0, "S7523C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S7523C10*)(S7523C4*), ABISELECT(64,32), "S7523C2");
    check_base_class_offset(lv, (S3600C19*)(S7523C10*)(S7523C4*), ABISELECT(16,8), "S7523C2");
    check_base_class_offset(lv, (S7523C10*)(S7523C4*), ABISELECT(16,8), "S7523C2");
    check_base_class_offset(lv, (S7523C4*), 0, "S7523C2");
    check_base_class_offset(lv, (S3600C6_nt*), 0, "S7523C2");
    test_class_info(&lv, &cd_S7523C2);
    dp->~S7523C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7523C2(Test_S7523C2, "S7523C2", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S7523C2C1Ev();
extern void _ZN7S7523C2D1Ev();
Name_Map name_map_S7523C2[] = {
  NSPAIR(_ZN7S7523C2C1Ev),
  NSPAIR(_ZN7S7523C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7523C3;
extern VTBL_ENTRY _ZTI7S7523C3[];
extern  VTBL_ENTRY _ZTV7S7523C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7523C7;
extern VTBL_ENTRY _ZTI7S7523C7[];
extern  VTBL_ENTRY _ZTV7S7523C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7523C7[];
extern Class_Descriptor cd_S7523C5;
extern VTBL_ENTRY _ZTI7S7523C5[];
extern  VTBL_ENTRY _ZTV7S7523C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7523C5[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7523C10;
extern VTBL_ENTRY _ZTI8S7523C10[];
extern  VTBL_ENTRY _ZTV8S7523C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7523C10[];
extern Class_Descriptor cd_S7523C4;
extern VTBL_ENTRY _ZTI7S7523C4[];
extern  VTBL_ENTRY _ZTV7S7523C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7523C4[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
static Base_Class bases_S7523C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7523C3,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7523C7,    ABISELECT(40,20), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7523C5,    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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S7523C10,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7523C4,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C6_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7523C2[];
extern void _ZN7S7523C32v1Ev();
static  VTBL_ENTRY vtc_S7523C2[] = {
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7523C2[0]),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7523C2[0]),
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7523C2[0]),
  (VTBL_ENTRY)&_ZN7S7523C32v1Ev,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7523C2[0]),
};
extern VTBL_ENTRY _ZTV7S7523C2[];
static  VTBL_ENTRY _tg__ZTV7S7523C4__7S7523C2[] = {
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7523C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7523C57S7523C4__7S7523C2[] = {
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7523C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7523C7__7S7523C57S7523C4__7S7523C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7523C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7523C107S7523C4__7S7523C2[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7523C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7523C7__7S7523C4__7S7523C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7523C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7523C10__7S7523C4__7S7523C2[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7523C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7523C7__7S7523C2[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7523C7[0]),
};
static  VTT_ENTRY vtt_S7523C2[] = {
  {&(_ZTV7S7523C2[7]),  7,17},
  {&(_tg__ZTV7S7523C4__7S7523C2[5]),  5,5},
  {&(_tg__ZTV7S7523C57S7523C4__7S7523C2[4]),  4,4},
  {&(_tg__ZTV7S7523C7__7S7523C57S7523C4__7S7523C2[3]),  3,3},
  {&(_tg__ZTV8S7523C107S7523C4__7S7523C2[3]),  3,3},
  {&(_tg__ZTV7S7523C7__7S7523C4__7S7523C2[3]),  3,3},
  {&(_tg__ZTV8S7523C10__7S7523C4__7S7523C2[3]),  3,3},
  {&(_ZTV7S7523C2[13]),  13,17},
  {&(_ZTV7S7523C2[17]),  17,17},
  {&(_ZTV7S7523C2[10]),  10,17},
  {&(_tg__ZTV7S7523C7__7S7523C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7523C2[];
extern  VTBL_ENTRY _ZTV7S7523C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7523C2[];
Class_Descriptor cd_S7523C2 = {  "S7523C2", // class name
  bases_S7523C2, 10,
  &(vtc_S7523C2[0]), // expected_vtbl_contents
  &(vtt_S7523C2[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S7523C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7523C2),17, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7523C2),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  S7523C1  : S7523C2 {
  int s7523c1f0;
  virtual  ~S7523C1(); // _ZN7S7523C1D2Ev
  S7523C1(); // tgen
};
//SIG(1 S7523C1) C1{ BC2{ VBC3{ v1} BC4{ BC5{ VBC6{ m} VBC7{ BC8{ m Fp} VBC6 FU9{ m}} Fi} BC10{ VBC8 BC6} FC6} VBC11{ m}} vd Fi}


 S7523C1 ::~S7523C1(){ note_dtor("S7523C1", this);}
S7523C1 ::S7523C1(){ note_ctor("S7523C1", this);} // tgen

static void Test_S7523C1()
{
  extern Class_Descriptor cd_S7523C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S7523C1, buf);
    S7523C1 *dp, &lv = *(dp=new (buf) S7523C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S7523C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7523C1)");
    check_base_class_offset(lv, (S7523C3*)(S7523C2*), ABISELECT(32,20), "S7523C1");
    check_base_class_offset(lv, (S3600C19*)(S7523C5*)(S7523C4*)(S7523C2*), 0, "S7523C1");
    check_base_class_offset(lv, (S3600C19*)(S7523C7*), 0, "S7523C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S7523C7*), ABISELECT(48,28), "S7523C1");
    check_base_class_offset(lv, (S7523C7*)(S7523C5*)(S7523C4*)(S7523C2*), ABISELECT(40,24), "S7523C1");
    check_base_class_offset(lv, (S7523C5*)(S7523C4*)(S7523C2*), 0, "S7523C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S7523C10*)(S7523C4*)(S7523C2*), ABISELECT(64,36), "S7523C1");
    check_base_class_offset(lv, (S3600C19*)(S7523C10*)(S7523C4*)(S7523C2*), ABISELECT(16,8), "S7523C1");
    check_base_class_offset(lv, (S7523C10*)(S7523C4*)(S7523C2*), ABISELECT(16,8), "S7523C1");
    check_base_class_offset(lv, (S7523C4*)(S7523C2*), 0, "S7523C1");
    check_base_class_offset(lv, (S3600C6_nt*)(S7523C2*), 0, "S7523C1");
    check_base_class_offset(lv, (S7523C2*), 0, "S7523C1");
    check_field_offset(lv, s7523c1f0, ABISELECT(28,16), "S7523C1.s7523c1f0");
    test_class_info(&lv, &cd_S7523C1);
    dp->~S7523C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7523C1(Test_S7523C1, "S7523C1", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S7523C1C1Ev();
extern void _ZN7S7523C1D2Ev();
Name_Map name_map_S7523C1[] = {
  NSPAIR(_ZN7S7523C1C1Ev),
  NSPAIR(_ZN7S7523C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7523C3;
extern VTBL_ENTRY _ZTI7S7523C3[];
extern  VTBL_ENTRY _ZTV7S7523C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7523C7;
extern VTBL_ENTRY _ZTI7S7523C7[];
extern  VTBL_ENTRY _ZTV7S7523C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7523C7[];
extern Class_Descriptor cd_S7523C5;
extern VTBL_ENTRY _ZTI7S7523C5[];
extern  VTBL_ENTRY _ZTV7S7523C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7523C5[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7523C10;
extern VTBL_ENTRY _ZTI8S7523C10[];
extern  VTBL_ENTRY _ZTV8S7523C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7523C10[];
extern Class_Descriptor cd_S7523C4;
extern VTBL_ENTRY _ZTI7S7523C4[];
extern  VTBL_ENTRY _ZTV7S7523C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7523C4[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
extern Class_Descriptor cd_S7523C2;
extern VTBL_ENTRY _ZTI7S7523C2[];
extern  VTBL_ENTRY _ZTV7S7523C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7523C2[];
static Base_Class bases_S7523C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7523C3,    ABISELECT(32,20), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //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
    10, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7523C7,    ABISELECT(40,24), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7523C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    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
    7, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S7523C10,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7523C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3600C6_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
    10, //immediately_derived
  0, 1},
  {&cd_S7523C2,    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 _ZTI7S7523C1[];
extern void _ZN7S7523C1D1Ev();
extern void _ZN7S7523C1D0Ev();
extern void _ZN7S7523C32v1Ev();
static  VTBL_ENTRY vtc_S7523C1[] = {
  0,
  ABISELECT(32,20),
  ABISELECT(64,36),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7523C1[0]),
  (VTBL_ENTRY)&_ZN7S7523C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7523C1D0Ev,
  ABISELECT(48,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7523C1[0]),
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7523C1[0]),
  (VTBL_ENTRY)&_ZN7S7523C32v1Ev,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7523C1[0]),
};
extern VTBL_ENTRY _ZTV7S7523C1[];
static  VTBL_ENTRY _tg__ZTV7S7523C2__7S7523C1[] = {
  0,
  ABISELECT(32,20),
  ABISELECT(64,36),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7523C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7523C47S7523C2__7S7523C1[] = {
  ABISELECT(64,36),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7523C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7523C57S7523C47S7523C2__7S7523C1[] = {
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7523C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7523C7__7S7523C57S7523C47S7523C2__7S7523C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7523C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7523C107S7523C47S7523C2__7S7523C1[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S7523C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7523C7__7S7523C47S7523C2__7S7523C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7523C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7523C10__7S7523C47S7523C2__7S7523C1[] = {
  ABISELECT(48,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7523C4[0]),
};
extern void _ZN7S7523C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7523C3__7S7523C2__7S7523C1[] = {
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7523C2[0]),
  (VTBL_ENTRY)&_ZN7S7523C32v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7523C7__7S7523C2__7S7523C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7523C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7523C107S7523C4__7S7523C2__7S7523C1[] = {
  ABISELECT(48,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7523C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7523C7__7S7523C1[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7523C7[0]),
};
static  VTT_ENTRY vtt_S7523C1[] = {
  {&(_ZTV7S7523C1[7]),  7,19},
  {&(_tg__ZTV7S7523C2__7S7523C1[7]),  7,7},
  {&(_tg__ZTV7S7523C47S7523C2__7S7523C1[5]),  5,5},
  {&(_tg__ZTV7S7523C57S7523C47S7523C2__7S7523C1[4]),  4,4},
  {&(_tg__ZTV7S7523C7__7S7523C57S7523C47S7523C2__7S7523C1[3]),  3,3},
  {&(_tg__ZTV8S7523C107S7523C47S7523C2__7S7523C1[3]),  3,3},
  {&(_tg__ZTV7S7523C7__7S7523C47S7523C2__7S7523C1[3]),  3,3},
  {&(_tg__ZTV8S7523C10__7S7523C47S7523C2__7S7523C1[3]),  3,3},
  {&(_tg__ZTV7S7523C3__7S7523C2__7S7523C1[3]),  3,4},
  {&(_tg__ZTV7S7523C7__7S7523C2__7S7523C1[3]),  3,3},
  {&(_tg__ZTV8S7523C107S7523C4__7S7523C2__7S7523C1[3]),  3,3},
  {&(_ZTV7S7523C1[15]),  15,19},
  {&(_ZTV7S7523C1[19]),  19,19},
  {&(_ZTV7S7523C1[12]),  12,19},
  {&(_tg__ZTV7S7523C7__7S7523C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7523C1[];
extern  VTBL_ENTRY _ZTV7S7523C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7523C1[];
Class_Descriptor cd_S7523C1 = {  "S7523C1", // class name
  bases_S7523C1, 11,
  &(vtc_S7523C1[0]), // expected_vtbl_contents
  &(vtt_S7523C1[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S7523C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7523C1),19, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7523C1),15, //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  S12226C4  {
  ::S1566C33 s12226c4f0;
  int s12226c4f1[2];
};
//SIG(1 S12226C4) C1{ FC2{ Fc[2] Fs FC3{ Fi} Fc[8]} Fi[2]}



static void Test_S12226C4()
{
  {
    init_simple_test("S12226C4");
    S12226C4 lv;
    check2(sizeof(lv), 24, "sizeof(S12226C4)");
    check2(__alignof__(lv), 4, "__alignof__(S12226C4)");
    check_field_offset(lv, s12226c4f0, 0, "S12226C4.s12226c4f0");
    check_field_offset(lv, s12226c4f1, 16, "S12226C4.s12226c4f1");
  }
}
static Arrange_To_Call_Me vS12226C4(Test_S12226C4, "S12226C4", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12226C1  {
  int s12226c1f0;
  char s12226c1f1[132];
  void *s12226c1f2[9];
  int s12226c1f3[8];
  ::S1566C33 s12226c1f4;
  void *s12226c1f5;
  int s12226c1f6[12];
  short s12226c1f7;
  void *s12226c1f8;
  char s12226c1f9;
  ::S12226C4 s12226c1f10[200];
};
//SIG(1 S12226C1) C1{ Fi Fc[132] Fp[9] Fi[8] FC2{ Fc[2] Fs FC3{ Fi} Fc[8]} Fp Fi[12] Fs Fp Fc FC4{ FC2 Fi[2]}[200]}



static void Test_S12226C1()
{
  {
    init_simple_test("S12226C1");
    S12226C1 lv;
    check2(sizeof(lv), ABISELECT(5136,5084), "sizeof(S12226C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12226C1)");
    check_field_offset(lv, s12226c1f0, 0, "S12226C1.s12226c1f0");
    check_field_offset(lv, s12226c1f1, 4, "S12226C1.s12226c1f1");
    check_field_offset(lv, s12226c1f2, 136, "S12226C1.s12226c1f2");
    check_field_offset(lv, s12226c1f3, ABISELECT(208,172), "S12226C1.s12226c1f3");
    check_field_offset(lv, s12226c1f4, ABISELECT(240,204), "S12226C1.s12226c1f4");
    check_field_offset(lv, s12226c1f5, ABISELECT(256,220), "S12226C1.s12226c1f5");
    check_field_offset(lv, s12226c1f6, ABISELECT(264,224), "S12226C1.s12226c1f6");
    check_field_offset(lv, s12226c1f7, ABISELECT(312,272), "S12226C1.s12226c1f7");
    check_field_offset(lv, s12226c1f8, ABISELECT(320,276), "S12226C1.s12226c1f8");
    check_field_offset(lv, s12226c1f9, ABISELECT(328,280), "S12226C1.s12226c1f9");
    check_field_offset(lv, s12226c1f10, ABISELECT(332,284), "S12226C1.s12226c1f10");
  }
}
static Arrange_To_Call_Me vS12226C1(Test_S12226C1, "S12226C1", ABISELECT(5136,5084));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7110C2_nt  {
  virtual  ~S7110C2_nt(); // _ZN10S7110C2_ntD1Ev
  virtual void  v7(); // _ZN10S7110C2_nt2v7Ev
  virtual void  v8(); // _ZN10S7110C2_nt2v8Ev
  virtual void  v9(); // _ZN10S7110C2_nt2v9Ev
  virtual void  v10(); // _ZN10S7110C2_nt3v10Ev
  S7110C2_nt(); // tgen
};
//SIG(-1 S7110C2_nt) C1{ vd v1 v2 v3 v4}


 S7110C2_nt ::~S7110C2_nt(){ note_dtor("S7110C2_nt", this);}
void  S7110C2_nt ::v7(){vfunc_called(this, "_ZN10S7110C2_nt2v7Ev");}
void  S7110C2_nt ::v8(){vfunc_called(this, "_ZN10S7110C2_nt2v8Ev");}
void  S7110C2_nt ::v9(){vfunc_called(this, "_ZN10S7110C2_nt2v9Ev");}
void  S7110C2_nt ::v10(){vfunc_called(this, "_ZN10S7110C2_nt3v10Ev");}
S7110C2_nt ::S7110C2_nt(){ note_ctor("S7110C2_nt", this);} // tgen

//skip512 S7110C2_nt

#else // __cplusplus

extern void _ZN10S7110C2_ntC1Ev();
extern void _ZN10S7110C2_ntD1Ev();
Name_Map name_map_S7110C2_nt[] = {
  NSPAIR(_ZN10S7110C2_ntC1Ev),
  NSPAIR(_ZN10S7110C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7110C2_nt[];
extern void _ZN10S7110C2_ntD1Ev();
extern void _ZN10S7110C2_ntD0Ev();
extern void _ZN10S7110C2_nt2v7Ev();
extern void _ZN10S7110C2_nt2v8Ev();
extern void _ZN10S7110C2_nt2v9Ev();
extern void _ZN10S7110C2_nt3v10Ev();
static  VTBL_ENTRY vtc_S7110C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7110C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7110C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7110C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7110C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7110C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7110C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7110C2_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI10S7110C2_nt[];
VTBL_ENTRY *P__ZTI10S7110C2_nt = _ZTI10S7110C2_nt; 
extern  VTBL_ENTRY _ZTV10S7110C2_nt[];
Class_Descriptor cd_S7110C2_nt = {  "S7110C2_nt", // class name
  0,0,//no base classes
  &(vtc_S7110C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7110C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7110C2_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  S7110C1  : S7110C2_nt {
  int s7110c1f0[2];
  void *s7110c1f1[3];
  ::S1566C32 s7110c1f2;
  void *s7110c1f3;
  virtual void  v1(); // _ZN7S7110C12v1Ev
  virtual void  v2(); // _ZN7S7110C12v2Ev
  virtual void  v3(); // _ZN7S7110C12v3Ev
  virtual void  v4(); // _ZN7S7110C12v4Ev
  virtual void  v5(); // _ZN7S7110C12v5Ev
  virtual void  v6(); // _ZN7S7110C12v6Ev
  ~S7110C1(); // tgen
  S7110C1(); // tgen
};
//SIG(1 S7110C1) C1{ BC2{ vd v7 v8 v9 v10} v1 v2 v3 v4 v5 v6 Fi[2] Fp[3] FC3{ m FC4{ Fc[2] Fs FC5{ Fi} Fc[8]}} Fp}


void  S7110C1 ::v1(){vfunc_called(this, "_ZN7S7110C12v1Ev");}
void  S7110C1 ::v2(){vfunc_called(this, "_ZN7S7110C12v2Ev");}
void  S7110C1 ::v3(){vfunc_called(this, "_ZN7S7110C12v3Ev");}
void  S7110C1 ::v4(){vfunc_called(this, "_ZN7S7110C12v4Ev");}
void  S7110C1 ::v5(){vfunc_called(this, "_ZN7S7110C12v5Ev");}
void  S7110C1 ::v6(){vfunc_called(this, "_ZN7S7110C12v6Ev");}
S7110C1 ::~S7110C1(){ note_dtor("S7110C1", this);} // tgen
S7110C1 ::S7110C1(){ note_ctor("S7110C1", this);} // tgen

static void Test_S7110C1()
{
  extern Class_Descriptor cd_S7110C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S7110C1, buf);
    S7110C1 *dp, &lv = *(dp=new (buf) S7110C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S7110C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7110C1)");
    check_base_class_offset(lv, (S7110C2_nt*), 0, "S7110C1");
    check_field_offset(lv, s7110c1f0, ABISELECT(8,4), "S7110C1.s7110c1f0");
    check_field_offset(lv, s7110c1f1, ABISELECT(16,12), "S7110C1.s7110c1f1");
    check_field_offset(lv, s7110c1f2, ABISELECT(40,24), "S7110C1.s7110c1f2");
    check_field_offset(lv, s7110c1f3, ABISELECT(56,40), "S7110C1.s7110c1f3");
    test_class_info(&lv, &cd_S7110C1);
    dp->~S7110C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7110C1(Test_S7110C1, "S7110C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S7110C1C1Ev();
extern void _ZN7S7110C1D1Ev();
Name_Map name_map_S7110C1[] = {
  NSPAIR(_ZN7S7110C1C1Ev),
  NSPAIR(_ZN7S7110C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7110C2_nt;
extern VTBL_ENTRY _ZTI10S7110C2_nt[];
extern  VTBL_ENTRY _ZTV10S7110C2_nt[];
static Base_Class bases_S7110C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7110C2_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 _ZTI7S7110C1[];
extern void _ZN7S7110C1D1Ev();
extern void _ZN7S7110C1D0Ev();
extern void _ZN10S7110C2_nt2v7Ev();
extern void _ZN10S7110C2_nt2v8Ev();
extern void _ZN10S7110C2_nt2v9Ev();
extern void _ZN10S7110C2_nt3v10Ev();
extern void _ZN7S7110C12v1Ev();
extern void _ZN7S7110C12v2Ev();
extern void _ZN7S7110C12v3Ev();
extern void _ZN7S7110C12v4Ev();
extern void _ZN7S7110C12v5Ev();
extern void _ZN7S7110C12v6Ev();
static  VTBL_ENTRY vtc_S7110C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7110C1[0]),
  (VTBL_ENTRY)&_ZN7S7110C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7110C1D0Ev,
  (VTBL_ENTRY)&_ZN10S7110C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7110C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7110C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7110C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN7S7110C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7110C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7110C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7110C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7110C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7110C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S7110C1[];
extern  VTBL_ENTRY _ZTV7S7110C1[];
Class_Descriptor cd_S7110C1 = {  "S7110C1", // class name
  bases_S7110C1, 1,
  &(vtc_S7110C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S7110C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7110C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7151C3  {
  virtual  ~S7151C3(); // _ZN7S7151C3D1Ev
  virtual void  v12(); // _ZN7S7151C33v12Ev
  S7151C3(); // tgen
};
//SIG(-1 S7151C3) C1{ vd v1}


 S7151C3 ::~S7151C3(){ note_dtor("S7151C3", this);}
void  S7151C3 ::v12(){vfunc_called(this, "_ZN7S7151C33v12Ev");}
S7151C3 ::S7151C3(){ note_ctor("S7151C3", this);} // tgen

static void Test_S7151C3()
{
  extern Class_Descriptor cd_S7151C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7151C3, buf);
    S7151C3 *dp, &lv = *(dp=new (buf) S7151C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7151C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7151C3)");
    test_class_info(&lv, &cd_S7151C3);
    dp->~S7151C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7151C3(Test_S7151C3, "S7151C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7151C3C1Ev();
extern void _ZN7S7151C3D1Ev();
Name_Map name_map_S7151C3[] = {
  NSPAIR(_ZN7S7151C3C1Ev),
  NSPAIR(_ZN7S7151C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7151C3[];
extern void _ZN7S7151C3D1Ev();
extern void _ZN7S7151C3D0Ev();
extern void _ZN7S7151C33v12Ev();
static  VTBL_ENTRY vtc_S7151C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7151C3[0]),
  (VTBL_ENTRY)&_ZN7S7151C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7151C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7151C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S7151C3[];
extern  VTBL_ENTRY _ZTV7S7151C3[];
Class_Descriptor cd_S7151C3 = {  "S7151C3", // class name
  0,0,//no base classes
  &(vtc_S7151C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7151C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7151C3),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  S7151C2  {
  ::S7151C3 s7151c2f0;
  virtual  ~S7151C2(); // _ZN7S7151C2D1Ev
  virtual void  v8(); // _ZN7S7151C22v8Ev
  virtual void  v9(); // _ZN7S7151C22v9Ev
  virtual void  v10(); // _ZN7S7151C23v10Ev
  virtual void  v11(); // _ZN7S7151C23v11Ev
  S7151C2(); // tgen
};
//SIG(-1 S7151C2) C1{ vd v1 v2 v3 v4 FC2{ vd v5}}


 S7151C2 ::~S7151C2(){ note_dtor("S7151C2", this);}
void  S7151C2 ::v8(){vfunc_called(this, "_ZN7S7151C22v8Ev");}
void  S7151C2 ::v9(){vfunc_called(this, "_ZN7S7151C22v9Ev");}
void  S7151C2 ::v10(){vfunc_called(this, "_ZN7S7151C23v10Ev");}
void  S7151C2 ::v11(){vfunc_called(this, "_ZN7S7151C23v11Ev");}
S7151C2 ::S7151C2(){ note_ctor("S7151C2", this);} // tgen

static void Test_S7151C2()
{
  extern Class_Descriptor cd_S7151C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7151C2, buf);
    S7151C2 *dp, &lv = *(dp=new (buf) S7151C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7151C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7151C2)");
    check_field_offset(lv, s7151c2f0, ABISELECT(8,4), "S7151C2.s7151c2f0");
    test_class_info(&lv, &cd_S7151C2);
    dp->~S7151C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7151C2(Test_S7151C2, "S7151C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7151C2C1Ev();
extern void _ZN7S7151C2D1Ev();
Name_Map name_map_S7151C2[] = {
  NSPAIR(_ZN7S7151C2C1Ev),
  NSPAIR(_ZN7S7151C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7151C2[];
extern void _ZN7S7151C2D1Ev();
extern void _ZN7S7151C2D0Ev();
extern void _ZN7S7151C22v8Ev();
extern void _ZN7S7151C22v9Ev();
extern void _ZN7S7151C23v10Ev();
extern void _ZN7S7151C23v11Ev();
static  VTBL_ENTRY vtc_S7151C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7151C2[0]),
  (VTBL_ENTRY)&_ZN7S7151C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7151C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7151C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7151C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7151C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7151C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S7151C2[];
extern  VTBL_ENTRY _ZTV7S7151C2[];
Class_Descriptor cd_S7151C2 = {  "S7151C2", // class name
  0,0,//no base classes
  &(vtc_S7151C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7151C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7151C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7151C4  : S7151C3 {
  ::S7151C3 s7151c4f0;
  virtual  ~S7151C4(); // _ZN7S7151C4D1Ev
  virtual void  v13(); // _ZN7S7151C43v13Ev
  virtual void  v14(); // _ZN7S7151C43v14Ev
  S7151C4(); // tgen
};
//SIG(-1 S7151C4) C1{ BC2{ vd v3} vd v1 v2 FC2}


 S7151C4 ::~S7151C4(){ note_dtor("S7151C4", this);}
void  S7151C4 ::v13(){vfunc_called(this, "_ZN7S7151C43v13Ev");}
void  S7151C4 ::v14(){vfunc_called(this, "_ZN7S7151C43v14Ev");}
S7151C4 ::S7151C4(){ note_ctor("S7151C4", this);} // tgen

static void Test_S7151C4()
{
  extern Class_Descriptor cd_S7151C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7151C4, buf);
    S7151C4 *dp, &lv = *(dp=new (buf) S7151C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7151C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7151C4)");
    check_base_class_offset(lv, (S7151C3*), 0, "S7151C4");
    check_field_offset(lv, s7151c4f0, ABISELECT(8,4), "S7151C4.s7151c4f0");
    test_class_info(&lv, &cd_S7151C4);
    dp->~S7151C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7151C4(Test_S7151C4, "S7151C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7151C4C1Ev();
extern void _ZN7S7151C4D1Ev();
Name_Map name_map_S7151C4[] = {
  NSPAIR(_ZN7S7151C4C1Ev),
  NSPAIR(_ZN7S7151C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7151C3;
extern VTBL_ENTRY _ZTI7S7151C3[];
extern  VTBL_ENTRY _ZTV7S7151C3[];
static Base_Class bases_S7151C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7151C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S7151C4[];
extern void _ZN7S7151C4D1Ev();
extern void _ZN7S7151C4D0Ev();
extern void _ZN7S7151C33v12Ev();
extern void _ZN7S7151C43v13Ev();
extern void _ZN7S7151C43v14Ev();
static  VTBL_ENTRY vtc_S7151C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7151C4[0]),
  (VTBL_ENTRY)&_ZN7S7151C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7151C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7151C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7151C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7151C43v14Ev,
};
extern VTBL_ENTRY _ZTI7S7151C4[];
extern  VTBL_ENTRY _ZTV7S7151C4[];
Class_Descriptor cd_S7151C4 = {  "S7151C4", // class name
  bases_S7151C4, 1,
  &(vtc_S7151C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7151C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7151C4),7, //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  S7151C1  : S7151C2 , S7151C4 {
  void *s7151c1f0;
  int s7151c1f1;
  virtual  ~S7151C1(); // _ZN7S7151C1D1Ev
  virtual void  v1(); // _ZN7S7151C12v1Ev
  virtual void  v2(); // _ZN7S7151C12v2Ev
  virtual void  v3(); // _ZN7S7151C12v3Ev
  virtual void  v4(); // _ZN7S7151C12v4Ev
  virtual void  v5(); // _ZN7S7151C12v5Ev
  virtual void  v6(); // _ZN7S7151C12v6Ev
  virtual void  v7(); // _ZN7S7151C12v7Ev
  S7151C1(); // tgen
};
//SIG(1 S7151C1) C1{ BC2{ vd v8 v9 v10 v11 FC3{ vd v12}} BC4{ BC3 vd v13 v14 FC3} vd v1 v2 v3 v4 v5 v6 v7 Fp Fi}


 S7151C1 ::~S7151C1(){ note_dtor("S7151C1", this);}
void  S7151C1 ::v1(){vfunc_called(this, "_ZN7S7151C12v1Ev");}
void  S7151C1 ::v2(){vfunc_called(this, "_ZN7S7151C12v2Ev");}
void  S7151C1 ::v3(){vfunc_called(this, "_ZN7S7151C12v3Ev");}
void  S7151C1 ::v4(){vfunc_called(this, "_ZN7S7151C12v4Ev");}
void  S7151C1 ::v5(){vfunc_called(this, "_ZN7S7151C12v5Ev");}
void  S7151C1 ::v6(){vfunc_called(this, "_ZN7S7151C12v6Ev");}
void  S7151C1 ::v7(){vfunc_called(this, "_ZN7S7151C12v7Ev");}
S7151C1 ::S7151C1(){ note_ctor("S7151C1", this);} // tgen

static void Test_S7151C1()
{
  extern Class_Descriptor cd_S7151C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7151C1, buf);
    S7151C1 *dp, &lv = *(dp=new (buf) S7151C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7151C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7151C1)");
    check_base_class_offset(lv, (S7151C2*), 0, "S7151C1");
    check_base_class_offset(lv, (S7151C3*)(S7151C4*), ABISELECT(16,8), "S7151C1");
    check_base_class_offset(lv, (S7151C4*), ABISELECT(16,8), "S7151C1");
    check_field_offset(lv, s7151c1f0, ABISELECT(32,16), "S7151C1.s7151c1f0");
    check_field_offset(lv, s7151c1f1, ABISELECT(40,20), "S7151C1.s7151c1f1");
    test_class_info(&lv, &cd_S7151C1);
    dp->~S7151C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7151C1(Test_S7151C1, "S7151C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7151C1C1Ev();
extern void _ZN7S7151C1D1Ev();
Name_Map name_map_S7151C1[] = {
  NSPAIR(_ZN7S7151C1C1Ev),
  NSPAIR(_ZN7S7151C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7151C2;
extern VTBL_ENTRY _ZTI7S7151C2[];
extern  VTBL_ENTRY _ZTV7S7151C2[];
extern Class_Descriptor cd_S7151C3;
extern VTBL_ENTRY _ZTI7S7151C3[];
extern  VTBL_ENTRY _ZTV7S7151C3[];
extern Class_Descriptor cd_S7151C4;
extern VTBL_ENTRY _ZTI7S7151C4[];
extern  VTBL_ENTRY _ZTV7S7151C4[];
static Base_Class bases_S7151C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7151C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7151C3,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7151C4,    ABISELECT(16,8), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7151C1[];
extern void _ZN7S7151C1D1Ev();
extern void _ZN7S7151C1D0Ev();
extern void _ZN7S7151C22v8Ev();
extern void _ZN7S7151C22v9Ev();
extern void _ZN7S7151C23v10Ev();
extern void _ZN7S7151C23v11Ev();
extern void _ZN7S7151C12v1Ev();
extern void _ZN7S7151C12v2Ev();
extern void _ZN7S7151C12v3Ev();
extern void _ZN7S7151C12v4Ev();
extern void _ZN7S7151C12v5Ev();
extern void _ZN7S7151C12v6Ev();
extern void _ZN7S7151C12v7Ev();
extern void ABISELECT(_ZThn16_N7S7151C1D1Ev,_ZThn8_N7S7151C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S7151C1D0Ev,_ZThn8_N7S7151C1D0Ev)();
extern void _ZN7S7151C33v12Ev();
extern void _ZN7S7151C43v13Ev();
extern void _ZN7S7151C43v14Ev();
static  VTBL_ENTRY vtc_S7151C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7151C1[0]),
  (VTBL_ENTRY)&_ZN7S7151C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7151C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7151C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7151C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7151C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7151C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7151C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7151C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7151C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7151C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7151C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7151C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7151C12v7Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7151C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7151C1D1Ev,_ZThn8_N7S7151C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7151C1D0Ev,_ZThn8_N7S7151C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7151C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7151C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7151C43v14Ev,
};
extern VTBL_ENTRY _ZTI7S7151C1[];
extern  VTBL_ENTRY _ZTV7S7151C1[];
Class_Descriptor cd_S7151C1 = {  "S7151C1", // class name
  bases_S7151C1, 3,
  &(vtc_S7151C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7151C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7151C1),22, //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  S6082C3  {
  void *s6082c3f0;
  short s6082c3f1;
  long double s6082c3f2;
  virtual void  v1(); // _ZN7S6082C32v1Ev
  ~S6082C3(); // tgen
  S6082C3(); // tgen
};
//SIG(-1 S6082C3) C1{ v1 Fp Fs FD}


void  S6082C3 ::v1(){vfunc_called(this, "_ZN7S6082C32v1Ev");}
S6082C3 ::~S6082C3(){ note_dtor("S6082C3", this);} // tgen
S6082C3 ::S6082C3(){ note_ctor("S6082C3", this);} // tgen

static void Test_S6082C3()
{
  extern Class_Descriptor cd_S6082C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S6082C3, buf);
    S6082C3 *dp, &lv = *(dp=new (buf) S6082C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S6082C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6082C3)");
    check_field_offset(lv, s6082c3f0, ABISELECT(8,4), "S6082C3.s6082c3f0");
    check_field_offset(lv, s6082c3f1, ABISELECT(16,8), "S6082C3.s6082c3f1");
    check_field_offset(lv, s6082c3f2, ABISELECT(32,12), "S6082C3.s6082c3f2");
    test_class_info(&lv, &cd_S6082C3);
    dp->~S6082C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6082C3(Test_S6082C3, "S6082C3", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S6082C3C1Ev();
extern void _ZN7S6082C3D1Ev();
Name_Map name_map_S6082C3[] = {
  NSPAIR(_ZN7S6082C3C1Ev),
  NSPAIR(_ZN7S6082C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6082C3[];
extern void _ZN7S6082C32v1Ev();
static  VTBL_ENTRY vtc_S6082C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6082C3[0]),
  (VTBL_ENTRY)&_ZN7S6082C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S6082C3[];
extern  VTBL_ENTRY _ZTV7S6082C3[];
Class_Descriptor cd_S6082C3 = {  "S6082C3", // class name
  0,0,//no base classes
  &(vtc_S6082C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S6082C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6082C3),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  S6082C4  : virtual S6082C3 {
  void *s6082c4f0;
  ::S19043C5 s6082c4f1;
  void *s6082c4f2[2];
  ~S6082C4(); // tgen
  S6082C4(); // tgen
};
//SIG(-1 S6082C4) C1{ VBC2{ v1 Fp Fs FD} Fp FC3{ v2 Fp[2] FD[10] Fp Fs Fp[2]} Fp[2]}


S6082C4 ::~S6082C4(){ note_dtor("S6082C4", this);} // tgen
S6082C4 ::S6082C4(){ note_ctor("S6082C4", this);} // tgen

static void Test_S6082C4()
{
  extern Class_Descriptor cd_S6082C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,48)];
    init_test(&cd_S6082C4, buf);
    S6082C4 *dp, &lv = *(dp=new (buf) S6082C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,188), "sizeof(S6082C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6082C4)");
    check_base_class_offset(lv, (S6082C3*), ABISELECT(256,164), "S6082C4");
    check_field_offset(lv, s6082c4f0, ABISELECT(8,4), "S6082C4.s6082c4f0");
    check_field_offset(lv, s6082c4f1, ABISELECT(16,8), "S6082C4.s6082c4f1");
    check_field_offset(lv, s6082c4f2, ABISELECT(240,156), "S6082C4.s6082c4f2");
    test_class_info(&lv, &cd_S6082C4);
    dp->~S6082C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6082C4(Test_S6082C4, "S6082C4", ABISELECT(304,188));

#else // __cplusplus

extern void _ZN7S6082C4C1Ev();
extern void _ZN7S6082C4D1Ev();
Name_Map name_map_S6082C4[] = {
  NSPAIR(_ZN7S6082C4C1Ev),
  NSPAIR(_ZN7S6082C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6082C3;
extern VTBL_ENTRY _ZTI7S6082C3[];
extern  VTBL_ENTRY _ZTV7S6082C3[];
static Base_Class bases_S6082C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6082C3,    ABISELECT(256,164), //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 _ZTI7S6082C4[];
extern void _ZN7S6082C32v1Ev();
static  VTBL_ENTRY vtc_S6082C4[] = {
  ABISELECT(256,164),
  0,
  (VTBL_ENTRY)&(_ZTI7S6082C4[0]),
  0,
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI7S6082C4[0]),
  (VTBL_ENTRY)&_ZN7S6082C32v1Ev,
};
extern VTBL_ENTRY _ZTV7S6082C4[];
static  VTT_ENTRY vtt_S6082C4[] = {
  {&(_ZTV7S6082C4[3]),  3,7},
  {&(_ZTV7S6082C4[6]),  6,7},
};
extern VTBL_ENTRY _ZTI7S6082C4[];
extern  VTBL_ENTRY _ZTV7S6082C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6082C4[];
Class_Descriptor cd_S6082C4 = {  "S6082C4", // class name
  bases_S6082C4, 1,
  &(vtc_S6082C4[0]), // expected_vtbl_contents
  &(vtt_S6082C4[0]), // expected_vtt_contents
  ABISELECT(304,188), // object size
  NSPAIRA(_ZTI7S6082C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6082C4),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6082C4),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  S6082C1  : S3600C29_nt , virtual S6082C3 , virtual S6082C4 {
  void *s6082c1f0;
  char s6082c1f1:4;
  ~S6082C1(); // tgen
  S6082C1(); // tgen
};
//SIG(1 S6082C1) C1{ BC2{ m Fp} VBC3{ v1 Fp Fs FD} VBC4{ VBC3 Fp FC5{ v2 Fp[2] FD[10] Fp Fs Fp[2]} Fp[2]} Fp Fc:4}


S6082C1 ::~S6082C1(){ note_dtor("S6082C1", this);} // tgen
S6082C1 ::S6082C1(){ note_ctor("S6082C1", this);} // tgen

static void Test_S6082C1()
{
  extern Class_Descriptor cd_S6082C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,52)];
    init_test(&cd_S6082C1, buf);
    S6082C1 *dp, &lv = *(dp=new (buf) S6082C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,204), "sizeof(S6082C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6082C1)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S6082C1");
    check_base_class_offset(lv, (S6082C3*), ABISELECT(32,16), "S6082C1");
    check_base_class_offset(lv, (S6082C3*)(S6082C4*), ABISELECT(32,16), "S6082C1");
    check_base_class_offset(lv, (S6082C4*), ABISELECT(80,40), "S6082C1");
    check_field_offset(lv, s6082c1f0, ABISELECT(16,8), "S6082C1.s6082c1f0");
    set_bf_and_test(lv, s6082c1f1, ABISELECT(24,12), 0, 4, 1, "S6082C1");
    set_bf_and_test(lv, s6082c1f1, ABISELECT(24,12), 0, 4, hide_sll(1LL<<3), "S6082C1");
    test_class_info(&lv, &cd_S6082C1);
    dp->~S6082C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6082C1(Test_S6082C1, "S6082C1", ABISELECT(336,204));

#else // __cplusplus

extern void _ZN7S6082C1C1Ev();
extern void _ZN7S6082C1D1Ev();
Name_Map name_map_S6082C1[] = {
  NSPAIR(_ZN7S6082C1C1Ev),
  NSPAIR(_ZN7S6082C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S6082C3;
extern VTBL_ENTRY _ZTI7S6082C3[];
extern  VTBL_ENTRY _ZTV7S6082C3[];
extern Class_Descriptor cd_S6082C4;
extern VTBL_ENTRY _ZTI7S6082C4[];
extern  VTBL_ENTRY _ZTV7S6082C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6082C4[];
static Base_Class bases_S6082C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6082C3,    ABISELECT(32,16), //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},
  {&cd_S6082C4,    ABISELECT(80,40), //bcp->offset
    8, //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 _ZTI7S6082C1[];
extern void _ZN7S6082C32v1Ev();
static  VTBL_ENTRY vtc_S6082C1[] = {
  ABISELECT(80,40),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6082C1[0]),
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6082C1[0]),
  (VTBL_ENTRY)&_ZN7S6082C32v1Ev,
  ABISELECT(-48,-24),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S6082C1[0]),
};
extern VTBL_ENTRY _ZTV7S6082C1[];
static  VTBL_ENTRY _tg__ZTV7S6082C4__7S6082C1[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S6082C4[0]),
};
extern void _ZN7S6082C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6082C3__7S6082C4__7S6082C1[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI7S6082C4[0]),
  (VTBL_ENTRY)&_ZN7S6082C32v1Ev,
};
static  VTT_ENTRY vtt_S6082C1[] = {
  {&(_ZTV7S6082C1[4]),  4,11},
  {&(_ZTV7S6082C1[7]),  7,11},
  {&(_ZTV7S6082C1[11]),  11,11},
  {&(_tg__ZTV7S6082C4__7S6082C1[3]),  3,3},
  {&(_tg__ZTV7S6082C3__7S6082C4__7S6082C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6082C1[];
extern  VTBL_ENTRY _ZTV7S6082C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6082C1[];
Class_Descriptor cd_S6082C1 = {  "S6082C1", // class name
  bases_S6082C1, 3,
  &(vtc_S6082C1[0]), // expected_vtbl_contents
  &(vtt_S6082C1[0]), // expected_vtt_contents
  ABISELECT(336,204), // object size
  NSPAIRA(_ZTI7S6082C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6082C1),11, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6082C1),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  S3051C4  {
  ::S1566C32 s3051c4f0;
  int s3051c4f1;
  void *s3051c4f2;
  void  mf3051c4(); // _ZN7S3051C48mf3051c4Ev
};
//SIG(-1 S3051C4) C1{ m FC2{ m FC3{ Fc[2] Fs FC4{ Fi} Fc[8]}} Fi Fp}


void  S3051C4 ::mf3051c4(){}

static void Test_S3051C4()
{
  {
    init_simple_test("S3051C4");
    S3051C4 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S3051C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3051C4)");
    check_field_offset(lv, s3051c4f0, 0, "S3051C4.s3051c4f0");
    check_field_offset(lv, s3051c4f1, 16, "S3051C4.s3051c4f1");
    check_field_offset(lv, s3051c4f2, ABISELECT(24,20), "S3051C4.s3051c4f2");
  }
}
static Arrange_To_Call_Me vS3051C4(Test_S3051C4, "S3051C4", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3051C3  {
  ::S3051C4 s3051c3f0;
  virtual void  v2(); // _ZN7S3051C32v2Ev
  ~S3051C3(); // tgen
  S3051C3(); // tgen
};
//SIG(-1 S3051C3) C1{ v1 FC2{ m FC3{ m FC4{ Fc[2] Fs FC5{ Fi} Fc[8]}} Fi Fp}}


void  S3051C3 ::v2(){vfunc_called(this, "_ZN7S3051C32v2Ev");}
S3051C3 ::~S3051C3(){ note_dtor("S3051C3", this);} // tgen
S3051C3 ::S3051C3(){ note_ctor("S3051C3", this);} // tgen

static void Test_S3051C3()
{
  extern Class_Descriptor cd_S3051C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S3051C3, buf);
    S3051C3 *dp, &lv = *(dp=new (buf) S3051C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S3051C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3051C3)");
    check_field_offset(lv, s3051c3f0, ABISELECT(8,4), "S3051C3.s3051c3f0");
    test_class_info(&lv, &cd_S3051C3);
    dp->~S3051C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3051C3(Test_S3051C3, "S3051C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S3051C3C1Ev();
extern void _ZN7S3051C3D1Ev();
Name_Map name_map_S3051C3[] = {
  NSPAIR(_ZN7S3051C3C1Ev),
  NSPAIR(_ZN7S3051C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3051C3[];
extern void _ZN7S3051C32v2Ev();
static  VTBL_ENTRY vtc_S3051C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3051C3[0]),
  (VTBL_ENTRY)&_ZN7S3051C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3051C3[];
extern  VTBL_ENTRY _ZTV7S3051C3[];
Class_Descriptor cd_S3051C3 = {  "S3051C3", // class name
  0,0,//no base classes
  &(vtc_S3051C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S3051C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3051C3),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  S3051C2  : S3051C3 {
  int s3051c2f0[3];
  virtual  ~S3051C2(); // _ZN7S3051C2D1Ev
  virtual void  v3(); // _ZN7S3051C22v3Ev
  virtual void  v4(); // _ZN7S3051C22v4Ev
  virtual void  v5(); // _ZN7S3051C22v5Ev
  virtual void  v6(); // _ZN7S3051C22v6Ev
  S3051C2(); // tgen
};
//SIG(-1 S3051C2) C1{ BC2{ v5 FC3{ m FC4{ m FC5{ Fc[2] Fs FC6{ Fi} Fc[8]}} Fi Fp}} vd v1 v2 v3 v4 Fi[3]}


 S3051C2 ::~S3051C2(){ note_dtor("S3051C2", this);}
void  S3051C2 ::v3(){vfunc_called(this, "_ZN7S3051C22v3Ev");}
void  S3051C2 ::v4(){vfunc_called(this, "_ZN7S3051C22v4Ev");}
void  S3051C2 ::v5(){vfunc_called(this, "_ZN7S3051C22v5Ev");}
void  S3051C2 ::v6(){vfunc_called(this, "_ZN7S3051C22v6Ev");}
S3051C2 ::S3051C2(){ note_ctor("S3051C2", this);} // tgen

static void Test_S3051C2()
{
  extern Class_Descriptor cd_S3051C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S3051C2, buf);
    S3051C2 *dp, &lv = *(dp=new (buf) S3051C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S3051C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3051C2)");
    check_base_class_offset(lv, (S3051C3*), 0, "S3051C2");
    check_field_offset(lv, s3051c2f0, ABISELECT(40,28), "S3051C2.s3051c2f0");
    test_class_info(&lv, &cd_S3051C2);
    dp->~S3051C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3051C2(Test_S3051C2, "S3051C2", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S3051C2C1Ev();
extern void _ZN7S3051C2D1Ev();
Name_Map name_map_S3051C2[] = {
  NSPAIR(_ZN7S3051C2C1Ev),
  NSPAIR(_ZN7S3051C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3051C3;
extern VTBL_ENTRY _ZTI7S3051C3[];
extern  VTBL_ENTRY _ZTV7S3051C3[];
static Base_Class bases_S3051C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3051C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S3051C2[];
extern void _ZN7S3051C32v2Ev();
extern void _ZN7S3051C2D1Ev();
extern void _ZN7S3051C2D0Ev();
extern void _ZN7S3051C22v3Ev();
extern void _ZN7S3051C22v4Ev();
extern void _ZN7S3051C22v5Ev();
extern void _ZN7S3051C22v6Ev();
static  VTBL_ENTRY vtc_S3051C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3051C2[0]),
  (VTBL_ENTRY)&_ZN7S3051C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3051C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3051C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3051C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3051C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3051C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3051C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S3051C2[];
extern  VTBL_ENTRY _ZTV7S3051C2[];
Class_Descriptor cd_S3051C2 = {  "S3051C2", // class name
  bases_S3051C2, 1,
  &(vtc_S3051C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S3051C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3051C2),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  S3051C1  : S3051C2 {
  void *s3051c1f0;
  virtual void  v1(); // _ZN7S3051C12v1Ev
  ~S3051C1(); // tgen
  S3051C1(); // tgen
};
//SIG(1 S3051C1) C1{ BC2{ BC3{ v2 FC4{ m FC5{ m FC6{ Fc[2] Fs FC7{ Fi} Fc[8]}} Fi Fp}} vd v3 v4 v5 v6 Fi[3]} v1 Fp}


void  S3051C1 ::v1(){vfunc_called(this, "_ZN7S3051C12v1Ev");}
S3051C1 ::~S3051C1(){ note_dtor("S3051C1", this);} // tgen
S3051C1 ::S3051C1(){ note_ctor("S3051C1", this);} // tgen

static void Test_S3051C1()
{
  extern Class_Descriptor cd_S3051C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S3051C1, buf);
    S3051C1 *dp, &lv = *(dp=new (buf) S3051C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S3051C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3051C1)");
    check_base_class_offset(lv, (S3051C3*)(S3051C2*), 0, "S3051C1");
    check_base_class_offset(lv, (S3051C2*), 0, "S3051C1");
    check_field_offset(lv, s3051c1f0, ABISELECT(56,40), "S3051C1.s3051c1f0");
    test_class_info(&lv, &cd_S3051C1);
    dp->~S3051C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3051C1(Test_S3051C1, "S3051C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S3051C1C1Ev();
extern void _ZN7S3051C1D1Ev();
Name_Map name_map_S3051C1[] = {
  NSPAIR(_ZN7S3051C1C1Ev),
  NSPAIR(_ZN7S3051C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3051C3;
extern VTBL_ENTRY _ZTI7S3051C3[];
extern  VTBL_ENTRY _ZTV7S3051C3[];
extern Class_Descriptor cd_S3051C2;
extern VTBL_ENTRY _ZTI7S3051C2[];
extern  VTBL_ENTRY _ZTV7S3051C2[];
static Base_Class bases_S3051C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3051C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3051C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3051C1[];
extern void _ZN7S3051C32v2Ev();
extern void _ZN7S3051C1D1Ev();
extern void _ZN7S3051C1D0Ev();
extern void _ZN7S3051C22v3Ev();
extern void _ZN7S3051C22v4Ev();
extern void _ZN7S3051C22v5Ev();
extern void _ZN7S3051C22v6Ev();
extern void _ZN7S3051C12v1Ev();
static  VTBL_ENTRY vtc_S3051C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3051C1[0]),
  (VTBL_ENTRY)&_ZN7S3051C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3051C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3051C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3051C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3051C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3051C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3051C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3051C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3051C1[];
extern  VTBL_ENTRY _ZTV7S3051C1[];
Class_Descriptor cd_S3051C1 = {  "S3051C1", // class name
  bases_S3051C1, 2,
  &(vtc_S3051C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S3051C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3051C1),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  S3340C3  {
  void *s3340c3f0;
  long s3340c3f1[6];
  char s3340c3f2:5;
  virtual void  v6(); // _ZN7S3340C32v6Ev
  virtual void  v7(); // _ZN7S3340C32v7Ev
  virtual void  v8(); // _ZN7S3340C32v8Ev
  virtual void  v9(); // _ZN7S3340C32v9Ev
  ~S3340C3(); // tgen
  S3340C3(); // tgen
};
//SIG(-1 S3340C3) C1{ v1 v2 v3 v4 Fp Fl[6] Fc:5}


void  S3340C3 ::v6(){vfunc_called(this, "_ZN7S3340C32v6Ev");}
void  S3340C3 ::v7(){vfunc_called(this, "_ZN7S3340C32v7Ev");}
void  S3340C3 ::v8(){vfunc_called(this, "_ZN7S3340C32v8Ev");}
void  S3340C3 ::v9(){vfunc_called(this, "_ZN7S3340C32v9Ev");}
S3340C3 ::~S3340C3(){ note_dtor("S3340C3", this);} // tgen
S3340C3 ::S3340C3(){ note_ctor("S3340C3", this);} // tgen

static void Test_S3340C3()
{
  extern Class_Descriptor cd_S3340C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S3340C3, buf);
    S3340C3 *dp, &lv = *(dp=new (buf) S3340C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S3340C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3340C3)");
    check_field_offset(lv, s3340c3f0, ABISELECT(8,4), "S3340C3.s3340c3f0");
    check_field_offset(lv, s3340c3f1, ABISELECT(16,8), "S3340C3.s3340c3f1");
    set_bf_and_test(lv, s3340c3f2, ABISELECT(64,32), 0, 5, 1, "S3340C3");
    set_bf_and_test(lv, s3340c3f2, ABISELECT(64,32), 0, 5, hide_sll(1LL<<4), "S3340C3");
    test_class_info(&lv, &cd_S3340C3);
    dp->~S3340C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3340C3(Test_S3340C3, "S3340C3", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S3340C3C1Ev();
extern void _ZN7S3340C3D1Ev();
Name_Map name_map_S3340C3[] = {
  NSPAIR(_ZN7S3340C3C1Ev),
  NSPAIR(_ZN7S3340C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3340C3[];
extern void _ZN7S3340C32v6Ev();
extern void _ZN7S3340C32v7Ev();
extern void _ZN7S3340C32v8Ev();
extern void _ZN7S3340C32v9Ev();
static  VTBL_ENTRY vtc_S3340C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3340C3[0]),
  (VTBL_ENTRY)&_ZN7S3340C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3340C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3340C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3340C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S3340C3[];
extern  VTBL_ENTRY _ZTV7S3340C3[];
Class_Descriptor cd_S3340C3 = {  "S3340C3", // class name
  0,0,//no base classes
  &(vtc_S3340C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S3340C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3340C3),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  S3340C2  : S3340C3 {
  void *s3340c2f0[11];
  char s3340c2f1[4];
  __tsi64 s3340c2f2;
  virtual void  v10(); // _ZN7S3340C23v10Ev
  virtual void  v11(); // _ZN7S3340C23v11Ev
  virtual void  v12(); // _ZN7S3340C23v12Ev
  virtual void  v13(); // _ZN7S3340C23v13Ev
  ~S3340C2(); // tgen
  S3340C2(); // tgen
};
//SIG(-1 S3340C2) C1{ BC2{ v5 v6 v7 v8 Fp Fl[6] Fc:5} v1 v2 v3 v4 Fp[11] Fc[4] FL}


void  S3340C2 ::v10(){vfunc_called(this, "_ZN7S3340C23v10Ev");}
void  S3340C2 ::v11(){vfunc_called(this, "_ZN7S3340C23v11Ev");}
void  S3340C2 ::v12(){vfunc_called(this, "_ZN7S3340C23v12Ev");}
void  S3340C2 ::v13(){vfunc_called(this, "_ZN7S3340C23v13Ev");}
S3340C2 ::~S3340C2(){ note_dtor("S3340C2", this);} // tgen
S3340C2 ::S3340C2(){ note_ctor("S3340C2", this);} // tgen

static void Test_S3340C2()
{
  extern Class_Descriptor cd_S3340C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,24)];
    init_test(&cd_S3340C2, buf);
    S3340C2 *dp, &lv = *(dp=new (buf) S3340C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,92), "sizeof(S3340C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3340C2)");
    check_base_class_offset(lv, (S3340C3*), 0, "S3340C2");
    check_field_offset(lv, s3340c2f0, ABISELECT(72,36), "S3340C2.s3340c2f0");
    check_field_offset(lv, s3340c2f1, ABISELECT(160,80), "S3340C2.s3340c2f1");
    check_field_offset(lv, s3340c2f2, ABISELECT(168,84), "S3340C2.s3340c2f2");
    test_class_info(&lv, &cd_S3340C2);
    dp->~S3340C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3340C2(Test_S3340C2, "S3340C2", ABISELECT(176,92));

#else // __cplusplus

extern void _ZN7S3340C2C1Ev();
extern void _ZN7S3340C2D1Ev();
Name_Map name_map_S3340C2[] = {
  NSPAIR(_ZN7S3340C2C1Ev),
  NSPAIR(_ZN7S3340C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3340C3;
extern VTBL_ENTRY _ZTI7S3340C3[];
extern  VTBL_ENTRY _ZTV7S3340C3[];
static Base_Class bases_S3340C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3340C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S3340C2[];
extern void _ZN7S3340C32v6Ev();
extern void _ZN7S3340C32v7Ev();
extern void _ZN7S3340C32v8Ev();
extern void _ZN7S3340C32v9Ev();
extern void _ZN7S3340C23v10Ev();
extern void _ZN7S3340C23v11Ev();
extern void _ZN7S3340C23v12Ev();
extern void _ZN7S3340C23v13Ev();
static  VTBL_ENTRY vtc_S3340C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3340C2[0]),
  (VTBL_ENTRY)&_ZN7S3340C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3340C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3340C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3340C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3340C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3340C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3340C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3340C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S3340C2[];
extern  VTBL_ENTRY _ZTV7S3340C2[];
Class_Descriptor cd_S3340C2 = {  "S3340C2", // class name
  bases_S3340C2, 1,
  &(vtc_S3340C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,92), // object size
  NSPAIRA(_ZTI7S3340C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3340C2),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3340C1  : S3340C2 {
  int s3340c1f0;
  virtual void  v1(); // _ZN7S3340C12v1Ev
  virtual void  v2(); // _ZN7S3340C12v2Ev
  virtual void  v3(); // _ZN7S3340C12v3Ev
  virtual void  v4(); // _ZN7S3340C12v4Ev
  virtual void  v5(); // _ZN7S3340C12v5Ev
  ~S3340C1(); // tgen
  S3340C1(); // tgen
};
//SIG(1 S3340C1) C1{ BC2{ BC3{ v6 v7 v8 v9 Fp Fl[6] Fc:5} v10 v11 v12 v13 Fp[11] Fc[4] FL} v1 v2 v3 v4 v5 Fi}


void  S3340C1 ::v1(){vfunc_called(this, "_ZN7S3340C12v1Ev");}
void  S3340C1 ::v2(){vfunc_called(this, "_ZN7S3340C12v2Ev");}
void  S3340C1 ::v3(){vfunc_called(this, "_ZN7S3340C12v3Ev");}
void  S3340C1 ::v4(){vfunc_called(this, "_ZN7S3340C12v4Ev");}
void  S3340C1 ::v5(){vfunc_called(this, "_ZN7S3340C12v5Ev");}
S3340C1 ::~S3340C1(){ note_dtor("S3340C1", this);} // tgen
S3340C1 ::S3340C1(){ note_ctor("S3340C1", this);} // tgen

static void Test_S3340C1()
{
  extern Class_Descriptor cd_S3340C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,25)];
    init_test(&cd_S3340C1, buf);
    S3340C1 *dp, &lv = *(dp=new (buf) S3340C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,96), "sizeof(S3340C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3340C1)");
    check_base_class_offset(lv, (S3340C3*)(S3340C2*), 0, "S3340C1");
    check_base_class_offset(lv, (S3340C2*), 0, "S3340C1");
    check_field_offset(lv, s3340c1f0, ABISELECT(176,92), "S3340C1.s3340c1f0");
    test_class_info(&lv, &cd_S3340C1);
    dp->~S3340C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3340C1(Test_S3340C1, "S3340C1", ABISELECT(184,96));

#else // __cplusplus

extern void _ZN7S3340C1C1Ev();
extern void _ZN7S3340C1D1Ev();
Name_Map name_map_S3340C1[] = {
  NSPAIR(_ZN7S3340C1C1Ev),
  NSPAIR(_ZN7S3340C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3340C3;
extern VTBL_ENTRY _ZTI7S3340C3[];
extern  VTBL_ENTRY _ZTV7S3340C3[];
extern Class_Descriptor cd_S3340C2;
extern VTBL_ENTRY _ZTI7S3340C2[];
extern  VTBL_ENTRY _ZTV7S3340C2[];
static Base_Class bases_S3340C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3340C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3340C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3340C1[];
extern void _ZN7S3340C32v6Ev();
extern void _ZN7S3340C32v7Ev();
extern void _ZN7S3340C32v8Ev();
extern void _ZN7S3340C32v9Ev();
extern void _ZN7S3340C23v10Ev();
extern void _ZN7S3340C23v11Ev();
extern void _ZN7S3340C23v12Ev();
extern void _ZN7S3340C23v13Ev();
extern void _ZN7S3340C12v1Ev();
extern void _ZN7S3340C12v2Ev();
extern void _ZN7S3340C12v3Ev();
extern void _ZN7S3340C12v4Ev();
extern void _ZN7S3340C12v5Ev();
static  VTBL_ENTRY vtc_S3340C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3340C1[0]),
  (VTBL_ENTRY)&_ZN7S3340C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3340C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3340C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3340C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3340C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3340C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3340C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3340C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3340C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3340C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3340C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3340C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3340C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S3340C1[];
extern  VTBL_ENTRY _ZTV7S3340C1[];
Class_Descriptor cd_S3340C1 = {  "S3340C1", // class name
  bases_S3340C1, 2,
  &(vtc_S3340C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,96), // object size
  NSPAIRA(_ZTI7S3340C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3340C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7524C3  {
  virtual void  v1(); // _ZN7S7524C32v1Ev
  ~S7524C3(); // tgen
  S7524C3(); // tgen
};
//SIG(-1 S7524C3) C1{ v1}


void  S7524C3 ::v1(){vfunc_called(this, "_ZN7S7524C32v1Ev");}
S7524C3 ::~S7524C3(){ note_dtor("S7524C3", this);} // tgen
S7524C3 ::S7524C3(){ note_ctor("S7524C3", this);} // tgen

static void Test_S7524C3()
{
  extern Class_Descriptor cd_S7524C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7524C3, buf);
    S7524C3 *dp, &lv = *(dp=new (buf) S7524C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7524C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7524C3)");
    test_class_info(&lv, &cd_S7524C3);
    dp->~S7524C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7524C3(Test_S7524C3, "S7524C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7524C3C1Ev();
extern void _ZN7S7524C3D1Ev();
Name_Map name_map_S7524C3[] = {
  NSPAIR(_ZN7S7524C3C1Ev),
  NSPAIR(_ZN7S7524C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7524C3[];
extern void _ZN7S7524C32v1Ev();
static  VTBL_ENTRY vtc_S7524C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7524C3[0]),
  (VTBL_ENTRY)&_ZN7S7524C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S7524C3[];
extern  VTBL_ENTRY _ZTV7S7524C3[];
Class_Descriptor cd_S7524C3 = {  "S7524C3", // class name
  0,0,//no base classes
  &(vtc_S7524C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7524C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7524C3),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  S7524C7  : S3600C29_nt , virtual S3600C19 {
  ::S19426C9_nt s7524c7f0;
  ~S7524C7(); // tgen
  S7524C7(); // tgen
};
//SIG(-1 S7524C7) C1{ BC2{ m Fp} VBC3{ m} FU4{ m}}


S7524C7 ::~S7524C7(){ note_dtor("S7524C7", this);} // tgen
S7524C7 ::S7524C7(){ note_ctor("S7524C7", this);} // tgen

static void Test_S7524C7()
{
  extern Class_Descriptor cd_S7524C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7524C7, buf);
    S7524C7 *dp, &lv = *(dp=new (buf) S7524C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7524C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7524C7)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S7524C7");
    check_base_class_offset(lv, (S3600C19*), 0, "S7524C7");
    check_field_offset(lv, s7524c7f0, ABISELECT(16,8), "S7524C7.s7524c7f0");
    test_class_info(&lv, &cd_S7524C7);
    dp->~S7524C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7524C7(Test_S7524C7, "S7524C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7524C7C1Ev();
extern void _ZN7S7524C7D1Ev();
Name_Map name_map_S7524C7[] = {
  NSPAIR(_ZN7S7524C7C1Ev),
  NSPAIR(_ZN7S7524C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S7524C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7524C7[];
static  VTBL_ENTRY vtc_S7524C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7524C7[0]),
};
extern VTBL_ENTRY _ZTV7S7524C7[];
static  VTT_ENTRY vtt_S7524C7[] = {
  {&(_ZTV7S7524C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7524C7[];
extern  VTBL_ENTRY _ZTV7S7524C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7524C7[];
Class_Descriptor cd_S7524C7 = {  "S7524C7", // class name
  bases_S7524C7, 2,
  &(vtc_S7524C7[0]), // expected_vtbl_contents
  &(vtt_S7524C7[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7524C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7524C7),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7524C7),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  S7524C5  : virtual S3600C19 , virtual S7524C7 {
  int s7524c5f0;
  ~S7524C5(); // tgen
  S7524C5(); // tgen
};
//SIG(-1 S7524C5) C1{ VBC2{ m} VBC3{ BC4{ m Fp} VBC2 FU5{ m}} Fi}


S7524C5 ::~S7524C5(){ note_dtor("S7524C5", this);} // tgen
S7524C5 ::S7524C5(){ note_ctor("S7524C5", this);} // tgen

static void Test_S7524C5()
{
  extern Class_Descriptor cd_S7524C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7524C5, buf);
    S7524C5 *dp, &lv = *(dp=new (buf) S7524C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7524C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7524C5)");
    check_base_class_offset(lv, (S3600C19*), 0, "S7524C5");
    check_base_class_offset(lv, (S3600C19*)(S7524C7*), 0, "S7524C5");
    check_base_class_offset(lv, (S3600C29_nt*)(S7524C7*), ABISELECT(24,12), "S7524C5");
    check_base_class_offset(lv, (S7524C7*), ABISELECT(16,8), "S7524C5");
    check_field_offset(lv, s7524c5f0, ABISELECT(8,4), "S7524C5.s7524c5f0");
    test_class_info(&lv, &cd_S7524C5);
    dp->~S7524C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7524C5(Test_S7524C5, "S7524C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7524C5C1Ev();
extern void _ZN7S7524C5D1Ev();
Name_Map name_map_S7524C5[] = {
  NSPAIR(_ZN7S7524C5C1Ev),
  NSPAIR(_ZN7S7524C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7524C7;
extern VTBL_ENTRY _ZTI7S7524C7[];
extern  VTBL_ENTRY _ZTV7S7524C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7524C7[];
static Base_Class bases_S7524C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3600C29_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7524C7,    ABISELECT(16,8), //bcp->offset
    4, //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 _ZTI7S7524C5[];
static  VTBL_ENTRY vtc_S7524C5[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7524C5[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7524C5[0]),
};
extern VTBL_ENTRY _ZTV7S7524C5[];
static  VTBL_ENTRY _tg__ZTV7S7524C7__7S7524C5[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7524C7[0]),
};
static  VTT_ENTRY vtt_S7524C5[] = {
  {&(_ZTV7S7524C5[4]),  4,7},
  {&(_ZTV7S7524C5[7]),  7,7},
  {&(_tg__ZTV7S7524C7__7S7524C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7524C5[];
extern  VTBL_ENTRY _ZTV7S7524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7524C5[];
Class_Descriptor cd_S7524C5 = {  "S7524C5", // class name
  bases_S7524C5, 3,
  &(vtc_S7524C5[0]), // expected_vtbl_contents
  &(vtt_S7524C5[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7524C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7524C5),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7524C5),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  S7524C10  : virtual S3600C29_nt , S3600C19 {
  ~S7524C10(); // tgen
  S7524C10(); // tgen
};
//SIG(-1 S7524C10) C1{ VBC2{ m Fp} BC3{ m}}


S7524C10 ::~S7524C10(){ note_dtor("S7524C10", this);} // tgen
S7524C10 ::S7524C10(){ note_ctor("S7524C10", this);} // tgen

static void Test_S7524C10()
{
  extern Class_Descriptor cd_S7524C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7524C10, buf);
    S7524C10 *dp, &lv = *(dp=new (buf) S7524C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7524C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7524C10)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S7524C10");
    check_base_class_offset(lv, (S3600C19*), 0, "S7524C10");
    test_class_info(&lv, &cd_S7524C10);
    dp->~S7524C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7524C10(Test_S7524C10, "S7524C10", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7524C10C1Ev();
extern void _ZN8S7524C10D1Ev();
Name_Map name_map_S7524C10[] = {
  NSPAIR(_ZN8S7524C10C1Ev),
  NSPAIR(_ZN8S7524C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S7524C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S7524C10[];
static  VTBL_ENTRY vtc_S7524C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7524C10[0]),
};
extern VTBL_ENTRY _ZTV8S7524C10[];
static  VTT_ENTRY vtt_S7524C10[] = {
  {&(_ZTV8S7524C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7524C10[];
extern  VTBL_ENTRY _ZTV8S7524C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7524C10[];
Class_Descriptor cd_S7524C10 = {  "S7524C10", // class name
  bases_S7524C10, 2,
  &(vtc_S7524C10[0]), // expected_vtbl_contents
  &(vtt_S7524C10[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7524C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7524C10),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7524C10),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  S7524C4  : S7524C5 , S7524C10 {
  ::S3600C19 s7524c4f0;
  ~S7524C4(); // tgen
  S7524C4(); // tgen
};
//SIG(-1 S7524C4) C1{ BC2{ VBC3{ m} VBC4{ BC5{ m Fp} VBC3 FU6{ m}} Fi} BC7{ VBC5 BC3} FC3}


S7524C4 ::~S7524C4(){ note_dtor("S7524C4", this);} // tgen
S7524C4 ::S7524C4(){ note_ctor("S7524C4", this);} // tgen

static void Test_S7524C4()
{
  extern Class_Descriptor cd_S7524C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7524C4, buf);
    S7524C4 *dp, &lv = *(dp=new (buf) S7524C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7524C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7524C4)");
    check_base_class_offset(lv, (S3600C19*)(S7524C5*), 0, "S7524C4");
    check_base_class_offset(lv, (S3600C19*)(S7524C7*), 0, "S7524C4");
    check_base_class_offset(lv, (S3600C29_nt*)(S7524C7*), ABISELECT(40,20), "S7524C4");
    check_base_class_offset(lv, (S7524C7*)(S7524C5*), ABISELECT(32,16), "S7524C4");
    check_base_class_offset(lv, (S7524C5*), 0, "S7524C4");
    check_base_class_offset(lv, (S3600C29_nt*)(S7524C10*), ABISELECT(56,28), "S7524C4");
    check_base_class_offset(lv, (S3600C19*)(S7524C10*), ABISELECT(16,8), "S7524C4");
    check_base_class_offset(lv, (S7524C10*), ABISELECT(16,8), "S7524C4");
    check_field_offset(lv, s7524c4f0, ABISELECT(24,12), "S7524C4.s7524c4f0");
    test_class_info(&lv, &cd_S7524C4);
    dp->~S7524C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7524C4(Test_S7524C4, "S7524C4", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S7524C4C1Ev();
extern void _ZN7S7524C4D1Ev();
Name_Map name_map_S7524C4[] = {
  NSPAIR(_ZN7S7524C4C1Ev),
  NSPAIR(_ZN7S7524C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7524C7;
extern VTBL_ENTRY _ZTI7S7524C7[];
extern  VTBL_ENTRY _ZTV7S7524C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7524C7[];
extern Class_Descriptor cd_S7524C5;
extern VTBL_ENTRY _ZTI7S7524C5[];
extern  VTBL_ENTRY _ZTV7S7524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7524C5[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7524C10;
extern VTBL_ENTRY _ZTI8S7524C10[];
extern  VTBL_ENTRY _ZTV8S7524C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7524C10[];
static Base_Class bases_S7524C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7524C7,    ABISELECT(32,16), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7524C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C29_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S7524C10,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI7S7524C4[];
static  VTBL_ENTRY vtc_S7524C4[] = {
  ABISELECT(56,28),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7524C4[0]),
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7524C4[0]),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7524C4[0]),
};
extern VTBL_ENTRY _ZTV7S7524C4[];
static  VTBL_ENTRY _tg__ZTV7S7524C5__7S7524C4[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7524C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7524C7__7S7524C5__7S7524C4[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7524C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7524C10__7S7524C4[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S7524C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7524C7__7S7524C4[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7524C7[0]),
};
static  VTT_ENTRY vtt_S7524C4[] = {
  {&(_ZTV7S7524C4[5]),  5,11},
  {&(_tg__ZTV7S7524C5__7S7524C4[4]),  4,4},
  {&(_tg__ZTV7S7524C7__7S7524C5__7S7524C4[3]),  3,3},
  {&(_tg__ZTV8S7524C10__7S7524C4[3]),  3,3},
  {&(_ZTV7S7524C4[11]),  11,11},
  {&(_ZTV7S7524C4[8]),  8,11},
  {&(_tg__ZTV7S7524C7__7S7524C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7524C4[];
extern  VTBL_ENTRY _ZTV7S7524C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7524C4[];
Class_Descriptor cd_S7524C4 = {  "S7524C4", // class name
  bases_S7524C4, 7,
  &(vtc_S7524C4[0]), // expected_vtbl_contents
  &(vtt_S7524C4[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S7524C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7524C4),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7524C4),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  S7524C2  : virtual S7524C3 , S7524C4 , virtual S3600C6_nt {
  ~S7524C2(); // tgen
  S7524C2(); // tgen
};
//SIG(-1 S7524C2) C1{ VBC2{ v1} BC3{ BC4{ VBC5{ m} VBC6{ BC7{ m Fp} VBC5 FU8{ m}} Fi} BC9{ VBC7 BC5} FC5} VBC10{ m}}


S7524C2 ::~S7524C2(){ note_dtor("S7524C2", this);} // tgen
S7524C2 ::S7524C2(){ note_ctor("S7524C2", this);} // tgen

static void Test_S7524C2()
{
  extern Class_Descriptor cd_S7524C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S7524C2, buf);
    S7524C2 *dp, &lv = *(dp=new (buf) S7524C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S7524C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7524C2)");
    check_base_class_offset(lv, (S7524C3*), ABISELECT(32,16), "S7524C2");
    check_base_class_offset(lv, (S3600C19*)(S7524C5*)(S7524C4*), 0, "S7524C2");
    check_base_class_offset(lv, (S3600C19*)(S7524C7*), 0, "S7524C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S7524C7*), ABISELECT(48,24), "S7524C2");
    check_base_class_offset(lv, (S7524C7*)(S7524C5*)(S7524C4*), ABISELECT(40,20), "S7524C2");
    check_base_class_offset(lv, (S7524C5*)(S7524C4*), 0, "S7524C2");
    check_base_class_offset(lv, (S3600C29_nt*)(S7524C10*)(S7524C4*), ABISELECT(64,32), "S7524C2");
    check_base_class_offset(lv, (S3600C19*)(S7524C10*)(S7524C4*), ABISELECT(16,8), "S7524C2");
    check_base_class_offset(lv, (S7524C10*)(S7524C4*), ABISELECT(16,8), "S7524C2");
    check_base_class_offset(lv, (S7524C4*), 0, "S7524C2");
    check_base_class_offset(lv, (S3600C6_nt*), 0, "S7524C2");
    test_class_info(&lv, &cd_S7524C2);
    dp->~S7524C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7524C2(Test_S7524C2, "S7524C2", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S7524C2C1Ev();
extern void _ZN7S7524C2D1Ev();
Name_Map name_map_S7524C2[] = {
  NSPAIR(_ZN7S7524C2C1Ev),
  NSPAIR(_ZN7S7524C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7524C3;
extern VTBL_ENTRY _ZTI7S7524C3[];
extern  VTBL_ENTRY _ZTV7S7524C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7524C7;
extern VTBL_ENTRY _ZTI7S7524C7[];
extern  VTBL_ENTRY _ZTV7S7524C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7524C7[];
extern Class_Descriptor cd_S7524C5;
extern VTBL_ENTRY _ZTI7S7524C5[];
extern  VTBL_ENTRY _ZTV7S7524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7524C5[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7524C10;
extern VTBL_ENTRY _ZTI8S7524C10[];
extern  VTBL_ENTRY _ZTV8S7524C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7524C10[];
extern Class_Descriptor cd_S7524C4;
extern VTBL_ENTRY _ZTI7S7524C4[];
extern  VTBL_ENTRY _ZTV7S7524C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7524C4[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
static Base_Class bases_S7524C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7524C3,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7524C7,    ABISELECT(40,20), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7524C5,    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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S7524C10,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7524C4,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3600C6_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7524C2[];
extern void _ZN7S7524C32v1Ev();
static  VTBL_ENTRY vtc_S7524C2[] = {
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7524C2[0]),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7524C2[0]),
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7524C2[0]),
  (VTBL_ENTRY)&_ZN7S7524C32v1Ev,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7524C2[0]),
};
extern VTBL_ENTRY _ZTV7S7524C2[];
static  VTBL_ENTRY _tg__ZTV7S7524C4__7S7524C2[] = {
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7524C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7524C57S7524C4__7S7524C2[] = {
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7524C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7524C7__7S7524C57S7524C4__7S7524C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7524C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7524C107S7524C4__7S7524C2[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7524C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7524C7__7S7524C4__7S7524C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7524C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7524C10__7S7524C4__7S7524C2[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7524C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7524C7__7S7524C2[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7524C7[0]),
};
static  VTT_ENTRY vtt_S7524C2[] = {
  {&(_ZTV7S7524C2[7]),  7,17},
  {&(_tg__ZTV7S7524C4__7S7524C2[5]),  5,5},
  {&(_tg__ZTV7S7524C57S7524C4__7S7524C2[4]),  4,4},
  {&(_tg__ZTV7S7524C7__7S7524C57S7524C4__7S7524C2[3]),  3,3},
  {&(_tg__ZTV8S7524C107S7524C4__7S7524C2[3]),  3,3},
  {&(_tg__ZTV7S7524C7__7S7524C4__7S7524C2[3]),  3,3},
  {&(_tg__ZTV8S7524C10__7S7524C4__7S7524C2[3]),  3,3},
  {&(_ZTV7S7524C2[13]),  13,17},
  {&(_ZTV7S7524C2[17]),  17,17},
  {&(_ZTV7S7524C2[10]),  10,17},
  {&(_tg__ZTV7S7524C7__7S7524C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7524C2[];
extern  VTBL_ENTRY _ZTV7S7524C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7524C2[];
Class_Descriptor cd_S7524C2 = {  "S7524C2", // class name
  bases_S7524C2, 10,
  &(vtc_S7524C2[0]), // expected_vtbl_contents
  &(vtt_S7524C2[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S7524C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7524C2),17, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7524C2),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  S7524C1  : S7524C2 {
  ~S7524C1(); // tgen
  S7524C1(); // tgen
};
//SIG(1 S7524C1) C1{ BC2{ VBC3{ v1} BC4{ BC5{ VBC6{ m} VBC7{ BC8{ m Fp} VBC6 FU9{ m}} Fi} BC10{ VBC8 BC6} FC6} VBC11{ m}}}


S7524C1 ::~S7524C1(){ note_dtor("S7524C1", this);} // tgen
S7524C1 ::S7524C1(){ note_ctor("S7524C1", this);} // tgen

static void Test_S7524C1()
{
  extern Class_Descriptor cd_S7524C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S7524C1, buf);
    S7524C1 *dp, &lv = *(dp=new (buf) S7524C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S7524C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7524C1)");
    check_base_class_offset(lv, (S7524C3*)(S7524C2*), ABISELECT(32,16), "S7524C1");
    check_base_class_offset(lv, (S3600C19*)(S7524C5*)(S7524C4*)(S7524C2*), 0, "S7524C1");
    check_base_class_offset(lv, (S3600C19*)(S7524C7*), 0, "S7524C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S7524C7*), ABISELECT(48,24), "S7524C1");
    check_base_class_offset(lv, (S7524C7*)(S7524C5*)(S7524C4*)(S7524C2*), ABISELECT(40,20), "S7524C1");
    check_base_class_offset(lv, (S7524C5*)(S7524C4*)(S7524C2*), 0, "S7524C1");
    check_base_class_offset(lv, (S3600C29_nt*)(S7524C10*)(S7524C4*)(S7524C2*), ABISELECT(64,32), "S7524C1");
    check_base_class_offset(lv, (S3600C19*)(S7524C10*)(S7524C4*)(S7524C2*), ABISELECT(16,8), "S7524C1");
    check_base_class_offset(lv, (S7524C10*)(S7524C4*)(S7524C2*), ABISELECT(16,8), "S7524C1");
    check_base_class_offset(lv, (S7524C4*)(S7524C2*), 0, "S7524C1");
    check_base_class_offset(lv, (S3600C6_nt*)(S7524C2*), 0, "S7524C1");
    check_base_class_offset(lv, (S7524C2*), 0, "S7524C1");
    test_class_info(&lv, &cd_S7524C1);
    dp->~S7524C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7524C1(Test_S7524C1, "S7524C1", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S7524C1C1Ev();
extern void _ZN7S7524C1D1Ev();
Name_Map name_map_S7524C1[] = {
  NSPAIR(_ZN7S7524C1C1Ev),
  NSPAIR(_ZN7S7524C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7524C3;
extern VTBL_ENTRY _ZTI7S7524C3[];
extern  VTBL_ENTRY _ZTV7S7524C3[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7524C7;
extern VTBL_ENTRY _ZTI7S7524C7[];
extern  VTBL_ENTRY _ZTV7S7524C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7524C7[];
extern Class_Descriptor cd_S7524C5;
extern VTBL_ENTRY _ZTI7S7524C5[];
extern  VTBL_ENTRY _ZTV7S7524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7524C5[];
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7524C10;
extern VTBL_ENTRY _ZTI8S7524C10[];
extern  VTBL_ENTRY _ZTV8S7524C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7524C10[];
extern Class_Descriptor cd_S7524C4;
extern VTBL_ENTRY _ZTI7S7524C4[];
extern  VTBL_ENTRY _ZTV7S7524C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7524C4[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
extern Class_Descriptor cd_S7524C2;
extern VTBL_ENTRY _ZTI7S7524C2[];
extern  VTBL_ENTRY _ZTV7S7524C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7524C2[];
static Base_Class bases_S7524C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7524C3,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //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
    10, //immediately_derived
  0, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3600C29_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7524C7,    ABISELECT(40,20), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7524C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3600C29_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3600C19,    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_S7524C10,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7524C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3600C6_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
    10, //immediately_derived
  0, 1},
  {&cd_S7524C2,    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 _ZTI7S7524C1[];
extern void _ZN7S7524C32v1Ev();
static  VTBL_ENTRY vtc_S7524C1[] = {
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7524C1[0]),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7524C1[0]),
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7524C1[0]),
  (VTBL_ENTRY)&_ZN7S7524C32v1Ev,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7524C1[0]),
};
extern VTBL_ENTRY _ZTV7S7524C1[];
static  VTBL_ENTRY _tg__ZTV7S7524C2__7S7524C1[] = {
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7524C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7524C47S7524C2__7S7524C1[] = {
  ABISELECT(64,32),
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7524C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7524C57S7524C47S7524C2__7S7524C1[] = {
  ABISELECT(40,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7524C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7524C7__7S7524C57S7524C47S7524C2__7S7524C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7524C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7524C107S7524C47S7524C2__7S7524C1[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7524C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7524C7__7S7524C47S7524C2__7S7524C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7524C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7524C10__7S7524C47S7524C2__7S7524C1[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7524C4[0]),
};
extern void _ZN7S7524C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7524C3__7S7524C2__7S7524C1[] = {
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7524C2[0]),
  (VTBL_ENTRY)&_ZN7S7524C32v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7524C7__7S7524C2__7S7524C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7524C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7524C107S7524C4__7S7524C2__7S7524C1[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7524C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7524C7__7S7524C1[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7524C7[0]),
};
static  VTT_ENTRY vtt_S7524C1[] = {
  {&(_ZTV7S7524C1[7]),  7,17},
  {&(_tg__ZTV7S7524C2__7S7524C1[7]),  7,7},
  {&(_tg__ZTV7S7524C47S7524C2__7S7524C1[5]),  5,5},
  {&(_tg__ZTV7S7524C57S7524C47S7524C2__7S7524C1[4]),  4,4},
  {&(_tg__ZTV7S7524C7__7S7524C57S7524C47S7524C2__7S7524C1[3]),  3,3},
  {&(_tg__ZTV8S7524C107S7524C47S7524C2__7S7524C1[3]),  3,3},
  {&(_tg__ZTV7S7524C7__7S7524C47S7524C2__7S7524C1[3]),  3,3},
  {&(_tg__ZTV8S7524C10__7S7524C47S7524C2__7S7524C1[3]),  3,3},
  {&(_tg__ZTV7S7524C3__7S7524C2__7S7524C1[3]),  3,4},
  {&(_tg__ZTV7S7524C7__7S7524C2__7S7524C1[3]),  3,3},
  {&(_tg__ZTV8S7524C107S7524C4__7S7524C2__7S7524C1[3]),  3,3},
  {&(_ZTV7S7524C1[13]),  13,17},
  {&(_ZTV7S7524C1[17]),  17,17},
  {&(_ZTV7S7524C1[10]),  10,17},
  {&(_tg__ZTV7S7524C7__7S7524C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7524C1[];
extern  VTBL_ENTRY _ZTV7S7524C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7524C1[];
Class_Descriptor cd_S7524C1 = {  "S7524C1", // class name
  bases_S7524C1, 11,
  &(vtc_S7524C1[0]), // expected_vtbl_contents
  &(vtt_S7524C1[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S7524C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7524C1),17, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7524C1),15, //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  S15997C1  {
  ::S1566C14_nt s15997c1f0;
  ::S1566C32 s15997c1f1;
  void *s15997c1f2[2];
  int s15997c1f3;
  __tsi64 s15997c1f4;
  int s15997c1f5;
  ::S1566C29 s15997c1f6;
  void  mf15997c1(); // _ZN8S15997C19mf15997c1Ev
};
//SIG(1 S15997C1) C1{ m FC2{ m Fi[2]} FC3{ m FC4{ Fc[2] Fs FC5{ Fi} Fc[8]}} Fp[2] Fi FL Fi FC6{ BC7{ m Fp Fi[2]}}}


void  S15997C1 ::mf15997c1(){}

static void Test_S15997C1()
{
  {
    init_simple_test("S15997C1");
    S15997C1 lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S15997C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15997C1)");
    check_field_offset(lv, s15997c1f0, 0, "S15997C1.s15997c1f0");
    check_field_offset(lv, s15997c1f1, 8, "S15997C1.s15997c1f1");
    check_field_offset(lv, s15997c1f2, 24, "S15997C1.s15997c1f2");
    check_field_offset(lv, s15997c1f3, ABISELECT(40,32), "S15997C1.s15997c1f3");
    check_field_offset(lv, s15997c1f4, ABISELECT(48,36), "S15997C1.s15997c1f4");
    check_field_offset(lv, s15997c1f5, ABISELECT(56,44), "S15997C1.s15997c1f5");
    check_field_offset(lv, s15997c1f6, ABISELECT(64,48), "S15997C1.s15997c1f6");
  }
}
static Arrange_To_Call_Me vS15997C1(Test_S15997C1, "S15997C1", ABISELECT(80,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6932C2  {
  virtual  ~S6932C2(); // _ZN7S6932C2D1Ev
  virtual void  v5(); // _ZN7S6932C22v5Ev
  virtual void  v6(); // _ZN7S6932C22v6Ev
  virtual void  v7(); // _ZN7S6932C22v7Ev
  virtual void  v8(); // _ZN7S6932C22v8Ev
  S6932C2(); // tgen
};
//SIG(-1 S6932C2) C1{ vd v1 v2 v3 v4}


 S6932C2 ::~S6932C2(){ note_dtor("S6932C2", this);}
void  S6932C2 ::v5(){vfunc_called(this, "_ZN7S6932C22v5Ev");}
void  S6932C2 ::v6(){vfunc_called(this, "_ZN7S6932C22v6Ev");}
void  S6932C2 ::v7(){vfunc_called(this, "_ZN7S6932C22v7Ev");}
void  S6932C2 ::v8(){vfunc_called(this, "_ZN7S6932C22v8Ev");}
S6932C2 ::S6932C2(){ note_ctor("S6932C2", this);} // tgen

static void Test_S6932C2()
{
  extern Class_Descriptor cd_S6932C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6932C2, buf);
    S6932C2 *dp, &lv = *(dp=new (buf) S6932C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6932C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6932C2)");
    test_class_info(&lv, &cd_S6932C2);
    dp->~S6932C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6932C2(Test_S6932C2, "S6932C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6932C2C1Ev();
extern void _ZN7S6932C2D1Ev();
Name_Map name_map_S6932C2[] = {
  NSPAIR(_ZN7S6932C2C1Ev),
  NSPAIR(_ZN7S6932C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6932C2[];
extern void _ZN7S6932C2D1Ev();
extern void _ZN7S6932C2D0Ev();
extern void _ZN7S6932C22v5Ev();
extern void _ZN7S6932C22v6Ev();
extern void _ZN7S6932C22v7Ev();
extern void _ZN7S6932C22v8Ev();
static  VTBL_ENTRY vtc_S6932C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6932C2[0]),
  (VTBL_ENTRY)&_ZN7S6932C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6932C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6932C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6932C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6932C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6932C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S6932C2[];
extern  VTBL_ENTRY _ZTV7S6932C2[];
Class_Descriptor cd_S6932C2 = {  "S6932C2", // class name
  0,0,//no base classes
  &(vtc_S6932C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6932C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6932C2),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  S6932C1  : S6932C2 {
  int s6932c1f0[2];
  void *s6932c1f1[3];
  ::S1566C32 s6932c1f2;
  virtual void  v1(); // _ZN7S6932C12v1Ev
  virtual void  v2(); // _ZN7S6932C12v2Ev
  virtual void  v3(); // _ZN7S6932C12v3Ev
  virtual void  v4(); // _ZN7S6932C12v4Ev
  ~S6932C1(); // tgen
  S6932C1(); // tgen
};
//SIG(1 S6932C1) C1{ BC2{ vd v5 v6 v7 v8} v1 v2 v3 v4 Fi[2] Fp[3] FC3{ m FC4{ Fc[2] Fs FC5{ Fi} Fc[8]}}}


void  S6932C1 ::v1(){vfunc_called(this, "_ZN7S6932C12v1Ev");}
void  S6932C1 ::v2(){vfunc_called(this, "_ZN7S6932C12v2Ev");}
void  S6932C1 ::v3(){vfunc_called(this, "_ZN7S6932C12v3Ev");}
void  S6932C1 ::v4(){vfunc_called(this, "_ZN7S6932C12v4Ev");}
S6932C1 ::~S6932C1(){ note_dtor("S6932C1", this);} // tgen
S6932C1 ::S6932C1(){ note_ctor("S6932C1", this);} // tgen

static void Test_S6932C1()
{
  extern Class_Descriptor cd_S6932C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S6932C1, buf);
    S6932C1 *dp, &lv = *(dp=new (buf) S6932C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S6932C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6932C1)");
    check_base_class_offset(lv, (S6932C2*), 0, "S6932C1");
    check_field_offset(lv, s6932c1f0, ABISELECT(8,4), "S6932C1.s6932c1f0");
    check_field_offset(lv, s6932c1f1, ABISELECT(16,12), "S6932C1.s6932c1f1");
    check_field_offset(lv, s6932c1f2, ABISELECT(40,24), "S6932C1.s6932c1f2");
    test_class_info(&lv, &cd_S6932C1);
    dp->~S6932C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6932C1(Test_S6932C1, "S6932C1", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S6932C1C1Ev();
extern void _ZN7S6932C1D1Ev();
Name_Map name_map_S6932C1[] = {
  NSPAIR(_ZN7S6932C1C1Ev),
  NSPAIR(_ZN7S6932C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6932C2;
extern VTBL_ENTRY _ZTI7S6932C2[];
extern  VTBL_ENTRY _ZTV7S6932C2[];
static Base_Class bases_S6932C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6932C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S6932C1[];
extern void _ZN7S6932C1D1Ev();
extern void _ZN7S6932C1D0Ev();
extern void _ZN7S6932C22v5Ev();
extern void _ZN7S6932C22v6Ev();
extern void _ZN7S6932C22v7Ev();
extern void _ZN7S6932C22v8Ev();
extern void _ZN7S6932C12v1Ev();
extern void _ZN7S6932C12v2Ev();
extern void _ZN7S6932C12v3Ev();
extern void _ZN7S6932C12v4Ev();
static  VTBL_ENTRY vtc_S6932C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6932C1[0]),
  (VTBL_ENTRY)&_ZN7S6932C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6932C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6932C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6932C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6932C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6932C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6932C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6932C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6932C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6932C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S6932C1[];
extern  VTBL_ENTRY _ZTV7S6932C1[];
Class_Descriptor cd_S6932C1 = {  "S6932C1", // class name
  bases_S6932C1, 1,
  &(vtc_S6932C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S6932C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6932C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16682C1  {
  int s16682c1f0;
  ::S1325C21 s16682c1f1;
  int s16682c1f2;
  void *s16682c1f3[2];
  int s16682c1f4[2];
  void  mf16682c1(); // _ZN8S16682C19mf16682c1Ev
};
//SIG(1 S16682C1) C1{ m Fi FC2{ m FC3{ BC4{ BC5{ m Fp Fi[2]}}} FC3 Fi FC3 FC6{ BC5} FC3 Fi} Fi Fp[2] Fi[2]}


void  S16682C1 ::mf16682c1(){}

static void Test_S16682C1()
{
  {
    init_simple_test("S16682C1");
    S16682C1 lv;
    check2(sizeof(lv), ABISELECT(136,92), "sizeof(S16682C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16682C1)");
    check_field_offset(lv, s16682c1f0, 0, "S16682C1.s16682c1f0");
    check_field_offset(lv, s16682c1f1, ABISELECT(8,4), "S16682C1.s16682c1f1");
    check_field_offset(lv, s16682c1f2, ABISELECT(104,72), "S16682C1.s16682c1f2");
    check_field_offset(lv, s16682c1f3, ABISELECT(112,76), "S16682C1.s16682c1f3");
    check_field_offset(lv, s16682c1f4, ABISELECT(128,84), "S16682C1.s16682c1f4");
  }
}
static Arrange_To_Call_Me vS16682C1(Test_S16682C1, "S16682C1", ABISELECT(136,92));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9243C2  {
  ::S3600C11_nt s9243c2f0;
  int s9243c2f1[2];
  char s9243c2f2;
  virtual  ~S9243C2(); // _ZN7S9243C2D1Ev
  virtual void  v3(); // _ZN7S9243C22v3Ev
  virtual void  v4(); // _ZN7S9243C22v4Ev
  virtual void  v5(); // _ZN7S9243C22v5Ev
  S9243C2(); // tgen
};
//SIG(-1 S9243C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9243C2 ::~S9243C2(){ note_dtor("S9243C2", this);}
void  S9243C2 ::v3(){vfunc_called(this, "_ZN7S9243C22v3Ev");}
void  S9243C2 ::v4(){vfunc_called(this, "_ZN7S9243C22v4Ev");}
void  S9243C2 ::v5(){vfunc_called(this, "_ZN7S9243C22v5Ev");}
S9243C2 ::S9243C2(){ note_ctor("S9243C2", this);} // tgen

static void Test_S9243C2()
{
  extern Class_Descriptor cd_S9243C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9243C2, buf);
    S9243C2 *dp, &lv = *(dp=new (buf) S9243C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9243C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9243C2)");
    check_field_offset(lv, s9243c2f0, ABISELECT(8,4), "S9243C2.s9243c2f0");
    check_field_offset(lv, s9243c2f1, ABISELECT(24,16), "S9243C2.s9243c2f1");
    check_field_offset(lv, s9243c2f2, ABISELECT(32,24), "S9243C2.s9243c2f2");
    test_class_info(&lv, &cd_S9243C2);
    dp->~S9243C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9243C2(Test_S9243C2, "S9243C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9243C2C1Ev();
extern void _ZN7S9243C2D1Ev();
Name_Map name_map_S9243C2[] = {
  NSPAIR(_ZN7S9243C2C1Ev),
  NSPAIR(_ZN7S9243C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9243C2[];
extern void _ZN7S9243C2D1Ev();
extern void _ZN7S9243C2D0Ev();
extern void _ZN7S9243C22v3Ev();
extern void _ZN7S9243C22v4Ev();
extern void _ZN7S9243C22v5Ev();
static  VTBL_ENTRY vtc_S9243C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9243C2[0]),
  (VTBL_ENTRY)&_ZN7S9243C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9243C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9243C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9243C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9243C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9243C2[];
extern  VTBL_ENTRY _ZTV7S9243C2[];
Class_Descriptor cd_S9243C2 = {  "S9243C2", // class name
  0,0,//no base classes
  &(vtc_S9243C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9243C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9243C2),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  S9243C1  : S9243C2 {
  char s9243c1f0[10];
  short s9243c1f1[64];
  virtual  ~S9243C1(); // _ZN7S9243C1D1Ev
  virtual void  v1(); // _ZN7S9243C12v1Ev
  virtual void  v2(); // _ZN7S9243C12v2Ev
  S9243C1(); // tgen
};
//SIG(1 S9243C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fc[10] Fs[64]}


 S9243C1 ::~S9243C1(){ note_dtor("S9243C1", this);}
void  S9243C1 ::v1(){vfunc_called(this, "_ZN7S9243C12v1Ev");}
void  S9243C1 ::v2(){vfunc_called(this, "_ZN7S9243C12v2Ev");}
S9243C1 ::S9243C1(){ note_ctor("S9243C1", this);} // tgen

static void Test_S9243C1()
{
  extern Class_Descriptor cd_S9243C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,42)];
    init_test(&cd_S9243C1, buf);
    S9243C1 *dp, &lv = *(dp=new (buf) S9243C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,164), "sizeof(S9243C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9243C1)");
    check_base_class_offset(lv, (S9243C2*), 0, "S9243C1");
    check_field_offset(lv, s9243c1f0, ABISELECT(33,25), "S9243C1.s9243c1f0");
    check_field_offset(lv, s9243c1f1, ABISELECT(44,36), "S9243C1.s9243c1f1");
    test_class_info(&lv, &cd_S9243C1);
    dp->~S9243C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9243C1(Test_S9243C1, "S9243C1", ABISELECT(176,164));

#else // __cplusplus

extern void _ZN7S9243C1C1Ev();
extern void _ZN7S9243C1D1Ev();
Name_Map name_map_S9243C1[] = {
  NSPAIR(_ZN7S9243C1C1Ev),
  NSPAIR(_ZN7S9243C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9243C2;
extern VTBL_ENTRY _ZTI7S9243C2[];
extern  VTBL_ENTRY _ZTV7S9243C2[];
static Base_Class bases_S9243C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9243C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9243C1[];
extern void _ZN7S9243C1D1Ev();
extern void _ZN7S9243C1D0Ev();
extern void _ZN7S9243C22v3Ev();
extern void _ZN7S9243C22v4Ev();
extern void _ZN7S9243C22v5Ev();
extern void _ZN7S9243C12v1Ev();
extern void _ZN7S9243C12v2Ev();
static  VTBL_ENTRY vtc_S9243C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9243C1[0]),
  (VTBL_ENTRY)&_ZN7S9243C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9243C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9243C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9243C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9243C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9243C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9243C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9243C1[];
extern  VTBL_ENTRY _ZTV7S9243C1[];
Class_Descriptor cd_S9243C1 = {  "S9243C1", // class name
  bases_S9243C1, 1,
  &(vtc_S9243C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,164), // object size
  NSPAIRA(_ZTI7S9243C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9243C1),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  S6923C2  {
  void *s6923c2f0;
  int s6923c2f1;
  char s6923c2f2:4;
  virtual  ~S6923C2(); // _ZN7S6923C2D1Ev
  virtual void  v5(); // _ZN7S6923C22v5Ev
  virtual void  v6(); // _ZN7S6923C22v6Ev
  virtual void  v7(); // _ZN7S6923C22v7Ev
  virtual void  v8(); // _ZN7S6923C22v8Ev
  virtual void  v9(); // _ZN7S6923C22v9Ev
  S6923C2(); // tgen
};
//SIG(-1 S6923C2) C1{ vd v1 v2 v3 v4 v5 Fp Fi Fc:4}


 S6923C2 ::~S6923C2(){ note_dtor("S6923C2", this);}
void  S6923C2 ::v5(){vfunc_called(this, "_ZN7S6923C22v5Ev");}
void  S6923C2 ::v6(){vfunc_called(this, "_ZN7S6923C22v6Ev");}
void  S6923C2 ::v7(){vfunc_called(this, "_ZN7S6923C22v7Ev");}
void  S6923C2 ::v8(){vfunc_called(this, "_ZN7S6923C22v8Ev");}
void  S6923C2 ::v9(){vfunc_called(this, "_ZN7S6923C22v9Ev");}
S6923C2 ::S6923C2(){ note_ctor("S6923C2", this);} // tgen

static void Test_S6923C2()
{
  extern Class_Descriptor cd_S6923C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6923C2, buf);
    S6923C2 *dp, &lv = *(dp=new (buf) S6923C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6923C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6923C2)");
    check_field_offset(lv, s6923c2f0, ABISELECT(8,4), "S6923C2.s6923c2f0");
    check_field_offset(lv, s6923c2f1, ABISELECT(16,8), "S6923C2.s6923c2f1");
    set_bf_and_test(lv, s6923c2f2, ABISELECT(20,12), 0, 4, 1, "S6923C2");
    set_bf_and_test(lv, s6923c2f2, ABISELECT(20,12), 0, 4, hide_sll(1LL<<3), "S6923C2");
    test_class_info(&lv, &cd_S6923C2);
    dp->~S6923C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6923C2(Test_S6923C2, "S6923C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S6923C2C1Ev();
extern void _ZN7S6923C2D1Ev();
Name_Map name_map_S6923C2[] = {
  NSPAIR(_ZN7S6923C2C1Ev),
  NSPAIR(_ZN7S6923C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6923C2[];
extern void _ZN7S6923C2D1Ev();
extern void _ZN7S6923C2D0Ev();
extern void _ZN7S6923C22v5Ev();
extern void _ZN7S6923C22v6Ev();
extern void _ZN7S6923C22v7Ev();
extern void _ZN7S6923C22v8Ev();
extern void _ZN7S6923C22v9Ev();
static  VTBL_ENTRY vtc_S6923C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6923C2[0]),
  (VTBL_ENTRY)&_ZN7S6923C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6923C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6923C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6923C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6923C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6923C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6923C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S6923C2[];
extern  VTBL_ENTRY _ZTV7S6923C2[];
Class_Descriptor cd_S6923C2 = {  "S6923C2", // class name
  0,0,//no base classes
  &(vtc_S6923C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S6923C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6923C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6923C1  : S6923C2 {
  ::S19252C5_nt s6923c1f0;
  ::S19426C9_nt s6923c1f1[6];
  long double s6923c1f2;
  virtual  ~S6923C1(); // _ZN7S6923C1D1Ev
  virtual void  v1(); // _ZN7S6923C12v1Ev
  virtual void  v2(); // _ZN7S6923C12v2Ev
  virtual void  v3(); // _ZN7S6923C12v3Ev
  virtual void  v4(); // _ZN7S6923C12v4Ev
  S6923C1(); // tgen
};
//SIG(1 S6923C1) C1{ BC2{ vd v5 v6 v7 v8 v9 Fp Fi Fc:4} vd v1 v2 v3 v4 FC3{} FU4{ m}[6] FD}


 S6923C1 ::~S6923C1(){ note_dtor("S6923C1", this);}
void  S6923C1 ::v1(){vfunc_called(this, "_ZN7S6923C12v1Ev");}
void  S6923C1 ::v2(){vfunc_called(this, "_ZN7S6923C12v2Ev");}
void  S6923C1 ::v3(){vfunc_called(this, "_ZN7S6923C12v3Ev");}
void  S6923C1 ::v4(){vfunc_called(this, "_ZN7S6923C12v4Ev");}
S6923C1 ::S6923C1(){ note_ctor("S6923C1", this);} // tgen

static void Test_S6923C1()
{
  extern Class_Descriptor cd_S6923C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,9)];
    init_test(&cd_S6923C1, buf);
    S6923C1 *dp, &lv = *(dp=new (buf) S6923C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S6923C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6923C1)");
    check_base_class_offset(lv, (S6923C2*), 0, "S6923C1");
    check_field_offset(lv, s6923c1f0, ABISELECT(21,13), "S6923C1.s6923c1f0");
    check_field_offset(lv, s6923c1f1, ABISELECT(22,14), "S6923C1.s6923c1f1");
    check_field_offset(lv, s6923c1f2, ABISELECT(32,20), "S6923C1.s6923c1f2");
    test_class_info(&lv, &cd_S6923C1);
    dp->~S6923C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6923C1(Test_S6923C1, "S6923C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S6923C1C1Ev();
extern void _ZN7S6923C1D1Ev();
Name_Map name_map_S6923C1[] = {
  NSPAIR(_ZN7S6923C1C1Ev),
  NSPAIR(_ZN7S6923C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6923C2;
extern VTBL_ENTRY _ZTI7S6923C2[];
extern  VTBL_ENTRY _ZTV7S6923C2[];
static Base_Class bases_S6923C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6923C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S6923C1[];
extern void _ZN7S6923C1D1Ev();
extern void _ZN7S6923C1D0Ev();
extern void _ZN7S6923C22v5Ev();
extern void _ZN7S6923C22v6Ev();
extern void _ZN7S6923C22v7Ev();
extern void _ZN7S6923C22v8Ev();
extern void _ZN7S6923C22v9Ev();
extern void _ZN7S6923C12v1Ev();
extern void _ZN7S6923C12v2Ev();
extern void _ZN7S6923C12v3Ev();
extern void _ZN7S6923C12v4Ev();
static  VTBL_ENTRY vtc_S6923C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6923C1[0]),
  (VTBL_ENTRY)&_ZN7S6923C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6923C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6923C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6923C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6923C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6923C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6923C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6923C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6923C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6923C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6923C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S6923C1[];
extern  VTBL_ENTRY _ZTV7S6923C1[];
Class_Descriptor cd_S6923C1 = {  "S6923C1", // class name
  bases_S6923C1, 1,
  &(vtc_S6923C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S6923C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6923C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3555C4  : virtual S3600C19 , virtual S1566C34_nt {
  ~S3555C4(); // tgen
  S3555C4(); // tgen
};
//SIG(-1 S3555C4) C1{ VBC2{ m} VBC3{ Fi}}


S3555C4 ::~S3555C4(){ note_dtor("S3555C4", this);} // tgen
S3555C4 ::S3555C4(){ note_ctor("S3555C4", this);} // tgen

static void Test_S3555C4()
{
  extern Class_Descriptor cd_S3555C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3555C4, buf);
    S3555C4 *dp, &lv = *(dp=new (buf) S3555C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3555C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3555C4)");
    check_base_class_offset(lv, (S3600C19*), 0, "S3555C4");
    check_base_class_offset(lv, (S1566C34_nt*), ABISELECT(8,4), "S3555C4");
    test_class_info(&lv, &cd_S3555C4);
    dp->~S3555C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3555C4(Test_S3555C4, "S3555C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3555C4C1Ev();
extern void _ZN7S3555C4D1Ev();
Name_Map name_map_S3555C4[] = {
  NSPAIR(_ZN7S3555C4C1Ev),
  NSPAIR(_ZN7S3555C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1566C34_nt;
extern VTBL_ENTRY _ZTI11S1566C34_nt[];
static Base_Class bases_S3555C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S1566C34_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3555C4[];
static  VTBL_ENTRY vtc_S3555C4[] = {
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C4[0]),
};
extern VTBL_ENTRY _ZTV7S3555C4[];
static  VTT_ENTRY vtt_S3555C4[] = {
  {&(_ZTV7S3555C4[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S3555C4[];
extern  VTBL_ENTRY _ZTV7S3555C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C4[];
Class_Descriptor cd_S3555C4 = {  "S3555C4", // class name
  bases_S3555C4, 2,
  &(vtc_S3555C4[0]), // expected_vtbl_contents
  &(vtt_S3555C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3555C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3555C4),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3555C4),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  S3555C3  : virtual S3555C4 {
  ~S3555C3(); // tgen
  S3555C3(); // tgen
};
//SIG(-1 S3555C3) C1{ VBC2{ VBC3{ m} VBC4{ Fi}}}


S3555C3 ::~S3555C3(){ note_dtor("S3555C3", this);} // tgen
S3555C3 ::S3555C3(){ note_ctor("S3555C3", this);} // tgen

static void Test_S3555C3()
{
  extern Class_Descriptor cd_S3555C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3555C3, buf);
    S3555C3 *dp, &lv = *(dp=new (buf) S3555C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3555C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3555C3)");
    check_base_class_offset(lv, (S3600C19*)(S3555C4*), 0, "S3555C3");
    check_base_class_offset(lv, (S1566C34_nt*)(S3555C4*), ABISELECT(8,4), "S3555C3");
    check_base_class_offset(lv, (S3555C4*), 0, "S3555C3");
    test_class_info(&lv, &cd_S3555C3);
    dp->~S3555C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3555C3(Test_S3555C3, "S3555C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3555C3C1Ev();
extern void _ZN7S3555C3D1Ev();
Name_Map name_map_S3555C3[] = {
  NSPAIR(_ZN7S3555C3C1Ev),
  NSPAIR(_ZN7S3555C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1566C34_nt;
extern VTBL_ENTRY _ZTI11S1566C34_nt[];
extern Class_Descriptor cd_S3555C4;
extern VTBL_ENTRY _ZTI7S3555C4[];
extern  VTBL_ENTRY _ZTV7S3555C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C4[];
static Base_Class bases_S3555C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1566C34_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3555C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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 _ZTI7S3555C3[];
static  VTBL_ENTRY vtc_S3555C3[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C3[0]),
};
extern VTBL_ENTRY _ZTV7S3555C3[];
static  VTBL_ENTRY _tg__ZTV7S3555C4__7S3555C3[] = {
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C4[0]),
};
static  VTT_ENTRY vtt_S3555C3[] = {
  {&(_ZTV7S3555C3[5]),  5,5},
  {&(_ZTV7S3555C3[5]),  5,5},
  {&(_tg__ZTV7S3555C4__7S3555C3[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S3555C3[];
extern  VTBL_ENTRY _ZTV7S3555C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C3[];
Class_Descriptor cd_S3555C3 = {  "S3555C3", // class name
  bases_S3555C3, 3,
  &(vtc_S3555C3[0]), // expected_vtbl_contents
  &(vtt_S3555C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3555C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3555C3),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3555C3),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  S3555C8  : virtual S3600C19 {
  ~S3555C8(); // tgen
  S3555C8(); // tgen
};
//SIG(-1 S3555C8) C1{ VBC2{ m}}


S3555C8 ::~S3555C8(){ note_dtor("S3555C8", this);} // tgen
S3555C8 ::S3555C8(){ note_ctor("S3555C8", this);} // tgen

static void Test_S3555C8()
{
  extern Class_Descriptor cd_S3555C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3555C8, buf);
    S3555C8 *dp, &lv = *(dp=new (buf) S3555C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3555C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3555C8)");
    check_base_class_offset(lv, (S3600C19*), 0, "S3555C8");
    test_class_info(&lv, &cd_S3555C8);
    dp->~S3555C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3555C8(Test_S3555C8, "S3555C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3555C8C1Ev();
extern void _ZN7S3555C8D1Ev();
Name_Map name_map_S3555C8[] = {
  NSPAIR(_ZN7S3555C8C1Ev),
  NSPAIR(_ZN7S3555C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S3555C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S3555C8[];
static  VTBL_ENTRY vtc_S3555C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C8[0]),
};
extern VTBL_ENTRY _ZTV7S3555C8[];
static  VTT_ENTRY vtt_S3555C8[] = {
  {&(_ZTV7S3555C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3555C8[];
extern  VTBL_ENTRY _ZTV7S3555C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C8[];
Class_Descriptor cd_S3555C8 = {  "S3555C8", // class name
  bases_S3555C8, 1,
  &(vtc_S3555C8[0]), // expected_vtbl_contents
  &(vtt_S3555C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3555C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3555C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3555C8),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  S3555C7  : S3555C8 , virtual S3555C4 {
  ~S3555C7(); // tgen
  S3555C7(); // tgen
};
//SIG(-1 S3555C7) C1{ BC2{ VBC3{ m}} VBC4{ VBC3 VBC5{ Fi}}}


S3555C7 ::~S3555C7(){ note_dtor("S3555C7", this);} // tgen
S3555C7 ::S3555C7(){ note_ctor("S3555C7", this);} // tgen

static void Test_S3555C7()
{
  extern Class_Descriptor cd_S3555C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3555C7, buf);
    S3555C7 *dp, &lv = *(dp=new (buf) S3555C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3555C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3555C7)");
    check_base_class_offset(lv, (S3600C19*)(S3555C8*), 0, "S3555C7");
    check_base_class_offset(lv, (S3600C19*)(S3555C4*), 0, "S3555C7");
    check_base_class_offset(lv, (S3555C8*), 0, "S3555C7");
    check_base_class_offset(lv, (S1566C34_nt*)(S3555C4*), ABISELECT(16,8), "S3555C7");
    check_base_class_offset(lv, (S3555C4*), ABISELECT(8,4), "S3555C7");
    test_class_info(&lv, &cd_S3555C7);
    dp->~S3555C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3555C7(Test_S3555C7, "S3555C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3555C7C1Ev();
extern void _ZN7S3555C7D1Ev();
Name_Map name_map_S3555C7[] = {
  NSPAIR(_ZN7S3555C7C1Ev),
  NSPAIR(_ZN7S3555C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3555C8;
extern VTBL_ENTRY _ZTI7S3555C8[];
extern  VTBL_ENTRY _ZTV7S3555C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C8[];
extern Class_Descriptor cd_S1566C34_nt;
extern VTBL_ENTRY _ZTI11S1566C34_nt[];
extern Class_Descriptor cd_S3555C4;
extern VTBL_ENTRY _ZTI7S3555C4[];
extern  VTBL_ENTRY _ZTV7S3555C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C4[];
static Base_Class bases_S3555C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3555C8,    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_S1566C34_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3555C4,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3555C7[];
static  VTBL_ENTRY vtc_S3555C7[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C7[0]),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3555C7[0]),
};
extern VTBL_ENTRY _ZTV7S3555C7[];
static  VTBL_ENTRY _tg__ZTV7S3555C8__7S3555C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3555C4__7S3555C7[] = {
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C4[0]),
};
static  VTT_ENTRY vtt_S3555C7[] = {
  {&(_ZTV7S3555C7[5]),  5,9},
  {&(_tg__ZTV7S3555C8__7S3555C7[3]),  3,3},
  {&(_ZTV7S3555C7[9]),  9,9},
  {&(_tg__ZTV7S3555C4__7S3555C7[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S3555C7[];
extern  VTBL_ENTRY _ZTV7S3555C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C7[];
Class_Descriptor cd_S3555C7 = {  "S3555C7", // class name
  bases_S3555C7, 4,
  &(vtc_S3555C7[0]), // expected_vtbl_contents
  &(vtt_S3555C7[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3555C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3555C7),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3555C7),4, //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  S3555C2  : S3555C3 , virtual S3555C7 {
  ~S3555C2(); // tgen
  S3555C2(); // tgen
};
//SIG(-1 S3555C2) C1{ BC2{ VBC3{ VBC4{ m} VBC5{ Fi}}} VBC6{ BC7{ VBC4} VBC3}}


S3555C2 ::~S3555C2(){ note_dtor("S3555C2", this);} // tgen
S3555C2 ::S3555C2(){ note_ctor("S3555C2", this);} // tgen

static void Test_S3555C2()
{
  extern Class_Descriptor cd_S3555C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3555C2, buf);
    S3555C2 *dp, &lv = *(dp=new (buf) S3555C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3555C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3555C2)");
    check_base_class_offset(lv, (S3600C19*)(S3555C4*), 0, "S3555C2");
    check_base_class_offset(lv, (S3600C19*)(S3555C8*)(S3555C7*), 0, "S3555C2");
    check_base_class_offset(lv, (S1566C34_nt*)(S3555C4*), ABISELECT(8,4), "S3555C2");
    check_base_class_offset(lv, (S3555C4*)(S3555C3*), 0, "S3555C2");
    check_base_class_offset(lv, (S3555C4*)(S3555C7*), 0, "S3555C2");
    check_base_class_offset(lv, (S3555C3*), 0, "S3555C2");
    check_base_class_offset(lv, (S3555C8*)(S3555C7*), ABISELECT(16,8), "S3555C2");
    check_base_class_offset(lv, (S3555C7*), ABISELECT(16,8), "S3555C2");
    test_class_info(&lv, &cd_S3555C2);
    dp->~S3555C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3555C2(Test_S3555C2, "S3555C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3555C2C1Ev();
extern void _ZN7S3555C2D1Ev();
Name_Map name_map_S3555C2[] = {
  NSPAIR(_ZN7S3555C2C1Ev),
  NSPAIR(_ZN7S3555C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1566C34_nt;
extern VTBL_ENTRY _ZTI11S1566C34_nt[];
extern Class_Descriptor cd_S3555C4;
extern VTBL_ENTRY _ZTI7S3555C4[];
extern  VTBL_ENTRY _ZTV7S3555C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C4[];
extern Class_Descriptor cd_S3555C3;
extern VTBL_ENTRY _ZTI7S3555C3[];
extern  VTBL_ENTRY _ZTV7S3555C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C3[];
extern Class_Descriptor cd_S3555C8;
extern VTBL_ENTRY _ZTI7S3555C8[];
extern  VTBL_ENTRY _ZTV7S3555C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C8[];
extern Class_Descriptor cd_S3555C7;
extern VTBL_ENTRY _ZTI7S3555C7[];
extern  VTBL_ENTRY _ZTV7S3555C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C7[];
static Base_Class bases_S3555C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1566C34_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3555C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    3, //immediately_derived
  0, 1},
  {&cd_S3555C3,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3555C8,    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
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3555C7,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3555C2[];
static  VTBL_ENTRY vtc_S3555C2[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C2[0]),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3555C2[0]),
};
extern VTBL_ENTRY _ZTV7S3555C2[];
static  VTBL_ENTRY _tg__ZTV7S3555C3__7S3555C2[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3555C4__7S3555C2[] = {
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3555C7__7S3555C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3555C87S3555C7__7S3555C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3555C4__7S3555C7__7S3555C2[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S3555C7[0]),
};
static  VTT_ENTRY vtt_S3555C2[] = {
  {&(_ZTV7S3555C2[6]),  6,11},
  {&(_tg__ZTV7S3555C3__7S3555C2[5]),  5,5},
  {&(_tg__ZTV7S3555C3__7S3555C2[5]),  5,5},
  {&(_ZTV7S3555C2[6]),  6,11},
  {&(_ZTV7S3555C2[11]),  11,11},
  {&(_tg__ZTV7S3555C4__7S3555C2[4]),  4,4},
  {&(_tg__ZTV7S3555C7__7S3555C2[5]),  5,5},
  {&(_tg__ZTV7S3555C87S3555C7__7S3555C2[3]),  3,3},
  {&(_tg__ZTV7S3555C4__7S3555C7__7S3555C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S3555C2[];
extern  VTBL_ENTRY _ZTV7S3555C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C2[];
Class_Descriptor cd_S3555C2 = {  "S3555C2", // class name
  bases_S3555C2, 6,
  &(vtc_S3555C2[0]), // expected_vtbl_contents
  &(vtt_S3555C2[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3555C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3555C2),11, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3555C2),9, //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  S3555C9  : virtual S1566C34_nt , virtual S3555C7 {
  ~S3555C9(); // tgen
  S3555C9(); // tgen
};
//SIG(-1 S3555C9) C1{ VBC2{ Fi} VBC3{ BC4{ VBC5{ m}} VBC6{ VBC5 VBC2}}}


S3555C9 ::~S3555C9(){ note_dtor("S3555C9", this);} // tgen
S3555C9 ::S3555C9(){ note_ctor("S3555C9", this);} // tgen

static void Test_S3555C9()
{
  extern Class_Descriptor cd_S3555C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3555C9, buf);
    S3555C9 *dp, &lv = *(dp=new (buf) S3555C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3555C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3555C9)");
    check_base_class_offset(lv, (S1566C34_nt*), ABISELECT(8,4), "S3555C9");
    check_base_class_offset(lv, (S1566C34_nt*)(S3555C4*), ABISELECT(8,4), "S3555C9");
    check_base_class_offset(lv, (S3600C19*)(S3555C8*)(S3555C7*), 0, "S3555C9");
    check_base_class_offset(lv, (S3600C19*)(S3555C4*), 0, "S3555C9");
    check_base_class_offset(lv, (S3555C8*)(S3555C7*), 0, "S3555C9");
    check_base_class_offset(lv, (S3555C4*)(S3555C7*), ABISELECT(16,8), "S3555C9");
    check_base_class_offset(lv, (S3555C7*), 0, "S3555C9");
    test_class_info(&lv, &cd_S3555C9);
    dp->~S3555C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3555C9(Test_S3555C9, "S3555C9", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3555C9C1Ev();
extern void _ZN7S3555C9D1Ev();
Name_Map name_map_S3555C9[] = {
  NSPAIR(_ZN7S3555C9C1Ev),
  NSPAIR(_ZN7S3555C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1566C34_nt;
extern VTBL_ENTRY _ZTI11S1566C34_nt[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3555C8;
extern VTBL_ENTRY _ZTI7S3555C8[];
extern  VTBL_ENTRY _ZTV7S3555C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C8[];
extern Class_Descriptor cd_S3555C4;
extern VTBL_ENTRY _ZTI7S3555C4[];
extern  VTBL_ENTRY _ZTV7S3555C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C4[];
extern Class_Descriptor cd_S3555C7;
extern VTBL_ENTRY _ZTI7S3555C7[];
extern  VTBL_ENTRY _ZTV7S3555C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C7[];
static Base_Class bases_S3555C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1566C34_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3555C8,    0, //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
    4, //immediately_derived
  0, 0},
  {&cd_S3555C4,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //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
    4, //immediately_derived
  0, 1},
  {&cd_S3555C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3555C9[];
static  VTBL_ENTRY vtc_S3555C9[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C9[0]),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3555C9[0]),
};
extern VTBL_ENTRY _ZTV7S3555C9[];
static  VTBL_ENTRY _tg__ZTV7S3555C7__7S3555C9[] = {
  ABISELECT(8,4),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3555C87S3555C7__7S3555C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3555C4__7S3555C7__7S3555C9[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3555C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3555C4__7S3555C9[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C4[0]),
};
static  VTT_ENTRY vtt_S3555C9[] = {
  {&(_ZTV7S3555C9[6]),  6,10},
  {&(_ZTV7S3555C9[6]),  6,10},
  {&(_ZTV7S3555C9[10]),  10,10},
  {&(_tg__ZTV7S3555C7__7S3555C9[5]),  5,5},
  {&(_tg__ZTV7S3555C87S3555C7__7S3555C9[3]),  3,3},
  {&(_tg__ZTV7S3555C4__7S3555C7__7S3555C9[4]),  4,4},
  {&(_tg__ZTV7S3555C4__7S3555C9[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S3555C9[];
extern  VTBL_ENTRY _ZTV7S3555C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C9[];
Class_Descriptor cd_S3555C9 = {  "S3555C9", // class name
  bases_S3555C9, 5,
  &(vtc_S3555C9[0]), // expected_vtbl_contents
  &(vtt_S3555C9[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3555C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3555C9),10, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3555C9),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  S3555C1  : S3555C2 , S3555C9 {
  ~S3555C1(); // tgen
  S3555C1(); // tgen
};
//SIG(1 S3555C1) C1{ BC2{ BC3{ VBC4{ VBC5{ m} VBC6{ Fi}}} VBC7{ BC8{ VBC5} VBC4}} BC9{ VBC6 VBC7}}


S3555C1 ::~S3555C1(){ note_dtor("S3555C1", this);} // tgen
S3555C1 ::S3555C1(){ note_ctor("S3555C1", this);} // tgen

static void Test_S3555C1()
{
  extern Class_Descriptor cd_S3555C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3555C1, buf);
    S3555C1 *dp, &lv = *(dp=new (buf) S3555C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3555C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3555C1)");
    check_base_class_offset(lv, (S3600C19*)(S3555C4*), 0, "S3555C1");
    check_base_class_offset(lv, (S3600C19*)(S3555C8*)(S3555C7*), 0, "S3555C1");
    check_base_class_offset(lv, (S1566C34_nt*)(S3555C4*), ABISELECT(16,8), "S3555C1");
    check_base_class_offset(lv, (S1566C34_nt*)(S3555C9*), ABISELECT(16,8), "S3555C1");
    check_base_class_offset(lv, (S3555C4*)(S3555C3*)(S3555C2*), 0, "S3555C1");
    check_base_class_offset(lv, (S3555C4*)(S3555C7*), 0, "S3555C1");
    check_base_class_offset(lv, (S3555C3*)(S3555C2*), 0, "S3555C1");
    check_base_class_offset(lv, (S3555C8*)(S3555C7*), ABISELECT(8,4), "S3555C1");
    check_base_class_offset(lv, (S3555C7*)(S3555C2*), ABISELECT(8,4), "S3555C1");
    check_base_class_offset(lv, (S3555C7*)(S3555C9*), ABISELECT(8,4), "S3555C1");
    check_base_class_offset(lv, (S3555C2*), 0, "S3555C1");
    check_base_class_offset(lv, (S3555C9*), ABISELECT(8,4), "S3555C1");
    test_class_info(&lv, &cd_S3555C1);
    dp->~S3555C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3555C1(Test_S3555C1, "S3555C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3555C1C1Ev();
extern void _ZN7S3555C1D1Ev();
Name_Map name_map_S3555C1[] = {
  NSPAIR(_ZN7S3555C1C1Ev),
  NSPAIR(_ZN7S3555C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S1566C34_nt;
extern VTBL_ENTRY _ZTI11S1566C34_nt[];
extern Class_Descriptor cd_S3555C4;
extern VTBL_ENTRY _ZTI7S3555C4[];
extern  VTBL_ENTRY _ZTV7S3555C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C4[];
extern Class_Descriptor cd_S3555C3;
extern VTBL_ENTRY _ZTI7S3555C3[];
extern  VTBL_ENTRY _ZTV7S3555C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C3[];
extern Class_Descriptor cd_S3555C8;
extern VTBL_ENTRY _ZTI7S3555C8[];
extern  VTBL_ENTRY _ZTV7S3555C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C8[];
extern Class_Descriptor cd_S3555C7;
extern VTBL_ENTRY _ZTI7S3555C7[];
extern  VTBL_ENTRY _ZTV7S3555C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C7[];
extern Class_Descriptor cd_S3555C2;
extern VTBL_ENTRY _ZTI7S3555C2[];
extern  VTBL_ENTRY _ZTV7S3555C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C2[];
extern Class_Descriptor cd_S3555C9;
extern VTBL_ENTRY _ZTI7S3555C9[];
extern  VTBL_ENTRY _ZTV7S3555C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C9[];
static Base_Class bases_S3555C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1566C34_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3555C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3555C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3555C8,    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
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3555C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3555C2,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3555C9,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3555C1[];
static  VTBL_ENTRY vtc_S3555C1[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C1[0]),
  0,
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3555C1[0]),
};
extern VTBL_ENTRY _ZTV7S3555C1[];
static  VTBL_ENTRY _tg__ZTV7S3555C2__7S3555C1[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3555C37S3555C2__7S3555C1[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3555C7__7S3555C2__7S3555C1[] = {
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3555C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3555C9__7S3555C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3555C4__7S3555C9__7S3555C1[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S3555C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3555C4__7S3555C1[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3555C7__7S3555C1[] = {
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3555C87S3555C7__7S3555C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3555C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3555C4__7S3555C7__7S3555C1[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S3555C7[0]),
};
static  VTT_ENTRY vtt_S3555C1[] = {
  {&(_ZTV7S3555C1[6]),  6,12},
  {&(_tg__ZTV7S3555C2__7S3555C1[6]),  6,6},
  {&(_tg__ZTV7S3555C37S3555C2__7S3555C1[5]),  5,5},
  {&(_tg__ZTV7S3555C37S3555C2__7S3555C1[5]),  5,5},
  {&(_tg__ZTV7S3555C2__7S3555C1[6]),  6,6},
  {&(_tg__ZTV7S3555C7__7S3555C2__7S3555C1[5]),  5,5},
  {&(_tg__ZTV7S3555C9__7S3555C1[6]),  6,6},
  {&(_tg__ZTV7S3555C9__7S3555C1[6]),  6,6},
  {&(_tg__ZTV7S3555C4__7S3555C9__7S3555C1[4]),  4,4},
  {&(_ZTV7S3555C1[6]),  6,12},
  {&(_ZTV7S3555C1[12]),  12,12},
  {&(_ZTV7S3555C1[12]),  12,12},
  {&(_tg__ZTV7S3555C4__7S3555C1[4]),  4,4},
  {&(_tg__ZTV7S3555C7__7S3555C1[5]),  5,5},
  {&(_tg__ZTV7S3555C87S3555C7__7S3555C1[3]),  3,3},
  {&(_tg__ZTV7S3555C4__7S3555C7__7S3555C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S3555C1[];
extern  VTBL_ENTRY _ZTV7S3555C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3555C1[];
Class_Descriptor cd_S3555C1 = {  "S3555C1", // class name
  bases_S3555C1, 8,
  &(vtc_S3555C1[0]), // expected_vtbl_contents
  &(vtt_S3555C1[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3555C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3555C1),12, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3555C1),16, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9530C2  {
  virtual  ~S9530C2(); // _ZN7S9530C2D1Ev
  virtual void  v3(); // _ZN7S9530C22v3Ev
  virtual void  v4(); // _ZN7S9530C22v4Ev
  virtual void  v5(); // _ZN7S9530C22v5Ev
  virtual void  v6(); // _ZN7S9530C22v6Ev
  S9530C2(); // tgen
};
//SIG(-1 S9530C2) C1{ vd v1 v2 v3 v4}


 S9530C2 ::~S9530C2(){ note_dtor("S9530C2", this);}
void  S9530C2 ::v3(){vfunc_called(this, "_ZN7S9530C22v3Ev");}
void  S9530C2 ::v4(){vfunc_called(this, "_ZN7S9530C22v4Ev");}
void  S9530C2 ::v5(){vfunc_called(this, "_ZN7S9530C22v5Ev");}
void  S9530C2 ::v6(){vfunc_called(this, "_ZN7S9530C22v6Ev");}
S9530C2 ::S9530C2(){ note_ctor("S9530C2", this);} // tgen

static void Test_S9530C2()
{
  extern Class_Descriptor cd_S9530C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9530C2, buf);
    S9530C2 *dp, &lv = *(dp=new (buf) S9530C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9530C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9530C2)");
    test_class_info(&lv, &cd_S9530C2);
    dp->~S9530C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9530C2(Test_S9530C2, "S9530C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9530C2C1Ev();
extern void _ZN7S9530C2D1Ev();
Name_Map name_map_S9530C2[] = {
  NSPAIR(_ZN7S9530C2C1Ev),
  NSPAIR(_ZN7S9530C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9530C2[];
extern void _ZN7S9530C2D1Ev();
extern void _ZN7S9530C2D0Ev();
extern void _ZN7S9530C22v3Ev();
extern void _ZN7S9530C22v4Ev();
extern void _ZN7S9530C22v5Ev();
extern void _ZN7S9530C22v6Ev();
static  VTBL_ENTRY vtc_S9530C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9530C2[0]),
  (VTBL_ENTRY)&_ZN7S9530C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9530C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9530C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9530C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9530C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9530C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9530C2[];
extern  VTBL_ENTRY _ZTV7S9530C2[];
Class_Descriptor cd_S9530C2 = {  "S9530C2", // class name
  0,0,//no base classes
  &(vtc_S9530C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9530C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9530C2),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  S9530C1  : S9530C2 {
  void *s9530c1f0[3];
  char s9530c1f1;
  ::S10220C14_nt s9530c1f2;
  virtual  ~S9530C1(); // _ZN7S9530C1D1Ev
  virtual void  v1(); // _ZN7S9530C12v1Ev
  virtual void  v2(); // _ZN7S9530C12v2Ev
  S9530C1(); // tgen
};
//SIG(1 S9530C1) C1{ BC2{ vd v3 v4 v5 v6} vd v1 v2 Fp[3] Fc FC3{ m Fp Fi FC4{ m} FC5{ m}}}


 S9530C1 ::~S9530C1(){ note_dtor("S9530C1", this);}
void  S9530C1 ::v1(){vfunc_called(this, "_ZN7S9530C12v1Ev");}
void  S9530C1 ::v2(){vfunc_called(this, "_ZN7S9530C12v2Ev");}
S9530C1 ::S9530C1(){ note_ctor("S9530C1", this);} // tgen

static void Test_S9530C1()
{
  extern Class_Descriptor cd_S9530C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S9530C1, buf);
    S9530C1 *dp, &lv = *(dp=new (buf) S9530C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S9530C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9530C1)");
    check_base_class_offset(lv, (S9530C2*), 0, "S9530C1");
    check_field_offset(lv, s9530c1f0, ABISELECT(8,4), "S9530C1.s9530c1f0");
    check_field_offset(lv, s9530c1f1, ABISELECT(32,16), "S9530C1.s9530c1f1");
    check_field_offset(lv, s9530c1f2, ABISELECT(40,20), "S9530C1.s9530c1f2");
    test_class_info(&lv, &cd_S9530C1);
    dp->~S9530C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9530C1(Test_S9530C1, "S9530C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S9530C1C1Ev();
extern void _ZN7S9530C1D1Ev();
Name_Map name_map_S9530C1[] = {
  NSPAIR(_ZN7S9530C1C1Ev),
  NSPAIR(_ZN7S9530C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9530C2;
extern VTBL_ENTRY _ZTI7S9530C2[];
extern  VTBL_ENTRY _ZTV7S9530C2[];
static Base_Class bases_S9530C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9530C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9530C1[];
extern void _ZN7S9530C1D1Ev();
extern void _ZN7S9530C1D0Ev();
extern void _ZN7S9530C22v3Ev();
extern void _ZN7S9530C22v4Ev();
extern void _ZN7S9530C22v5Ev();
extern void _ZN7S9530C22v6Ev();
extern void _ZN7S9530C12v1Ev();
extern void _ZN7S9530C12v2Ev();
static  VTBL_ENTRY vtc_S9530C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9530C1[0]),
  (VTBL_ENTRY)&_ZN7S9530C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9530C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9530C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9530C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9530C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9530C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9530C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9530C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9530C1[];
extern  VTBL_ENTRY _ZTV7S9530C1[];
Class_Descriptor cd_S9530C1 = {  "S9530C1", // class name
  bases_S9530C1, 1,
  &(vtc_S9530C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S9530C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9530C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5620C2  {
  ::S1566C32 s5620c2f0;
  void  mf5620c2(); // _ZN7S5620C28mf5620c2Ev
};
//SIG(-1 S5620C2) C1{ m FC2{ m FC3{ Fc[2] Fs FC4{ Fi} Fc[8]}}}


void  S5620C2 ::mf5620c2(){}

static void Test_S5620C2()
{
  {
    init_simple_test("S5620C2");
    S5620C2 lv;
    check2(sizeof(lv), 16, "sizeof(S5620C2)");
    check2(__alignof__(lv), 4, "__alignof__(S5620C2)");
    check_field_offset(lv, s5620c2f0, 0, "S5620C2.s5620c2f0");
  }
}
static Arrange_To_Call_Me vS5620C2(Test_S5620C2, "S5620C2", 16);

#else // __cplusplus

Class_Descriptor cd_S5620C2 = {  "S5620C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  16, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5620C7_nt  {
  char s5620c7f0[20];
};
//SIG(-1 S5620C7_nt) C1{ Fc[20]}



//skip512 S5620C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5620C6_nt  {
  ::S5620C7_nt s5620c6f0;
  char s5620c6f1[16];
};
//SIG(-1 S5620C6_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S5620C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5620C1  : S5620C2 {
  ::S5620C6_nt s5620c1f0;
};
//SIG(1 S5620C1) C1{ BC2{ m FC3{ m FC4{ Fc[2] Fs FC5{ Fi} Fc[8]}}} FC6{ FC7{ Fc[20]} Fc[16]}}



static void Test_S5620C1()
{
  extern Class_Descriptor cd_S5620C1;
  void *lvp;
  {
    int buf[14];
    init_test(&cd_S5620C1, buf);
    S5620C1 &lv = *(new (buf) S5620C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 52, "sizeof(S5620C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5620C1)");
    check_base_class_offset(lv, (S5620C2*), 0, "S5620C1");
    check_field_offset(lv, s5620c1f0, 16, "S5620C1.s5620c1f0");
    test_class_info(&lv, &cd_S5620C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5620C1(Test_S5620C1, "S5620C1", 52);

#else // __cplusplus

extern Class_Descriptor cd_S5620C2;
static Base_Class bases_S5620C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5620C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S5620C1 = {  "S5620C1", // class name
  bases_S5620C1, 1,
  0, // no vftv
  0, //no vtt
  52, // 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  S19499C3  : virtual S3600C19 {
  ~S19499C3(); // tgen
  S19499C3(); // tgen
};
//SIG(-1 S19499C3) C1{ VBC2{ m}}


S19499C3 ::~S19499C3(){ note_dtor("S19499C3", this);} // tgen
S19499C3 ::S19499C3(){ note_ctor("S19499C3", this);} // tgen

static void Test_S19499C3()
{
  extern Class_Descriptor cd_S19499C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19499C3, buf);
    S19499C3 *dp, &lv = *(dp=new (buf) S19499C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19499C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19499C3)");
    check_base_class_offset(lv, (S3600C19*), 0, "S19499C3");
    test_class_info(&lv, &cd_S19499C3);
    dp->~S19499C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19499C3(Test_S19499C3, "S19499C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19499C3C1Ev();
extern void _ZN8S19499C3D1Ev();
Name_Map name_map_S19499C3[] = {
  NSPAIR(_ZN8S19499C3C1Ev),
  NSPAIR(_ZN8S19499C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S19499C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19499C3[];
static  VTBL_ENTRY vtc_S19499C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19499C3[0]),
};
extern VTBL_ENTRY _ZTV8S19499C3[];
static  VTT_ENTRY vtt_S19499C3[] = {
  {&(_ZTV8S19499C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19499C3[];
extern  VTBL_ENTRY _ZTV8S19499C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19499C3[];
Class_Descriptor cd_S19499C3 = {  "S19499C3", // class name
  bases_S19499C3, 1,
  &(vtc_S19499C3[0]), // expected_vtbl_contents
  &(vtt_S19499C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19499C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19499C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19499C3),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  S19499C8_nt  {
};
//SIG(-1 S19499C8_nt) C1{}



//skip512 S19499C8_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S19499C8_nt[];
VTBL_ENTRY *P__ZTI11S19499C8_nt = _ZTI11S19499C8_nt; 
Class_Descriptor cd_S19499C8_nt = {  "S19499C8_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S19499C8_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  S19499C6  : S19252C5_nt , virtual S19499C8_nt {
  ~S19499C6(); // tgen
  S19499C6(); // tgen
};
//SIG(-1 S19499C6) C1{ BC2{} VBC3{}}


S19499C6 ::~S19499C6(){ note_dtor("S19499C6", this);} // tgen
S19499C6 ::S19499C6(){ note_ctor("S19499C6", this);} // tgen

static void Test_S19499C6()
{
  extern Class_Descriptor cd_S19499C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19499C6, buf);
    S19499C6 *dp, &lv = *(dp=new (buf) S19499C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19499C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19499C6)");
    check_base_class_offset(lv, (S19252C5_nt*), 0, "S19499C6");
    check_base_class_offset(lv, (S19499C8_nt*), 0, "S19499C6");
    test_class_info(&lv, &cd_S19499C6);
    dp->~S19499C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19499C6(Test_S19499C6, "S19499C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19499C6C1Ev();
extern void _ZN8S19499C6D1Ev();
Name_Map name_map_S19499C6[] = {
  NSPAIR(_ZN8S19499C6C1Ev),
  NSPAIR(_ZN8S19499C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19252C5_nt;
extern VTBL_ENTRY _ZTI11S19252C5_nt[];
extern Class_Descriptor cd_S19499C8_nt;
extern VTBL_ENTRY _ZTI11S19499C8_nt[];
static Base_Class bases_S19499C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19252C5_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_S19499C8_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19499C6[];
static  VTBL_ENTRY vtc_S19499C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19499C6[0]),
};
extern VTBL_ENTRY _ZTV8S19499C6[];
static  VTT_ENTRY vtt_S19499C6[] = {
  {&(_ZTV8S19499C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19499C6[];
extern  VTBL_ENTRY _ZTV8S19499C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19499C6[];
Class_Descriptor cd_S19499C6 = {  "S19499C6", // class name
  bases_S19499C6, 2,
  &(vtc_S19499C6[0]), // expected_vtbl_contents
  &(vtt_S19499C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19499C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19499C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19499C6),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  S19499C5  : virtual S3600C19 , S19499C6 , virtual S3600C6_nt {
  ~S19499C5(); // tgen
  S19499C5(); // tgen
};
//SIG(-1 S19499C5) C1{ VBC2{ m} BC3{ BC4{} VBC5{}} VBC6{ m}}


S19499C5 ::~S19499C5(){ note_dtor("S19499C5", this);} // tgen
S19499C5 ::S19499C5(){ note_ctor("S19499C5", this);} // tgen

static void Test_S19499C5()
{
  extern Class_Descriptor cd_S19499C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19499C5, buf);
    S19499C5 *dp, &lv = *(dp=new (buf) S19499C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19499C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19499C5)");
    check_base_class_offset(lv, (S3600C19*), 0, "S19499C5");
    check_base_class_offset(lv, (S19252C5_nt*)(S19499C6*), 0, "S19499C5");
    check_base_class_offset(lv, (S19499C8_nt*)(S19499C6*), 0, "S19499C5");
    check_base_class_offset(lv, (S19499C6*), 0, "S19499C5");
    check_base_class_offset(lv, (S3600C6_nt*), 0, "S19499C5");
    test_class_info(&lv, &cd_S19499C5);
    dp->~S19499C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19499C5(Test_S19499C5, "S19499C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19499C5C1Ev();
extern void _ZN8S19499C5D1Ev();
Name_Map name_map_S19499C5[] = {
  NSPAIR(_ZN8S19499C5C1Ev),
  NSPAIR(_ZN8S19499C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19252C5_nt;
extern VTBL_ENTRY _ZTI11S19252C5_nt[];
extern Class_Descriptor cd_S19499C8_nt;
extern VTBL_ENTRY _ZTI11S19499C8_nt[];
extern Class_Descriptor cd_S19499C6;
extern VTBL_ENTRY _ZTI8S19499C6[];
extern  VTBL_ENTRY _ZTV8S19499C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19499C6[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
static Base_Class bases_S19499C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19252C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19499C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19499C6,    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_S3600C6_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19499C5[];
static  VTBL_ENTRY vtc_S19499C5[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19499C5[0]),
};
extern VTBL_ENTRY _ZTV8S19499C5[];
static  VTBL_ENTRY _tg__ZTV8S19499C6__8S19499C5[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19499C6[0]),
};
static  VTT_ENTRY vtt_S19499C5[] = {
  {&(_ZTV8S19499C5[5]),  5,5},
  {&(_tg__ZTV8S19499C6__8S19499C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19499C5[];
extern  VTBL_ENTRY _ZTV8S19499C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19499C5[];
Class_Descriptor cd_S19499C5 = {  "S19499C5", // class name
  bases_S19499C5, 5,
  &(vtc_S19499C5[0]), // expected_vtbl_contents
  &(vtt_S19499C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19499C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19499C5),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19499C5),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  S19499C2  : S19499C3 , virtual S19499C5 {
  ~S19499C2(); // tgen
  S19499C2(); // tgen
};
//SIG(-1 S19499C2) C1{ BC2{ VBC3{ m}} VBC4{ VBC3 BC5{ BC6{} VBC7{}} VBC8{ m}}}


S19499C2 ::~S19499C2(){ note_dtor("S19499C2", this);} // tgen
S19499C2 ::S19499C2(){ note_ctor("S19499C2", this);} // tgen

static void Test_S19499C2()
{
  extern Class_Descriptor cd_S19499C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19499C2, buf);
    S19499C2 *dp, &lv = *(dp=new (buf) S19499C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19499C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19499C2)");
    check_base_class_offset(lv, (S3600C19*)(S19499C3*), 0, "S19499C2");
    check_base_class_offset(lv, (S3600C19*)(S19499C5*), 0, "S19499C2");
    check_base_class_offset(lv, (S19499C3*), 0, "S19499C2");
    check_base_class_offset(lv, (S19252C5_nt*)(S19499C6*)(S19499C5*), ABISELECT(8,4), "S19499C2");
    check_base_class_offset(lv, (S19499C8_nt*)(S19499C6*)(S19499C5*), 0, "S19499C2");
    check_base_class_offset(lv, (S19499C6*)(S19499C5*), ABISELECT(8,4), "S19499C2");
    check_base_class_offset(lv, (S3600C6_nt*)(S19499C5*), 0, "S19499C2");
    check_base_class_offset(lv, (S19499C5*), ABISELECT(8,4), "S19499C2");
    test_class_info(&lv, &cd_S19499C2);
    dp->~S19499C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19499C2(Test_S19499C2, "S19499C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19499C2C1Ev();
extern void _ZN8S19499C2D1Ev();
Name_Map name_map_S19499C2[] = {
  NSPAIR(_ZN8S19499C2C1Ev),
  NSPAIR(_ZN8S19499C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19499C3;
extern VTBL_ENTRY _ZTI8S19499C3[];
extern  VTBL_ENTRY _ZTV8S19499C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19499C3[];
extern Class_Descriptor cd_S19252C5_nt;
extern VTBL_ENTRY _ZTI11S19252C5_nt[];
extern Class_Descriptor cd_S19499C8_nt;
extern VTBL_ENTRY _ZTI11S19499C8_nt[];
extern Class_Descriptor cd_S19499C6;
extern VTBL_ENTRY _ZTI8S19499C6[];
extern  VTBL_ENTRY _ZTV8S19499C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19499C6[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
extern Class_Descriptor cd_S19499C5;
extern VTBL_ENTRY _ZTI8S19499C5[];
extern  VTBL_ENTRY _ZTV8S19499C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19499C5[];
static Base_Class bases_S19499C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19499C3,    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_S19252C5_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19499C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19499C6,    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
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3600C6_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
    6, //immediately_derived
  0, 1},
  {&cd_S19499C5,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    5, //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 _ZTI8S19499C2[];
static  VTBL_ENTRY vtc_S19499C2[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19499C2[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19499C2[0]),
};
extern VTBL_ENTRY _ZTV8S19499C2[];
static  VTBL_ENTRY _tg__ZTV8S19499C3__8S19499C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19499C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19499C5__8S19499C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19499C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19499C68S19499C5__8S19499C2[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19499C6[0]),
};
static  VTT_ENTRY vtt_S19499C2[] = {
  {&(_ZTV8S19499C2[6]),  6,11},
  {&(_tg__ZTV8S19499C3__8S19499C2[3]),  3,3},
  {&(_ZTV8S19499C2[11]),  11,11},
  {&(_tg__ZTV8S19499C5__8S19499C2[5]),  5,5},
  {&(_tg__ZTV8S19499C68S19499C5__8S19499C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19499C2[];
extern  VTBL_ENTRY _ZTV8S19499C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19499C2[];
Class_Descriptor cd_S19499C2 = {  "S19499C2", // class name
  bases_S19499C2, 7,
  &(vtc_S19499C2[0]), // expected_vtbl_contents
  &(vtt_S19499C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19499C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19499C2),11, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19499C2),5, //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  S19499C10  : virtual S19499C5 {
  ~S19499C10(); // tgen
  S19499C10(); // tgen
};
//SIG(-1 S19499C10) C1{ VBC2{ VBC3{ m} BC4{ BC5{} VBC6{}} VBC7{ m}}}


S19499C10 ::~S19499C10(){ note_dtor("S19499C10", this);} // tgen
S19499C10 ::S19499C10(){ note_ctor("S19499C10", this);} // tgen

static void Test_S19499C10()
{
  extern Class_Descriptor cd_S19499C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19499C10, buf);
    S19499C10 *dp, &lv = *(dp=new (buf) S19499C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19499C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19499C10)");
    check_base_class_offset(lv, (S3600C19*)(S19499C5*), 0, "S19499C10");
    check_base_class_offset(lv, (S19252C5_nt*)(S19499C6*)(S19499C5*), 0, "S19499C10");
    check_base_class_offset(lv, (S19499C8_nt*)(S19499C6*)(S19499C5*), 0, "S19499C10");
    check_base_class_offset(lv, (S19499C6*)(S19499C5*), 0, "S19499C10");
    check_base_class_offset(lv, (S3600C6_nt*)(S19499C5*), 0, "S19499C10");
    check_base_class_offset(lv, (S19499C5*), 0, "S19499C10");
    test_class_info(&lv, &cd_S19499C10);
    dp->~S19499C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19499C10(Test_S19499C10, "S19499C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19499C10C1Ev();
extern void _ZN9S19499C10D1Ev();
Name_Map name_map_S19499C10[] = {
  NSPAIR(_ZN9S19499C10C1Ev),
  NSPAIR(_ZN9S19499C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19252C5_nt;
extern VTBL_ENTRY _ZTI11S19252C5_nt[];
extern Class_Descriptor cd_S19499C8_nt;
extern VTBL_ENTRY _ZTI11S19499C8_nt[];
extern Class_Descriptor cd_S19499C6;
extern VTBL_ENTRY _ZTI8S19499C6[];
extern  VTBL_ENTRY _ZTV8S19499C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19499C6[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
extern Class_Descriptor cd_S19499C5;
extern VTBL_ENTRY _ZTI8S19499C5[];
extern  VTBL_ENTRY _ZTV8S19499C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19499C5[];
static Base_Class bases_S19499C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19252C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19499C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19499C6,    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
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3600C6_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
    5, //immediately_derived
  0, 1},
  {&cd_S19499C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19499C10[];
static  VTBL_ENTRY vtc_S19499C10[] = {
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19499C10[0]),
};
extern VTBL_ENTRY _ZTV9S19499C10[];
static  VTBL_ENTRY _tg__ZTV8S19499C5__9S19499C10[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19499C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19499C68S19499C5__9S19499C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19499C6[0]),
};
static  VTT_ENTRY vtt_S19499C10[] = {
  {&(_ZTV9S19499C10[6]),  6,6},
  {&(_ZTV9S19499C10[6]),  6,6},
  {&(_tg__ZTV8S19499C5__9S19499C10[5]),  5,5},
  {&(_tg__ZTV8S19499C68S19499C5__9S19499C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19499C10[];
extern  VTBL_ENTRY _ZTV9S19499C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19499C10[];
Class_Descriptor cd_S19499C10 = {  "S19499C10", // class name
  bases_S19499C10, 6,
  &(vtc_S19499C10[0]), // expected_vtbl_contents
  &(vtt_S19499C10[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19499C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19499C10),6, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19499C10),4, //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  S19499C1  : virtual S19499C2 , S19499C10 {
  ~S19499C1(); // tgen
  S19499C1(); // tgen
};
//SIG(1 S19499C1) C1{ VBC2{ BC3{ VBC4{ m}} VBC5{ VBC4 BC6{ BC7{} VBC8{}} VBC9{ m}}} BC10{ VBC5}}


S19499C1 ::~S19499C1(){ note_dtor("S19499C1", this);} // tgen
S19499C1 ::S19499C1(){ note_ctor("S19499C1", this);} // tgen

static void Test_S19499C1()
{
  extern Class_Descriptor cd_S19499C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19499C1, buf);
    S19499C1 *dp, &lv = *(dp=new (buf) S19499C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19499C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19499C1)");
    check_base_class_offset(lv, (S3600C19*)(S19499C3*)(S19499C2*), 0, "S19499C1");
    check_base_class_offset(lv, (S3600C19*)(S19499C5*), 0, "S19499C1");
    check_base_class_offset(lv, (S19499C3*)(S19499C2*), ABISELECT(8,4), "S19499C1");
    check_base_class_offset(lv, (S19252C5_nt*)(S19499C6*)(S19499C5*), 0, "S19499C1");
    check_base_class_offset(lv, (S19499C8_nt*)(S19499C6*)(S19499C5*), 0, "S19499C1");
    check_base_class_offset(lv, (S19499C6*)(S19499C5*), 0, "S19499C1");
    check_base_class_offset(lv, (S3600C6_nt*)(S19499C5*), 0, "S19499C1");
    check_base_class_offset(lv, (S19499C5*)(S19499C2*), 0, "S19499C1");
    check_base_class_offset(lv, (S19499C5*)(S19499C10*), 0, "S19499C1");
    check_base_class_offset(lv, (S19499C2*), ABISELECT(8,4), "S19499C1");
    check_base_class_offset(lv, (S19499C10*), 0, "S19499C1");
    test_class_info(&lv, &cd_S19499C1);
    dp->~S19499C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19499C1(Test_S19499C1, "S19499C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19499C1C1Ev();
extern void _ZN8S19499C1D1Ev();
Name_Map name_map_S19499C1[] = {
  NSPAIR(_ZN8S19499C1C1Ev),
  NSPAIR(_ZN8S19499C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19499C3;
extern VTBL_ENTRY _ZTI8S19499C3[];
extern  VTBL_ENTRY _ZTV8S19499C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19499C3[];
extern Class_Descriptor cd_S19252C5_nt;
extern VTBL_ENTRY _ZTI11S19252C5_nt[];
extern Class_Descriptor cd_S19499C8_nt;
extern VTBL_ENTRY _ZTI11S19499C8_nt[];
extern Class_Descriptor cd_S19499C6;
extern VTBL_ENTRY _ZTI8S19499C6[];
extern  VTBL_ENTRY _ZTV8S19499C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19499C6[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
extern Class_Descriptor cd_S19499C5;
extern VTBL_ENTRY _ZTI8S19499C5[];
extern  VTBL_ENTRY _ZTV8S19499C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19499C5[];
extern Class_Descriptor cd_S19499C2;
extern VTBL_ENTRY _ZTI8S19499C2[];
extern  VTBL_ENTRY _ZTV8S19499C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19499C2[];
extern Class_Descriptor cd_S19499C10;
extern VTBL_ENTRY _ZTI9S19499C10[];
extern  VTBL_ENTRY _ZTV9S19499C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19499C10[];
static Base_Class bases_S19499C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19499C3,    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
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19252C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19499C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19499C6,    0, //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
    6, //immediately_derived
  0, 0},
  {&cd_S3600C6_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
    6, //immediately_derived
  0, 1},
  {&cd_S19499C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19499C2,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19499C10,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19499C1[];
static  VTBL_ENTRY vtc_S19499C1[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19499C1[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19499C1[0]),
};
extern VTBL_ENTRY _ZTV8S19499C1[];
static  VTBL_ENTRY _tg__ZTV9S19499C10__8S19499C1[] = {
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19499C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19499C2__8S19499C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19499C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19499C38S19499C2__8S19499C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19499C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19499C5__8S19499C2__8S19499C1[] = {
  0,
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19499C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19499C5__8S19499C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19499C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19499C68S19499C5__8S19499C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19499C6[0]),
};
static  VTT_ENTRY vtt_S19499C1[] = {
  {&(_ZTV8S19499C1[7]),  7,13},
  {&(_tg__ZTV9S19499C10__8S19499C1[6]),  6,6},
  {&(_tg__ZTV9S19499C10__8S19499C1[6]),  6,6},
  {&(_ZTV8S19499C1[13]),  13,13},
  {&(_ZTV8S19499C1[7]),  7,13},
  {&(_tg__ZTV8S19499C2__8S19499C1[6]),  6,6},
  {&(_tg__ZTV8S19499C38S19499C2__8S19499C1[3]),  3,3},
  {&(_tg__ZTV8S19499C5__8S19499C2__8S19499C1[5]),  5,5},
  {&(_tg__ZTV8S19499C5__8S19499C1[5]),  5,5},
  {&(_tg__ZTV8S19499C68S19499C5__8S19499C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19499C1[];
extern  VTBL_ENTRY _ZTV8S19499C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19499C1[];
Class_Descriptor cd_S19499C1 = {  "S19499C1", // class name
  bases_S19499C1, 9,
  &(vtc_S19499C1[0]), // expected_vtbl_contents
  &(vtt_S19499C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19499C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19499C1),13, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19499C1),10, //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  S6676C2  {
  int s6676c2f0[2];
  char s6676c2f1;
  ::S19426C9_nt s6676c2f2;
  virtual void  v3(); // _ZN7S6676C22v3Ev
  virtual void  v4(); // _ZN7S6676C22v4Ev
  virtual void  v5(); // _ZN7S6676C22v5Ev
  ~S6676C2(); // tgen
  S6676C2(); // tgen
};
//SIG(-1 S6676C2) C1{ v1 v2 v3 Fi[2] Fc FU2{ m}}


void  S6676C2 ::v3(){vfunc_called(this, "_ZN7S6676C22v3Ev");}
void  S6676C2 ::v4(){vfunc_called(this, "_ZN7S6676C22v4Ev");}
void  S6676C2 ::v5(){vfunc_called(this, "_ZN7S6676C22v5Ev");}
S6676C2 ::~S6676C2(){ note_dtor("S6676C2", this);} // tgen
S6676C2 ::S6676C2(){ note_ctor("S6676C2", this);} // tgen

static void Test_S6676C2()
{
  extern Class_Descriptor cd_S6676C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6676C2, buf);
    S6676C2 *dp, &lv = *(dp=new (buf) S6676C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6676C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6676C2)");
    check_field_offset(lv, s6676c2f0, ABISELECT(8,4), "S6676C2.s6676c2f0");
    check_field_offset(lv, s6676c2f1, ABISELECT(16,12), "S6676C2.s6676c2f1");
    check_field_offset(lv, s6676c2f2, ABISELECT(17,13), "S6676C2.s6676c2f2");
    test_class_info(&lv, &cd_S6676C2);
    dp->~S6676C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6676C2(Test_S6676C2, "S6676C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S6676C2C1Ev();
extern void _ZN7S6676C2D1Ev();
Name_Map name_map_S6676C2[] = {
  NSPAIR(_ZN7S6676C2C1Ev),
  NSPAIR(_ZN7S6676C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6676C2[];
extern void _ZN7S6676C22v3Ev();
extern void _ZN7S6676C22v4Ev();
extern void _ZN7S6676C22v5Ev();
static  VTBL_ENTRY vtc_S6676C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6676C2[0]),
  (VTBL_ENTRY)&_ZN7S6676C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6676C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6676C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S6676C2[];
extern  VTBL_ENTRY _ZTV7S6676C2[];
Class_Descriptor cd_S6676C2 = {  "S6676C2", // class name
  0,0,//no base classes
  &(vtc_S6676C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S6676C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6676C2),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  S6676C4  {
  int s6676c4f0[3];
  virtual  ~S6676C4(); // _ZN7S6676C4D1Ev
  virtual void  v6(); // _ZN7S6676C42v6Ev
  virtual void  v7(); // _ZN7S6676C42v7Ev
  virtual void  v8(); // _ZN7S6676C42v8Ev
  virtual void  v9(); // _ZN7S6676C42v9Ev
  S6676C4(); // tgen
};
//SIG(-1 S6676C4) C1{ vd v1 v2 v3 v4 Fi[3]}


 S6676C4 ::~S6676C4(){ note_dtor("S6676C4", this);}
void  S6676C4 ::v6(){vfunc_called(this, "_ZN7S6676C42v6Ev");}
void  S6676C4 ::v7(){vfunc_called(this, "_ZN7S6676C42v7Ev");}
void  S6676C4 ::v8(){vfunc_called(this, "_ZN7S6676C42v8Ev");}
void  S6676C4 ::v9(){vfunc_called(this, "_ZN7S6676C42v9Ev");}
S6676C4 ::S6676C4(){ note_ctor("S6676C4", this);} // tgen

static void Test_S6676C4()
{
  extern Class_Descriptor cd_S6676C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6676C4, buf);
    S6676C4 *dp, &lv = *(dp=new (buf) S6676C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6676C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6676C4)");
    check_field_offset(lv, s6676c4f0, ABISELECT(8,4), "S6676C4.s6676c4f0");
    test_class_info(&lv, &cd_S6676C4);
    dp->~S6676C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6676C4(Test_S6676C4, "S6676C4", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S6676C4C1Ev();
extern void _ZN7S6676C4D1Ev();
Name_Map name_map_S6676C4[] = {
  NSPAIR(_ZN7S6676C4C1Ev),
  NSPAIR(_ZN7S6676C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6676C4[];
extern void _ZN7S6676C4D1Ev();
extern void _ZN7S6676C4D0Ev();
extern void _ZN7S6676C42v6Ev();
extern void _ZN7S6676C42v7Ev();
extern void _ZN7S6676C42v8Ev();
extern void _ZN7S6676C42v9Ev();
static  VTBL_ENTRY vtc_S6676C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6676C4[0]),
  (VTBL_ENTRY)&_ZN7S6676C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6676C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6676C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6676C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6676C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6676C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S6676C4[];
extern  VTBL_ENTRY _ZTV7S6676C4[];
Class_Descriptor cd_S6676C4 = {  "S6676C4", // class name
  0,0,//no base classes
  &(vtc_S6676C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S6676C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6676C4),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  S6676C1  : S6676C2 {
  ::S6676C4 s6676c1f0;
  virtual void  v1(); // _ZN7S6676C12v1Ev
  virtual void  v2(); // _ZN7S6676C12v2Ev
  ~S6676C1(); // tgen
  S6676C1(); // tgen
};
//SIG(1 S6676C1) C1{ BC2{ v3 v4 v5 Fi[2] Fc FU3{ m}} v1 v2 FC4{ vd v6 v7 v8 v9 Fi[3]}}


void  S6676C1 ::v1(){vfunc_called(this, "_ZN7S6676C12v1Ev");}
void  S6676C1 ::v2(){vfunc_called(this, "_ZN7S6676C12v2Ev");}
S6676C1 ::~S6676C1(){ note_dtor("S6676C1", this);} // tgen
S6676C1 ::S6676C1(){ note_ctor("S6676C1", this);} // tgen

static void Test_S6676C1()
{
  extern Class_Descriptor cd_S6676C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S6676C1, buf);
    S6676C1 *dp, &lv = *(dp=new (buf) S6676C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S6676C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6676C1)");
    check_base_class_offset(lv, (S6676C2*), 0, "S6676C1");
    check_field_offset(lv, s6676c1f0, ABISELECT(24,16), "S6676C1.s6676c1f0");
    test_class_info(&lv, &cd_S6676C1);
    dp->~S6676C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6676C1(Test_S6676C1, "S6676C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S6676C1C1Ev();
extern void _ZN7S6676C1D1Ev();
Name_Map name_map_S6676C1[] = {
  NSPAIR(_ZN7S6676C1C1Ev),
  NSPAIR(_ZN7S6676C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6676C2;
extern VTBL_ENTRY _ZTI7S6676C2[];
extern  VTBL_ENTRY _ZTV7S6676C2[];
static Base_Class bases_S6676C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6676C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S6676C1[];
extern void _ZN7S6676C22v3Ev();
extern void _ZN7S6676C22v4Ev();
extern void _ZN7S6676C22v5Ev();
extern void _ZN7S6676C12v1Ev();
extern void _ZN7S6676C12v2Ev();
static  VTBL_ENTRY vtc_S6676C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6676C1[0]),
  (VTBL_ENTRY)&_ZN7S6676C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6676C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6676C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6676C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6676C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6676C1[];
extern  VTBL_ENTRY _ZTV7S6676C1[];
Class_Descriptor cd_S6676C1 = {  "S6676C1", // class name
  bases_S6676C1, 1,
  &(vtc_S6676C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S6676C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6676C1),7, //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  S10118C2  {
  int s10118c2f0;
  virtual  ~S10118C2(); // _ZN8S10118C2D1Ev
  virtual void  v7(); // _ZN8S10118C22v7Ev
  virtual void  v8(); // _ZN8S10118C22v8Ev
  virtual void  v9(); // _ZN8S10118C22v9Ev
  virtual void  v10(); // _ZN8S10118C23v10Ev
  virtual void  v11(); // _ZN8S10118C23v11Ev
  virtual void  v12(); // _ZN8S10118C23v12Ev
  S10118C2(); // tgen
};
//SIG(-1 S10118C2) C1{ vd v1 v2 v3 v4 v5 v6 Fi}


 S10118C2 ::~S10118C2(){ note_dtor("S10118C2", this);}
void  S10118C2 ::v7(){vfunc_called(this, "_ZN8S10118C22v7Ev");}
void  S10118C2 ::v8(){vfunc_called(this, "_ZN8S10118C22v8Ev");}
void  S10118C2 ::v9(){vfunc_called(this, "_ZN8S10118C22v9Ev");}
void  S10118C2 ::v10(){vfunc_called(this, "_ZN8S10118C23v10Ev");}
void  S10118C2 ::v11(){vfunc_called(this, "_ZN8S10118C23v11Ev");}
void  S10118C2 ::v12(){vfunc_called(this, "_ZN8S10118C23v12Ev");}
S10118C2 ::S10118C2(){ note_ctor("S10118C2", this);} // tgen

static void Test_S10118C2()
{
  extern Class_Descriptor cd_S10118C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S10118C2, buf);
    S10118C2 *dp, &lv = *(dp=new (buf) S10118C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10118C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10118C2)");
    check_field_offset(lv, s10118c2f0, ABISELECT(8,4), "S10118C2.s10118c2f0");
    test_class_info(&lv, &cd_S10118C2);
    dp->~S10118C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10118C2(Test_S10118C2, "S10118C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S10118C2C1Ev();
extern void _ZN8S10118C2D1Ev();
Name_Map name_map_S10118C2[] = {
  NSPAIR(_ZN8S10118C2C1Ev),
  NSPAIR(_ZN8S10118C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10118C2[];
extern void _ZN8S10118C2D1Ev();
extern void _ZN8S10118C2D0Ev();
extern void _ZN8S10118C22v7Ev();
extern void _ZN8S10118C22v8Ev();
extern void _ZN8S10118C22v9Ev();
extern void _ZN8S10118C23v10Ev();
extern void _ZN8S10118C23v11Ev();
extern void _ZN8S10118C23v12Ev();
static  VTBL_ENTRY vtc_S10118C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10118C2[0]),
  (VTBL_ENTRY)&_ZN8S10118C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10118C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10118C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10118C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10118C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10118C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10118C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10118C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S10118C2[];
extern  VTBL_ENTRY _ZTV8S10118C2[];
Class_Descriptor cd_S10118C2 = {  "S10118C2", // class name
  0,0,//no base classes
  &(vtc_S10118C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10118C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10118C2),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10118C1  : S10118C2 {
  void *s10118c1f0[3];
  int s10118c1f1;
  virtual  ~S10118C1(); // _ZN8S10118C1D1Ev
  virtual void  v1(); // _ZN8S10118C12v1Ev
  virtual void  v2(); // _ZN8S10118C12v2Ev
  virtual void  v3(); // _ZN8S10118C12v3Ev
  virtual void  v4(); // _ZN8S10118C12v4Ev
  virtual void  v5(); // _ZN8S10118C12v5Ev
  virtual void  v6(); // _ZN8S10118C12v6Ev
  S10118C1(); // tgen
};
//SIG(1 S10118C1) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 Fi} vd v1 v2 v3 v4 v5 v6 Fp[3] Fi}


 S10118C1 ::~S10118C1(){ note_dtor("S10118C1", this);}
void  S10118C1 ::v1(){vfunc_called(this, "_ZN8S10118C12v1Ev");}
void  S10118C1 ::v2(){vfunc_called(this, "_ZN8S10118C12v2Ev");}
void  S10118C1 ::v3(){vfunc_called(this, "_ZN8S10118C12v3Ev");}
void  S10118C1 ::v4(){vfunc_called(this, "_ZN8S10118C12v4Ev");}
void  S10118C1 ::v5(){vfunc_called(this, "_ZN8S10118C12v5Ev");}
void  S10118C1 ::v6(){vfunc_called(this, "_ZN8S10118C12v6Ev");}
S10118C1 ::S10118C1(){ note_ctor("S10118C1", this);} // tgen

static void Test_S10118C1()
{
  extern Class_Descriptor cd_S10118C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S10118C1, buf);
    S10118C1 *dp, &lv = *(dp=new (buf) S10118C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S10118C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10118C1)");
    check_base_class_offset(lv, (S10118C2*), 0, "S10118C1");
    check_field_offset(lv, s10118c1f0, ABISELECT(16,8), "S10118C1.s10118c1f0");
    check_field_offset(lv, s10118c1f1, ABISELECT(40,20), "S10118C1.s10118c1f1");
    test_class_info(&lv, &cd_S10118C1);
    dp->~S10118C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10118C1(Test_S10118C1, "S10118C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S10118C1C1Ev();
extern void _ZN8S10118C1D1Ev();
Name_Map name_map_S10118C1[] = {
  NSPAIR(_ZN8S10118C1C1Ev),
  NSPAIR(_ZN8S10118C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10118C2;
extern VTBL_ENTRY _ZTI8S10118C2[];
extern  VTBL_ENTRY _ZTV8S10118C2[];
static Base_Class bases_S10118C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10118C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10118C1[];
extern void _ZN8S10118C1D1Ev();
extern void _ZN8S10118C1D0Ev();
extern void _ZN8S10118C22v7Ev();
extern void _ZN8S10118C22v8Ev();
extern void _ZN8S10118C22v9Ev();
extern void _ZN8S10118C23v10Ev();
extern void _ZN8S10118C23v11Ev();
extern void _ZN8S10118C23v12Ev();
extern void _ZN8S10118C12v1Ev();
extern void _ZN8S10118C12v2Ev();
extern void _ZN8S10118C12v3Ev();
extern void _ZN8S10118C12v4Ev();
extern void _ZN8S10118C12v5Ev();
extern void _ZN8S10118C12v6Ev();
static  VTBL_ENTRY vtc_S10118C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10118C1[0]),
  (VTBL_ENTRY)&_ZN8S10118C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10118C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10118C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10118C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10118C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10118C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10118C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10118C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10118C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10118C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10118C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10118C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10118C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10118C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10118C1[];
extern  VTBL_ENTRY _ZTV8S10118C1[];
Class_Descriptor cd_S10118C1 = {  "S10118C1", // class name
  bases_S10118C1, 1,
  &(vtc_S10118C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S10118C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10118C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11235C1  {
  ::S5620C6_nt s11235c1f0;
  ::S1566C32 s11235c1f1;
  int s11235c1f2[2];
};
//SIG(1 S11235C1) C1{ FC2{ FC3{ Fc[20]} Fc[16]} FC4{ m FC5{ Fc[2] Fs FC6{ Fi} Fc[8]}} Fi[2]}



static void Test_S11235C1()
{
  {
    init_simple_test("S11235C1");
    S11235C1 lv;
    check2(sizeof(lv), 60, "sizeof(S11235C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11235C1)");
    check_field_offset(lv, s11235c1f0, 0, "S11235C1.s11235c1f0");
    check_field_offset(lv, s11235c1f1, 36, "S11235C1.s11235c1f1");
    check_field_offset(lv, s11235c1f2, 52, "S11235C1.s11235c1f2");
  }
}
static Arrange_To_Call_Me vS11235C1(Test_S11235C1, "S11235C1", 60);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7861C4_nt  {
  int s7861c4f0;
  void  mf7861c4(); // _ZN10S7861C4_nt8mf7861c4Ev
  virtual  ~S7861C4_nt(); // _ZN10S7861C4_ntD1Ev
  S7861C4_nt(); // tgen
};
//SIG(-1 S7861C4_nt) C1{ vd m Fi}


void  S7861C4_nt ::mf7861c4(){}
 S7861C4_nt ::~S7861C4_nt(){ note_dtor("S7861C4_nt", this);}
S7861C4_nt ::S7861C4_nt(){ note_ctor("S7861C4_nt", this);} // tgen

//skip512 S7861C4_nt

#else // __cplusplus

extern void _ZN10S7861C4_ntC1Ev();
extern void _ZN10S7861C4_ntD1Ev();
Name_Map name_map_S7861C4_nt[] = {
  NSPAIR(_ZN10S7861C4_ntC1Ev),
  NSPAIR(_ZN10S7861C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7861C4_nt[];
extern void _ZN10S7861C4_ntD1Ev();
extern void _ZN10S7861C4_ntD0Ev();
static  VTBL_ENTRY vtc_S7861C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7861C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S7861C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7861C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S7861C4_nt[];
VTBL_ENTRY *P__ZTI10S7861C4_nt = _ZTI10S7861C4_nt; 
extern  VTBL_ENTRY _ZTV10S7861C4_nt[];
Class_Descriptor cd_S7861C4_nt = {  "S7861C4_nt", // class name
  0,0,//no base classes
  &(vtc_S7861C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S7861C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7861C4_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  S7861C5_nt  : virtual S7861C4_nt {
  ::S19426C9_nt s7861c5f0;
  ~S7861C5_nt(); // tgen
  S7861C5_nt(); // tgen
};
//SIG(-1 S7861C5_nt) C1{ VBC2{ vd m Fi} FU3{ m}}


S7861C5_nt ::~S7861C5_nt(){ note_dtor("S7861C5_nt", this);} // tgen
S7861C5_nt ::S7861C5_nt(){ note_ctor("S7861C5_nt", this);} // tgen

//skip512 S7861C5_nt

#else // __cplusplus

extern void _ZN10S7861C5_ntC1Ev();
extern void _ZN10S7861C5_ntD1Ev();
Name_Map name_map_S7861C5_nt[] = {
  NSPAIR(_ZN10S7861C5_ntC1Ev),
  NSPAIR(_ZN10S7861C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7861C4_nt;
extern VTBL_ENTRY _ZTI10S7861C4_nt[];
extern  VTBL_ENTRY _ZTV10S7861C4_nt[];
static Base_Class bases_S7861C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7861C4_nt,    ABISELECT(16,8), //bcp->offset
    5, //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 _ZTI10S7861C5_nt[];
extern void _ZN10S7861C5_ntD1Ev();
extern void _ZN10S7861C5_ntD0Ev();
extern void ABISELECT(_ZTv0_n24_N10S7861C5_ntD1Ev,_ZTv0_n12_N10S7861C5_ntD1Ev)();
extern void ABISELECT(_ZThn16_N10S7861C5_ntD1Ev,_ZThn8_N10S7861C5_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7861C5_ntD0Ev,_ZTv0_n12_N10S7861C5_ntD0Ev)();
extern void ABISELECT(_ZThn16_N10S7861C5_ntD0Ev,_ZThn8_N10S7861C5_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7861C5_nt[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI10S7861C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7861C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7861C5_ntD0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI10S7861C5_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7861C5_ntD1Ev,_ZTv0_n12_N10S7861C5_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7861C5_ntD0Ev,_ZTv0_n12_N10S7861C5_ntD0Ev),
};
extern VTBL_ENTRY _ZTV10S7861C5_nt[];
static  VTT_ENTRY vtt_S7861C5_nt[] = {
  {&(_ZTV10S7861C5_nt[3]),  3,10},
  {&(_ZTV10S7861C5_nt[8]),  8,10},
};
extern VTBL_ENTRY _ZTI10S7861C5_nt[];
VTBL_ENTRY *P__ZTI10S7861C5_nt = _ZTI10S7861C5_nt; 
extern  VTBL_ENTRY _ZTV10S7861C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7861C5_nt[];
static VTBL_ENTRY alt_thunk_names112[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7861C5_ntD0Ev,_ZTv0_n12_N10S7861C5_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N10S7861C5_ntD0Ev,_ZThn8_N10S7861C5_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7861C5_ntD1Ev,_ZTv0_n12_N10S7861C5_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N10S7861C5_ntD1Ev,_ZThn8_N10S7861C5_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7861C5_nt = {  "S7861C5_nt", // class name
  bases_S7861C5_nt, 1,
  &(vtc_S7861C5_nt[0]), // expected_vtbl_contents
  &(vtt_S7861C5_nt[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI10S7861C5_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV10S7861C5_nt),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S7861C5_nt),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names112,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7861C3_nt  : virtual S7861C4_nt , virtual S7861C5_nt {
  long double s7861c3f0;
  int s7861c3f1;
  virtual  ~S7861C3_nt(); // _ZN10S7861C3_ntD2Ev
  S7861C3_nt(); // tgen
};
//SIG(-1 S7861C3_nt) C1{ VBC2{ vd m Fi} VBC3{ VBC2 FU4{ m}} vd FD Fi}


 S7861C3_nt ::~S7861C3_nt(){ note_dtor("S7861C3_nt", this);}
S7861C3_nt ::S7861C3_nt(){ note_ctor("S7861C3_nt", this);} // tgen

//skip512 S7861C3_nt

#else // __cplusplus

extern void _ZN10S7861C3_ntC1Ev();
extern void _ZN10S7861C3_ntD2Ev();
Name_Map name_map_S7861C3_nt[] = {
  NSPAIR(_ZN10S7861C3_ntC1Ev),
  NSPAIR(_ZN10S7861C3_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7861C4_nt;
extern VTBL_ENTRY _ZTI10S7861C4_nt[];
extern  VTBL_ENTRY _ZTV10S7861C4_nt[];
extern Class_Descriptor cd_S7861C5_nt;
extern VTBL_ENTRY _ZTI10S7861C5_nt[];
extern  VTBL_ENTRY _ZTV10S7861C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7861C5_nt[];
static Base_Class bases_S7861C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7861C4_nt,    ABISELECT(40,20), //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_S7861C5_nt,    ABISELECT(56,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //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 _ZTI10S7861C3_nt[];
extern void _ZN10S7861C3_ntD1Ev();
extern void _ZN10S7861C3_ntD0Ev();
extern void ABISELECT(_ZTv0_n24_N10S7861C3_ntD1Ev,_ZTv0_n12_N10S7861C3_ntD1Ev)();
extern void ABISELECT(_ZThn40_N10S7861C3_ntD1Ev,_ZThn20_N10S7861C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7861C3_ntD0Ev,_ZTv0_n12_N10S7861C3_ntD0Ev)();
extern void ABISELECT(_ZThn40_N10S7861C3_ntD0Ev,_ZThn20_N10S7861C3_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N10S7861C3_ntD1Ev,_ZTv0_n16_N10S7861C3_ntD1Ev)();
extern void ABISELECT(_ZThn56_N10S7861C3_ntD1Ev,_ZThn28_N10S7861C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N10S7861C3_ntD0Ev,_ZTv0_n16_N10S7861C3_ntD0Ev)();
extern void ABISELECT(_ZThn56_N10S7861C3_ntD0Ev,_ZThn28_N10S7861C3_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7861C3_nt[] = {
  ABISELECT(56,28),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI10S7861C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7861C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7861C3_ntD0Ev,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI10S7861C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7861C3_ntD1Ev,_ZTv0_n12_N10S7861C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7861C3_ntD0Ev,_ZTv0_n12_N10S7861C3_ntD0Ev),
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI10S7861C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N10S7861C3_ntD1Ev,_ZTv0_n16_N10S7861C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N10S7861C3_ntD0Ev,_ZTv0_n16_N10S7861C3_ntD0Ev),
};
extern VTBL_ENTRY _ZTV10S7861C3_nt[];
extern void _ZN10S7861C5_ntD1Ev();
extern void _ZN10S7861C5_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV10S7861C5_nt__10S7861C3_nt[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI10S7861C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7861C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7861C5_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n24_N10S7861C5_ntD1Ev,_ZTv0_n12_N10S7861C5_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N10S7861C5_ntD0Ev,_ZTv0_n12_N10S7861C5_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7861C4_nt__10S7861C5_nt__10S7861C3_nt[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI10S7861C5_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7861C5_ntD1Ev,_ZTv0_n12_N10S7861C5_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7861C5_ntD0Ev,_ZTv0_n12_N10S7861C5_ntD0Ev),
};
static  VTT_ENTRY vtt_S7861C3_nt[] = {
  {&(_ZTV10S7861C3_nt[4]),  4,17},
  {&(_ZTV10S7861C3_nt[9]),  9,17},
  {&(_ZTV10S7861C3_nt[15]),  15,17},
  {&(_tg__ZTV10S7861C5_nt__10S7861C3_nt[3]),  3,5},
  {&(_tg__ZTV10S7861C4_nt__10S7861C5_nt__10S7861C3_nt[3]),  3,5},
};
extern VTBL_ENTRY _ZTI10S7861C3_nt[];
VTBL_ENTRY *P__ZTI10S7861C3_nt = _ZTI10S7861C3_nt; 
extern  VTBL_ENTRY _ZTV10S7861C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7861C3_nt[];
static VTBL_ENTRY alt_thunk_names113[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N10S7861C3_ntD0Ev,_ZTv0_n16_N10S7861C3_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N10S7861C3_ntD0Ev,_ZThn28_N10S7861C3_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N10S7861C3_ntD1Ev,_ZTv0_n16_N10S7861C3_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N10S7861C3_ntD1Ev,_ZThn28_N10S7861C3_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7861C3_ntD0Ev,_ZTv0_n12_N10S7861C3_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N10S7861C3_ntD0Ev,_ZThn20_N10S7861C3_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7861C3_ntD1Ev,_ZTv0_n12_N10S7861C3_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N10S7861C3_ntD1Ev,_ZThn20_N10S7861C3_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7861C3_nt = {  "S7861C3_nt", // class name
  bases_S7861C3_nt, 2,
  &(vtc_S7861C3_nt[0]), // expected_vtbl_contents
  &(vtt_S7861C3_nt[0]), // expected_vtt_contents
  ABISELECT(80,36), // object size
  NSPAIRA(_ZTI10S7861C3_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S7861C3_nt),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S7861C3_nt),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names113,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7861C2_nt  : virtual S7861C3_nt {
  void *s7861c2f0;
  char s7861c2f1;
  virtual  ~S7861C2_nt(); // _ZN10S7861C2_ntD2Ev
  S7861C2_nt(); // tgen
};
//SIG(-1 S7861C2_nt) C1{ VBC2{ VBC3{ vd m Fi} VBC4{ VBC3 FU5{ m}} vd FD Fi} vd Fp Fc}


 S7861C2_nt ::~S7861C2_nt(){ note_dtor("S7861C2_nt", this);}
S7861C2_nt ::S7861C2_nt(){ note_ctor("S7861C2_nt", this);} // tgen

//skip512 S7861C2_nt

#else // __cplusplus

extern void _ZN10S7861C2_ntC1Ev();
extern void _ZN10S7861C2_ntD2Ev();
Name_Map name_map_S7861C2_nt[] = {
  NSPAIR(_ZN10S7861C2_ntC1Ev),
  NSPAIR(_ZN10S7861C2_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7861C4_nt;
extern VTBL_ENTRY _ZTI10S7861C4_nt[];
extern  VTBL_ENTRY _ZTV10S7861C4_nt[];
extern Class_Descriptor cd_S7861C5_nt;
extern VTBL_ENTRY _ZTI10S7861C5_nt[];
extern  VTBL_ENTRY _ZTV10S7861C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7861C5_nt[];
extern Class_Descriptor cd_S7861C3_nt;
extern VTBL_ENTRY _ZTI10S7861C3_nt[];
extern  VTBL_ENTRY _ZTV10S7861C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7861C3_nt[];
static Base_Class bases_S7861C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7861C4_nt,    ABISELECT(72,32), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7861C5_nt,    ABISELECT(88,40), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7861C3_nt,    ABISELECT(32,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI10S7861C2_nt[];
extern void _ZN10S7861C2_ntD1Ev();
extern void _ZN10S7861C2_ntD0Ev();
extern void ABISELECT(_ZTv0_n40_N10S7861C2_ntD1Ev,_ZTv0_n20_N10S7861C2_ntD1Ev)();
extern void ABISELECT(_ZThn32_N10S7861C2_ntD1Ev,_ZThn12_N10S7861C2_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N10S7861C2_ntD0Ev,_ZTv0_n20_N10S7861C2_ntD0Ev)();
extern void ABISELECT(_ZThn32_N10S7861C2_ntD0Ev,_ZThn12_N10S7861C2_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7861C2_ntD1Ev,_ZTv0_n12_N10S7861C2_ntD1Ev)();
extern void ABISELECT(_ZThn72_N10S7861C2_ntD1Ev,_ZThn32_N10S7861C2_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7861C2_ntD0Ev,_ZTv0_n12_N10S7861C2_ntD0Ev)();
extern void ABISELECT(_ZThn72_N10S7861C2_ntD0Ev,_ZThn32_N10S7861C2_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N10S7861C2_ntD1Ev,_ZTv0_n16_N10S7861C2_ntD1Ev)();
extern void ABISELECT(_ZThn88_N10S7861C2_ntD1Ev,_ZThn40_N10S7861C2_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N10S7861C2_ntD0Ev,_ZTv0_n16_N10S7861C2_ntD0Ev)();
extern void ABISELECT(_ZThn88_N10S7861C2_ntD0Ev,_ZThn40_N10S7861C2_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7861C2_nt[] = {
  ABISELECT(88,40),
  ABISELECT(72,32),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI10S7861C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7861C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7861C2_ntD0Ev,
  ABISELECT(-32,-12),
  ABISELECT(56,28),
  ABISELECT(40,20),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI10S7861C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N10S7861C2_ntD1Ev,_ZTv0_n20_N10S7861C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N10S7861C2_ntD0Ev,_ZTv0_n20_N10S7861C2_ntD0Ev),
  ABISELECT(-72,-32),
  ABISELECT(-72,-32),
  (VTBL_ENTRY)&(_ZTI10S7861C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7861C2_ntD1Ev,_ZTv0_n12_N10S7861C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7861C2_ntD0Ev,_ZTv0_n12_N10S7861C2_ntD0Ev),
  ABISELECT(-88,-40),
  ABISELECT(-16,-8),
  ABISELECT(-88,-40),
  (VTBL_ENTRY)&(_ZTI10S7861C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N10S7861C2_ntD1Ev,_ZTv0_n16_N10S7861C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N10S7861C2_ntD0Ev,_ZTv0_n16_N10S7861C2_ntD0Ev),
};
extern VTBL_ENTRY _ZTV10S7861C2_nt[];
extern void _ZN10S7861C3_ntD1Ev();
extern void _ZN10S7861C3_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV10S7861C3_nt__10S7861C2_nt[] = {
  ABISELECT(56,28),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI10S7861C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7861C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7861C3_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n24_N10S7861C3_ntD1Ev,_ZTv0_n12_N10S7861C3_ntD1Ev)();
extern void ABISELECT(_ZThn40_N10S7861C3_ntD1Ev,_ZThn20_N10S7861C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7861C3_ntD0Ev,_ZTv0_n12_N10S7861C3_ntD0Ev)();
extern void ABISELECT(_ZThn40_N10S7861C3_ntD0Ev,_ZThn20_N10S7861C3_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7861C4_nt__10S7861C3_nt__10S7861C2_nt[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI10S7861C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7861C3_ntD1Ev,_ZTv0_n12_N10S7861C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7861C3_ntD0Ev,_ZTv0_n12_N10S7861C3_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n32_N10S7861C3_ntD1Ev,_ZTv0_n16_N10S7861C3_ntD1Ev)();
extern void ABISELECT(_ZThn56_N10S7861C3_ntD1Ev,_ZThn28_N10S7861C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N10S7861C3_ntD0Ev,_ZTv0_n16_N10S7861C3_ntD0Ev)();
extern void ABISELECT(_ZThn56_N10S7861C3_ntD0Ev,_ZThn28_N10S7861C3_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7861C5_nt__10S7861C3_nt__10S7861C2_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI10S7861C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N10S7861C3_ntD1Ev,_ZTv0_n16_N10S7861C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N10S7861C3_ntD0Ev,_ZTv0_n16_N10S7861C3_ntD0Ev),
};
extern void _ZN10S7861C5_ntD1Ev();
extern void _ZN10S7861C5_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV10S7861C5_nt__10S7861C2_nt[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI10S7861C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7861C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7861C5_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n24_N10S7861C5_ntD1Ev,_ZTv0_n12_N10S7861C5_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N10S7861C5_ntD0Ev,_ZTv0_n12_N10S7861C5_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7861C4_nt__10S7861C5_nt__10S7861C2_nt[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI10S7861C5_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7861C5_ntD1Ev,_ZTv0_n12_N10S7861C5_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7861C5_ntD0Ev,_ZTv0_n12_N10S7861C5_ntD0Ev),
};
static  VTT_ENTRY vtt_S7861C2_nt[] = {
  {&(_ZTV10S7861C2_nt[5]),  5,25},
  {&(_ZTV10S7861C2_nt[12]),  12,25},
  {&(_ZTV10S7861C2_nt[17]),  17,25},
  {&(_ZTV10S7861C2_nt[23]),  23,25},
  {&(_tg__ZTV10S7861C3_nt__10S7861C2_nt[4]),  4,6},
  {&(_tg__ZTV10S7861C4_nt__10S7861C3_nt__10S7861C2_nt[3]),  3,5},
  {&(_tg__ZTV10S7861C5_nt__10S7861C3_nt__10S7861C2_nt[4]),  4,6},
  {&(_tg__ZTV10S7861C5_nt__10S7861C2_nt[3]),  3,5},
  {&(_tg__ZTV10S7861C4_nt__10S7861C5_nt__10S7861C2_nt[3]),  3,5},
};
extern VTBL_ENTRY _ZTI10S7861C2_nt[];
VTBL_ENTRY *P__ZTI10S7861C2_nt = _ZTI10S7861C2_nt; 
extern  VTBL_ENTRY _ZTV10S7861C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7861C2_nt[];
static VTBL_ENTRY alt_thunk_names114[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N10S7861C3_ntD0Ev,_ZTv0_n16_N10S7861C3_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N10S7861C3_ntD0Ev,_ZThn28_N10S7861C3_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N10S7861C3_ntD1Ev,_ZTv0_n16_N10S7861C3_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N10S7861C3_ntD1Ev,_ZThn28_N10S7861C3_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7861C3_ntD0Ev,_ZTv0_n12_N10S7861C3_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N10S7861C3_ntD0Ev,_ZThn20_N10S7861C3_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7861C3_ntD1Ev,_ZTv0_n12_N10S7861C3_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N10S7861C3_ntD1Ev,_ZThn20_N10S7861C3_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N10S7861C2_ntD0Ev,_ZTv0_n16_N10S7861C2_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N10S7861C2_ntD0Ev,_ZThn40_N10S7861C2_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N10S7861C2_ntD1Ev,_ZTv0_n16_N10S7861C2_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N10S7861C2_ntD1Ev,_ZThn40_N10S7861C2_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7861C2_ntD0Ev,_ZTv0_n12_N10S7861C2_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N10S7861C2_ntD0Ev,_ZThn32_N10S7861C2_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7861C2_ntD1Ev,_ZTv0_n12_N10S7861C2_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N10S7861C2_ntD1Ev,_ZThn32_N10S7861C2_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N10S7861C2_ntD0Ev,_ZTv0_n20_N10S7861C2_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N10S7861C2_ntD0Ev,_ZThn12_N10S7861C2_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N10S7861C2_ntD1Ev,_ZTv0_n20_N10S7861C2_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N10S7861C2_ntD1Ev,_ZThn12_N10S7861C2_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7861C2_nt = {  "S7861C2_nt", // class name
  bases_S7861C2_nt, 3,
  &(vtc_S7861C2_nt[0]), // expected_vtbl_contents
  &(vtt_S7861C2_nt[0]), // expected_vtt_contents
  ABISELECT(112,48), // object size
  NSPAIRA(_ZTI10S7861C2_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV10S7861C2_nt),25, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S7861C2_nt),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names114,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7861C1  : S7861C2_nt {
  ~S7861C1(); // tgen
  S7861C1(); // tgen
};
//SIG(1 S7861C1) C1{ BC2{ VBC3{ VBC4{ vd m Fi} VBC5{ VBC4 FU6{ m}} vd FD Fi} vd Fp Fc}}


S7861C1 ::~S7861C1(){ note_dtor("S7861C1", this);} // tgen
S7861C1 ::S7861C1(){ note_ctor("S7861C1", this);} // tgen

static void Test_S7861C1()
{
  extern Class_Descriptor cd_S7861C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,13)];
    init_test(&cd_S7861C1, buf);
    S7861C1 *dp, &lv = *(dp=new (buf) S7861C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,48), "sizeof(S7861C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7861C1)");
    check_base_class_offset(lv, (S7861C4_nt*)(S7861C3_nt*), ABISELECT(72,32), "S7861C1");
    check_base_class_offset(lv, (S7861C4_nt*)(S7861C5_nt*), ABISELECT(72,32), "S7861C1");
    check_base_class_offset(lv, (S7861C5_nt*)(S7861C3_nt*), ABISELECT(88,40), "S7861C1");
    check_base_class_offset(lv, (S7861C3_nt*)(S7861C2_nt*), ABISELECT(32,12), "S7861C1");
    check_base_class_offset(lv, (S7861C2_nt*), 0, "S7861C1");
    test_class_info(&lv, &cd_S7861C1);
    dp->~S7861C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7861C1(Test_S7861C1, "S7861C1", ABISELECT(112,48));

#else // __cplusplus

extern void _ZN7S7861C1C1Ev();
extern void _ZN7S7861C1D1Ev();
Name_Map name_map_S7861C1[] = {
  NSPAIR(_ZN7S7861C1C1Ev),
  NSPAIR(_ZN7S7861C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7861C4_nt;
extern VTBL_ENTRY _ZTI10S7861C4_nt[];
extern  VTBL_ENTRY _ZTV10S7861C4_nt[];
extern Class_Descriptor cd_S7861C5_nt;
extern VTBL_ENTRY _ZTI10S7861C5_nt[];
extern  VTBL_ENTRY _ZTV10S7861C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7861C5_nt[];
extern Class_Descriptor cd_S7861C3_nt;
extern VTBL_ENTRY _ZTI10S7861C3_nt[];
extern  VTBL_ENTRY _ZTV10S7861C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7861C3_nt[];
extern Class_Descriptor cd_S7861C2_nt;
extern VTBL_ENTRY _ZTI10S7861C2_nt[];
extern  VTBL_ENTRY _ZTV10S7861C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7861C2_nt[];
static Base_Class bases_S7861C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7861C4_nt,    ABISELECT(72,32), //bcp->offset
    14, //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_S7861C5_nt,    ABISELECT(88,40), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7861C3_nt,    ABISELECT(32,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7861C2_nt,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7861C1[];
extern void _ZN7S7861C1D1Ev();
extern void _ZN7S7861C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S7861C1D1Ev,_ZTv0_n20_N7S7861C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7861C1D1Ev,_ZThn12_N7S7861C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7861C1D0Ev,_ZTv0_n20_N7S7861C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7861C1D0Ev,_ZThn12_N7S7861C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7861C1D1Ev,_ZTv0_n12_N7S7861C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S7861C1D1Ev,_ZThn32_N7S7861C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7861C1D0Ev,_ZTv0_n12_N7S7861C1D0Ev)();
extern void ABISELECT(_ZThn72_N7S7861C1D0Ev,_ZThn32_N7S7861C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7861C1D1Ev,_ZTv0_n16_N7S7861C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S7861C1D1Ev,_ZThn40_N7S7861C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7861C1D0Ev,_ZTv0_n16_N7S7861C1D0Ev)();
extern void ABISELECT(_ZThn88_N7S7861C1D0Ev,_ZThn40_N7S7861C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7861C1[] = {
  ABISELECT(88,40),
  ABISELECT(72,32),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7861C1[0]),
  (VTBL_ENTRY)&_ZN7S7861C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7861C1D0Ev,
  ABISELECT(-32,-12),
  ABISELECT(56,28),
  ABISELECT(40,20),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7861C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7861C1D1Ev,_ZTv0_n20_N7S7861C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7861C1D0Ev,_ZTv0_n20_N7S7861C1D0Ev),
  ABISELECT(-72,-32),
  ABISELECT(-72,-32),
  (VTBL_ENTRY)&(_ZTI7S7861C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7861C1D1Ev,_ZTv0_n12_N7S7861C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7861C1D0Ev,_ZTv0_n12_N7S7861C1D0Ev),
  ABISELECT(-88,-40),
  ABISELECT(-16,-8),
  ABISELECT(-88,-40),
  (VTBL_ENTRY)&(_ZTI7S7861C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7861C1D1Ev,_ZTv0_n16_N7S7861C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7861C1D0Ev,_ZTv0_n16_N7S7861C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7861C1[];
extern void _ZN10S7861C2_ntD1Ev();
extern void _ZN10S7861C2_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV10S7861C2_nt__7S7861C1[] = {
  ABISELECT(88,40),
  ABISELECT(72,32),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI10S7861C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7861C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7861C2_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n40_N10S7861C2_ntD1Ev,_ZTv0_n20_N10S7861C2_ntD1Ev)();
extern void ABISELECT(_ZThn32_N10S7861C2_ntD1Ev,_ZThn12_N10S7861C2_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N10S7861C2_ntD0Ev,_ZTv0_n20_N10S7861C2_ntD0Ev)();
extern void ABISELECT(_ZThn32_N10S7861C2_ntD0Ev,_ZThn12_N10S7861C2_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7861C3_nt__10S7861C2_nt__7S7861C1[] = {
  ABISELECT(-32,-12),
  ABISELECT(56,28),
  ABISELECT(40,20),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI10S7861C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N10S7861C2_ntD1Ev,_ZTv0_n20_N10S7861C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N10S7861C2_ntD0Ev,_ZTv0_n20_N10S7861C2_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N10S7861C2_ntD1Ev,_ZTv0_n12_N10S7861C2_ntD1Ev)();
extern void ABISELECT(_ZThn72_N10S7861C2_ntD1Ev,_ZThn32_N10S7861C2_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7861C2_ntD0Ev,_ZTv0_n12_N10S7861C2_ntD0Ev)();
extern void ABISELECT(_ZThn72_N10S7861C2_ntD0Ev,_ZThn32_N10S7861C2_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7861C4_nt__10S7861C2_nt__7S7861C1[] = {
  ABISELECT(-72,-32),
  ABISELECT(-72,-32),
  (VTBL_ENTRY)&(_ZTI10S7861C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7861C2_ntD1Ev,_ZTv0_n12_N10S7861C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7861C2_ntD0Ev,_ZTv0_n12_N10S7861C2_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n32_N10S7861C2_ntD1Ev,_ZTv0_n16_N10S7861C2_ntD1Ev)();
extern void ABISELECT(_ZThn88_N10S7861C2_ntD1Ev,_ZThn40_N10S7861C2_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N10S7861C2_ntD0Ev,_ZTv0_n16_N10S7861C2_ntD0Ev)();
extern void ABISELECT(_ZThn88_N10S7861C2_ntD0Ev,_ZThn40_N10S7861C2_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7861C5_nt__10S7861C2_nt__7S7861C1[] = {
  ABISELECT(-88,-40),
  ABISELECT(-16,-8),
  ABISELECT(-88,-40),
  (VTBL_ENTRY)&(_ZTI10S7861C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N10S7861C2_ntD1Ev,_ZTv0_n16_N10S7861C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N10S7861C2_ntD0Ev,_ZTv0_n16_N10S7861C2_ntD0Ev),
};
extern void _ZN10S7861C3_ntD1Ev();
extern void _ZN10S7861C3_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV10S7861C3_nt__7S7861C1[] = {
  ABISELECT(56,28),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI10S7861C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7861C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7861C3_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n24_N10S7861C3_ntD1Ev,_ZTv0_n12_N10S7861C3_ntD1Ev)();
extern void ABISELECT(_ZThn40_N10S7861C3_ntD1Ev,_ZThn20_N10S7861C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7861C3_ntD0Ev,_ZTv0_n12_N10S7861C3_ntD0Ev)();
extern void ABISELECT(_ZThn40_N10S7861C3_ntD0Ev,_ZThn20_N10S7861C3_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7861C4_nt__10S7861C3_nt__7S7861C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI10S7861C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7861C3_ntD1Ev,_ZTv0_n12_N10S7861C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7861C3_ntD0Ev,_ZTv0_n12_N10S7861C3_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n32_N10S7861C3_ntD1Ev,_ZTv0_n16_N10S7861C3_ntD1Ev)();
extern void ABISELECT(_ZThn56_N10S7861C3_ntD1Ev,_ZThn28_N10S7861C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N10S7861C3_ntD0Ev,_ZTv0_n16_N10S7861C3_ntD0Ev)();
extern void ABISELECT(_ZThn56_N10S7861C3_ntD0Ev,_ZThn28_N10S7861C3_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7861C5_nt__10S7861C3_nt__7S7861C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI10S7861C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N10S7861C3_ntD1Ev,_ZTv0_n16_N10S7861C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N10S7861C3_ntD0Ev,_ZTv0_n16_N10S7861C3_ntD0Ev),
};
extern void _ZN10S7861C5_ntD1Ev();
extern void _ZN10S7861C5_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV10S7861C5_nt__7S7861C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI10S7861C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7861C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7861C5_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n24_N10S7861C5_ntD1Ev,_ZTv0_n12_N10S7861C5_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N10S7861C5_ntD0Ev,_ZTv0_n12_N10S7861C5_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7861C4_nt__10S7861C5_nt__7S7861C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI10S7861C5_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7861C5_ntD1Ev,_ZTv0_n12_N10S7861C5_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7861C5_ntD0Ev,_ZTv0_n12_N10S7861C5_ntD0Ev),
};
static  VTT_ENTRY vtt_S7861C1[] = {
  {&(_ZTV7S7861C1[5]),  5,25},
  {&(_tg__ZTV10S7861C2_nt__7S7861C1[5]),  5,7},
  {&(_tg__ZTV10S7861C3_nt__10S7861C2_nt__7S7861C1[5]),  5,7},
  {&(_tg__ZTV10S7861C4_nt__10S7861C2_nt__7S7861C1[3]),  3,5},
  {&(_tg__ZTV10S7861C5_nt__10S7861C2_nt__7S7861C1[4]),  4,6},
  {&(_ZTV7S7861C1[12]),  12,25},
  {&(_ZTV7S7861C1[17]),  17,25},
  {&(_ZTV7S7861C1[23]),  23,25},
  {&(_tg__ZTV10S7861C3_nt__7S7861C1[4]),  4,6},
  {&(_tg__ZTV10S7861C4_nt__10S7861C3_nt__7S7861C1[3]),  3,5},
  {&(_tg__ZTV10S7861C5_nt__10S7861C3_nt__7S7861C1[4]),  4,6},
  {&(_tg__ZTV10S7861C5_nt__7S7861C1[3]),  3,5},
  {&(_tg__ZTV10S7861C4_nt__10S7861C5_nt__7S7861C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7861C1[];
extern  VTBL_ENTRY _ZTV7S7861C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7861C1[];
static VTBL_ENTRY alt_thunk_names115[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N10S7861C3_ntD0Ev,_ZTv0_n16_N10S7861C3_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N10S7861C3_ntD0Ev,_ZThn28_N10S7861C3_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N10S7861C3_ntD1Ev,_ZTv0_n16_N10S7861C3_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N10S7861C3_ntD1Ev,_ZThn28_N10S7861C3_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7861C3_ntD0Ev,_ZTv0_n12_N10S7861C3_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N10S7861C3_ntD0Ev,_ZThn20_N10S7861C3_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7861C3_ntD1Ev,_ZTv0_n12_N10S7861C3_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N10S7861C3_ntD1Ev,_ZThn20_N10S7861C3_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N10S7861C2_ntD0Ev,_ZTv0_n16_N10S7861C2_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N10S7861C2_ntD0Ev,_ZThn40_N10S7861C2_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N10S7861C2_ntD1Ev,_ZTv0_n16_N10S7861C2_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N10S7861C2_ntD1Ev,_ZThn40_N10S7861C2_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7861C2_ntD0Ev,_ZTv0_n12_N10S7861C2_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N10S7861C2_ntD0Ev,_ZThn32_N10S7861C2_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7861C2_ntD1Ev,_ZTv0_n12_N10S7861C2_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N10S7861C2_ntD1Ev,_ZThn32_N10S7861C2_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N10S7861C2_ntD0Ev,_ZTv0_n20_N10S7861C2_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N10S7861C2_ntD0Ev,_ZThn12_N10S7861C2_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N10S7861C2_ntD1Ev,_ZTv0_n20_N10S7861C2_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N10S7861C2_ntD1Ev,_ZThn12_N10S7861C2_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7861C1D0Ev,_ZTv0_n16_N7S7861C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7861C1D0Ev,_ZThn40_N7S7861C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7861C1D1Ev,_ZTv0_n16_N7S7861C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7861C1D1Ev,_ZThn40_N7S7861C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7861C1D0Ev,_ZTv0_n12_N7S7861C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7861C1D0Ev,_ZThn32_N7S7861C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7861C1D1Ev,_ZTv0_n12_N7S7861C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7861C1D1Ev,_ZThn32_N7S7861C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7861C1D0Ev,_ZTv0_n20_N7S7861C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7861C1D0Ev,_ZThn12_N7S7861C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7861C1D1Ev,_ZTv0_n20_N7S7861C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7861C1D1Ev,_ZThn12_N7S7861C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7861C1 = {  "S7861C1", // class name
  bases_S7861C1, 4,
  &(vtc_S7861C1[0]), // expected_vtbl_contents
  &(vtt_S7861C1[0]), // expected_vtt_contents
  ABISELECT(112,48), // object size
  NSPAIRA(_ZTI7S7861C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7861C1),25, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7861C1),13, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names115,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19975C2  {
  virtual  ~S19975C2(); // _ZN8S19975C2D1Ev
  virtual void  v1(); // _ZN8S19975C22v1Ev
  S19975C2(); // tgen
};
//SIG(-1 S19975C2) C1{ vd v1}


 S19975C2 ::~S19975C2(){ note_dtor("S19975C2", this);}
void  S19975C2 ::v1(){vfunc_called(this, "_ZN8S19975C22v1Ev");}
S19975C2 ::S19975C2(){ note_ctor("S19975C2", this);} // tgen

static void Test_S19975C2()
{
  extern Class_Descriptor cd_S19975C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19975C2, buf);
    S19975C2 *dp, &lv = *(dp=new (buf) S19975C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19975C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19975C2)");
    test_class_info(&lv, &cd_S19975C2);
    dp->~S19975C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19975C2(Test_S19975C2, "S19975C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19975C2C1Ev();
extern void _ZN8S19975C2D1Ev();
Name_Map name_map_S19975C2[] = {
  NSPAIR(_ZN8S19975C2C1Ev),
  NSPAIR(_ZN8S19975C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19975C2[];
extern void _ZN8S19975C2D1Ev();
extern void _ZN8S19975C2D0Ev();
extern void _ZN8S19975C22v1Ev();
static  VTBL_ENTRY vtc_S19975C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19975C2[0]),
  (VTBL_ENTRY)&_ZN8S19975C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19975C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19975C22v1Ev,
};
extern VTBL_ENTRY _ZTI8S19975C2[];
extern  VTBL_ENTRY _ZTV8S19975C2[];
Class_Descriptor cd_S19975C2 = {  "S19975C2", // class name
  0,0,//no base classes
  &(vtc_S19975C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19975C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19975C2),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  S19975C4  {
  virtual  ~S19975C4(); // _ZN8S19975C4D1Ev
  virtual void  v2(); // _ZN8S19975C42v2Ev
  S19975C4(); // tgen
};
//SIG(-1 S19975C4) C1{ vd v1}


 S19975C4 ::~S19975C4(){ note_dtor("S19975C4", this);}
void  S19975C4 ::v2(){vfunc_called(this, "_ZN8S19975C42v2Ev");}
S19975C4 ::S19975C4(){ note_ctor("S19975C4", this);} // tgen

static void Test_S19975C4()
{
  extern Class_Descriptor cd_S19975C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19975C4, buf);
    S19975C4 *dp, &lv = *(dp=new (buf) S19975C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19975C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19975C4)");
    test_class_info(&lv, &cd_S19975C4);
    dp->~S19975C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19975C4(Test_S19975C4, "S19975C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19975C4C1Ev();
extern void _ZN8S19975C4D1Ev();
Name_Map name_map_S19975C4[] = {
  NSPAIR(_ZN8S19975C4C1Ev),
  NSPAIR(_ZN8S19975C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19975C4[];
extern void _ZN8S19975C4D1Ev();
extern void _ZN8S19975C4D0Ev();
extern void _ZN8S19975C42v2Ev();
static  VTBL_ENTRY vtc_S19975C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19975C4[0]),
  (VTBL_ENTRY)&_ZN8S19975C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19975C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19975C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S19975C4[];
extern  VTBL_ENTRY _ZTV8S19975C4[];
Class_Descriptor cd_S19975C4 = {  "S19975C4", // class name
  0,0,//no base classes
  &(vtc_S19975C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19975C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19975C4),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  S19975C3  : S19975C4 {
  void *s19975c3f0;
  __tsi64 s19975c3f1:7;
  virtual  ~S19975C3(); // _ZN8S19975C3D1Ev
  virtual void  v3(); // _ZN8S19975C32v3Ev
  virtual void  v4(); // _ZN8S19975C32v4Ev
  virtual void  v5(); // _ZN8S19975C32v5Ev
  virtual void  v6(); // _ZN8S19975C32v6Ev
  virtual void  v7(); // _ZN8S19975C32v7Ev
  S19975C3(); // tgen
};
//SIG(-1 S19975C3) C1{ BC2{ vd v6} vd v1 v2 v3 v4 v5 Fp FL:7}


 S19975C3 ::~S19975C3(){ note_dtor("S19975C3", this);}
void  S19975C3 ::v3(){vfunc_called(this, "_ZN8S19975C32v3Ev");}
void  S19975C3 ::v4(){vfunc_called(this, "_ZN8S19975C32v4Ev");}
void  S19975C3 ::v5(){vfunc_called(this, "_ZN8S19975C32v5Ev");}
void  S19975C3 ::v6(){vfunc_called(this, "_ZN8S19975C32v6Ev");}
void  S19975C3 ::v7(){vfunc_called(this, "_ZN8S19975C32v7Ev");}
S19975C3 ::S19975C3(){ note_ctor("S19975C3", this);} // tgen

static void Test_S19975C3()
{
  extern Class_Descriptor cd_S19975C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S19975C3, buf);
    S19975C3 *dp, &lv = *(dp=new (buf) S19975C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19975C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19975C3)");
    check_base_class_offset(lv, (S19975C4*), 0, "S19975C3");
    check_field_offset(lv, s19975c3f0, ABISELECT(8,4), "S19975C3.s19975c3f0");
    set_bf_and_test(lv, s19975c3f1, ABISELECT(16,8), 0, 7, 1, "S19975C3");
    set_bf_and_test(lv, s19975c3f1, ABISELECT(16,8), 0, 7, hide_sll(1LL<<6), "S19975C3");
    test_class_info(&lv, &cd_S19975C3);
    dp->~S19975C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19975C3(Test_S19975C3, "S19975C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19975C3C1Ev();
extern void _ZN8S19975C3D1Ev();
Name_Map name_map_S19975C3[] = {
  NSPAIR(_ZN8S19975C3C1Ev),
  NSPAIR(_ZN8S19975C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19975C4;
extern VTBL_ENTRY _ZTI8S19975C4[];
extern  VTBL_ENTRY _ZTV8S19975C4[];
static Base_Class bases_S19975C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19975C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S19975C3[];
extern void _ZN8S19975C3D1Ev();
extern void _ZN8S19975C3D0Ev();
extern void _ZN8S19975C42v2Ev();
extern void _ZN8S19975C32v3Ev();
extern void _ZN8S19975C32v4Ev();
extern void _ZN8S19975C32v5Ev();
extern void _ZN8S19975C32v6Ev();
extern void _ZN8S19975C32v7Ev();
static  VTBL_ENTRY vtc_S19975C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19975C3[0]),
  (VTBL_ENTRY)&_ZN8S19975C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19975C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19975C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19975C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19975C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19975C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19975C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19975C32v7Ev,
};
extern VTBL_ENTRY _ZTI8S19975C3[];
extern  VTBL_ENTRY _ZTV8S19975C3[];
Class_Descriptor cd_S19975C3 = {  "S19975C3", // class name
  bases_S19975C3, 1,
  &(vtc_S19975C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19975C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19975C3),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19975C1  : virtual S19975C2 , virtual S19975C3 {
  ::S19975C4 s19975c1f0;
  ~S19975C1(); // tgen
  S19975C1(); // tgen
};
//SIG(1 S19975C1) C1{ VBC2{ vd v1} VBC3{ BC4{ vd v2} vd v3 v4 v5 v6 v7 Fp FL:7} FC4}


S19975C1 ::~S19975C1(){ note_dtor("S19975C1", this);} // tgen
S19975C1 ::S19975C1(){ note_ctor("S19975C1", this);} // tgen

static void Test_S19975C1()
{
  extern Class_Descriptor cd_S19975C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,6)];
    init_test(&cd_S19975C1, buf);
    S19975C1 *dp, &lv = *(dp=new (buf) S19975C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19975C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19975C1)");
    check_base_class_offset(lv, (S19975C2*), 0, "S19975C1");
    check_base_class_offset(lv, (S19975C4*)(S19975C3*), ABISELECT(16,8), "S19975C1");
    check_base_class_offset(lv, (S19975C3*), ABISELECT(16,8), "S19975C1");
    check_field_offset(lv, s19975c1f0, ABISELECT(8,4), "S19975C1.s19975c1f0");
    test_class_info(&lv, &cd_S19975C1);
    dp->~S19975C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19975C1(Test_S19975C1, "S19975C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19975C1C1Ev();
extern void _ZN8S19975C1D1Ev();
Name_Map name_map_S19975C1[] = {
  NSPAIR(_ZN8S19975C1C1Ev),
  NSPAIR(_ZN8S19975C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19975C2;
extern VTBL_ENTRY _ZTI8S19975C2[];
extern  VTBL_ENTRY _ZTV8S19975C2[];
extern Class_Descriptor cd_S19975C4;
extern VTBL_ENTRY _ZTI8S19975C4[];
extern  VTBL_ENTRY _ZTV8S19975C4[];
extern Class_Descriptor cd_S19975C3;
extern VTBL_ENTRY _ZTI8S19975C3[];
extern  VTBL_ENTRY _ZTV8S19975C3[];
static Base_Class bases_S19975C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19975C2,    0, //bcp->offset
    -1, //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_S19975C4,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19975C3,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19975C1[];
extern void _ZN8S19975C1D1Ev();
extern void _ZN8S19975C1D0Ev();
extern void _ZN8S19975C22v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19975C1D1Ev,_ZTv0_n12_N8S19975C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19975C1D1Ev,_ZThn8_N8S19975C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19975C1D0Ev,_ZTv0_n12_N8S19975C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19975C1D0Ev,_ZThn8_N8S19975C1D0Ev)() __attribute__((weak));
extern void _ZN8S19975C42v2Ev();
extern void _ZN8S19975C32v3Ev();
extern void _ZN8S19975C32v4Ev();
extern void _ZN8S19975C32v5Ev();
extern void _ZN8S19975C32v6Ev();
extern void _ZN8S19975C32v7Ev();
static  VTBL_ENTRY vtc_S19975C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19975C1[0]),
  (VTBL_ENTRY)&_ZN8S19975C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19975C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19975C22v1Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19975C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19975C1D1Ev,_ZTv0_n12_N8S19975C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19975C1D0Ev,_ZTv0_n12_N8S19975C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19975C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19975C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19975C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19975C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19975C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19975C32v7Ev,
};
extern VTBL_ENTRY _ZTV8S19975C1[];
static  VTT_ENTRY vtt_S19975C1[] = {
  {&(_ZTV8S19975C1[6]),  6,26},
  {&(_ZTV8S19975C1[6]),  6,26},
  {&(_ZTV8S19975C1[18]),  18,26},
};
extern VTBL_ENTRY _ZTI8S19975C1[];
extern  VTBL_ENTRY _ZTV8S19975C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19975C1[];
static VTBL_ENTRY alt_thunk_names116[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19975C1D0Ev,_ZTv0_n12_N8S19975C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19975C1D0Ev,_ZThn8_N8S19975C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19975C1D1Ev,_ZTv0_n12_N8S19975C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19975C1D1Ev,_ZThn8_N8S19975C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19975C1 = {  "S19975C1", // class name
  bases_S19975C1, 3,
  &(vtc_S19975C1[0]), // expected_vtbl_contents
  &(vtt_S19975C1[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19975C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19975C1),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19975C1),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names116,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18560C3_nt  {
  virtual void  v9(); // _ZN11S18560C3_nt2v9Ev
  virtual void  v10(); // _ZN11S18560C3_nt3v10Ev
  virtual void  v11(); // _ZN11S18560C3_nt3v11Ev
  virtual void  v12(); // _ZN11S18560C3_nt3v12Ev
  ~S18560C3_nt(); // tgen
  S18560C3_nt(); // tgen
};
//SIG(-1 S18560C3_nt) C1{ v1 v2 v3 v4}


void  S18560C3_nt ::v9(){vfunc_called(this, "_ZN11S18560C3_nt2v9Ev");}
void  S18560C3_nt ::v10(){vfunc_called(this, "_ZN11S18560C3_nt3v10Ev");}
void  S18560C3_nt ::v11(){vfunc_called(this, "_ZN11S18560C3_nt3v11Ev");}
void  S18560C3_nt ::v12(){vfunc_called(this, "_ZN11S18560C3_nt3v12Ev");}
S18560C3_nt ::~S18560C3_nt(){ note_dtor("S18560C3_nt", this);} // tgen
S18560C3_nt ::S18560C3_nt(){ note_ctor("S18560C3_nt", this);} // tgen

//skip512 S18560C3_nt

#else // __cplusplus

extern void _ZN11S18560C3_ntC1Ev();
extern void _ZN11S18560C3_ntD1Ev();
Name_Map name_map_S18560C3_nt[] = {
  NSPAIR(_ZN11S18560C3_ntC1Ev),
  NSPAIR(_ZN11S18560C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S18560C3_nt[];
extern void _ZN11S18560C3_nt2v9Ev();
extern void _ZN11S18560C3_nt3v10Ev();
extern void _ZN11S18560C3_nt3v11Ev();
extern void _ZN11S18560C3_nt3v12Ev();
static  VTBL_ENTRY vtc_S18560C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S18560C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S18560C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S18560C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S18560C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S18560C3_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI11S18560C3_nt[];
VTBL_ENTRY *P__ZTI11S18560C3_nt = _ZTI11S18560C3_nt; 
extern  VTBL_ENTRY _ZTV11S18560C3_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18560C1  {
  ::S19426C16 s18560c1f0;
  ::S18560C3_nt s18560c1f1;
  int s18560c1f2;
  virtual void  v1(); // _ZN8S18560C12v1Ev
  virtual void  v2(); // _ZN8S18560C12v2Ev
  ~S18560C1(); // tgen
  S18560C1(); // tgen
};
//SIG(1 S18560C1) C1{ v1 v2 FC2{ vd v3 v4 v5 v6 v7 v8 Fi} FC3{ v9 v10 v11 v12} Fi}


void  S18560C1 ::v1(){vfunc_called(this, "_ZN8S18560C12v1Ev");}
void  S18560C1 ::v2(){vfunc_called(this, "_ZN8S18560C12v2Ev");}
S18560C1 ::~S18560C1(){ note_dtor("S18560C1", this);} // tgen
S18560C1 ::S18560C1(){ note_ctor("S18560C1", this);} // tgen

static void Test_S18560C1()
{
  extern Class_Descriptor cd_S18560C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S18560C1, buf);
    S18560C1 *dp, &lv = *(dp=new (buf) S18560C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S18560C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18560C1)");
    check_field_offset(lv, s18560c1f0, ABISELECT(8,4), "S18560C1.s18560c1f0");
    check_field_offset(lv, s18560c1f1, ABISELECT(24,12), "S18560C1.s18560c1f1");
    check_field_offset(lv, s18560c1f2, ABISELECT(32,16), "S18560C1.s18560c1f2");
    test_class_info(&lv, &cd_S18560C1);
    dp->~S18560C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18560C1(Test_S18560C1, "S18560C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S18560C1C1Ev();
extern void _ZN8S18560C1D1Ev();
Name_Map name_map_S18560C1[] = {
  NSPAIR(_ZN8S18560C1C1Ev),
  NSPAIR(_ZN8S18560C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18560C1[];
extern void _ZN8S18560C12v1Ev();
extern void _ZN8S18560C12v2Ev();
static  VTBL_ENTRY vtc_S18560C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18560C1[0]),
  (VTBL_ENTRY)&_ZN8S18560C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18560C12v2Ev,
};
extern VTBL_ENTRY _ZTI8S18560C1[];
extern  VTBL_ENTRY _ZTV8S18560C1[];
Class_Descriptor cd_S18560C1 = {  "S18560C1", // class name
  0,0,//no base classes
  &(vtc_S18560C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S18560C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18560C1),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  S10117C2  {
  int s10117c2f0;
  virtual  ~S10117C2(); // _ZN8S10117C2D1Ev
  virtual void  v7(); // _ZN8S10117C22v7Ev
  virtual void  v8(); // _ZN8S10117C22v8Ev
  virtual void  v9(); // _ZN8S10117C22v9Ev
  virtual void  v10(); // _ZN8S10117C23v10Ev
  virtual void  v11(); // _ZN8S10117C23v11Ev
  virtual void  v12(); // _ZN8S10117C23v12Ev
  S10117C2(); // tgen
};
//SIG(-1 S10117C2) C1{ vd v1 v2 v3 v4 v5 v6 Fi}


 S10117C2 ::~S10117C2(){ note_dtor("S10117C2", this);}
void  S10117C2 ::v7(){vfunc_called(this, "_ZN8S10117C22v7Ev");}
void  S10117C2 ::v8(){vfunc_called(this, "_ZN8S10117C22v8Ev");}
void  S10117C2 ::v9(){vfunc_called(this, "_ZN8S10117C22v9Ev");}
void  S10117C2 ::v10(){vfunc_called(this, "_ZN8S10117C23v10Ev");}
void  S10117C2 ::v11(){vfunc_called(this, "_ZN8S10117C23v11Ev");}
void  S10117C2 ::v12(){vfunc_called(this, "_ZN8S10117C23v12Ev");}
S10117C2 ::S10117C2(){ note_ctor("S10117C2", this);} // tgen

static void Test_S10117C2()
{
  extern Class_Descriptor cd_S10117C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S10117C2, buf);
    S10117C2 *dp, &lv = *(dp=new (buf) S10117C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10117C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10117C2)");
    check_field_offset(lv, s10117c2f0, ABISELECT(8,4), "S10117C2.s10117c2f0");
    test_class_info(&lv, &cd_S10117C2);
    dp->~S10117C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10117C2(Test_S10117C2, "S10117C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S10117C2C1Ev();
extern void _ZN8S10117C2D1Ev();
Name_Map name_map_S10117C2[] = {
  NSPAIR(_ZN8S10117C2C1Ev),
  NSPAIR(_ZN8S10117C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10117C2[];
extern void _ZN8S10117C2D1Ev();
extern void _ZN8S10117C2D0Ev();
extern void _ZN8S10117C22v7Ev();
extern void _ZN8S10117C22v8Ev();
extern void _ZN8S10117C22v9Ev();
extern void _ZN8S10117C23v10Ev();
extern void _ZN8S10117C23v11Ev();
extern void _ZN8S10117C23v12Ev();
static  VTBL_ENTRY vtc_S10117C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10117C2[0]),
  (VTBL_ENTRY)&_ZN8S10117C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10117C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10117C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10117C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10117C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10117C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10117C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10117C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S10117C2[];
extern  VTBL_ENTRY _ZTV8S10117C2[];
Class_Descriptor cd_S10117C2 = {  "S10117C2", // class name
  0,0,//no base classes
  &(vtc_S10117C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10117C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10117C2),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10117C1  : S10117C2 {
  int s10117c1f0;
  virtual  ~S10117C1(); // _ZN8S10117C1D1Ev
  virtual void  v1(); // _ZN8S10117C12v1Ev
  virtual void  v2(); // _ZN8S10117C12v2Ev
  virtual void  v3(); // _ZN8S10117C12v3Ev
  virtual void  v4(); // _ZN8S10117C12v4Ev
  virtual void  v5(); // _ZN8S10117C12v5Ev
  virtual void  v6(); // _ZN8S10117C12v6Ev
  S10117C1(); // tgen
};
//SIG(1 S10117C1) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 Fi} vd v1 v2 v3 v4 v5 v6 Fi}


 S10117C1 ::~S10117C1(){ note_dtor("S10117C1", this);}
void  S10117C1 ::v1(){vfunc_called(this, "_ZN8S10117C12v1Ev");}
void  S10117C1 ::v2(){vfunc_called(this, "_ZN8S10117C12v2Ev");}
void  S10117C1 ::v3(){vfunc_called(this, "_ZN8S10117C12v3Ev");}
void  S10117C1 ::v4(){vfunc_called(this, "_ZN8S10117C12v4Ev");}
void  S10117C1 ::v5(){vfunc_called(this, "_ZN8S10117C12v5Ev");}
void  S10117C1 ::v6(){vfunc_called(this, "_ZN8S10117C12v6Ev");}
S10117C1 ::S10117C1(){ note_ctor("S10117C1", this);} // tgen

static void Test_S10117C1()
{
  extern Class_Descriptor cd_S10117C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S10117C1, buf);
    S10117C1 *dp, &lv = *(dp=new (buf) S10117C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S10117C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10117C1)");
    check_base_class_offset(lv, (S10117C2*), 0, "S10117C1");
    check_field_offset(lv, s10117c1f0, ABISELECT(12,8), "S10117C1.s10117c1f0");
    test_class_info(&lv, &cd_S10117C1);
    dp->~S10117C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10117C1(Test_S10117C1, "S10117C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S10117C1C1Ev();
extern void _ZN8S10117C1D1Ev();
Name_Map name_map_S10117C1[] = {
  NSPAIR(_ZN8S10117C1C1Ev),
  NSPAIR(_ZN8S10117C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10117C2;
extern VTBL_ENTRY _ZTI8S10117C2[];
extern  VTBL_ENTRY _ZTV8S10117C2[];
static Base_Class bases_S10117C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10117C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10117C1[];
extern void _ZN8S10117C1D1Ev();
extern void _ZN8S10117C1D0Ev();
extern void _ZN8S10117C22v7Ev();
extern void _ZN8S10117C22v8Ev();
extern void _ZN8S10117C22v9Ev();
extern void _ZN8S10117C23v10Ev();
extern void _ZN8S10117C23v11Ev();
extern void _ZN8S10117C23v12Ev();
extern void _ZN8S10117C12v1Ev();
extern void _ZN8S10117C12v2Ev();
extern void _ZN8S10117C12v3Ev();
extern void _ZN8S10117C12v4Ev();
extern void _ZN8S10117C12v5Ev();
extern void _ZN8S10117C12v6Ev();
static  VTBL_ENTRY vtc_S10117C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10117C1[0]),
  (VTBL_ENTRY)&_ZN8S10117C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10117C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10117C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10117C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10117C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10117C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10117C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10117C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10117C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10117C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10117C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10117C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10117C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10117C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10117C1[];
extern  VTBL_ENTRY _ZTV8S10117C1[];
Class_Descriptor cd_S10117C1 = {  "S10117C1", // class name
  bases_S10117C1, 1,
  &(vtc_S10117C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S10117C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10117C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18226C3  {
  char s18226c3f0[200];
  int s18226c3f1[2];
  long s18226c3f2;
  int s18226c3f3[3];
  void  mf18226c3(); // _ZN8S18226C39mf18226c3Ev
};
//SIG(-1 S18226C3) C1{ m Fc[200] Fi[2] Fl Fi[3]}


void  S18226C3 ::mf18226c3(){}

static void Test_S18226C3()
{
  {
    init_simple_test("S18226C3");
    S18226C3 lv;
    check2(sizeof(lv), ABISELECT(232,224), "sizeof(S18226C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18226C3)");
    check_field_offset(lv, s18226c3f0, 0, "S18226C3.s18226c3f0");
    check_field_offset(lv, s18226c3f1, 200, "S18226C3.s18226c3f1");
    check_field_offset(lv, s18226c3f2, 208, "S18226C3.s18226c3f2");
    check_field_offset(lv, s18226c3f3, ABISELECT(216,212), "S18226C3.s18226c3f3");
  }
}
static Arrange_To_Call_Me vS18226C3(Test_S18226C3, "S18226C3", ABISELECT(232,224));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18226C2  {
  int s18226c2f0;
  ::S18226C3 s18226c2f1;
  void  mf18226c2(); // _ZN8S18226C29mf18226c2Ev
};
//SIG(-1 S18226C2) C1{ m Fi FC2{ m Fc[200] Fi[2] Fl Fi[3]}}


void  S18226C2 ::mf18226c2(){}

static void Test_S18226C2()
{
  {
    init_simple_test("S18226C2");
    S18226C2 lv;
    check2(sizeof(lv), ABISELECT(240,228), "sizeof(S18226C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18226C2)");
    check_field_offset(lv, s18226c2f0, 0, "S18226C2.s18226c2f0");
    check_field_offset(lv, s18226c2f1, ABISELECT(8,4), "S18226C2.s18226c2f1");
  }
}
static Arrange_To_Call_Me vS18226C2(Test_S18226C2, "S18226C2", ABISELECT(240,228));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18226C1  {
  void *s18226c1f0[3];
  ::S18226C2 s18226c1f1;
  char s18226c1f2[2];
  void  mf18226c1(); // _ZN8S18226C19mf18226c1Ev
};
//SIG(1 S18226C1) C1{ m Fp[3] FC2{ m Fi FC3{ m Fc[200] Fi[2] Fl Fi[3]}} Fc[2]}


void  S18226C1 ::mf18226c1(){}

static void Test_S18226C1()
{
  {
    init_simple_test("S18226C1");
    S18226C1 lv;
    check2(sizeof(lv), ABISELECT(272,244), "sizeof(S18226C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18226C1)");
    check_field_offset(lv, s18226c1f0, 0, "S18226C1.s18226c1f0");
    check_field_offset(lv, s18226c1f1, ABISELECT(24,12), "S18226C1.s18226c1f1");
    check_field_offset(lv, s18226c1f2, ABISELECT(264,240), "S18226C1.s18226c1f2");
  }
}
static Arrange_To_Call_Me vS18226C1(Test_S18226C1, "S18226C1", ABISELECT(272,244));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7476C4_nt  {
  long s7476c4f0;
  ::S19426C9_nt s7476c4f1;
  long double s7476c4f2[3];
  virtual void  v2(); // _ZN10S7476C4_nt2v2Ev
  virtual void  v3(); // _ZN10S7476C4_nt2v3Ev
  virtual void  v4(); // _ZN10S7476C4_nt2v4Ev
  ~S7476C4_nt(); // tgen
  S7476C4_nt(); // tgen
};
//SIG(-1 S7476C4_nt) C1{ v1 v2 v3 Fl FU2{ m} FD[3]}


void  S7476C4_nt ::v2(){vfunc_called(this, "_ZN10S7476C4_nt2v2Ev");}
void  S7476C4_nt ::v3(){vfunc_called(this, "_ZN10S7476C4_nt2v3Ev");}
void  S7476C4_nt ::v4(){vfunc_called(this, "_ZN10S7476C4_nt2v4Ev");}
S7476C4_nt ::~S7476C4_nt(){ note_dtor("S7476C4_nt", this);} // tgen
S7476C4_nt ::S7476C4_nt(){ note_ctor("S7476C4_nt", this);} // tgen

//skip512 S7476C4_nt

#else // __cplusplus

extern void _ZN10S7476C4_ntC1Ev();
extern void _ZN10S7476C4_ntD1Ev();
Name_Map name_map_S7476C4_nt[] = {
  NSPAIR(_ZN10S7476C4_ntC1Ev),
  NSPAIR(_ZN10S7476C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7476C4_nt[];
extern void _ZN10S7476C4_nt2v2Ev();
extern void _ZN10S7476C4_nt2v3Ev();
extern void _ZN10S7476C4_nt2v4Ev();
static  VTBL_ENTRY vtc_S7476C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7476C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S7476C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7476C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7476C4_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI10S7476C4_nt[];
VTBL_ENTRY *P__ZTI10S7476C4_nt = _ZTI10S7476C4_nt; 
extern  VTBL_ENTRY _ZTV10S7476C4_nt[];
Class_Descriptor cd_S7476C4_nt = {  "S7476C4_nt", // class name
  0,0,//no base classes
  &(vtc_S7476C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI10S7476C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7476C4_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  S7476C2_nt  : virtual S3600C19 , S7476C4_nt {
  virtual void  v5(); // _ZN10S7476C2_nt2v5Ev
  ~S7476C2_nt(); // tgen
  S7476C2_nt(); // tgen
};
//SIG(-1 S7476C2_nt) C1{ VBC2{ m} BC3{ v2 v3 v4 Fl FU4{ m} FD[3]} v1}


void  S7476C2_nt ::v5(){vfunc_called(this, "_ZN10S7476C2_nt2v5Ev");}
S7476C2_nt ::~S7476C2_nt(){ note_dtor("S7476C2_nt", this);} // tgen
S7476C2_nt ::S7476C2_nt(){ note_ctor("S7476C2_nt", this);} // tgen

//skip512 S7476C2_nt

#else // __cplusplus

extern void _ZN10S7476C2_ntC1Ev();
extern void _ZN10S7476C2_ntD1Ev();
Name_Map name_map_S7476C2_nt[] = {
  NSPAIR(_ZN10S7476C2_ntC1Ev),
  NSPAIR(_ZN10S7476C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7476C4_nt;
extern VTBL_ENTRY _ZTI10S7476C4_nt[];
extern  VTBL_ENTRY _ZTV10S7476C4_nt[];
static Base_Class bases_S7476C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7476C4_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 _ZTI10S7476C2_nt[];
extern void _ZN10S7476C4_nt2v2Ev();
extern void _ZN10S7476C4_nt2v3Ev();
extern void _ZN10S7476C4_nt2v4Ev();
extern void _ZN10S7476C2_nt2v5Ev();
static  VTBL_ENTRY vtc_S7476C2_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI10S7476C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7476C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7476C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7476C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7476C2_nt2v5Ev,
};
extern VTBL_ENTRY _ZTV10S7476C2_nt[];
static  VTT_ENTRY vtt_S7476C2_nt[] = {
  {&(_ZTV10S7476C2_nt[3]),  3,7},
};
extern VTBL_ENTRY _ZTI10S7476C2_nt[];
VTBL_ENTRY *P__ZTI10S7476C2_nt = _ZTI10S7476C2_nt; 
extern  VTBL_ENTRY _ZTV10S7476C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7476C2_nt[];
Class_Descriptor cd_S7476C2_nt = {  "S7476C2_nt", // class name
  bases_S7476C2_nt, 2,
  &(vtc_S7476C2_nt[0]), // expected_vtbl_contents
  &(vtt_S7476C2_nt[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI10S7476C2_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S7476C2_nt),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S7476C2_nt),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7476C1  : S7476C2_nt {
  __tsi64 s7476c1f0;
  char  :0;
  virtual void  v1(); // _ZN7S7476C12v1Ev
  ~S7476C1(); // tgen
  S7476C1(); // tgen
};
//SIG(1 S7476C1) C1{ BC2{ VBC3{ m} BC4{ v2 v3 v4 Fl FU5{ m} FD[3]} v5} v1 FL Fc:0}


void  S7476C1 ::v1(){vfunc_called(this, "_ZN7S7476C12v1Ev");}
S7476C1 ::~S7476C1(){ note_dtor("S7476C1", this);} // tgen
S7476C1 ::S7476C1(){ note_ctor("S7476C1", this);} // tgen

static void Test_S7476C1()
{
  extern Class_Descriptor cd_S7476C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S7476C1, buf);
    S7476C1 *dp, &lv = *(dp=new (buf) S7476C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S7476C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7476C1)");
    check_base_class_offset(lv, (S3600C19*)(S7476C2_nt*), 0, "S7476C1");
    check_base_class_offset(lv, (S7476C4_nt*)(S7476C2_nt*), 0, "S7476C1");
    check_base_class_offset(lv, (S7476C2_nt*), 0, "S7476C1");
    check_field_offset(lv, s7476c1f0, ABISELECT(80,48), "S7476C1.s7476c1f0");
    test_class_info(&lv, &cd_S7476C1);
    dp->~S7476C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7476C1(Test_S7476C1, "S7476C1", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S7476C1C1Ev();
extern void _ZN7S7476C1D1Ev();
Name_Map name_map_S7476C1[] = {
  NSPAIR(_ZN7S7476C1C1Ev),
  NSPAIR(_ZN7S7476C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S7476C4_nt;
extern VTBL_ENTRY _ZTI10S7476C4_nt[];
extern  VTBL_ENTRY _ZTV10S7476C4_nt[];
extern Class_Descriptor cd_S7476C2_nt;
extern VTBL_ENTRY _ZTI10S7476C2_nt[];
extern  VTBL_ENTRY _ZTV10S7476C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7476C2_nt[];
static Base_Class bases_S7476C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7476C4_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_S7476C2_nt,    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 _ZTI7S7476C1[];
extern void _ZN10S7476C4_nt2v2Ev();
extern void _ZN10S7476C4_nt2v3Ev();
extern void _ZN10S7476C4_nt2v4Ev();
extern void _ZN10S7476C2_nt2v5Ev();
extern void _ZN7S7476C12v1Ev();
static  VTBL_ENTRY vtc_S7476C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7476C1[0]),
  (VTBL_ENTRY)&_ZN10S7476C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7476C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7476C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7476C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S7476C12v1Ev,
};
extern VTBL_ENTRY _ZTV7S7476C1[];
extern void _ZN10S7476C4_nt2v2Ev();
extern void _ZN10S7476C4_nt2v3Ev();
extern void _ZN10S7476C4_nt2v4Ev();
extern void _ZN10S7476C2_nt2v5Ev();
static  VTBL_ENTRY _tg__ZTV10S7476C2_nt__7S7476C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI10S7476C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7476C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7476C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7476C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7476C2_nt2v5Ev,
};
static  VTT_ENTRY vtt_S7476C1[] = {
  {&(_ZTV7S7476C1[3]),  3,8},
  {&(_tg__ZTV10S7476C2_nt__7S7476C1[3]),  3,7},
};
extern VTBL_ENTRY _ZTI7S7476C1[];
extern  VTBL_ENTRY _ZTV7S7476C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7476C1[];
Class_Descriptor cd_S7476C1 = {  "S7476C1", // class name
  bases_S7476C1, 3,
  &(vtc_S7476C1[0]), // expected_vtbl_contents
  &(vtt_S7476C1[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S7476C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7476C1),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7476C1),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11143C2  {
  char s11143c2f0[144];
  int s11143c2f1[5];
  short s11143c2f2[4];
};
//SIG(-1 S11143C2) C1{ Fc[144] Fi[5] Fs[4]}



static void Test_S11143C2()
{
  {
    init_simple_test("S11143C2");
    S11143C2 lv;
    check2(sizeof(lv), 172, "sizeof(S11143C2)");
    check2(__alignof__(lv), 4, "__alignof__(S11143C2)");
    check_field_offset(lv, s11143c2f0, 0, "S11143C2.s11143c2f0");
    check_field_offset(lv, s11143c2f1, 144, "S11143C2.s11143c2f1");
    check_field_offset(lv, s11143c2f2, 164, "S11143C2.s11143c2f2");
  }
}
static Arrange_To_Call_Me vS11143C2(Test_S11143C2, "S11143C2", 172);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11143C3  {
  char s11143c3f0[256];
  int s11143c3f1[5];
};
//SIG(-1 S11143C3) C1{ Fc[256] Fi[5]}



static void Test_S11143C3()
{
  {
    init_simple_test("S11143C3");
    S11143C3 lv;
    check2(sizeof(lv), 276, "sizeof(S11143C3)");
    check2(__alignof__(lv), 4, "__alignof__(S11143C3)");
    check_field_offset(lv, s11143c3f0, 0, "S11143C3.s11143c3f0");
    check_field_offset(lv, s11143c3f1, 256, "S11143C3.s11143c3f1");
  }
}
static Arrange_To_Call_Me vS11143C3(Test_S11143C3, "S11143C3", 276);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11143C1  {
  ::S11143C2 s11143c1f0;
  ::S11143C3 s11143c1f1;
  int s11143c1f2;
  char s11143c1f3[21];
};
//SIG(1 S11143C1) C1{ FC2{ Fc[144] Fi[5] Fs[4]} FC3{ Fc[256] Fi[5]} Fi Fc[21]}



static void Test_S11143C1()
{
  {
    init_simple_test("S11143C1");
    S11143C1 lv;
    check2(sizeof(lv), 476, "sizeof(S11143C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11143C1)");
    check_field_offset(lv, s11143c1f0, 0, "S11143C1.s11143c1f0");
    check_field_offset(lv, s11143c1f1, 172, "S11143C1.s11143c1f1");
    check_field_offset(lv, s11143c1f2, 448, "S11143C1.s11143c1f2");
    check_field_offset(lv, s11143c1f3, 452, "S11143C1.s11143c1f3");
  }
}
static Arrange_To_Call_Me vS11143C1(Test_S11143C1, "S11143C1", 476);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17926C4_nt  {
  __tsi64 s17926c4f0[2];
  void  mf17926c4(); // _ZN11S17926C4_nt9mf17926c4Ev
};
//SIG(-1 S17926C4_nt) C1{ m FL[2]}


void  S17926C4_nt ::mf17926c4(){}

//skip512 S17926C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17926C3_nt  {
  ::S17926C4_nt s17926c3f0;
  void  mf17926c3(); // _ZN11S17926C3_nt9mf17926c3Ev
};
//SIG(-1 S17926C3_nt) C1{ m FC2{ m FL[2]}}


void  S17926C3_nt ::mf17926c3(){}

//skip512 S17926C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17926C2  {
  int s17926c2f0[5];
  ::S17926C3_nt s17926c2f1;
  ::S17926C3_nt s17926c2f2;
  ::S17926C3_nt s17926c2f3;
  ::S17926C3_nt s17926c2f4;
};
//SIG(-1 S17926C2) C1{ Fi[5] FC2{ m FC3{ m FL[2]}} FC2 FC2 FC2}



static void Test_S17926C2()
{
  {
    init_simple_test("S17926C2");
    S17926C2 lv;
    check2(sizeof(lv), ABISELECT(88,84), "sizeof(S17926C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17926C2)");
    check_field_offset(lv, s17926c2f0, 0, "S17926C2.s17926c2f0");
    check_field_offset(lv, s17926c2f1, ABISELECT(24,20), "S17926C2.s17926c2f1");
    check_field_offset(lv, s17926c2f2, ABISELECT(40,36), "S17926C2.s17926c2f2");
    check_field_offset(lv, s17926c2f3, ABISELECT(56,52), "S17926C2.s17926c2f3");
    check_field_offset(lv, s17926c2f4, ABISELECT(72,68), "S17926C2.s17926c2f4");
  }
}
static Arrange_To_Call_Me vS17926C2(Test_S17926C2, "S17926C2", ABISELECT(88,84));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17926C1  {
  void *s17926c1f0[2];
  ::S17926C2 s17926c1f1;
  void  mf17926c1(); // _ZN8S17926C19mf17926c1Ev
};
//SIG(1 S17926C1) C1{ m Fp[2] FC2{ Fi[5] FC3{ m FC4{ m FL[2]}} FC3 FC3 FC3}}


void  S17926C1 ::mf17926c1(){}

static void Test_S17926C1()
{
  {
    init_simple_test("S17926C1");
    S17926C1 lv;
    check2(sizeof(lv), ABISELECT(104,92), "sizeof(S17926C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17926C1)");
    check_field_offset(lv, s17926c1f0, 0, "S17926C1.s17926c1f0");
    check_field_offset(lv, s17926c1f1, ABISELECT(16,8), "S17926C1.s17926c1f1");
  }
}
static Arrange_To_Call_Me vS17926C1(Test_S17926C1, "S17926C1", ABISELECT(104,92));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17670C1  {
  void *s17670c1f0;
  ::S3600C29_nt s17670c1f1[3];
  char s17670c1f2;
  ::S17926C3_nt s17670c1f3;
  ::S17926C3_nt s17670c1f4;
  char s17670c1f5;
  int s17670c1f6;
  void  mf17670c1(); // _ZN8S17670C19mf17670c1Ev
};
//SIG(1 S17670C1) C1{ m Fp FC2{ m Fp}[3] Fc FC3{ m FC4{ m FL[2]}} FC3 Fc Fi}


void  S17670C1 ::mf17670c1(){}

static void Test_S17670C1()
{
  {
    init_simple_test("S17670C1");
    S17670C1 lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S17670C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17670C1)");
    check_field_offset(lv, s17670c1f0, 0, "S17670C1.s17670c1f0");
    check_field_offset(lv, s17670c1f1, ABISELECT(8,4), "S17670C1.s17670c1f1");
    check_field_offset(lv, s17670c1f2, ABISELECT(32,16), "S17670C1.s17670c1f2");
    check_field_offset(lv, s17670c1f3, ABISELECT(40,20), "S17670C1.s17670c1f3");
    check_field_offset(lv, s17670c1f4, ABISELECT(56,36), "S17670C1.s17670c1f4");
    check_field_offset(lv, s17670c1f5, ABISELECT(72,52), "S17670C1.s17670c1f5");
    check_field_offset(lv, s17670c1f6, ABISELECT(76,56), "S17670C1.s17670c1f6");
  }
}
static Arrange_To_Call_Me vS17670C1(Test_S17670C1, "S17670C1", ABISELECT(80,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11142C1  {
  ::S11143C2 s11142c1f0;
  ::S11143C3 s11142c1f1;
  char s11142c1f2[21];
};
//SIG(1 S11142C1) C1{ FC2{ Fc[144] Fi[5] Fs[4]} FC3{ Fc[256] Fi[5]} Fc[21]}



static void Test_S11142C1()
{
  {
    init_simple_test("S11142C1");
    S11142C1 lv;
    check2(sizeof(lv), 472, "sizeof(S11142C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11142C1)");
    check_field_offset(lv, s11142c1f0, 0, "S11142C1.s11142c1f0");
    check_field_offset(lv, s11142c1f1, 172, "S11142C1.s11142c1f1");
    check_field_offset(lv, s11142c1f2, 448, "S11142C1.s11142c1f2");
  }
}
static Arrange_To_Call_Me vS11142C1(Test_S11142C1, "S11142C1", 472);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10002C2  {
  int s10002c2f0;
  virtual  ~S10002C2(); // _ZN8S10002C2D1Ev
  virtual void  v6(); // _ZN8S10002C22v6Ev
  virtual void  v7(); // _ZN8S10002C22v7Ev
  virtual void  v8(); // _ZN8S10002C22v8Ev
  virtual void  v9(); // _ZN8S10002C22v9Ev
  virtual void  v10(); // _ZN8S10002C23v10Ev
  virtual void  v11(); // _ZN8S10002C23v11Ev
  S10002C2(); // tgen
};
//SIG(-1 S10002C2) C1{ vd v1 v2 v3 v4 v5 v6 Fi}


 S10002C2 ::~S10002C2(){ note_dtor("S10002C2", this);}
void  S10002C2 ::v6(){vfunc_called(this, "_ZN8S10002C22v6Ev");}
void  S10002C2 ::v7(){vfunc_called(this, "_ZN8S10002C22v7Ev");}
void  S10002C2 ::v8(){vfunc_called(this, "_ZN8S10002C22v8Ev");}
void  S10002C2 ::v9(){vfunc_called(this, "_ZN8S10002C22v9Ev");}
void  S10002C2 ::v10(){vfunc_called(this, "_ZN8S10002C23v10Ev");}
void  S10002C2 ::v11(){vfunc_called(this, "_ZN8S10002C23v11Ev");}
S10002C2 ::S10002C2(){ note_ctor("S10002C2", this);} // tgen

static void Test_S10002C2()
{
  extern Class_Descriptor cd_S10002C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S10002C2, buf);
    S10002C2 *dp, &lv = *(dp=new (buf) S10002C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10002C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10002C2)");
    check_field_offset(lv, s10002c2f0, ABISELECT(8,4), "S10002C2.s10002c2f0");
    test_class_info(&lv, &cd_S10002C2);
    dp->~S10002C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10002C2(Test_S10002C2, "S10002C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S10002C2C1Ev();
extern void _ZN8S10002C2D1Ev();
Name_Map name_map_S10002C2[] = {
  NSPAIR(_ZN8S10002C2C1Ev),
  NSPAIR(_ZN8S10002C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10002C2[];
extern void _ZN8S10002C2D1Ev();
extern void _ZN8S10002C2D0Ev();
extern void _ZN8S10002C22v6Ev();
extern void _ZN8S10002C22v7Ev();
extern void _ZN8S10002C22v8Ev();
extern void _ZN8S10002C22v9Ev();
extern void _ZN8S10002C23v10Ev();
extern void _ZN8S10002C23v11Ev();
static  VTBL_ENTRY vtc_S10002C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10002C2[0]),
  (VTBL_ENTRY)&_ZN8S10002C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10002C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10002C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10002C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10002C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10002C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10002C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10002C23v11Ev,
};
extern VTBL_ENTRY _ZTI8S10002C2[];
extern  VTBL_ENTRY _ZTV8S10002C2[];
Class_Descriptor cd_S10002C2 = {  "S10002C2", // class name
  0,0,//no base classes
  &(vtc_S10002C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10002C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10002C2),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10002C1  : S10002C2 {
  virtual  ~S10002C1(); // _ZN8S10002C1D1Ev
  virtual void  v1(); // _ZN8S10002C12v1Ev
  virtual void  v2(); // _ZN8S10002C12v2Ev
  virtual void  v3(); // _ZN8S10002C12v3Ev
  virtual void  v4(); // _ZN8S10002C12v4Ev
  virtual void  v5(); // _ZN8S10002C12v5Ev
  S10002C1(); // tgen
};
//SIG(1 S10002C1) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 Fi} vd v1 v2 v3 v4 v5}


 S10002C1 ::~S10002C1(){ note_dtor("S10002C1", this);}
void  S10002C1 ::v1(){vfunc_called(this, "_ZN8S10002C12v1Ev");}
void  S10002C1 ::v2(){vfunc_called(this, "_ZN8S10002C12v2Ev");}
void  S10002C1 ::v3(){vfunc_called(this, "_ZN8S10002C12v3Ev");}
void  S10002C1 ::v4(){vfunc_called(this, "_ZN8S10002C12v4Ev");}
void  S10002C1 ::v5(){vfunc_called(this, "_ZN8S10002C12v5Ev");}
S10002C1 ::S10002C1(){ note_ctor("S10002C1", this);} // tgen

static void Test_S10002C1()
{
  extern Class_Descriptor cd_S10002C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S10002C1, buf);
    S10002C1 *dp, &lv = *(dp=new (buf) S10002C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10002C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10002C1)");
    check_base_class_offset(lv, (S10002C2*), 0, "S10002C1");
    test_class_info(&lv, &cd_S10002C1);
    dp->~S10002C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10002C1(Test_S10002C1, "S10002C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S10002C1C1Ev();
extern void _ZN8S10002C1D1Ev();
Name_Map name_map_S10002C1[] = {
  NSPAIR(_ZN8S10002C1C1Ev),
  NSPAIR(_ZN8S10002C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10002C2;
extern VTBL_ENTRY _ZTI8S10002C2[];
extern  VTBL_ENTRY _ZTV8S10002C2[];
static Base_Class bases_S10002C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10002C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10002C1[];
extern void _ZN8S10002C1D1Ev();
extern void _ZN8S10002C1D0Ev();
extern void _ZN8S10002C22v6Ev();
extern void _ZN8S10002C22v7Ev();
extern void _ZN8S10002C22v8Ev();
extern void _ZN8S10002C22v9Ev();
extern void _ZN8S10002C23v10Ev();
extern void _ZN8S10002C23v11Ev();
extern void _ZN8S10002C12v1Ev();
extern void _ZN8S10002C12v2Ev();
extern void _ZN8S10002C12v3Ev();
extern void _ZN8S10002C12v4Ev();
extern void _ZN8S10002C12v5Ev();
static  VTBL_ENTRY vtc_S10002C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10002C1[0]),
  (VTBL_ENTRY)&_ZN8S10002C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10002C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10002C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10002C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10002C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10002C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10002C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10002C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10002C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10002C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10002C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10002C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10002C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10002C1[];
extern  VTBL_ENTRY _ZTV8S10002C1[];
Class_Descriptor cd_S10002C1 = {  "S10002C1", // class name
  bases_S10002C1, 1,
  &(vtc_S10002C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10002C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10002C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20250C2  {
  int s20250c2f0;
  void *s20250c2f1[2];
  char s20250c2f2[4];
  virtual void  v5(); // _ZN8S20250C22v5Ev
  virtual void  v6(); // _ZN8S20250C22v6Ev
  virtual void  v7(); // _ZN8S20250C22v7Ev
  virtual void  v8(); // _ZN8S20250C22v8Ev
  virtual void  v9(); // _ZN8S20250C22v9Ev
  ~S20250C2(); // tgen
  S20250C2(); // tgen
};
//SIG(-1 S20250C2) C1{ v1 v2 v3 v4 v5 Fi Fp[2] Fc[4]}


void  S20250C2 ::v5(){vfunc_called(this, "_ZN8S20250C22v5Ev");}
void  S20250C2 ::v6(){vfunc_called(this, "_ZN8S20250C22v6Ev");}
void  S20250C2 ::v7(){vfunc_called(this, "_ZN8S20250C22v7Ev");}
void  S20250C2 ::v8(){vfunc_called(this, "_ZN8S20250C22v8Ev");}
void  S20250C2 ::v9(){vfunc_called(this, "_ZN8S20250C22v9Ev");}
S20250C2 ::~S20250C2(){ note_dtor("S20250C2", this);} // tgen
S20250C2 ::S20250C2(){ note_ctor("S20250C2", this);} // tgen

static void Test_S20250C2()
{
  extern Class_Descriptor cd_S20250C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20250C2, buf);
    S20250C2 *dp, &lv = *(dp=new (buf) S20250C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20250C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20250C2)");
    check_field_offset(lv, s20250c2f0, ABISELECT(8,4), "S20250C2.s20250c2f0");
    check_field_offset(lv, s20250c2f1, ABISELECT(16,8), "S20250C2.s20250c2f1");
    check_field_offset(lv, s20250c2f2, ABISELECT(32,16), "S20250C2.s20250c2f2");
    test_class_info(&lv, &cd_S20250C2);
    dp->~S20250C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20250C2(Test_S20250C2, "S20250C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20250C2C1Ev();
extern void _ZN8S20250C2D1Ev();
Name_Map name_map_S20250C2[] = {
  NSPAIR(_ZN8S20250C2C1Ev),
  NSPAIR(_ZN8S20250C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20250C2[];
extern void _ZN8S20250C22v5Ev();
extern void _ZN8S20250C22v6Ev();
extern void _ZN8S20250C22v7Ev();
extern void _ZN8S20250C22v8Ev();
extern void _ZN8S20250C22v9Ev();
static  VTBL_ENTRY vtc_S20250C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20250C2[0]),
  (VTBL_ENTRY)&_ZN8S20250C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20250C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20250C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20250C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20250C22v9Ev,
};
extern VTBL_ENTRY _ZTI8S20250C2[];
extern  VTBL_ENTRY _ZTV8S20250C2[];
Class_Descriptor cd_S20250C2 = {  "S20250C2", // class name
  0,0,//no base classes
  &(vtc_S20250C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20250C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20250C2),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  S20250C1  : virtual S20250C2 {
  virtual void  v1(); // _ZN8S20250C12v1Ev
  virtual void  v2(); // _ZN8S20250C12v2Ev
  virtual void  v3(); // _ZN8S20250C12v3Ev
  virtual void  v4(); // _ZN8S20250C12v4Ev
  ~S20250C1(); // tgen
  S20250C1(); // tgen
};
//SIG(1 S20250C1) C1{ VBC2{ v5 v6 v7 v8 v9 Fi Fp[2] Fc[4]} v1 v2 v3 v4}


void  S20250C1 ::v1(){vfunc_called(this, "_ZN8S20250C12v1Ev");}
void  S20250C1 ::v2(){vfunc_called(this, "_ZN8S20250C12v2Ev");}
void  S20250C1 ::v3(){vfunc_called(this, "_ZN8S20250C12v3Ev");}
void  S20250C1 ::v4(){vfunc_called(this, "_ZN8S20250C12v4Ev");}
S20250C1 ::~S20250C1(){ note_dtor("S20250C1", this);} // tgen
S20250C1 ::S20250C1(){ note_ctor("S20250C1", this);} // tgen

static void Test_S20250C1()
{
  extern Class_Descriptor cd_S20250C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S20250C1, buf);
    S20250C1 *dp, &lv = *(dp=new (buf) S20250C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20250C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20250C1)");
    check_base_class_offset(lv, (S20250C2*), ABISELECT(8,4), "S20250C1");
    test_class_info(&lv, &cd_S20250C1);
    dp->~S20250C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20250C1(Test_S20250C1, "S20250C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20250C1C1Ev();
extern void _ZN8S20250C1D1Ev();
Name_Map name_map_S20250C1[] = {
  NSPAIR(_ZN8S20250C1C1Ev),
  NSPAIR(_ZN8S20250C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20250C2;
extern VTBL_ENTRY _ZTI8S20250C2[];
extern  VTBL_ENTRY _ZTV8S20250C2[];
static Base_Class bases_S20250C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20250C2,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20250C1[];
extern void _ZN8S20250C12v1Ev();
extern void _ZN8S20250C12v2Ev();
extern void _ZN8S20250C12v3Ev();
extern void _ZN8S20250C12v4Ev();
extern void _ZN8S20250C22v5Ev();
extern void _ZN8S20250C22v6Ev();
extern void _ZN8S20250C22v7Ev();
extern void _ZN8S20250C22v8Ev();
extern void _ZN8S20250C22v9Ev();
static  VTBL_ENTRY vtc_S20250C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20250C1[0]),
  (VTBL_ENTRY)&_ZN8S20250C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20250C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20250C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20250C12v4Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20250C1[0]),
  (VTBL_ENTRY)&_ZN8S20250C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20250C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20250C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20250C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20250C22v9Ev,
};
extern VTBL_ENTRY _ZTV8S20250C1[];
static  VTT_ENTRY vtt_S20250C1[] = {
  {&(_ZTV8S20250C1[3]),  3,19},
  {&(_ZTV8S20250C1[14]),  14,19},
};
extern VTBL_ENTRY _ZTI8S20250C1[];
extern  VTBL_ENTRY _ZTV8S20250C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20250C1[];
Class_Descriptor cd_S20250C1 = {  "S20250C1", // class name
  bases_S20250C1, 1,
  &(vtc_S20250C1[0]), // expected_vtbl_contents
  &(vtt_S20250C1[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20250C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20250C1),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20250C1),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  S15379C3_nt  {
  char s15379c3f0;
  char s15379c3f1[15];
  void  mf15379c3(); // _ZN11S15379C3_nt9mf15379c3Ev
};
//SIG(-1 S15379C3_nt) C1{ m Fc[16]}


void  S15379C3_nt ::mf15379c3(){}

//skip512 S15379C3_nt

#else // __cplusplus

Class_Descriptor cd_S15379C3_nt = {  "S15379C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  16, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15379C2_nt  : S15379C3_nt {
};
//SIG(-1 S15379C2_nt) C1{ BC2{ m Fc[16]}}



//skip512 S15379C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S15379C3_nt;
static Base_Class bases_S15379C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15379C3_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  S15379C1  {
  ::S15379C2_nt s15379c1f0;
  ::S15379C2_nt s15379c1f1;
  ::S15379C2_nt s15379c1f2;
  int s15379c1f3[4];
  char s15379c1f4[16];
  void  mf15379c1(); // _ZN8S15379C19mf15379c1Ev
};
//SIG(1 S15379C1) C1{ m FC2{ BC3{ m Fc[16]}} FC2 FC2 Fi[4] Fc[16]}


void  S15379C1 ::mf15379c1(){}

static void Test_S15379C1()
{
  {
    init_simple_test("S15379C1");
    S15379C1 lv;
    check2(sizeof(lv), 80, "sizeof(S15379C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15379C1)");
    check_field_offset(lv, s15379c1f0, 0, "S15379C1.s15379c1f0");
    check_field_offset(lv, s15379c1f1, 16, "S15379C1.s15379c1f1");
    check_field_offset(lv, s15379c1f2, 32, "S15379C1.s15379c1f2");
    check_field_offset(lv, s15379c1f3, 48, "S15379C1.s15379c1f3");
    check_field_offset(lv, s15379c1f4, 64, "S15379C1.s15379c1f4");
  }
}
static Arrange_To_Call_Me vS15379C1(Test_S15379C1, "S15379C1", 80);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11145C3  {
  char s11145c3f0[312];
};
//SIG(-1 S11145C3) C1{ Fc[312]}



static void Test_S11145C3()
{
  {
    init_simple_test("S11145C3");
    S11145C3 lv;
    check2(sizeof(lv), 312, "sizeof(S11145C3)");
    check2(__alignof__(lv), 1, "__alignof__(S11145C3)");
    check_field_offset(lv, s11145c3f0, 0, "S11145C3.s11145c3f0");
  }
}
static Arrange_To_Call_Me vS11145C3(Test_S11145C3, "S11145C3", 312);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11145C1  {
  ::S11143C2 s11145c1f0;
  ::S11145C3 s11145c1f1;
  int s11145c1f2;
  char s11145c1f3[22];
};
//SIG(1 S11145C1) C1{ FC2{ Fc[144] Fi[5] Fs[4]} FC3{ Fc[312]} Fi Fc[22]}



static void Test_S11145C1()
{
  {
    init_simple_test("S11145C1");
    S11145C1 lv;
    check2(sizeof(lv), 512, "sizeof(S11145C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11145C1)");
    check_field_offset(lv, s11145c1f0, 0, "S11145C1.s11145c1f0");
    check_field_offset(lv, s11145c1f1, 172, "S11145C1.s11145c1f1");
    check_field_offset(lv, s11145c1f2, 484, "S11145C1.s11145c1f2");
    check_field_offset(lv, s11145c1f3, 488, "S11145C1.s11145c1f3");
  }
}
static Arrange_To_Call_Me vS11145C1(Test_S11145C1, "S11145C1", 512);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18394C1  {
  void *s18394c1f0[7];
  int s18394c1f1[4];
  short s18394c1f2[7];
  ::S17926C3_nt s18394c1f3;
  char s18394c1f4[2];
  void  mf18394c1(); // _ZN8S18394C19mf18394c1Ev
};
//SIG(1 S18394C1) C1{ m Fp[7] Fi[4] Fs[7] FC2{ m FC3{ m FL[2]}} Fc[2]}


void  S18394C1 ::mf18394c1(){}

static void Test_S18394C1()
{
  {
    init_simple_test("S18394C1");
    S18394C1 lv;
    check2(sizeof(lv), ABISELECT(112,80), "sizeof(S18394C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18394C1)");
    check_field_offset(lv, s18394c1f0, 0, "S18394C1.s18394c1f0");
    check_field_offset(lv, s18394c1f1, ABISELECT(56,28), "S18394C1.s18394c1f1");
    check_field_offset(lv, s18394c1f2, ABISELECT(72,44), "S18394C1.s18394c1f2");
    check_field_offset(lv, s18394c1f3, ABISELECT(88,60), "S18394C1.s18394c1f3");
    check_field_offset(lv, s18394c1f4, ABISELECT(104,76), "S18394C1.s18394c1f4");
  }
}
static Arrange_To_Call_Me vS18394C1(Test_S18394C1, "S18394C1", ABISELECT(112,80));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8794C2_nt  {
  void *s8794c2f0;
  int s8794c2f1;
  virtual  ~S8794C2_nt(); // _ZN10S8794C2_ntD1Ev
  virtual void  v2(); // _ZN10S8794C2_nt2v2Ev
  S8794C2_nt(); // tgen
};
//SIG(-1 S8794C2_nt) C1{ vd v1 Fp Fi}


 S8794C2_nt ::~S8794C2_nt(){ note_dtor("S8794C2_nt", this);}
void  S8794C2_nt ::v2(){vfunc_called(this, "_ZN10S8794C2_nt2v2Ev");}
S8794C2_nt ::S8794C2_nt(){ note_ctor("S8794C2_nt", this);} // tgen

//skip512 S8794C2_nt

#else // __cplusplus

extern void _ZN10S8794C2_ntC1Ev();
extern void _ZN10S8794C2_ntD1Ev();
Name_Map name_map_S8794C2_nt[] = {
  NSPAIR(_ZN10S8794C2_ntC1Ev),
  NSPAIR(_ZN10S8794C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8794C2_nt[];
extern void _ZN10S8794C2_ntD1Ev();
extern void _ZN10S8794C2_ntD0Ev();
extern void _ZN10S8794C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S8794C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8794C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8794C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8794C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8794C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S8794C2_nt[];
VTBL_ENTRY *P__ZTI10S8794C2_nt = _ZTI10S8794C2_nt; 
extern  VTBL_ENTRY _ZTV10S8794C2_nt[];
Class_Descriptor cd_S8794C2_nt = {  "S8794C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8794C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S8794C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8794C2_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  S8794C1  : S8794C2_nt {
  ::S3600C11_nt s8794c1f0;
  int s8794c1f1;
  virtual  ~S8794C1(); // _ZN7S8794C1D1Ev
  virtual void  v1(); // _ZN7S8794C12v1Ev
  S8794C1(); // tgen
};
//SIG(1 S8794C1) C1{ BC2{ vd v2 Fp Fi} vd v1 FC3{ m Fp Fi FC4{ m}} Fi}


 S8794C1 ::~S8794C1(){ note_dtor("S8794C1", this);}
void  S8794C1 ::v1(){vfunc_called(this, "_ZN7S8794C12v1Ev");}
S8794C1 ::S8794C1(){ note_ctor("S8794C1", this);} // tgen

static void Test_S8794C1()
{
  extern Class_Descriptor cd_S8794C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S8794C1, buf);
    S8794C1 *dp, &lv = *(dp=new (buf) S8794C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S8794C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8794C1)");
    check_base_class_offset(lv, (S8794C2_nt*), 0, "S8794C1");
    check_field_offset(lv, s8794c1f0, ABISELECT(24,12), "S8794C1.s8794c1f0");
    check_field_offset(lv, s8794c1f1, ABISELECT(40,24), "S8794C1.s8794c1f1");
    test_class_info(&lv, &cd_S8794C1);
    dp->~S8794C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8794C1(Test_S8794C1, "S8794C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S8794C1C1Ev();
extern void _ZN7S8794C1D1Ev();
Name_Map name_map_S8794C1[] = {
  NSPAIR(_ZN7S8794C1C1Ev),
  NSPAIR(_ZN7S8794C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8794C2_nt;
extern VTBL_ENTRY _ZTI10S8794C2_nt[];
extern  VTBL_ENTRY _ZTV10S8794C2_nt[];
static Base_Class bases_S8794C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8794C2_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 _ZTI7S8794C1[];
extern void _ZN7S8794C1D1Ev();
extern void _ZN7S8794C1D0Ev();
extern void _ZN10S8794C2_nt2v2Ev();
extern void _ZN7S8794C12v1Ev();
static  VTBL_ENTRY vtc_S8794C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8794C1[0]),
  (VTBL_ENTRY)&_ZN7S8794C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8794C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8794C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S8794C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8794C1[];
extern  VTBL_ENTRY _ZTV7S8794C1[];
Class_Descriptor cd_S8794C1 = {  "S8794C1", // class name
  bases_S8794C1, 1,
  &(vtc_S8794C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S8794C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8794C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17920C2  {
  int s17920c2f0[2];
  ::S21761C2_nt s17920c2f1;
  void *s17920c2f2;
};
//SIG(-1 S17920C2) C1{ Fi[2] FC2{ m Fp Fi[2] FC3{ m}} Fp}



static void Test_S17920C2()
{
  {
    init_simple_test("S17920C2");
    S17920C2 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S17920C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17920C2)");
    check_field_offset(lv, s17920c2f0, 0, "S17920C2.s17920c2f0");
    check_field_offset(lv, s17920c2f1, 8, "S17920C2.s17920c2f1");
    check_field_offset(lv, s17920c2f2, ABISELECT(32,24), "S17920C2.s17920c2f2");
  }
}
static Arrange_To_Call_Me vS17920C2(Test_S17920C2, "S17920C2", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17920C1  {
  void *s17920c1f0[2];
  ::S17920C2 s17920c1f1;
  void  mf17920c1(); // _ZN8S17920C19mf17920c1Ev
};
//SIG(1 S17920C1) C1{ m Fp[2] FC2{ Fi[2] FC3{ m Fp Fi[2] FC4{ m}} Fp}}


void  S17920C1 ::mf17920c1(){}

static void Test_S17920C1()
{
  {
    init_simple_test("S17920C1");
    S17920C1 lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S17920C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17920C1)");
    check_field_offset(lv, s17920c1f0, 0, "S17920C1.s17920c1f0");
    check_field_offset(lv, s17920c1f1, ABISELECT(16,8), "S17920C1.s17920c1f1");
  }
}
static Arrange_To_Call_Me vS17920C1(Test_S17920C1, "S17920C1", ABISELECT(56,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6692C2_nt  {
  void *s6692c2f0;
  char s6692c2f1;
  virtual void  v3(); // _ZN10S6692C2_nt2v3Ev
  virtual void  v4(); // _ZN10S6692C2_nt2v4Ev
  virtual void  v5(); // _ZN10S6692C2_nt2v5Ev
  virtual void  v6(); // _ZN10S6692C2_nt2v6Ev
  virtual void  v7(); // _ZN10S6692C2_nt2v7Ev
  virtual void  v8(); // _ZN10S6692C2_nt2v8Ev
  ~S6692C2_nt(); // tgen
  S6692C2_nt(); // tgen
};
//SIG(-1 S6692C2_nt) C1{ v1 v2 v3 v4 v5 v6 Fp Fc}


void  S6692C2_nt ::v3(){vfunc_called(this, "_ZN10S6692C2_nt2v3Ev");}
void  S6692C2_nt ::v4(){vfunc_called(this, "_ZN10S6692C2_nt2v4Ev");}
void  S6692C2_nt ::v5(){vfunc_called(this, "_ZN10S6692C2_nt2v5Ev");}
void  S6692C2_nt ::v6(){vfunc_called(this, "_ZN10S6692C2_nt2v6Ev");}
void  S6692C2_nt ::v7(){vfunc_called(this, "_ZN10S6692C2_nt2v7Ev");}
void  S6692C2_nt ::v8(){vfunc_called(this, "_ZN10S6692C2_nt2v8Ev");}
S6692C2_nt ::~S6692C2_nt(){ note_dtor("S6692C2_nt", this);} // tgen
S6692C2_nt ::S6692C2_nt(){ note_ctor("S6692C2_nt", this);} // tgen

//skip512 S6692C2_nt

#else // __cplusplus

extern void _ZN10S6692C2_ntC1Ev();
extern void _ZN10S6692C2_ntD1Ev();
Name_Map name_map_S6692C2_nt[] = {
  NSPAIR(_ZN10S6692C2_ntC1Ev),
  NSPAIR(_ZN10S6692C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S6692C2_nt[];
extern void _ZN10S6692C2_nt2v3Ev();
extern void _ZN10S6692C2_nt2v4Ev();
extern void _ZN10S6692C2_nt2v5Ev();
extern void _ZN10S6692C2_nt2v6Ev();
extern void _ZN10S6692C2_nt2v7Ev();
extern void _ZN10S6692C2_nt2v8Ev();
static  VTBL_ENTRY vtc_S6692C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6692C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S6692C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S6692C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S6692C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S6692C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S6692C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S6692C2_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S6692C2_nt[];
VTBL_ENTRY *P__ZTI10S6692C2_nt = _ZTI10S6692C2_nt; 
extern  VTBL_ENTRY _ZTV10S6692C2_nt[];
Class_Descriptor cd_S6692C2_nt = {  "S6692C2_nt", // class name
  0,0,//no base classes
  &(vtc_S6692C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S6692C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S6692C2_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  S6692C1  : S6692C2_nt {
  ::S19426C9_nt s6692c1f0[4];
  virtual void  v1(); // _ZN7S6692C12v1Ev
  virtual void  v2(); // _ZN7S6692C12v2Ev
  ~S6692C1(); // tgen
  S6692C1(); // tgen
};
//SIG(1 S6692C1) C1{ BC2{ v3 v4 v5 v6 v7 v8 Fp Fc} v1 v2 FU3{ m}[4]}


void  S6692C1 ::v1(){vfunc_called(this, "_ZN7S6692C12v1Ev");}
void  S6692C1 ::v2(){vfunc_called(this, "_ZN7S6692C12v2Ev");}
S6692C1 ::~S6692C1(){ note_dtor("S6692C1", this);} // tgen
S6692C1 ::S6692C1(){ note_ctor("S6692C1", this);} // tgen

static void Test_S6692C1()
{
  extern Class_Descriptor cd_S6692C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6692C1, buf);
    S6692C1 *dp, &lv = *(dp=new (buf) S6692C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6692C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6692C1)");
    check_base_class_offset(lv, (S6692C2_nt*), 0, "S6692C1");
    check_field_offset(lv, s6692c1f0, ABISELECT(17,9), "S6692C1.s6692c1f0");
    test_class_info(&lv, &cd_S6692C1);
    dp->~S6692C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6692C1(Test_S6692C1, "S6692C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S6692C1C1Ev();
extern void _ZN7S6692C1D1Ev();
Name_Map name_map_S6692C1[] = {
  NSPAIR(_ZN7S6692C1C1Ev),
  NSPAIR(_ZN7S6692C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6692C2_nt;
extern VTBL_ENTRY _ZTI10S6692C2_nt[];
extern  VTBL_ENTRY _ZTV10S6692C2_nt[];
static Base_Class bases_S6692C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6692C2_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 _ZTI7S6692C1[];
extern void _ZN10S6692C2_nt2v3Ev();
extern void _ZN10S6692C2_nt2v4Ev();
extern void _ZN10S6692C2_nt2v5Ev();
extern void _ZN10S6692C2_nt2v6Ev();
extern void _ZN10S6692C2_nt2v7Ev();
extern void _ZN10S6692C2_nt2v8Ev();
extern void _ZN7S6692C12v1Ev();
extern void _ZN7S6692C12v2Ev();
static  VTBL_ENTRY vtc_S6692C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6692C1[0]),
  (VTBL_ENTRY)&_ZN10S6692C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S6692C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S6692C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S6692C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S6692C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S6692C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S6692C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6692C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6692C1[];
extern  VTBL_ENTRY _ZTV7S6692C1[];
Class_Descriptor cd_S6692C1 = {  "S6692C1", // class name
  bases_S6692C1, 1,
  &(vtc_S6692C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S6692C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6692C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11144C1  {
  ::S11143C2 s11144c1f0;
  ::S11145C3 s11144c1f1;
  char s11144c1f2[21];
};
//SIG(1 S11144C1) C1{ FC2{ Fc[144] Fi[5] Fs[4]} FC3{ Fc[312]} Fc[21]}



static void Test_S11144C1()
{
  {
    init_simple_test("S11144C1");
    S11144C1 lv;
    check2(sizeof(lv), 508, "sizeof(S11144C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11144C1)");
    check_field_offset(lv, s11144c1f0, 0, "S11144C1.s11144c1f0");
    check_field_offset(lv, s11144c1f1, 172, "S11144C1.s11144c1f1");
    check_field_offset(lv, s11144c1f2, 484, "S11144C1.s11144c1f2");
  }
}
static Arrange_To_Call_Me vS11144C1(Test_S11144C1, "S11144C1", 508);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11131C2  {
  char s11131c2f0[128];
  int s11131c2f1[6];
  char s11131c2f2[21];
};
//SIG(-1 S11131C2) C1{ Fc[128] Fi[6] Fc[21]}



static void Test_S11131C2()
{
  {
    init_simple_test("S11131C2");
    S11131C2 lv;
    check2(sizeof(lv), 176, "sizeof(S11131C2)");
    check2(__alignof__(lv), 4, "__alignof__(S11131C2)");
    check_field_offset(lv, s11131c2f0, 0, "S11131C2.s11131c2f0");
    check_field_offset(lv, s11131c2f1, 128, "S11131C2.s11131c2f1");
    check_field_offset(lv, s11131c2f2, 152, "S11131C2.s11131c2f2");
  }
}
static Arrange_To_Call_Me vS11131C2(Test_S11131C2, "S11131C2", 176);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11131C1  {
  ::S11131C2 s11131c1f0;
  ::S11145C3 s11131c1f1;
  int s11131c1f2[3];
};
//SIG(1 S11131C1) C1{ FC2{ Fc[128] Fi[6] Fc[21]} FC3{ Fc[312]} Fi[3]}



static void Test_S11131C1()
{
  {
    init_simple_test("S11131C1");
    S11131C1 lv;
    check2(sizeof(lv), 500, "sizeof(S11131C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11131C1)");
    check_field_offset(lv, s11131c1f0, 0, "S11131C1.s11131c1f0");
    check_field_offset(lv, s11131c1f1, 176, "S11131C1.s11131c1f1");
    check_field_offset(lv, s11131c1f2, 488, "S11131C1.s11131c1f2");
  }
}
static Arrange_To_Call_Me vS11131C1(Test_S11131C1, "S11131C1", 500);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11141C1  {
  ::S11143C2 s11141c1f0;
  char s11141c1f1[256];
  int s11141c1f2;
  char s11141c1f3[22];
};
//SIG(1 S11141C1) C1{ FC2{ Fc[144] Fi[5] Fs[4]} Fc[256] Fi Fc[22]}



static void Test_S11141C1()
{
  {
    init_simple_test("S11141C1");
    S11141C1 lv;
    check2(sizeof(lv), 456, "sizeof(S11141C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11141C1)");
    check_field_offset(lv, s11141c1f0, 0, "S11141C1.s11141c1f0");
    check_field_offset(lv, s11141c1f1, 172, "S11141C1.s11141c1f1");
    check_field_offset(lv, s11141c1f2, 428, "S11141C1.s11141c1f2");
    check_field_offset(lv, s11141c1f3, 432, "S11141C1.s11141c1f3");
  }
}
static Arrange_To_Call_Me vS11141C1(Test_S11141C1, "S11141C1", 456);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15676C1  {
  ::S1566C32 s15676c1f0;
  void *s15676c1f1;
  ::S1566C32 s15676c1f2;
  void  mf15676c1(); // _ZN8S15676C19mf15676c1Ev
};
//SIG(1 S15676C1) C1{ m FC2{ m FC3{ Fc[2] Fs FC4{ Fi} Fc[8]}} Fp FC2}


void  S15676C1 ::mf15676c1(){}

static void Test_S15676C1()
{
  {
    init_simple_test("S15676C1");
    S15676C1 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S15676C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15676C1)");
    check_field_offset(lv, s15676c1f0, 0, "S15676C1.s15676c1f0");
    check_field_offset(lv, s15676c1f1, 16, "S15676C1.s15676c1f1");
    check_field_offset(lv, s15676c1f2, ABISELECT(24,20), "S15676C1.s15676c1f2");
  }
}
static Arrange_To_Call_Me vS15676C1(Test_S15676C1, "S15676C1", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8102C1  : S7861C4_nt {
  char s8102c1f0;
  int s8102c1f1;
  ::S10220C4_nt s8102c1f2;
  virtual  ~S8102C1(); // _ZN7S8102C1D1Ev
  S8102C1(); // tgen
};
//SIG(1 S8102C1) C1{ BC2{ vd m Fi} vd Fc Fi FC3{ m FC4{ Fl[4]}}}


 S8102C1 ::~S8102C1(){ note_dtor("S8102C1", this);}
S8102C1 ::S8102C1(){ note_ctor("S8102C1", this);} // tgen

static void Test_S8102C1()
{
  extern Class_Descriptor cd_S8102C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S8102C1, buf);
    S8102C1 *dp, &lv = *(dp=new (buf) S8102C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S8102C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8102C1)");
    check_base_class_offset(lv, (S7861C4_nt*), 0, "S8102C1");
    check_field_offset(lv, s8102c1f0, ABISELECT(12,8), "S8102C1.s8102c1f0");
    check_field_offset(lv, s8102c1f1, ABISELECT(16,12), "S8102C1.s8102c1f1");
    check_field_offset(lv, s8102c1f2, ABISELECT(24,16), "S8102C1.s8102c1f2");
    test_class_info(&lv, &cd_S8102C1);
    dp->~S8102C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8102C1(Test_S8102C1, "S8102C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S8102C1C1Ev();
extern void _ZN7S8102C1D1Ev();
Name_Map name_map_S8102C1[] = {
  NSPAIR(_ZN7S8102C1C1Ev),
  NSPAIR(_ZN7S8102C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7861C4_nt;
extern VTBL_ENTRY _ZTI10S7861C4_nt[];
extern  VTBL_ENTRY _ZTV10S7861C4_nt[];
static Base_Class bases_S8102C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7861C4_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 _ZTI7S8102C1[];
extern void _ZN7S8102C1D1Ev();
extern void _ZN7S8102C1D0Ev();
static  VTBL_ENTRY vtc_S8102C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8102C1[0]),
  (VTBL_ENTRY)&_ZN7S8102C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8102C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8102C1[];
extern  VTBL_ENTRY _ZTV7S8102C1[];
Class_Descriptor cd_S8102C1 = {  "S8102C1", // class name
  bases_S8102C1, 1,
  &(vtc_S8102C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S8102C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8102C1),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  S12860C5_nt  {
  int s12860c5f0;
  int s12860c5f1;
};
//SIG(1 S12860C5_nt) C1{ Fi[2]}



//skip512 S12860C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S12860C4  {
  ::S12860C5_nt s12860c4f0;
};
//SIG(1 S12860C4) U1{ FC2{ Fi Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12860C3  {
  int s12860c3f0;
  ::S12860C4 s12860c3f1;
};
//SIG(1 S12860C3) C1{ Fi FU2{ FC3{ Fi Fi}}}



static void Test_S12860C3()
{
  {
    init_simple_test("S12860C3");
    S12860C3 lv;
    check2(sizeof(lv), 12, "sizeof(S12860C3)");
    check2(__alignof__(lv), 4, "__alignof__(S12860C3)");
    check_field_offset(lv, s12860c3f0, 0, "S12860C3.s12860c3f0");
    check_field_offset(lv, s12860c3f1, 4, "S12860C3.s12860c3f1");
  }
}
static Arrange_To_Call_Me vS12860C3(Test_S12860C3, "S12860C3", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S12860C2  {
  ::S12860C3 s12860c2f0;
  ::S1566C34_nt s12860c2f1;
};
//SIG(1 S12860C2) U1{ FC2{ Fi FU3{ FC4{ Fi Fi}}} FC5{ Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12860C1  {
  int s12860c1f0;
  ::S12860C2 s12860c1f1;
};
//SIG(1 S12860C1) C1{ Fi FU2{ FC3{ Fi FU4{ FC5{ Fi Fi}}} FC6{ Fi}}}



static void Test_S12860C1()
{
  {
    init_simple_test("S12860C1");
    S12860C1 lv;
    check2(sizeof(lv), 16, "sizeof(S12860C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12860C1)");
    check_field_offset(lv, s12860c1f0, 0, "S12860C1.s12860c1f0");
    check_field_offset(lv, s12860c1f1, 4, "S12860C1.s12860c1f1");
  }
}
static Arrange_To_Call_Me vS12860C1(Test_S12860C1, "S12860C1", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17872C1  {
  void *s17872c1f0[2];
  ::S1566C9 s17872c1f1;
  unsigned int s17872c1f2:1;
  void  mf17872c1(); // _ZN8S17872C19mf17872c1Ev
};
//SIG(1 S17872C1) C1{ m Fp[2] FC2{ BC3{ BC4{ m Fp Fi[2]}}} Fi:1}


void  S17872C1 ::mf17872c1(){}

static void Test_S17872C1()
{
  {
    init_simple_test("S17872C1");
    static S17872C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S17872C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17872C1)");
    check_field_offset(lv, s17872c1f0, 0, "S17872C1.s17872c1f0");
    check_field_offset(lv, s17872c1f1, ABISELECT(16,8), "S17872C1.s17872c1f1");
    set_bf_and_test(lv, s17872c1f2, ABISELECT(32,20), 0, 1, 1, "S17872C1");
  }
}
static Arrange_To_Call_Me vS17872C1(Test_S17872C1, "S17872C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11148C1  {
  ::S11143C2 s11148c1f0;
  void *s11148c1f1;
  int s11148c1f2;
  char s11148c1f3[21];
};
//SIG(1 S11148C1) C1{ FC2{ Fc[144] Fi[5] Fs[4]} Fp Fi Fc[21]}



static void Test_S11148C1()
{
  {
    init_simple_test("S11148C1");
    S11148C1 lv;
    check2(sizeof(lv), ABISELECT(216,204), "sizeof(S11148C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11148C1)");
    check_field_offset(lv, s11148c1f0, 0, "S11148C1.s11148c1f0");
    check_field_offset(lv, s11148c1f1, ABISELECT(176,172), "S11148C1.s11148c1f1");
    check_field_offset(lv, s11148c1f2, ABISELECT(184,176), "S11148C1.s11148c1f2");
    check_field_offset(lv, s11148c1f3, ABISELECT(188,180), "S11148C1.s11148c1f3");
  }
}
static Arrange_To_Call_Me vS11148C1(Test_S11148C1, "S11148C1", ABISELECT(216,204));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6557C2  {
  int s6557c2f0;
  void *s6557c2f1[2];
  char s6557c2f2[4];
  virtual void  v2(); // _ZN7S6557C22v2Ev
  virtual void  v3(); // _ZN7S6557C22v3Ev
  virtual void  v4(); // _ZN7S6557C22v4Ev
  virtual void  v5(); // _ZN7S6557C22v5Ev
  virtual void  v6(); // _ZN7S6557C22v6Ev
  ~S6557C2(); // tgen
  S6557C2(); // tgen
};
//SIG(-1 S6557C2) C1{ v1 v2 v3 v4 v5 Fi Fp[2] Fc[4]}


void  S6557C2 ::v2(){vfunc_called(this, "_ZN7S6557C22v2Ev");}
void  S6557C2 ::v3(){vfunc_called(this, "_ZN7S6557C22v3Ev");}
void  S6557C2 ::v4(){vfunc_called(this, "_ZN7S6557C22v4Ev");}
void  S6557C2 ::v5(){vfunc_called(this, "_ZN7S6557C22v5Ev");}
void  S6557C2 ::v6(){vfunc_called(this, "_ZN7S6557C22v6Ev");}
S6557C2 ::~S6557C2(){ note_dtor("S6557C2", this);} // tgen
S6557C2 ::S6557C2(){ note_ctor("S6557C2", this);} // tgen

static void Test_S6557C2()
{
  extern Class_Descriptor cd_S6557C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6557C2, buf);
    S6557C2 *dp, &lv = *(dp=new (buf) S6557C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6557C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6557C2)");
    check_field_offset(lv, s6557c2f0, ABISELECT(8,4), "S6557C2.s6557c2f0");
    check_field_offset(lv, s6557c2f1, ABISELECT(16,8), "S6557C2.s6557c2f1");
    check_field_offset(lv, s6557c2f2, ABISELECT(32,16), "S6557C2.s6557c2f2");
    test_class_info(&lv, &cd_S6557C2);
    dp->~S6557C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6557C2(Test_S6557C2, "S6557C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S6557C2C1Ev();
extern void _ZN7S6557C2D1Ev();
Name_Map name_map_S6557C2[] = {
  NSPAIR(_ZN7S6557C2C1Ev),
  NSPAIR(_ZN7S6557C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6557C2[];
extern void _ZN7S6557C22v2Ev();
extern void _ZN7S6557C22v3Ev();
extern void _ZN7S6557C22v4Ev();
extern void _ZN7S6557C22v5Ev();
extern void _ZN7S6557C22v6Ev();
static  VTBL_ENTRY vtc_S6557C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6557C2[0]),
  (VTBL_ENTRY)&_ZN7S6557C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6557C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6557C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6557C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6557C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S6557C2[];
extern  VTBL_ENTRY _ZTV7S6557C2[];
Class_Descriptor cd_S6557C2 = {  "S6557C2", // class name
  0,0,//no base classes
  &(vtc_S6557C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S6557C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6557C2),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  S6557C1  : S6557C2 {
  virtual void  v1(); // _ZN7S6557C12v1Ev
  ~S6557C1(); // tgen
  S6557C1(); // tgen
};
//SIG(1 S6557C1) C1{ BC2{ v2 v3 v4 v5 v6 Fi Fp[2] Fc[4]} v1}


void  S6557C1 ::v1(){vfunc_called(this, "_ZN7S6557C12v1Ev");}
S6557C1 ::~S6557C1(){ note_dtor("S6557C1", this);} // tgen
S6557C1 ::S6557C1(){ note_ctor("S6557C1", this);} // tgen

static void Test_S6557C1()
{
  extern Class_Descriptor cd_S6557C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6557C1, buf);
    S6557C1 *dp, &lv = *(dp=new (buf) S6557C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6557C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6557C1)");
    check_base_class_offset(lv, (S6557C2*), 0, "S6557C1");
    test_class_info(&lv, &cd_S6557C1);
    dp->~S6557C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6557C1(Test_S6557C1, "S6557C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S6557C1C1Ev();
extern void _ZN7S6557C1D1Ev();
Name_Map name_map_S6557C1[] = {
  NSPAIR(_ZN7S6557C1C1Ev),
  NSPAIR(_ZN7S6557C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6557C2;
extern VTBL_ENTRY _ZTI7S6557C2[];
extern  VTBL_ENTRY _ZTV7S6557C2[];
static Base_Class bases_S6557C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6557C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S6557C1[];
extern void _ZN7S6557C22v2Ev();
extern void _ZN7S6557C22v3Ev();
extern void _ZN7S6557C22v4Ev();
extern void _ZN7S6557C22v5Ev();
extern void _ZN7S6557C22v6Ev();
extern void _ZN7S6557C12v1Ev();
static  VTBL_ENTRY vtc_S6557C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6557C1[0]),
  (VTBL_ENTRY)&_ZN7S6557C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6557C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6557C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6557C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6557C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6557C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S6557C1[];
extern  VTBL_ENTRY _ZTV7S6557C1[];
Class_Descriptor cd_S6557C1 = {  "S6557C1", // class name
  bases_S6557C1, 1,
  &(vtc_S6557C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S6557C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6557C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20023C2  {
  __tsi64 s20023c2f0[2];
  void *s20023c2f1;
  __tsi64 s20023c2f2[2];
  virtual void  v2(); // _ZN8S20023C22v2Ev
  ~S20023C2(); // tgen
  S20023C2(); // tgen
};
//SIG(-1 S20023C2) C1{ v1 FL[2] Fp FL[2]}


void  S20023C2 ::v2(){vfunc_called(this, "_ZN8S20023C22v2Ev");}
S20023C2 ::~S20023C2(){ note_dtor("S20023C2", this);} // tgen
S20023C2 ::S20023C2(){ note_ctor("S20023C2", this);} // tgen

static void Test_S20023C2()
{
  extern Class_Descriptor cd_S20023C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S20023C2, buf);
    S20023C2 *dp, &lv = *(dp=new (buf) S20023C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S20023C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20023C2)");
    check_field_offset(lv, s20023c2f0, ABISELECT(8,4), "S20023C2.s20023c2f0");
    check_field_offset(lv, s20023c2f1, ABISELECT(24,20), "S20023C2.s20023c2f1");
    check_field_offset(lv, s20023c2f2, ABISELECT(32,24), "S20023C2.s20023c2f2");
    test_class_info(&lv, &cd_S20023C2);
    dp->~S20023C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20023C2(Test_S20023C2, "S20023C2", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN8S20023C2C1Ev();
extern void _ZN8S20023C2D1Ev();
Name_Map name_map_S20023C2[] = {
  NSPAIR(_ZN8S20023C2C1Ev),
  NSPAIR(_ZN8S20023C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20023C2[];
extern void _ZN8S20023C22v2Ev();
static  VTBL_ENTRY vtc_S20023C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20023C2[0]),
  (VTBL_ENTRY)&_ZN8S20023C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S20023C2[];
extern  VTBL_ENTRY _ZTV8S20023C2[];
Class_Descriptor cd_S20023C2 = {  "S20023C2", // class name
  0,0,//no base classes
  &(vtc_S20023C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI8S20023C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20023C2),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  S20023C1  : virtual S20023C2 {
  int s20023c1f0;
  __tsi64 s20023c1f1;
  ::S20023C2 s20023c1f2;
  virtual void  v1(); // _ZN8S20023C12v1Ev
  ~S20023C1(); // tgen
  S20023C1(); // tgen
};
//SIG(1 S20023C1) C1{ VBC2{ v2 FL[2] Fp FL[2]} v1 Fi FL FC2}


void  S20023C1 ::v1(){vfunc_called(this, "_ZN8S20023C12v1Ev");}
S20023C1 ::~S20023C1(){ note_dtor("S20023C1", this);} // tgen
S20023C1 ::S20023C1(){ note_ctor("S20023C1", this);} // tgen

static void Test_S20023C1()
{
  extern Class_Descriptor cd_S20023C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,25)];
    init_test(&cd_S20023C1, buf);
    S20023C1 *dp, &lv = *(dp=new (buf) S20023C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,96), "sizeof(S20023C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20023C1)");
    check_base_class_offset(lv, (S20023C2*), ABISELECT(72,56), "S20023C1");
    check_field_offset(lv, s20023c1f0, ABISELECT(8,4), "S20023C1.s20023c1f0");
    check_field_offset(lv, s20023c1f1, ABISELECT(16,8), "S20023C1.s20023c1f1");
    check_field_offset(lv, s20023c1f2, ABISELECT(24,16), "S20023C1.s20023c1f2");
    test_class_info(&lv, &cd_S20023C1);
    dp->~S20023C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20023C1(Test_S20023C1, "S20023C1", ABISELECT(120,96));

#else // __cplusplus

extern void _ZN8S20023C1C1Ev();
extern void _ZN8S20023C1D1Ev();
Name_Map name_map_S20023C1[] = {
  NSPAIR(_ZN8S20023C1C1Ev),
  NSPAIR(_ZN8S20023C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20023C2;
extern VTBL_ENTRY _ZTI8S20023C2[];
extern  VTBL_ENTRY _ZTV8S20023C2[];
static Base_Class bases_S20023C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20023C2,    ABISELECT(72,56), //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 _ZTI8S20023C1[];
extern void _ZN8S20023C12v1Ev();
extern void _ZN8S20023C22v2Ev();
static  VTBL_ENTRY vtc_S20023C1[] = {
  ABISELECT(72,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20023C1[0]),
  (VTBL_ENTRY)&_ZN8S20023C12v1Ev,
  0,
  ABISELECT(-72,-56),
  (VTBL_ENTRY)&(_ZTI8S20023C1[0]),
  (VTBL_ENTRY)&_ZN8S20023C22v2Ev,
};
extern VTBL_ENTRY _ZTV8S20023C1[];
static  VTT_ENTRY vtt_S20023C1[] = {
  {&(_ZTV8S20023C1[3]),  3,8},
  {&(_ZTV8S20023C1[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S20023C1[];
extern  VTBL_ENTRY _ZTV8S20023C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20023C1[];
Class_Descriptor cd_S20023C1 = {  "S20023C1", // class name
  bases_S20023C1, 1,
  &(vtc_S20023C1[0]), // expected_vtbl_contents
  &(vtt_S20023C1[0]), // expected_vtt_contents
  ABISELECT(120,96), // object size
  NSPAIRA(_ZTI8S20023C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20023C1),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20023C1),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

union  S18619C2  {
  long double s18619c2f0[9];
  int s18619c2f1;
  void  mf18619c2(); // _ZN8S18619C29mf18619c2Ev
};
//SIG(1 S18619C2) U1{ m FD[9] Fi}

#endif // __cplusplus
#ifdef __cplusplus

struct  S18619C1  {
  long double s18619c1f0;
  int  :0;
  ::S18619C2 s18619c1f2[8];
  virtual void  v1(); // _ZN8S18619C12v1Ev
  virtual void  v2(); // _ZN8S18619C12v2Ev
  virtual void  v3(); // _ZN8S18619C12v3Ev
  ~S18619C1(); // tgen
  S18619C1(); // tgen
};
//SIG(1 S18619C1) C1{ v1 v2 v3 FD Fi:0 FU2{ m FD[9] Fi}[8]}


void  S18619C1 ::v1(){vfunc_called(this, "_ZN8S18619C12v1Ev");}
void  S18619C1 ::v2(){vfunc_called(this, "_ZN8S18619C12v2Ev");}
void  S18619C1 ::v3(){vfunc_called(this, "_ZN8S18619C12v3Ev");}
S18619C1 ::~S18619C1(){ note_dtor("S18619C1", this);} // tgen
S18619C1 ::S18619C1(){ note_ctor("S18619C1", this);} // tgen

static void Test_S18619C1()
{
  extern Class_Descriptor cd_S18619C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(75,221)];
    init_test(&cd_S18619C1, buf);
    S18619C1 *dp, &lv = *(dp=new (buf) S18619C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1184,880), "sizeof(S18619C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18619C1)");
    check_field_offset(lv, s18619c1f0, ABISELECT(16,4), "S18619C1.s18619c1f0");
    check_field_offset(lv, s18619c1f2, ABISELECT(32,16), "S18619C1.s18619c1f2");
    test_class_info(&lv, &cd_S18619C1);
    dp->~S18619C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18619C1(Test_S18619C1, "S18619C1", ABISELECT(1184,880));

#else // __cplusplus

extern void _ZN8S18619C1C1Ev();
extern void _ZN8S18619C1D1Ev();
Name_Map name_map_S18619C1[] = {
  NSPAIR(_ZN8S18619C1C1Ev),
  NSPAIR(_ZN8S18619C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18619C1[];
extern void _ZN8S18619C12v1Ev();
extern void _ZN8S18619C12v2Ev();
extern void _ZN8S18619C12v3Ev();
static  VTBL_ENTRY vtc_S18619C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18619C1[0]),
  (VTBL_ENTRY)&_ZN8S18619C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18619C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18619C12v3Ev,
};
extern VTBL_ENTRY _ZTI8S18619C1[];
extern  VTBL_ENTRY _ZTV8S18619C1[];
Class_Descriptor cd_S18619C1 = {  "S18619C1", // class name
  0,0,//no base classes
  &(vtc_S18619C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1184,880), // object size
  NSPAIRA(_ZTI8S18619C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18619C1),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  S11405C2_nt  {
  int s11405c2f0;
  void *s11405c2f1[3];
  int s11405c2f2;
  void *s11405c2f3;
  int s11405c2f4[17];
};
//SIG(-1 S11405C2_nt) C1{ Fi Fp[3] Fi Fp Fi[17]}



//skip512 S11405C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11405C1  {
  ::S11405C2_nt s11405c1f0;
  int s11405c1f1[2];
  long s11405c1f2;
};
//SIG(1 S11405C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fi[2] Fl}



static void Test_S11405C1()
{
  {
    init_simple_test("S11405C1");
    S11405C1 lv;
    check2(sizeof(lv), ABISELECT(136,104), "sizeof(S11405C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11405C1)");
    check_field_offset(lv, s11405c1f0, 0, "S11405C1.s11405c1f0");
    check_field_offset(lv, s11405c1f1, ABISELECT(120,92), "S11405C1.s11405c1f1");
    check_field_offset(lv, s11405c1f2, ABISELECT(128,100), "S11405C1.s11405c1f2");
  }
}
static Arrange_To_Call_Me vS11405C1(Test_S11405C1, "S11405C1", ABISELECT(136,104));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6886C2_nt  {
  __tsi64 s6886c2f0;
  virtual void  v5(); // _ZN10S6886C2_nt2v5Ev
  virtual void  v6(); // _ZN10S6886C2_nt2v6Ev
  virtual void  v7(); // _ZN10S6886C2_nt2v7Ev
  ~S6886C2_nt(); // tgen
  S6886C2_nt(); // tgen
};
//SIG(-1 S6886C2_nt) C1{ v1 v2 v3 FL}


void  S6886C2_nt ::v5(){vfunc_called(this, "_ZN10S6886C2_nt2v5Ev");}
void  S6886C2_nt ::v6(){vfunc_called(this, "_ZN10S6886C2_nt2v6Ev");}
void  S6886C2_nt ::v7(){vfunc_called(this, "_ZN10S6886C2_nt2v7Ev");}
S6886C2_nt ::~S6886C2_nt(){ note_dtor("S6886C2_nt", this);} // tgen
S6886C2_nt ::S6886C2_nt(){ note_ctor("S6886C2_nt", this);} // tgen

//skip512 S6886C2_nt

#else // __cplusplus

extern void _ZN10S6886C2_ntC1Ev();
extern void _ZN10S6886C2_ntD1Ev();
Name_Map name_map_S6886C2_nt[] = {
  NSPAIR(_ZN10S6886C2_ntC1Ev),
  NSPAIR(_ZN10S6886C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S6886C2_nt[];
extern void _ZN10S6886C2_nt2v5Ev();
extern void _ZN10S6886C2_nt2v6Ev();
extern void _ZN10S6886C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S6886C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6886C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S6886C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S6886C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S6886C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S6886C2_nt[];
VTBL_ENTRY *P__ZTI10S6886C2_nt = _ZTI10S6886C2_nt; 
extern  VTBL_ENTRY _ZTV10S6886C2_nt[];
Class_Descriptor cd_S6886C2_nt = {  "S6886C2_nt", // class name
  0,0,//no base classes
  &(vtc_S6886C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S6886C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S6886C2_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  S6886C1  : S6886C2_nt {
  ::S19426C9_nt s6886c1f0;
  virtual void  v1(); // _ZN7S6886C12v1Ev
  virtual void  v2(); // _ZN7S6886C12v2Ev
  virtual void  v3(); // _ZN7S6886C12v3Ev
  virtual void  v4(); // _ZN7S6886C12v4Ev
  ~S6886C1(); // tgen
  S6886C1(); // tgen
};
//SIG(1 S6886C1) C1{ BC2{ v5 v6 v7 FL} v1 v2 v3 v4 FU3{ m}}


void  S6886C1 ::v1(){vfunc_called(this, "_ZN7S6886C12v1Ev");}
void  S6886C1 ::v2(){vfunc_called(this, "_ZN7S6886C12v2Ev");}
void  S6886C1 ::v3(){vfunc_called(this, "_ZN7S6886C12v3Ev");}
void  S6886C1 ::v4(){vfunc_called(this, "_ZN7S6886C12v4Ev");}
S6886C1 ::~S6886C1(){ note_dtor("S6886C1", this);} // tgen
S6886C1 ::S6886C1(){ note_ctor("S6886C1", this);} // tgen

static void Test_S6886C1()
{
  extern Class_Descriptor cd_S6886C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6886C1, buf);
    S6886C1 *dp, &lv = *(dp=new (buf) S6886C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6886C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6886C1)");
    check_base_class_offset(lv, (S6886C2_nt*), 0, "S6886C1");
    check_field_offset(lv, s6886c1f0, ABISELECT(16,12), "S6886C1.s6886c1f0");
    test_class_info(&lv, &cd_S6886C1);
    dp->~S6886C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6886C1(Test_S6886C1, "S6886C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S6886C1C1Ev();
extern void _ZN7S6886C1D1Ev();
Name_Map name_map_S6886C1[] = {
  NSPAIR(_ZN7S6886C1C1Ev),
  NSPAIR(_ZN7S6886C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6886C2_nt;
extern VTBL_ENTRY _ZTI10S6886C2_nt[];
extern  VTBL_ENTRY _ZTV10S6886C2_nt[];
static Base_Class bases_S6886C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6886C2_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 _ZTI7S6886C1[];
extern void _ZN10S6886C2_nt2v5Ev();
extern void _ZN10S6886C2_nt2v6Ev();
extern void _ZN10S6886C2_nt2v7Ev();
extern void _ZN7S6886C12v1Ev();
extern void _ZN7S6886C12v2Ev();
extern void _ZN7S6886C12v3Ev();
extern void _ZN7S6886C12v4Ev();
static  VTBL_ENTRY vtc_S6886C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6886C1[0]),
  (VTBL_ENTRY)&_ZN10S6886C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S6886C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S6886C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN7S6886C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6886C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6886C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6886C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S6886C1[];
extern  VTBL_ENTRY _ZTV7S6886C1[];
Class_Descriptor cd_S6886C1 = {  "S6886C1", // class name
  bases_S6886C1, 1,
  &(vtc_S6886C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S6886C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6886C1),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  S11147C1  {
  ::S11143C2 s11147c1f0;
  int s11147c1f1;
  char s11147c1f2[22];
};
//SIG(1 S11147C1) C1{ FC2{ Fc[144] Fi[5] Fs[4]} Fi Fc[22]}



static void Test_S11147C1()
{
  {
    init_simple_test("S11147C1");
    S11147C1 lv;
    check2(sizeof(lv), 200, "sizeof(S11147C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11147C1)");
    check_field_offset(lv, s11147c1f0, 0, "S11147C1.s11147c1f0");
    check_field_offset(lv, s11147c1f1, 172, "S11147C1.s11147c1f1");
    check_field_offset(lv, s11147c1f2, 176, "S11147C1.s11147c1f2");
  }
}
static Arrange_To_Call_Me vS11147C1(Test_S11147C1, "S11147C1", 200);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11146C1  {
  ::S11143C2 s11146c1f0;
  int s11146c1f1;
  char s11146c1f2[21];
};
//SIG(1 S11146C1) C1{ FC2{ Fc[144] Fi[5] Fs[4]} Fi Fc[21]}



static void Test_S11146C1()
{
  {
    init_simple_test("S11146C1");
    S11146C1 lv;
    check2(sizeof(lv), 200, "sizeof(S11146C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11146C1)");
    check_field_offset(lv, s11146c1f0, 0, "S11146C1.s11146c1f0");
    check_field_offset(lv, s11146c1f1, 172, "S11146C1.s11146c1f1");
    check_field_offset(lv, s11146c1f2, 176, "S11146C1.s11146c1f2");
  }
}
static Arrange_To_Call_Me vS11146C1(Test_S11146C1, "S11146C1", 200);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19807C3_nt  : S3600C19 {
};
//SIG(-1 S19807C3_nt) C1{ BC2{ m}}



//skip512 S19807C3_nt

#else // __cplusplus

extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S19807C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI11S19807C3_nt[];
VTBL_ENTRY *P__ZTI11S19807C3_nt = _ZTI11S19807C3_nt; 
Class_Descriptor cd_S19807C3_nt = {  "S19807C3_nt", // class name
  bases_S19807C3_nt, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S19807C3_nt),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19807C4  : virtual S3600C19 {
  ~S19807C4(); // tgen
  S19807C4(); // tgen
};
//SIG(-1 S19807C4) C1{ VBC2{ m}}


S19807C4 ::~S19807C4(){ note_dtor("S19807C4", this);} // tgen
S19807C4 ::S19807C4(){ note_ctor("S19807C4", this);} // tgen

static void Test_S19807C4()
{
  extern Class_Descriptor cd_S19807C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19807C4, buf);
    S19807C4 *dp, &lv = *(dp=new (buf) S19807C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19807C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19807C4)");
    check_base_class_offset(lv, (S3600C19*), 0, "S19807C4");
    test_class_info(&lv, &cd_S19807C4);
    dp->~S19807C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19807C4(Test_S19807C4, "S19807C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19807C4C1Ev();
extern void _ZN8S19807C4D1Ev();
Name_Map name_map_S19807C4[] = {
  NSPAIR(_ZN8S19807C4C1Ev),
  NSPAIR(_ZN8S19807C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S19807C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19807C4[];
static  VTBL_ENTRY vtc_S19807C4[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19807C4[0]),
};
extern VTBL_ENTRY _ZTV8S19807C4[];
static  VTT_ENTRY vtt_S19807C4[] = {
  {&(_ZTV8S19807C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19807C4[];
extern  VTBL_ENTRY _ZTV8S19807C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19807C4[];
Class_Descriptor cd_S19807C4 = {  "S19807C4", // class name
  bases_S19807C4, 1,
  &(vtc_S19807C4[0]), // expected_vtbl_contents
  &(vtt_S19807C4[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19807C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19807C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19807C4),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  S19807C1  : virtual S3600C19 , S19807C3_nt , virtual S19807C4 , virtual S3600C6_nt {
  ~S19807C1(); // tgen
  S19807C1(); // tgen
};
//SIG(1 S19807C1) C1{ VBC2{ m} BC3{ BC2} VBC4{ VBC2} VBC5{ m}}


S19807C1 ::~S19807C1(){ note_dtor("S19807C1", this);} // tgen
S19807C1 ::S19807C1(){ note_ctor("S19807C1", this);} // tgen

static void Test_S19807C1()
{
  extern Class_Descriptor cd_S19807C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19807C1, buf);
    S19807C1 *dp, &lv = *(dp=new (buf) S19807C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19807C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19807C1)");
    /*is_ambiguous_... S19807C1::S3600C19 */ AMB_check_base_class_offset(lv, (S3600C19*), ABISELECT(8,4), "S19807C1");
    check_base_class_offset(lv, (S3600C19*)(S19807C4*), ABISELECT(8,4), "S19807C1");
    check_base_class_offset(lv, (S3600C19*)(S19807C3_nt*), 0, "S19807C1");
    check_base_class_offset(lv, (S19807C3_nt*), 0, "S19807C1");
    check_base_class_offset(lv, (S19807C4*), 0, "S19807C1");
    check_base_class_offset(lv, (S3600C6_nt*), 0, "S19807C1");
    test_class_info(&lv, &cd_S19807C1);
    dp->~S19807C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19807C1(Test_S19807C1, "S19807C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19807C1C1Ev();
extern void _ZN8S19807C1D1Ev();
Name_Map name_map_S19807C1[] = {
  NSPAIR(_ZN8S19807C1C1Ev),
  NSPAIR(_ZN8S19807C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19807C3_nt;
extern VTBL_ENTRY _ZTI11S19807C3_nt[];
extern Class_Descriptor cd_S19807C4;
extern VTBL_ENTRY _ZTI8S19807C4[];
extern  VTBL_ENTRY _ZTV8S19807C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19807C4[];
extern Class_Descriptor cd_S3600C6_nt;
extern VTBL_ENTRY _ZTI10S3600C6_nt[];
static Base_Class bases_S19807C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    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_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19807C3_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_S19807C4,    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},
  {&cd_S3600C6_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19807C1[];
static  VTBL_ENTRY vtc_S19807C1[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19807C1[0]),
};
extern VTBL_ENTRY _ZTV8S19807C1[];
static  VTBL_ENTRY _tg__ZTV8S19807C4__8S19807C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19807C4[0]),
};
static  VTT_ENTRY vtt_S19807C1[] = {
  {&(_ZTV8S19807C1[5]),  5,5},
  {&(_ZTV8S19807C1[5]),  5,5},
  {&(_tg__ZTV8S19807C4__8S19807C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19807C1[];
extern  VTBL_ENTRY _ZTV8S19807C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19807C1[];
Class_Descriptor cd_S19807C1 = {  "S19807C1", // class name
  bases_S19807C1, 5,
  &(vtc_S19807C1[0]), // expected_vtbl_contents
  &(vtt_S19807C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19807C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19807C1),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19807C1),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  S14031C1  {
  long s14031c1f0[6];
  ::S13714C7 s14031c1f1;
  ::S13714C7 s14031c1f2;
  ::S13714C7 s14031c1f3;
  void *s14031c1f4[2];
};
//SIG(1 S14031C1) C1{ Fl[6] FC2{ Fl FL[2]} FC2 FC2 Fp[2]}



static void Test_S14031C1()
{
  {
    init_simple_test("S14031C1");
    S14031C1 lv;
    check2(sizeof(lv), ABISELECT(136,92), "sizeof(S14031C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14031C1)");
    check_field_offset(lv, s14031c1f0, 0, "S14031C1.s14031c1f0");
    check_field_offset(lv, s14031c1f1, ABISELECT(48,24), "S14031C1.s14031c1f1");
    check_field_offset(lv, s14031c1f2, ABISELECT(72,44), "S14031C1.s14031c1f2");
    check_field_offset(lv, s14031c1f3, ABISELECT(96,64), "S14031C1.s14031c1f3");
    check_field_offset(lv, s14031c1f4, ABISELECT(120,84), "S14031C1.s14031c1f4");
  }
}
static Arrange_To_Call_Me vS14031C1(Test_S14031C1, "S14031C1", ABISELECT(136,92));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21823C1  {
  void *s21823c1f0[3];
  ::S20003C5 s21823c1f1;
  void  mf21823c1(); // _ZN8S21823C19mf21823c1Ev
  virtual  ~S21823C1(); // _ZN8S21823C1D1Ev
  S21823C1(); // tgen
};
//SIG(1 S21823C1) C1{ vd m Fp[3] FC2{ BC3{ vd v2} vd v1}}


void  S21823C1 ::mf21823c1(){}
 S21823C1 ::~S21823C1(){ note_dtor("S21823C1", this);}
S21823C1 ::S21823C1(){ note_ctor("S21823C1", this);} // tgen

static void Test_S21823C1()
{
  extern Class_Descriptor cd_S21823C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S21823C1, buf);
    S21823C1 *dp, &lv = *(dp=new (buf) S21823C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S21823C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21823C1)");
    check_field_offset(lv, s21823c1f0, ABISELECT(8,4), "S21823C1.s21823c1f0");
    check_field_offset(lv, s21823c1f1, ABISELECT(32,16), "S21823C1.s21823c1f1");
    test_class_info(&lv, &cd_S21823C1);
    dp->~S21823C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21823C1(Test_S21823C1, "S21823C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S21823C1C1Ev();
extern void _ZN8S21823C1D1Ev();
Name_Map name_map_S21823C1[] = {
  NSPAIR(_ZN8S21823C1C1Ev),
  NSPAIR(_ZN8S21823C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21823C1[];
extern void _ZN8S21823C1D1Ev();
extern void _ZN8S21823C1D0Ev();
static  VTBL_ENTRY vtc_S21823C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21823C1[0]),
  (VTBL_ENTRY)&_ZN8S21823C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21823C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21823C1[];
extern  VTBL_ENTRY _ZTV8S21823C1[];
Class_Descriptor cd_S21823C1 = {  "S21823C1", // class name
  0,0,//no base classes
  &(vtc_S21823C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S21823C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21823C1),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  S3509C3  : virtual S3600C19 {
  ~S3509C3(); // tgen
  S3509C3(); // tgen
};
//SIG(-1 S3509C3) C1{ VBC2{ m}}


S3509C3 ::~S3509C3(){ note_dtor("S3509C3", this);} // tgen
S3509C3 ::S3509C3(){ note_ctor("S3509C3", this);} // tgen

static void Test_S3509C3()
{
  extern Class_Descriptor cd_S3509C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3509C3, buf);
    S3509C3 *dp, &lv = *(dp=new (buf) S3509C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3509C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3509C3)");
    check_base_class_offset(lv, (S3600C19*), 0, "S3509C3");
    test_class_info(&lv, &cd_S3509C3);
    dp->~S3509C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3509C3(Test_S3509C3, "S3509C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3509C3C1Ev();
extern void _ZN7S3509C3D1Ev();
Name_Map name_map_S3509C3[] = {
  NSPAIR(_ZN7S3509C3C1Ev),
  NSPAIR(_ZN7S3509C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S3509C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S3509C3[];
static  VTBL_ENTRY vtc_S3509C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3509C3[0]),
};
extern VTBL_ENTRY _ZTV7S3509C3[];
static  VTT_ENTRY vtt_S3509C3[] = {
  {&(_ZTV7S3509C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3509C3[];
extern  VTBL_ENTRY _ZTV7S3509C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3509C3[];
Class_Descriptor cd_S3509C3 = {  "S3509C3", // class name
  bases_S3509C3, 1,
  &(vtc_S3509C3[0]), // expected_vtbl_contents
  &(vtt_S3509C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3509C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3509C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3509C3),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  S3509C5  : virtual S3600C19 {
  ~S3509C5(); // tgen
  S3509C5(); // tgen
};
//SIG(-1 S3509C5) C1{ VBC2{ m}}


S3509C5 ::~S3509C5(){ note_dtor("S3509C5", this);} // tgen
S3509C5 ::S3509C5(){ note_ctor("S3509C5", this);} // tgen

static void Test_S3509C5()
{
  extern Class_Descriptor cd_S3509C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3509C5, buf);
    S3509C5 *dp, &lv = *(dp=new (buf) S3509C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3509C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3509C5)");
    check_base_class_offset(lv, (S3600C19*), 0, "S3509C5");
    test_class_info(&lv, &cd_S3509C5);
    dp->~S3509C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3509C5(Test_S3509C5, "S3509C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3509C5C1Ev();
extern void _ZN7S3509C5D1Ev();
Name_Map name_map_S3509C5[] = {
  NSPAIR(_ZN7S3509C5C1Ev),
  NSPAIR(_ZN7S3509C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S3509C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S3509C5[];
static  VTBL_ENTRY vtc_S3509C5[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3509C5[0]),
};
extern VTBL_ENTRY _ZTV7S3509C5[];
static  VTT_ENTRY vtt_S3509C5[] = {
  {&(_ZTV7S3509C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3509C5[];
extern  VTBL_ENTRY _ZTV7S3509C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3509C5[];
Class_Descriptor cd_S3509C5 = {  "S3509C5", // class name
  bases_S3509C5, 1,
  &(vtc_S3509C5[0]), // expected_vtbl_contents
  &(vtt_S3509C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3509C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3509C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3509C5),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  S3509C2  : S3509C3 , S3509C5 {
  ~S3509C2(); // tgen
  S3509C2(); // tgen
};
//SIG(-1 S3509C2) C1{ BC2{ VBC3{ m}} BC4{ VBC3}}


S3509C2 ::~S3509C2(){ note_dtor("S3509C2", this);} // tgen
S3509C2 ::S3509C2(){ note_ctor("S3509C2", this);} // tgen

static void Test_S3509C2()
{
  extern Class_Descriptor cd_S3509C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3509C2, buf);
    S3509C2 *dp, &lv = *(dp=new (buf) S3509C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3509C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3509C2)");
    check_base_class_offset(lv, (S3600C19*)(S3509C3*), 0, "S3509C2");
    check_base_class_offset(lv, (S3600C19*)(S3509C5*), 0, "S3509C2");
    check_base_class_offset(lv, (S3509C3*), 0, "S3509C2");
    check_base_class_offset(lv, (S3509C5*), ABISELECT(8,4), "S3509C2");
    test_class_info(&lv, &cd_S3509C2);
    dp->~S3509C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3509C2(Test_S3509C2, "S3509C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3509C2C1Ev();
extern void _ZN7S3509C2D1Ev();
Name_Map name_map_S3509C2[] = {
  NSPAIR(_ZN7S3509C2C1Ev),
  NSPAIR(_ZN7S3509C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3509C3;
extern VTBL_ENTRY _ZTI7S3509C3[];
extern  VTBL_ENTRY _ZTV7S3509C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3509C3[];
extern Class_Descriptor cd_S3509C5;
extern VTBL_ENTRY _ZTI7S3509C5[];
extern  VTBL_ENTRY _ZTV7S3509C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3509C5[];
static Base_Class bases_S3509C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3509C3,    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_S3509C5,    ABISELECT(8,4), //bcp->offset
    3, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3509C2[];
static  VTBL_ENTRY vtc_S3509C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3509C2[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3509C2[0]),
};
extern VTBL_ENTRY _ZTV7S3509C2[];
static  VTBL_ENTRY _tg__ZTV7S3509C3__7S3509C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3509C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3509C5__7S3509C2[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3509C5[0]),
};
static  VTT_ENTRY vtt_S3509C2[] = {
  {&(_ZTV7S3509C2[3]),  3,6},
  {&(_tg__ZTV7S3509C3__7S3509C2[3]),  3,3},
  {&(_tg__ZTV7S3509C5__7S3509C2[3]),  3,3},
  {&(_ZTV7S3509C2[6]),  6,6},
};
extern VTBL_ENTRY _ZTI7S3509C2[];
extern  VTBL_ENTRY _ZTV7S3509C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3509C2[];
Class_Descriptor cd_S3509C2 = {  "S3509C2", // class name
  bases_S3509C2, 3,
  &(vtc_S3509C2[0]), // expected_vtbl_contents
  &(vtt_S3509C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3509C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3509C2),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3509C2),4, //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  S3509C1  : S3509C2 , S19499C8_nt {
  ~S3509C1(); // tgen
  S3509C1(); // tgen
};
//SIG(1 S3509C1) C1{ BC2{ BC3{ VBC4{ m}} BC5{ VBC4}} BC6{}}


S3509C1 ::~S3509C1(){ note_dtor("S3509C1", this);} // tgen
S3509C1 ::S3509C1(){ note_ctor("S3509C1", this);} // tgen

static void Test_S3509C1()
{
  extern Class_Descriptor cd_S3509C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3509C1, buf);
    S3509C1 *dp, &lv = *(dp=new (buf) S3509C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3509C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3509C1)");
    check_base_class_offset(lv, (S3600C19*)(S3509C3*)(S3509C2*), 0, "S3509C1");
    check_base_class_offset(lv, (S3600C19*)(S3509C5*)(S3509C2*), 0, "S3509C1");
    check_base_class_offset(lv, (S3509C3*)(S3509C2*), 0, "S3509C1");
    check_base_class_offset(lv, (S3509C5*)(S3509C2*), ABISELECT(8,4), "S3509C1");
    check_base_class_offset(lv, (S3509C2*), 0, "S3509C1");
    check_base_class_offset(lv, (S19499C8_nt*), 0, "S3509C1");
    test_class_info(&lv, &cd_S3509C1);
    dp->~S3509C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3509C1(Test_S3509C1, "S3509C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3509C1C1Ev();
extern void _ZN7S3509C1D1Ev();
Name_Map name_map_S3509C1[] = {
  NSPAIR(_ZN7S3509C1C1Ev),
  NSPAIR(_ZN7S3509C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S3509C3;
extern VTBL_ENTRY _ZTI7S3509C3[];
extern  VTBL_ENTRY _ZTV7S3509C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3509C3[];
extern Class_Descriptor cd_S3509C5;
extern VTBL_ENTRY _ZTI7S3509C5[];
extern  VTBL_ENTRY _ZTV7S3509C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3509C5[];
extern Class_Descriptor cd_S3509C2;
extern VTBL_ENTRY _ZTI7S3509C2[];
extern  VTBL_ENTRY _ZTV7S3509C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3509C2[];
extern Class_Descriptor cd_S19499C8_nt;
extern VTBL_ENTRY _ZTI11S19499C8_nt[];
static Base_Class bases_S3509C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3509C3,    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
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3509C5,    ABISELECT(8,4), //bcp->offset
    3, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3509C2,    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_S19499C8_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 _ZTI7S3509C1[];
static  VTBL_ENTRY vtc_S3509C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3509C1[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3509C1[0]),
};
extern VTBL_ENTRY _ZTV7S3509C1[];
static  VTBL_ENTRY _tg__ZTV7S3509C2__7S3509C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3509C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3509C37S3509C2__7S3509C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3509C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3509C57S3509C2__7S3509C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3509C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3509C5__7S3509C2__7S3509C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3509C2[0]),
};
static  VTT_ENTRY vtt_S3509C1[] = {
  {&(_ZTV7S3509C1[3]),  3,6},
  {&(_tg__ZTV7S3509C2__7S3509C1[3]),  3,3},
  {&(_tg__ZTV7S3509C37S3509C2__7S3509C1[3]),  3,3},
  {&(_tg__ZTV7S3509C57S3509C2__7S3509C1[3]),  3,3},
  {&(_tg__ZTV7S3509C5__7S3509C2__7S3509C1[3]),  3,3},
  {&(_ZTV7S3509C1[6]),  6,6},
};
extern VTBL_ENTRY _ZTI7S3509C1[];
extern  VTBL_ENTRY _ZTV7S3509C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3509C1[];
Class_Descriptor cd_S3509C1 = {  "S3509C1", // class name
  bases_S3509C1, 5,
  &(vtc_S3509C1[0]), // expected_vtbl_contents
  &(vtt_S3509C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3509C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3509C1),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3509C1),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  S18783C1  {
  void *s18783c1f0;
  ::S19426C9_nt s18783c1f1[3];
  virtual void  v1(); // _ZN8S18783C12v1Ev
  virtual void  v2(); // _ZN8S18783C12v2Ev
  virtual void  v3(); // _ZN8S18783C12v3Ev
  virtual void  v4(); // _ZN8S18783C12v4Ev
  virtual void  v5(); // _ZN8S18783C12v5Ev
  virtual void  v6(); // _ZN8S18783C12v6Ev
  ~S18783C1(); // tgen
  S18783C1(); // tgen
};
//SIG(1 S18783C1) C1{ v1 v2 v3 v4 v5 v6 Fp FU2{ m}[3]}


void  S18783C1 ::v1(){vfunc_called(this, "_ZN8S18783C12v1Ev");}
void  S18783C1 ::v2(){vfunc_called(this, "_ZN8S18783C12v2Ev");}
void  S18783C1 ::v3(){vfunc_called(this, "_ZN8S18783C12v3Ev");}
void  S18783C1 ::v4(){vfunc_called(this, "_ZN8S18783C12v4Ev");}
void  S18783C1 ::v5(){vfunc_called(this, "_ZN8S18783C12v5Ev");}
void  S18783C1 ::v6(){vfunc_called(this, "_ZN8S18783C12v6Ev");}
S18783C1 ::~S18783C1(){ note_dtor("S18783C1", this);} // tgen
S18783C1 ::S18783C1(){ note_ctor("S18783C1", this);} // tgen

static void Test_S18783C1()
{
  extern Class_Descriptor cd_S18783C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18783C1, buf);
    S18783C1 *dp, &lv = *(dp=new (buf) S18783C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18783C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18783C1)");
    check_field_offset(lv, s18783c1f0, ABISELECT(8,4), "S18783C1.s18783c1f0");
    check_field_offset(lv, s18783c1f1, ABISELECT(16,8), "S18783C1.s18783c1f1");
    test_class_info(&lv, &cd_S18783C1);
    dp->~S18783C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18783C1(Test_S18783C1, "S18783C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S18783C1C1Ev();
extern void _ZN8S18783C1D1Ev();
Name_Map name_map_S18783C1[] = {
  NSPAIR(_ZN8S18783C1C1Ev),
  NSPAIR(_ZN8S18783C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18783C1[];
extern void _ZN8S18783C12v1Ev();
extern void _ZN8S18783C12v2Ev();
extern void _ZN8S18783C12v3Ev();
extern void _ZN8S18783C12v4Ev();
extern void _ZN8S18783C12v5Ev();
extern void _ZN8S18783C12v6Ev();
static  VTBL_ENTRY vtc_S18783C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18783C1[0]),
  (VTBL_ENTRY)&_ZN8S18783C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18783C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18783C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18783C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18783C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18783C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S18783C1[];
extern  VTBL_ENTRY _ZTV8S18783C1[];
Class_Descriptor cd_S18783C1 = {  "S18783C1", // class name
  0,0,//no base classes
  &(vtc_S18783C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S18783C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18783C1),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  S11140C1  {
  ::S11143C2 s11140c1f0;
  char s11140c1f1[21];
};
//SIG(1 S11140C1) C1{ FC2{ Fc[144] Fi[5] Fs[4]} Fc[21]}



static void Test_S11140C1()
{
  {
    init_simple_test("S11140C1");
    S11140C1 lv;
    check2(sizeof(lv), 196, "sizeof(S11140C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11140C1)");
    check_field_offset(lv, s11140c1f0, 0, "S11140C1.s11140c1f0");
    check_field_offset(lv, s11140c1f1, 172, "S11140C1.s11140c1f1");
  }
}
static Arrange_To_Call_Me vS11140C1(Test_S11140C1, "S11140C1", 196);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5453C2  : S19499C8_nt , virtual S19252C5_nt {
  ~S5453C2(); // tgen
  S5453C2(); // tgen
};
//SIG(-1 S5453C2) C1{ BC2{} VBC3{}}


S5453C2 ::~S5453C2(){ note_dtor("S5453C2", this);} // tgen
S5453C2 ::S5453C2(){ note_ctor("S5453C2", this);} // tgen

static void Test_S5453C2()
{
  extern Class_Descriptor cd_S5453C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5453C2, buf);
    S5453C2 *dp, &lv = *(dp=new (buf) S5453C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5453C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5453C2)");
    check_base_class_offset(lv, (S19499C8_nt*), 0, "S5453C2");
    check_base_class_offset(lv, (S19252C5_nt*), 0, "S5453C2");
    test_class_info(&lv, &cd_S5453C2);
    dp->~S5453C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5453C2(Test_S5453C2, "S5453C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5453C2C1Ev();
extern void _ZN7S5453C2D1Ev();
Name_Map name_map_S5453C2[] = {
  NSPAIR(_ZN7S5453C2C1Ev),
  NSPAIR(_ZN7S5453C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19499C8_nt;
extern VTBL_ENTRY _ZTI11S19499C8_nt[];
extern Class_Descriptor cd_S19252C5_nt;
extern VTBL_ENTRY _ZTI11S19252C5_nt[];
static Base_Class bases_S5453C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19499C8_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_S19252C5_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5453C2[];
static  VTBL_ENTRY vtc_S5453C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S5453C2[0]),
};
extern VTBL_ENTRY _ZTV7S5453C2[];
static  VTT_ENTRY vtt_S5453C2[] = {
  {&(_ZTV7S5453C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5453C2[];
extern  VTBL_ENTRY _ZTV7S5453C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5453C2[];
Class_Descriptor cd_S5453C2 = {  "S5453C2", // class name
  bases_S5453C2, 2,
  &(vtc_S5453C2[0]), // expected_vtbl_contents
  &(vtt_S5453C2[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5453C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5453C2),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5453C2),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  S5453C5  : S19499C8_nt , virtual S19252C5_nt {
  ~S5453C5(); // tgen
  S5453C5(); // tgen
};
//SIG(-1 S5453C5) C1{ BC2{} VBC3{}}


S5453C5 ::~S5453C5(){ note_dtor("S5453C5", this);} // tgen
S5453C5 ::S5453C5(){ note_ctor("S5453C5", this);} // tgen

static void Test_S5453C5()
{
  extern Class_Descriptor cd_S5453C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5453C5, buf);
    S5453C5 *dp, &lv = *(dp=new (buf) S5453C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5453C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5453C5)");
    check_base_class_offset(lv, (S19499C8_nt*), 0, "S5453C5");
    check_base_class_offset(lv, (S19252C5_nt*), 0, "S5453C5");
    test_class_info(&lv, &cd_S5453C5);
    dp->~S5453C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5453C5(Test_S5453C5, "S5453C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5453C5C1Ev();
extern void _ZN7S5453C5D1Ev();
Name_Map name_map_S5453C5[] = {
  NSPAIR(_ZN7S5453C5C1Ev),
  NSPAIR(_ZN7S5453C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19499C8_nt;
extern VTBL_ENTRY _ZTI11S19499C8_nt[];
extern Class_Descriptor cd_S19252C5_nt;
extern VTBL_ENTRY _ZTI11S19252C5_nt[];
static Base_Class bases_S5453C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19499C8_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_S19252C5_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5453C5[];
static  VTBL_ENTRY vtc_S5453C5[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S5453C5[0]),
};
extern VTBL_ENTRY _ZTV7S5453C5[];
static  VTT_ENTRY vtt_S5453C5[] = {
  {&(_ZTV7S5453C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5453C5[];
extern  VTBL_ENTRY _ZTV7S5453C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5453C5[];
Class_Descriptor cd_S5453C5 = {  "S5453C5", // class name
  bases_S5453C5, 2,
  &(vtc_S5453C5[0]), // expected_vtbl_contents
  &(vtt_S5453C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5453C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5453C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5453C5),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  S5453C1  : S5453C2 , S5453C5 {
  ~S5453C1(); // tgen
  S5453C1(); // tgen
};
//SIG(1 S5453C1) C1{ BC2{ BC3{} VBC4{}} BC5{ BC3 VBC4}}


S5453C1 ::~S5453C1(){ note_dtor("S5453C1", this);} // tgen
S5453C1 ::S5453C1(){ note_ctor("S5453C1", this);} // tgen

static void Test_S5453C1()
{
  extern Class_Descriptor cd_S5453C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S5453C1, buf);
    S5453C1 *dp, &lv = *(dp=new (buf) S5453C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S5453C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5453C1)");
    check_base_class_offset(lv, (S19499C8_nt*)(S5453C2*), 0, "S5453C1");
    check_base_class_offset(lv, (S19252C5_nt*)(S5453C2*), 0, "S5453C1");
    check_base_class_offset(lv, (S19252C5_nt*)(S5453C5*), 0, "S5453C1");
    check_base_class_offset(lv, (S5453C2*), 0, "S5453C1");
    check_base_class_offset(lv, (S19499C8_nt*)(S5453C5*), ABISELECT(8,4), "S5453C1");
    check_base_class_offset(lv, (S5453C5*), ABISELECT(8,4), "S5453C1");
    test_class_info(&lv, &cd_S5453C1);
    dp->~S5453C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5453C1(Test_S5453C1, "S5453C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S5453C1C1Ev();
extern void _ZN7S5453C1D1Ev();
Name_Map name_map_S5453C1[] = {
  NSPAIR(_ZN7S5453C1C1Ev),
  NSPAIR(_ZN7S5453C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19499C8_nt;
extern VTBL_ENTRY _ZTI11S19499C8_nt[];
extern Class_Descriptor cd_S19252C5_nt;
extern VTBL_ENTRY _ZTI11S19252C5_nt[];
extern Class_Descriptor cd_S5453C2;
extern VTBL_ENTRY _ZTI7S5453C2[];
extern  VTBL_ENTRY _ZTV7S5453C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5453C2[];
extern Class_Descriptor cd_S19499C8_nt;
extern VTBL_ENTRY _ZTI11S19499C8_nt[];
extern Class_Descriptor cd_S5453C5;
extern VTBL_ENTRY _ZTI7S5453C5[];
extern  VTBL_ENTRY _ZTV7S5453C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5453C5[];
static Base_Class bases_S5453C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19499C8_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_S19252C5_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, 1},
  {&cd_S5453C2,    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_S19499C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5453C5,    ABISELECT(8,4), //bcp->offset
    3, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5453C1[];
static  VTBL_ENTRY vtc_S5453C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S5453C1[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S5453C1[0]),
};
extern VTBL_ENTRY _ZTV7S5453C1[];
static  VTBL_ENTRY _tg__ZTV7S5453C2__7S5453C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S5453C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5453C5__7S5453C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S5453C5[0]),
};
static  VTT_ENTRY vtt_S5453C1[] = {
  {&(_ZTV7S5453C1[3]),  3,6},
  {&(_tg__ZTV7S5453C2__7S5453C1[3]),  3,3},
  {&(_tg__ZTV7S5453C5__7S5453C1[3]),  3,3},
  {&(_ZTV7S5453C1[6]),  6,6},
};
extern VTBL_ENTRY _ZTI7S5453C1[];
extern  VTBL_ENTRY _ZTV7S5453C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5453C1[];
Class_Descriptor cd_S5453C1 = {  "S5453C1", // class name
  bases_S5453C1, 5,
  &(vtc_S5453C1[0]), // expected_vtbl_contents
  &(vtt_S5453C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S5453C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5453C1),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5453C1),4, //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  S18313C1  {
  void *s18313c1f0[3];
  int s18313c1f1;
  void *s18313c1f2;
  int s18313c1f3;
  void *s18313c1f4;
  char s18313c1f5;
  void *s18313c1f6;
  int s18313c1f7;
  void  mf18313c1(); // _ZN8S18313C19mf18313c1Ev
};
//SIG(1 S18313C1) C1{ m Fp[3] Fi Fp Fi Fp Fc Fp Fi}


void  S18313C1 ::mf18313c1(){}

static void Test_S18313C1()
{
  {
    init_simple_test("S18313C1");
    S18313C1 lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S18313C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18313C1)");
    check_field_offset(lv, s18313c1f0, 0, "S18313C1.s18313c1f0");
    check_field_offset(lv, s18313c1f1, ABISELECT(24,12), "S18313C1.s18313c1f1");
    check_field_offset(lv, s18313c1f2, ABISELECT(32,16), "S18313C1.s18313c1f2");
    check_field_offset(lv, s18313c1f3, ABISELECT(40,20), "S18313C1.s18313c1f3");
    check_field_offset(lv, s18313c1f4, ABISELECT(48,24), "S18313C1.s18313c1f4");
    check_field_offset(lv, s18313c1f5, ABISELECT(56,28), "S18313C1.s18313c1f5");
    check_field_offset(lv, s18313c1f6, ABISELECT(64,32), "S18313C1.s18313c1f6");
    check_field_offset(lv, s18313c1f7, ABISELECT(72,36), "S18313C1.s18313c1f7");
  }
}
static Arrange_To_Call_Me vS18313C1(Test_S18313C1, "S18313C1", ABISELECT(80,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13606C1  {
  int s13606c1f0[7];
  __tsi64 s13606c1f1;
  int s13606c1f2[11];
  __tsi64 s13606c1f3[2];
  int s13606c1f4[2];
};
//SIG(1 S13606C1) C1{ Fi[7] FL Fi[11] FL[2] Fi[2]}



static void Test_S13606C1()
{
  {
    init_simple_test("S13606C1");
    S13606C1 lv;
    check2(sizeof(lv), ABISELECT(112,104), "sizeof(S13606C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13606C1)");
    check_field_offset(lv, s13606c1f0, 0, "S13606C1.s13606c1f0");
    check_field_offset(lv, s13606c1f1, ABISELECT(32,28), "S13606C1.s13606c1f1");
    check_field_offset(lv, s13606c1f2, ABISELECT(40,36), "S13606C1.s13606c1f2");
    check_field_offset(lv, s13606c1f3, ABISELECT(88,80), "S13606C1.s13606c1f3");
    check_field_offset(lv, s13606c1f4, ABISELECT(104,96), "S13606C1.s13606c1f4");
  }
}
static Arrange_To_Call_Me vS13606C1(Test_S13606C1, "S13606C1", ABISELECT(112,104));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6202C1  : S3600C19 {
  int s6202c1f0[2];
  char s6202c1f1;
  void *s6202c1f2;
  int s6202c1f3;
  char s6202c1f4[38];
};
//SIG(1 S6202C1) C1{ BC2{ m} Fi[2] Fc Fp Fi Fc[38]}



static void Test_S6202C1()
{
  extern Class_Descriptor cd_S6202C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,16)];
    init_test(&cd_S6202C1, buf);
    S6202C1 &lv = *(new (buf) S6202C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,60), "sizeof(S6202C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6202C1)");
    check_base_class_offset(lv, (S3600C19*), 0, "S6202C1");
    check_field_offset(lv, s6202c1f0, 0, "S6202C1.s6202c1f0");
    check_field_offset(lv, s6202c1f1, 8, "S6202C1.s6202c1f1");
    check_field_offset(lv, s6202c1f2, ABISELECT(16,12), "S6202C1.s6202c1f2");
    check_field_offset(lv, s6202c1f3, ABISELECT(24,16), "S6202C1.s6202c1f3");
    check_field_offset(lv, s6202c1f4, ABISELECT(28,20), "S6202C1.s6202c1f4");
    test_class_info(&lv, &cd_S6202C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6202C1(Test_S6202C1, "S6202C1", ABISELECT(72,60));

#else // __cplusplus

extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S6202C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6202C1 = {  "S6202C1", // class name
  bases_S6202C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(72,60), // 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  S16059C1  {
  ::S1537C14_nt s16059c1f0[2];
  int s16059c1f1;
  void *s16059c1f2[2];
  void  mf16059c1(); // _ZN8S16059C19mf16059c1Ev
};
//SIG(1 S16059C1) C1{ m FC2{ m Fi[3]}[2] Fi Fp[2]}


void  S16059C1 ::mf16059c1(){}

static void Test_S16059C1()
{
  {
    init_simple_test("S16059C1");
    S16059C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S16059C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16059C1)");
    check_field_offset(lv, s16059c1f0, 0, "S16059C1.s16059c1f0");
    check_field_offset(lv, s16059c1f1, 24, "S16059C1.s16059c1f1");
    check_field_offset(lv, s16059c1f2, ABISELECT(32,28), "S16059C1.s16059c1f2");
  }
}
static Arrange_To_Call_Me vS16059C1(Test_S16059C1, "S16059C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18881C1  {
  ::S19426C9_nt s18881c1f0;
  int s18881c1f1;
  virtual  ~S18881C1(); // _ZN8S18881C1D1Ev
  virtual void  v1(); // _ZN8S18881C12v1Ev
  virtual void  v2(); // _ZN8S18881C12v2Ev
  virtual void  v3(); // _ZN8S18881C12v3Ev
  virtual void  v4(); // _ZN8S18881C12v4Ev
  virtual void  v5(); // _ZN8S18881C12v5Ev
  S18881C1(); // tgen
};
//SIG(1 S18881C1) C1{ vd v1 v2 v3 v4 v5 FU2{ m} Fi}


 S18881C1 ::~S18881C1(){ note_dtor("S18881C1", this);}
void  S18881C1 ::v1(){vfunc_called(this, "_ZN8S18881C12v1Ev");}
void  S18881C1 ::v2(){vfunc_called(this, "_ZN8S18881C12v2Ev");}
void  S18881C1 ::v3(){vfunc_called(this, "_ZN8S18881C12v3Ev");}
void  S18881C1 ::v4(){vfunc_called(this, "_ZN8S18881C12v4Ev");}
void  S18881C1 ::v5(){vfunc_called(this, "_ZN8S18881C12v5Ev");}
S18881C1 ::S18881C1(){ note_ctor("S18881C1", this);} // tgen

static void Test_S18881C1()
{
  extern Class_Descriptor cd_S18881C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S18881C1, buf);
    S18881C1 *dp, &lv = *(dp=new (buf) S18881C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S18881C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18881C1)");
    check_field_offset(lv, s18881c1f0, ABISELECT(8,4), "S18881C1.s18881c1f0");
    check_field_offset(lv, s18881c1f1, ABISELECT(12,8), "S18881C1.s18881c1f1");
    test_class_info(&lv, &cd_S18881C1);
    dp->~S18881C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18881C1(Test_S18881C1, "S18881C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S18881C1C1Ev();
extern void _ZN8S18881C1D1Ev();
Name_Map name_map_S18881C1[] = {
  NSPAIR(_ZN8S18881C1C1Ev),
  NSPAIR(_ZN8S18881C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18881C1[];
extern void _ZN8S18881C1D1Ev();
extern void _ZN8S18881C1D0Ev();
extern void _ZN8S18881C12v1Ev();
extern void _ZN8S18881C12v2Ev();
extern void _ZN8S18881C12v3Ev();
extern void _ZN8S18881C12v4Ev();
extern void _ZN8S18881C12v5Ev();
static  VTBL_ENTRY vtc_S18881C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18881C1[0]),
  (VTBL_ENTRY)&_ZN8S18881C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18881C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18881C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18881C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18881C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18881C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18881C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S18881C1[];
extern  VTBL_ENTRY _ZTV8S18881C1[];
Class_Descriptor cd_S18881C1 = {  "S18881C1", // class name
  0,0,//no base classes
  &(vtc_S18881C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S18881C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18881C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12923C1  {
  int s12923c1f0:32;
  unsigned short s12923c1f1:1;
  short s12923c1f2:6;
  unsigned short s12923c1f3:1;
  short s12923c1f4:8;
};
//SIG(1 S12923C1) C1{ Fi:32 Fs:1 Fs:6 Fs:1 Fs:8}



static void Test_S12923C1()
{
  {
    init_simple_test("S12923C1");
    static S12923C1 lv;
    check2(sizeof(lv), 8, "sizeof(S12923C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12923C1)");
    set_bf_and_test(lv, s12923c1f0, 0, 0, 32, 1, "S12923C1");
    set_bf_and_test(lv, s12923c1f0, 0, 0, 32, hide_sll(1LL<<31), "S12923C1");
    set_bf_and_test(lv, s12923c1f1, 4, 0, 1, 1, "S12923C1");
    set_bf_and_test(lv, s12923c1f2, 4, 1, 6, 1, "S12923C1");
    set_bf_and_test(lv, s12923c1f2, 4, 1, 6, hide_sll(1LL<<5), "S12923C1");
    set_bf_and_test(lv, s12923c1f3, 4, 7, 1, 1, "S12923C1");
    set_bf_and_test(lv, s12923c1f4, 5, 0, 8, 1, "S12923C1");
    set_bf_and_test(lv, s12923c1f4, 5, 0, 8, hide_sll(1LL<<7), "S12923C1");
  }
}
static Arrange_To_Call_Me vS12923C1(Test_S12923C1, "S12923C1", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16068C2_nt  {
  int s16068c2f0[4];
  void  mf16068c2(); // _ZN11S16068C2_nt9mf16068c2Ev
};
//SIG(-1 S16068C2_nt) C1{ m Fi[4]}


void  S16068C2_nt ::mf16068c2(){}

//skip512 S16068C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16068C1  {
  ::S16068C2_nt s16068c1f0;
  ::S16068C2_nt s16068c1f1;
  ::S16068C2_nt s16068c1f2;
  ::S16068C2_nt s16068c1f3;
  void  mf16068c1(); // _ZN8S16068C19mf16068c1Ev
};
//SIG(1 S16068C1) C1{ m FC2{ m Fi[4]} FC2 FC2 FC2}


void  S16068C1 ::mf16068c1(){}

static void Test_S16068C1()
{
  {
    init_simple_test("S16068C1");
    S16068C1 lv;
    check2(sizeof(lv), 64, "sizeof(S16068C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16068C1)");
    check_field_offset(lv, s16068c1f0, 0, "S16068C1.s16068c1f0");
    check_field_offset(lv, s16068c1f1, 16, "S16068C1.s16068c1f1");
    check_field_offset(lv, s16068c1f2, 32, "S16068C1.s16068c1f2");
    check_field_offset(lv, s16068c1f3, 48, "S16068C1.s16068c1f3");
  }
}
static Arrange_To_Call_Me vS16068C1(Test_S16068C1, "S16068C1", 64);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18525C1  {
  __tsi64 s18525c1f0;
  ::S19426C9_nt s18525c1f1;
  int s18525c1f2;
  __tsi64 s18525c1f3;
  short s18525c1f4[10];
  virtual void  v1(); // _ZN8S18525C12v1Ev
  ~S18525C1(); // tgen
  S18525C1(); // tgen
};
//SIG(1 S18525C1) C1{ v1 FL FU2{ m} Fi FL Fs[10]}


void  S18525C1 ::v1(){vfunc_called(this, "_ZN8S18525C12v1Ev");}
S18525C1 ::~S18525C1(){ note_dtor("S18525C1", this);} // tgen
S18525C1 ::S18525C1(){ note_ctor("S18525C1", this);} // tgen

static void Test_S18525C1()
{
  extern Class_Descriptor cd_S18525C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S18525C1, buf);
    S18525C1 *dp, &lv = *(dp=new (buf) S18525C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S18525C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18525C1)");
    check_field_offset(lv, s18525c1f0, ABISELECT(8,4), "S18525C1.s18525c1f0");
    check_field_offset(lv, s18525c1f1, ABISELECT(16,12), "S18525C1.s18525c1f1");
    check_field_offset(lv, s18525c1f2, ABISELECT(20,16), "S18525C1.s18525c1f2");
    check_field_offset(lv, s18525c1f3, ABISELECT(24,20), "S18525C1.s18525c1f3");
    check_field_offset(lv, s18525c1f4, ABISELECT(32,28), "S18525C1.s18525c1f4");
    test_class_info(&lv, &cd_S18525C1);
    dp->~S18525C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18525C1(Test_S18525C1, "S18525C1", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN8S18525C1C1Ev();
extern void _ZN8S18525C1D1Ev();
Name_Map name_map_S18525C1[] = {
  NSPAIR(_ZN8S18525C1C1Ev),
  NSPAIR(_ZN8S18525C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18525C1[];
extern void _ZN8S18525C12v1Ev();
static  VTBL_ENTRY vtc_S18525C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18525C1[0]),
  (VTBL_ENTRY)&_ZN8S18525C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18525C1[];
extern  VTBL_ENTRY _ZTV8S18525C1[];
Class_Descriptor cd_S18525C1 = {  "S18525C1", // class name
  0,0,//no base classes
  &(vtc_S18525C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI8S18525C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18525C1),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  S14760C1  {
  short s14760c1f0;
  char s14760c1f1[2];
  int s14760c1f2;
  __tsi64 s14760c1f3;
  int s14760c1f4;
  char s14760c1f5[20];
};
//SIG(1 S14760C1) C1{ Fs Fc[2] Fi FL Fi Fc[20]}



static void Test_S14760C1()
{
  {
    init_simple_test("S14760C1");
    S14760C1 lv;
    check2(sizeof(lv), 40, "sizeof(S14760C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14760C1)");
    check_field_offset(lv, s14760c1f0, 0, "S14760C1.s14760c1f0");
    check_field_offset(lv, s14760c1f1, 2, "S14760C1.s14760c1f1");
    check_field_offset(lv, s14760c1f2, 4, "S14760C1.s14760c1f2");
    check_field_offset(lv, s14760c1f3, 8, "S14760C1.s14760c1f3");
    check_field_offset(lv, s14760c1f4, 16, "S14760C1.s14760c1f4");
    check_field_offset(lv, s14760c1f5, 20, "S14760C1.s14760c1f5");
  }
}
static Arrange_To_Call_Me vS14760C1(Test_S14760C1, "S14760C1", 40);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18761C1  {
  ::S19499C8_nt s18761c1f0;
  virtual void  v1(); // _ZN8S18761C12v1Ev
  virtual void  v2(); // _ZN8S18761C12v2Ev
  virtual void  v3(); // _ZN8S18761C12v3Ev
  virtual void  v4(); // _ZN8S18761C12v4Ev
  virtual void  v5(); // _ZN8S18761C12v5Ev
  virtual void  v6(); // _ZN8S18761C12v6Ev
  ~S18761C1(); // tgen
  S18761C1(); // tgen
};
//SIG(1 S18761C1) C1{ v1 v2 v3 v4 v5 v6 FC2{}}


void  S18761C1 ::v1(){vfunc_called(this, "_ZN8S18761C12v1Ev");}
void  S18761C1 ::v2(){vfunc_called(this, "_ZN8S18761C12v2Ev");}
void  S18761C1 ::v3(){vfunc_called(this, "_ZN8S18761C12v3Ev");}
void  S18761C1 ::v4(){vfunc_called(this, "_ZN8S18761C12v4Ev");}
void  S18761C1 ::v5(){vfunc_called(this, "_ZN8S18761C12v5Ev");}
void  S18761C1 ::v6(){vfunc_called(this, "_ZN8S18761C12v6Ev");}
S18761C1 ::~S18761C1(){ note_dtor("S18761C1", this);} // tgen
S18761C1 ::S18761C1(){ note_ctor("S18761C1", this);} // tgen

static void Test_S18761C1()
{
  extern Class_Descriptor cd_S18761C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S18761C1, buf);
    S18761C1 *dp, &lv = *(dp=new (buf) S18761C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18761C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18761C1)");
    check_field_offset(lv, s18761c1f0, ABISELECT(8,4), "S18761C1.s18761c1f0");
    test_class_info(&lv, &cd_S18761C1);
    dp->~S18761C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18761C1(Test_S18761C1, "S18761C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S18761C1C1Ev();
extern void _ZN8S18761C1D1Ev();
Name_Map name_map_S18761C1[] = {
  NSPAIR(_ZN8S18761C1C1Ev),
  NSPAIR(_ZN8S18761C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18761C1[];
extern void _ZN8S18761C12v1Ev();
extern void _ZN8S18761C12v2Ev();
extern void _ZN8S18761C12v3Ev();
extern void _ZN8S18761C12v4Ev();
extern void _ZN8S18761C12v5Ev();
extern void _ZN8S18761C12v6Ev();
static  VTBL_ENTRY vtc_S18761C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18761C1[0]),
  (VTBL_ENTRY)&_ZN8S18761C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18761C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18761C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18761C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18761C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18761C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S18761C1[];
extern  VTBL_ENTRY _ZTV8S18761C1[];
Class_Descriptor cd_S18761C1 = {  "S18761C1", // class name
  0,0,//no base classes
  &(vtc_S18761C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18761C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18761C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10717C1  {
  char s10717c1f0[2049];
  int s10717c1f1[2];
  long s10717c1f2;
  int s10717c1f3[3];
};
//SIG(1 S10717C1) C1{ Fc[2049] Fi[2] Fl Fi[3]}



static void Test_S10717C1()
{
  {
    init_simple_test("S10717C1");
    S10717C1 lv;
    check2(sizeof(lv), ABISELECT(2088,2076), "sizeof(S10717C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10717C1)");
    check_field_offset(lv, s10717c1f0, 0, "S10717C1.s10717c1f0");
    check_field_offset(lv, s10717c1f1, 2052, "S10717C1.s10717c1f1");
    check_field_offset(lv, s10717c1f2, ABISELECT(2064,2060), "S10717C1.s10717c1f2");
    check_field_offset(lv, s10717c1f3, ABISELECT(2072,2064), "S10717C1.s10717c1f3");
  }
}
static Arrange_To_Call_Me vS10717C1(Test_S10717C1, "S10717C1", ABISELECT(2088,2076));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15586C1  {
  ::S13714C18_nt s15586c1f0;
  void *s15586c1f1;
  int s15586c1f2;
  void *s15586c1f3;
  int s15586c1f4;
  void  mf15586c1(); // _ZN8S15586C19mf15586c1Ev
};
//SIG(1 S15586C1) C1{ m FC2{ FL[4]} Fp Fi Fp Fi}


void  S15586C1 ::mf15586c1(){}

static void Test_S15586C1()
{
  {
    init_simple_test("S15586C1");
    S15586C1 lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S15586C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15586C1)");
    check_field_offset(lv, s15586c1f0, 0, "S15586C1.s15586c1f0");
    check_field_offset(lv, s15586c1f1, 32, "S15586C1.s15586c1f1");
    check_field_offset(lv, s15586c1f2, ABISELECT(40,36), "S15586C1.s15586c1f2");
    check_field_offset(lv, s15586c1f3, ABISELECT(48,40), "S15586C1.s15586c1f3");
    check_field_offset(lv, s15586c1f4, ABISELECT(56,44), "S15586C1.s15586c1f4");
  }
}
static Arrange_To_Call_Me vS15586C1(Test_S15586C1, "S15586C1", ABISELECT(64,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17597C1  {
  void *s17597c1f0;
  ::S1537C14_nt s17597c1f1;
  int s17597c1f2[5];
  void  mf17597c1(); // _ZN8S17597C19mf17597c1Ev
};
//SIG(1 S17597C1) C1{ m Fp FC2{ m Fi[3]} Fi[5]}


void  S17597C1 ::mf17597c1(){}

static void Test_S17597C1()
{
  {
    init_simple_test("S17597C1");
    S17597C1 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S17597C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17597C1)");
    check_field_offset(lv, s17597c1f0, 0, "S17597C1.s17597c1f0");
    check_field_offset(lv, s17597c1f1, ABISELECT(8,4), "S17597C1.s17597c1f1");
    check_field_offset(lv, s17597c1f2, ABISELECT(20,16), "S17597C1.s17597c1f2");
  }
}
static Arrange_To_Call_Me vS17597C1(Test_S17597C1, "S17597C1", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14180C1  {
  void *s14180c1f0;
  int s14180c1f1;
  ::S4304C4_nt s14180c1f2;
  int s14180c1f3;
  void *s14180c1f4;
};
//SIG(1 S14180C1) C1{ Fp Fi FC2{ Fi[2]} Fi Fp}



static void Test_S14180C1()
{
  {
    init_simple_test("S14180C1");
    S14180C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S14180C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14180C1)");
    check_field_offset(lv, s14180c1f0, 0, "S14180C1.s14180c1f0");
    check_field_offset(lv, s14180c1f1, ABISELECT(8,4), "S14180C1.s14180c1f1");
    check_field_offset(lv, s14180c1f2, ABISELECT(12,8), "S14180C1.s14180c1f2");
    check_field_offset(lv, s14180c1f3, ABISELECT(20,16), "S14180C1.s14180c1f3");
    check_field_offset(lv, s14180c1f4, ABISELECT(24,20), "S14180C1.s14180c1f4");
  }
}
static Arrange_To_Call_Me vS14180C1(Test_S14180C1, "S14180C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21561C1  {
  int s21561c1f0;
  char s21561c1f1;
  ::S13714C14_nt s21561c1f2;
  ::S13714C14_nt s21561c1f3;
  void  mf21561c1(); // _ZN8S21561C19mf21561c1Ev
  virtual  ~S21561C1(); // _ZN8S21561C1D1Ev
  S21561C1(); // tgen
};
//SIG(1 S21561C1) C1{ vd m Fi Fc FC2{ FL} FC2}


void  S21561C1 ::mf21561c1(){}
 S21561C1 ::~S21561C1(){ note_dtor("S21561C1", this);}
S21561C1 ::S21561C1(){ note_ctor("S21561C1", this);} // tgen

static void Test_S21561C1()
{
  extern Class_Descriptor cd_S21561C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S21561C1, buf);
    S21561C1 *dp, &lv = *(dp=new (buf) S21561C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S21561C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21561C1)");
    check_field_offset(lv, s21561c1f0, ABISELECT(8,4), "S21561C1.s21561c1f0");
    check_field_offset(lv, s21561c1f1, ABISELECT(12,8), "S21561C1.s21561c1f1");
    check_field_offset(lv, s21561c1f2, ABISELECT(16,12), "S21561C1.s21561c1f2");
    check_field_offset(lv, s21561c1f3, ABISELECT(24,20), "S21561C1.s21561c1f3");
    test_class_info(&lv, &cd_S21561C1);
    dp->~S21561C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21561C1(Test_S21561C1, "S21561C1", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN8S21561C1C1Ev();
extern void _ZN8S21561C1D1Ev();
Name_Map name_map_S21561C1[] = {
  NSPAIR(_ZN8S21561C1C1Ev),
  NSPAIR(_ZN8S21561C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21561C1[];
extern void _ZN8S21561C1D1Ev();
extern void _ZN8S21561C1D0Ev();
static  VTBL_ENTRY vtc_S21561C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21561C1[0]),
  (VTBL_ENTRY)&_ZN8S21561C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21561C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21561C1[];
extern  VTBL_ENTRY _ZTV8S21561C1[];
Class_Descriptor cd_S21561C1 = {  "S21561C1", // class name
  0,0,//no base classes
  &(vtc_S21561C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI8S21561C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21561C1),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  S13518C1  {
  int s13518c1f0[4];
  ::S12860C4 s13518c1f1;
};
//SIG(1 S13518C1) C1{ Fi[4] FU2{ FC3{ Fi Fi}}}



static void Test_S13518C1()
{
  {
    init_simple_test("S13518C1");
    S13518C1 lv;
    check2(sizeof(lv), 24, "sizeof(S13518C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13518C1)");
    check_field_offset(lv, s13518c1f0, 0, "S13518C1.s13518c1f0");
    check_field_offset(lv, s13518c1f1, 16, "S13518C1.s13518c1f1");
  }
}
static Arrange_To_Call_Me vS13518C1(Test_S13518C1, "S13518C1", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18652C1  {
  ::S19426C9_nt s18652c1f0;
  void *s18652c1f1[5];
  virtual void  v1(); // _ZN8S18652C12v1Ev
  virtual void  v2(); // _ZN8S18652C12v2Ev
  virtual void  v3(); // _ZN8S18652C12v3Ev
  ~S18652C1(); // tgen
  S18652C1(); // tgen
};
//SIG(1 S18652C1) C1{ v1 v2 v3 FU2{ m} Fp[5]}


void  S18652C1 ::v1(){vfunc_called(this, "_ZN8S18652C12v1Ev");}
void  S18652C1 ::v2(){vfunc_called(this, "_ZN8S18652C12v2Ev");}
void  S18652C1 ::v3(){vfunc_called(this, "_ZN8S18652C12v3Ev");}
S18652C1 ::~S18652C1(){ note_dtor("S18652C1", this);} // tgen
S18652C1 ::S18652C1(){ note_ctor("S18652C1", this);} // tgen

static void Test_S18652C1()
{
  extern Class_Descriptor cd_S18652C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S18652C1, buf);
    S18652C1 *dp, &lv = *(dp=new (buf) S18652C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S18652C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18652C1)");
    check_field_offset(lv, s18652c1f0, ABISELECT(8,4), "S18652C1.s18652c1f0");
    check_field_offset(lv, s18652c1f1, ABISELECT(16,8), "S18652C1.s18652c1f1");
    test_class_info(&lv, &cd_S18652C1);
    dp->~S18652C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18652C1(Test_S18652C1, "S18652C1", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S18652C1C1Ev();
extern void _ZN8S18652C1D1Ev();
Name_Map name_map_S18652C1[] = {
  NSPAIR(_ZN8S18652C1C1Ev),
  NSPAIR(_ZN8S18652C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18652C1[];
extern void _ZN8S18652C12v1Ev();
extern void _ZN8S18652C12v2Ev();
extern void _ZN8S18652C12v3Ev();
static  VTBL_ENTRY vtc_S18652C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18652C1[0]),
  (VTBL_ENTRY)&_ZN8S18652C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18652C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18652C12v3Ev,
};
extern VTBL_ENTRY _ZTI8S18652C1[];
extern  VTBL_ENTRY _ZTV8S18652C1[];
Class_Descriptor cd_S18652C1 = {  "S18652C1", // class name
  0,0,//no base classes
  &(vtc_S18652C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S18652C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18652C1),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  S13378C1  {
  int s13378c1f0[3];
  void *s13378c1f1;
  short s13378c1f2[2];
  int s13378c1f3[5];
};
//SIG(1 S13378C1) C1{ Fi[3] Fp Fs[2] Fi[5]}



static void Test_S13378C1()
{
  {
    init_simple_test("S13378C1");
    S13378C1 lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S13378C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13378C1)");
    check_field_offset(lv, s13378c1f0, 0, "S13378C1.s13378c1f0");
    check_field_offset(lv, s13378c1f1, ABISELECT(16,12), "S13378C1.s13378c1f1");
    check_field_offset(lv, s13378c1f2, ABISELECT(24,16), "S13378C1.s13378c1f2");
    check_field_offset(lv, s13378c1f3, ABISELECT(28,20), "S13378C1.s13378c1f3");
  }
}
static Arrange_To_Call_Me vS13378C1(Test_S13378C1, "S13378C1", ABISELECT(48,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16758C1  {
  int s16758c1f0;
  ::S1566C14_nt s16758c1f1;
  int s16758c1f2;
  void  mf16758c1(); // _ZN8S16758C19mf16758c1Ev
};
//SIG(1 S16758C1) C1{ m Fi FC2{ m Fi[2]} Fi}


void  S16758C1 ::mf16758c1(){}

static void Test_S16758C1()
{
  {
    init_simple_test("S16758C1");
    S16758C1 lv;
    check2(sizeof(lv), 16, "sizeof(S16758C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16758C1)");
    check_field_offset(lv, s16758c1f0, 0, "S16758C1.s16758c1f0");
    check_field_offset(lv, s16758c1f1, 4, "S16758C1.s16758c1f1");
    check_field_offset(lv, s16758c1f2, 12, "S16758C1.s16758c1f2");
  }
}
static Arrange_To_Call_Me vS16758C1(Test_S16758C1, "S16758C1", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18626C1  {
  int s18626c1f0;
  __tsi64 s18626c1f1:3;
  int s18626c1f2;
  virtual void  v1(); // _ZN8S18626C12v1Ev
  virtual void  v2(); // _ZN8S18626C12v2Ev
  virtual void  v3(); // _ZN8S18626C12v3Ev
  ~S18626C1(); // tgen
  S18626C1(); // tgen
};
//SIG(1 S18626C1) C1{ v1 v2 v3 Fi FL:3 Fi}


void  S18626C1 ::v1(){vfunc_called(this, "_ZN8S18626C12v1Ev");}
void  S18626C1 ::v2(){vfunc_called(this, "_ZN8S18626C12v2Ev");}
void  S18626C1 ::v3(){vfunc_called(this, "_ZN8S18626C12v3Ev");}
S18626C1 ::~S18626C1(){ note_dtor("S18626C1", this);} // tgen
S18626C1 ::S18626C1(){ note_ctor("S18626C1", this);} // tgen

static void Test_S18626C1()
{
  extern Class_Descriptor cd_S18626C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S18626C1, buf);
    S18626C1 *dp, &lv = *(dp=new (buf) S18626C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S18626C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18626C1)");
    check_field_offset(lv, s18626c1f0, ABISELECT(8,4), "S18626C1.s18626c1f0");
    set_bf_and_test(lv, s18626c1f1, ABISELECT(12,8), 0, 3, 1, "S18626C1");
    set_bf_and_test(lv, s18626c1f1, ABISELECT(12,8), 0, 3, hide_sll(1LL<<2), "S18626C1");
    check_field_offset(lv, s18626c1f2, ABISELECT(16,12), "S18626C1.s18626c1f2");
    test_class_info(&lv, &cd_S18626C1);
    dp->~S18626C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18626C1(Test_S18626C1, "S18626C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S18626C1C1Ev();
extern void _ZN8S18626C1D1Ev();
Name_Map name_map_S18626C1[] = {
  NSPAIR(_ZN8S18626C1C1Ev),
  NSPAIR(_ZN8S18626C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18626C1[];
extern void _ZN8S18626C12v1Ev();
extern void _ZN8S18626C12v2Ev();
extern void _ZN8S18626C12v3Ev();
static  VTBL_ENTRY vtc_S18626C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18626C1[0]),
  (VTBL_ENTRY)&_ZN8S18626C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18626C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18626C12v3Ev,
};
extern VTBL_ENTRY _ZTI8S18626C1[];
extern  VTBL_ENTRY _ZTV8S18626C1[];
Class_Descriptor cd_S18626C1 = {  "S18626C1", // class name
  0,0,//no base classes
  &(vtc_S18626C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S18626C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18626C1),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  S7456C2  : virtual S3600C29_nt {
  virtual  ~S7456C2(); // _ZN7S7456C2D2Ev
  S7456C2(); // tgen
};
//SIG(-1 S7456C2) C1{ VBC2{ m Fp} vd}


 S7456C2 ::~S7456C2(){ note_dtor("S7456C2", this);}
S7456C2 ::S7456C2(){ note_ctor("S7456C2", this);} // tgen

static void Test_S7456C2()
{
  extern Class_Descriptor cd_S7456C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7456C2, buf);
    S7456C2 *dp, &lv = *(dp=new (buf) S7456C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7456C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7456C2)");
    check_base_class_offset(lv, (S3600C29_nt*), ABISELECT(8,4), "S7456C2");
    test_class_info(&lv, &cd_S7456C2);
    dp->~S7456C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7456C2(Test_S7456C2, "S7456C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7456C2C1Ev();
extern void _ZN7S7456C2D2Ev();
Name_Map name_map_S7456C2[] = {
  NSPAIR(_ZN7S7456C2C1Ev),
  NSPAIR(_ZN7S7456C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
static Base_Class bases_S7456C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7456C2[];
extern void _ZN7S7456C2D1Ev();
extern void _ZN7S7456C2D0Ev();
static  VTBL_ENTRY vtc_S7456C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7456C2[0]),
  (VTBL_ENTRY)&_ZN7S7456C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7456C2D0Ev,
};
extern VTBL_ENTRY _ZTV7S7456C2[];
static  VTT_ENTRY vtt_S7456C2[] = {
  {&(_ZTV7S7456C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7456C2[];
extern  VTBL_ENTRY _ZTV7S7456C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7456C2[];
Class_Descriptor cd_S7456C2 = {  "S7456C2", // class name
  bases_S7456C2, 1,
  &(vtc_S7456C2[0]), // expected_vtbl_contents
  &(vtt_S7456C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7456C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7456C2),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7456C2),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  S7456C1  : S7456C2 {
  virtual  ~S7456C1(); // _ZN7S7456C1D2Ev
  S7456C1(); // tgen
};
//SIG(1 S7456C1) C1{ BC2{ VBC3{ m Fp} vd} vd}


 S7456C1 ::~S7456C1(){ note_dtor("S7456C1", this);}
S7456C1 ::S7456C1(){ note_ctor("S7456C1", this);} // tgen

static void Test_S7456C1()
{
  extern Class_Descriptor cd_S7456C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7456C1, buf);
    S7456C1 *dp, &lv = *(dp=new (buf) S7456C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7456C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7456C1)");
    check_base_class_offset(lv, (S3600C29_nt*)(S7456C2*), ABISELECT(8,4), "S7456C1");
    check_base_class_offset(lv, (S7456C2*), 0, "S7456C1");
    test_class_info(&lv, &cd_S7456C1);
    dp->~S7456C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7456C1(Test_S7456C1, "S7456C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7456C1C1Ev();
extern void _ZN7S7456C1D2Ev();
Name_Map name_map_S7456C1[] = {
  NSPAIR(_ZN7S7456C1C1Ev),
  NSPAIR(_ZN7S7456C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C29_nt;
extern VTBL_ENTRY _ZTI11S3600C29_nt[];
extern Class_Descriptor cd_S7456C2;
extern VTBL_ENTRY _ZTI7S7456C2[];
extern  VTBL_ENTRY _ZTV7S7456C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7456C2[];
static Base_Class bases_S7456C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C29_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7456C2,    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 _ZTI7S7456C1[];
extern void _ZN7S7456C1D1Ev();
extern void _ZN7S7456C1D0Ev();
static  VTBL_ENTRY vtc_S7456C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7456C1[0]),
  (VTBL_ENTRY)&_ZN7S7456C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7456C1D0Ev,
};
extern VTBL_ENTRY _ZTV7S7456C1[];
extern void _ZN7S7456C2D1Ev();
extern void _ZN7S7456C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7456C2__7S7456C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7456C2[0]),
  (VTBL_ENTRY)&_ZN7S7456C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7456C2D0Ev,
};
static  VTT_ENTRY vtt_S7456C1[] = {
  {&(_ZTV7S7456C1[3]),  3,5},
  {&(_tg__ZTV7S7456C2__7S7456C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7456C1[];
extern  VTBL_ENTRY _ZTV7S7456C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7456C1[];
Class_Descriptor cd_S7456C1 = {  "S7456C1", // class name
  bases_S7456C1, 2,
  &(vtc_S7456C1[0]), // expected_vtbl_contents
  &(vtt_S7456C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7456C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7456C1),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7456C1),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  S13029C1  {
  int s13029c1f0[2];
  char s13029c1f1[32];
  int s13029c1f2[4];
};
//SIG(1 S13029C1) C1{ Fi[2] Fc[32] Fi[4]}



static void Test_S13029C1()
{
  {
    init_simple_test("S13029C1");
    S13029C1 lv;
    check2(sizeof(lv), 56, "sizeof(S13029C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13029C1)");
    check_field_offset(lv, s13029c1f0, 0, "S13029C1.s13029c1f0");
    check_field_offset(lv, s13029c1f1, 8, "S13029C1.s13029c1f1");
    check_field_offset(lv, s13029c1f2, 40, "S13029C1.s13029c1f2");
  }
}
static Arrange_To_Call_Me vS13029C1(Test_S13029C1, "S13029C1", 56);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18703C1  {
  ::S19426C9_nt s18703c1f0;
  virtual void  v1(); // _ZN8S18703C12v1Ev
  virtual void  v2(); // _ZN8S18703C12v2Ev
  virtual void  v3(); // _ZN8S18703C12v3Ev
  virtual void  v4(); // _ZN8S18703C12v4Ev
  ~S18703C1(); // tgen
  S18703C1(); // tgen
};
//SIG(1 S18703C1) C1{ v1 v2 v3 v4 FU2{ m}}


void  S18703C1 ::v1(){vfunc_called(this, "_ZN8S18703C12v1Ev");}
void  S18703C1 ::v2(){vfunc_called(this, "_ZN8S18703C12v2Ev");}
void  S18703C1 ::v3(){vfunc_called(this, "_ZN8S18703C12v3Ev");}
void  S18703C1 ::v4(){vfunc_called(this, "_ZN8S18703C12v4Ev");}
S18703C1 ::~S18703C1(){ note_dtor("S18703C1", this);} // tgen
S18703C1 ::S18703C1(){ note_ctor("S18703C1", this);} // tgen

static void Test_S18703C1()
{
  extern Class_Descriptor cd_S18703C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S18703C1, buf);
    S18703C1 *dp, &lv = *(dp=new (buf) S18703C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18703C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18703C1)");
    check_field_offset(lv, s18703c1f0, ABISELECT(8,4), "S18703C1.s18703c1f0");
    test_class_info(&lv, &cd_S18703C1);
    dp->~S18703C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18703C1(Test_S18703C1, "S18703C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S18703C1C1Ev();
extern void _ZN8S18703C1D1Ev();
Name_Map name_map_S18703C1[] = {
  NSPAIR(_ZN8S18703C1C1Ev),
  NSPAIR(_ZN8S18703C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18703C1[];
extern void _ZN8S18703C12v1Ev();
extern void _ZN8S18703C12v2Ev();
extern void _ZN8S18703C12v3Ev();
extern void _ZN8S18703C12v4Ev();
static  VTBL_ENTRY vtc_S18703C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18703C1[0]),
  (VTBL_ENTRY)&_ZN8S18703C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18703C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18703C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18703C12v4Ev,
};
extern VTBL_ENTRY _ZTI8S18703C1[];
extern  VTBL_ENTRY _ZTV8S18703C1[];
Class_Descriptor cd_S18703C1 = {  "S18703C1", // class name
  0,0,//no base classes
  &(vtc_S18703C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18703C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18703C1),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  S21638C1  {
  int s21638c1f0;
  ::S19426C9_nt s21638c1f1[7];
  void  mf21638c1(); // _ZN8S21638C19mf21638c1Ev
  virtual  ~S21638C1(); // _ZN8S21638C1D1Ev
  S21638C1(); // tgen
};
//SIG(1 S21638C1) C1{ vd m Fi FU2{ m}[7]}


void  S21638C1 ::mf21638c1(){}
 S21638C1 ::~S21638C1(){ note_dtor("S21638C1", this);}
S21638C1 ::S21638C1(){ note_ctor("S21638C1", this);} // tgen

static void Test_S21638C1()
{
  extern Class_Descriptor cd_S21638C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S21638C1, buf);
    S21638C1 *dp, &lv = *(dp=new (buf) S21638C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S21638C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21638C1)");
    check_field_offset(lv, s21638c1f0, ABISELECT(8,4), "S21638C1.s21638c1f0");
    check_field_offset(lv, s21638c1f1, ABISELECT(12,8), "S21638C1.s21638c1f1");
    test_class_info(&lv, &cd_S21638C1);
    dp->~S21638C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21638C1(Test_S21638C1, "S21638C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S21638C1C1Ev();
extern void _ZN8S21638C1D1Ev();
Name_Map name_map_S21638C1[] = {
  NSPAIR(_ZN8S21638C1C1Ev),
  NSPAIR(_ZN8S21638C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21638C1[];
extern void _ZN8S21638C1D1Ev();
extern void _ZN8S21638C1D0Ev();
static  VTBL_ENTRY vtc_S21638C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21638C1[0]),
  (VTBL_ENTRY)&_ZN8S21638C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21638C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21638C1[];
extern  VTBL_ENTRY _ZTV8S21638C1[];
Class_Descriptor cd_S21638C1 = {  "S21638C1", // class name
  0,0,//no base classes
  &(vtc_S21638C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S21638C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21638C1),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  S18511C1  {
  int s18511c1f0[2];
  void *s18511c1f1;
  long s18511c1f2[5];
  virtual void  v1(); // _ZN8S18511C12v1Ev
  ~S18511C1(); // tgen
  S18511C1(); // tgen
};
//SIG(1 S18511C1) C1{ v1 Fi[2] Fp Fl[5]}


void  S18511C1 ::v1(){vfunc_called(this, "_ZN8S18511C12v1Ev");}
S18511C1 ::~S18511C1(){ note_dtor("S18511C1", this);} // tgen
S18511C1 ::S18511C1(){ note_ctor("S18511C1", this);} // tgen

static void Test_S18511C1()
{
  extern Class_Descriptor cd_S18511C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S18511C1, buf);
    S18511C1 *dp, &lv = *(dp=new (buf) S18511C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S18511C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18511C1)");
    check_field_offset(lv, s18511c1f0, ABISELECT(8,4), "S18511C1.s18511c1f0");
    check_field_offset(lv, s18511c1f1, ABISELECT(16,12), "S18511C1.s18511c1f1");
    check_field_offset(lv, s18511c1f2, ABISELECT(24,16), "S18511C1.s18511c1f2");
    test_class_info(&lv, &cd_S18511C1);
    dp->~S18511C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18511C1(Test_S18511C1, "S18511C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S18511C1C1Ev();
extern void _ZN8S18511C1D1Ev();
Name_Map name_map_S18511C1[] = {
  NSPAIR(_ZN8S18511C1C1Ev),
  NSPAIR(_ZN8S18511C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18511C1[];
extern void _ZN8S18511C12v1Ev();
static  VTBL_ENTRY vtc_S18511C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18511C1[0]),
  (VTBL_ENTRY)&_ZN8S18511C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18511C1[];
extern  VTBL_ENTRY _ZTV8S18511C1[];
Class_Descriptor cd_S18511C1 = {  "S18511C1", // class name
  0,0,//no base classes
  &(vtc_S18511C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S18511C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18511C1),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  S10591C1  {
  char s10591c1f0[128];
  int s10591c1f1[2];
  void *s10591c1f2;
};
//SIG(1 S10591C1) C1{ Fc[128] Fi[2] Fp}



static void Test_S10591C1()
{
  {
    init_simple_test("S10591C1");
    S10591C1 lv;
    check2(sizeof(lv), ABISELECT(144,140), "sizeof(S10591C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10591C1)");
    check_field_offset(lv, s10591c1f0, 0, "S10591C1.s10591c1f0");
    check_field_offset(lv, s10591c1f1, 128, "S10591C1.s10591c1f1");
    check_field_offset(lv, s10591c1f2, 136, "S10591C1.s10591c1f2");
  }
}
static Arrange_To_Call_Me vS10591C1(Test_S10591C1, "S10591C1", ABISELECT(144,140));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13341C2_nt  {
  int s13341c2f0[3];
};
//SIG(-1 S13341C2_nt) C1{ Fi[3]}



//skip512 S13341C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13341C1  {
  int s13341c1f0[3];
  ::S13341C2_nt s13341c1f1;
};
//SIG(1 S13341C1) C1{ Fi[3] FC2{ Fi[3]}}



static void Test_S13341C1()
{
  {
    init_simple_test("S13341C1");
    S13341C1 lv;
    check2(sizeof(lv), 24, "sizeof(S13341C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13341C1)");
    check_field_offset(lv, s13341c1f0, 0, "S13341C1.s13341c1f0");
    check_field_offset(lv, s13341c1f1, 12, "S13341C1.s13341c1f1");
  }
}
static Arrange_To_Call_Me vS13341C1(Test_S13341C1, "S13341C1", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19836C3  : virtual S3600C19 {
  ~S19836C3(); // tgen
  S19836C3(); // tgen
};
//SIG(-1 S19836C3) C1{ VBC2{ m}}


S19836C3 ::~S19836C3(){ note_dtor("S19836C3", this);} // tgen
S19836C3 ::S19836C3(){ note_ctor("S19836C3", this);} // tgen

static void Test_S19836C3()
{
  extern Class_Descriptor cd_S19836C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19836C3, buf);
    S19836C3 *dp, &lv = *(dp=new (buf) S19836C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19836C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19836C3)");
    check_base_class_offset(lv, (S3600C19*), 0, "S19836C3");
    test_class_info(&lv, &cd_S19836C3);
    dp->~S19836C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19836C3(Test_S19836C3, "S19836C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19836C3C1Ev();
extern void _ZN8S19836C3D1Ev();
Name_Map name_map_S19836C3[] = {
  NSPAIR(_ZN8S19836C3C1Ev),
  NSPAIR(_ZN8S19836C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S19836C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19836C3[];
static  VTBL_ENTRY vtc_S19836C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19836C3[0]),
};
extern VTBL_ENTRY _ZTV8S19836C3[];
static  VTT_ENTRY vtt_S19836C3[] = {
  {&(_ZTV8S19836C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19836C3[];
extern  VTBL_ENTRY _ZTV8S19836C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19836C3[];
Class_Descriptor cd_S19836C3 = {  "S19836C3", // class name
  bases_S19836C3, 1,
  &(vtc_S19836C3[0]), // expected_vtbl_contents
  &(vtt_S19836C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19836C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19836C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19836C3),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  S19836C1  : virtual S3600C19 , S19836C3 {
  ~S19836C1(); // tgen
  S19836C1(); // tgen
};
//SIG(1 S19836C1) C1{ VBC2{ m} BC3{ VBC2}}


S19836C1 ::~S19836C1(){ note_dtor("S19836C1", this);} // tgen
S19836C1 ::S19836C1(){ note_ctor("S19836C1", this);} // tgen

static void Test_S19836C1()
{
  extern Class_Descriptor cd_S19836C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19836C1, buf);
    S19836C1 *dp, &lv = *(dp=new (buf) S19836C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19836C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19836C1)");
    check_base_class_offset(lv, (S3600C19*), 0, "S19836C1");
    check_base_class_offset(lv, (S3600C19*)(S19836C3*), 0, "S19836C1");
    check_base_class_offset(lv, (S19836C3*), 0, "S19836C1");
    test_class_info(&lv, &cd_S19836C1);
    dp->~S19836C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19836C1(Test_S19836C1, "S19836C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19836C1C1Ev();
extern void _ZN8S19836C1D1Ev();
Name_Map name_map_S19836C1[] = {
  NSPAIR(_ZN8S19836C1C1Ev),
  NSPAIR(_ZN8S19836C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
extern Class_Descriptor cd_S19836C3;
extern VTBL_ENTRY _ZTI8S19836C3[];
extern  VTBL_ENTRY _ZTV8S19836C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19836C3[];
static Base_Class bases_S19836C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19836C3,    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 _ZTI8S19836C1[];
static  VTBL_ENTRY vtc_S19836C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19836C1[0]),
};
extern VTBL_ENTRY _ZTV8S19836C1[];
static  VTBL_ENTRY _tg__ZTV8S19836C3__8S19836C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19836C3[0]),
};
static  VTT_ENTRY vtt_S19836C1[] = {
  {&(_ZTV8S19836C1[3]),  3,3},
  {&(_tg__ZTV8S19836C3__8S19836C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19836C1[];
extern  VTBL_ENTRY _ZTV8S19836C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19836C1[];
Class_Descriptor cd_S19836C1 = {  "S19836C1", // class name
  bases_S19836C1, 2,
  &(vtc_S19836C1[0]), // expected_vtbl_contents
  &(vtt_S19836C1[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19836C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19836C1),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19836C1),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  S11792C1  {
  ::S13714C14_nt s11792c1f0;
  int s11792c1f1;
  char s11792c1f2[4];
};
//SIG(1 S11792C1) C1{ FC2{ FL} Fi Fc[4]}



static void Test_S11792C1()
{
  {
    init_simple_test("S11792C1");
    S11792C1 lv;
    check2(sizeof(lv), 16, "sizeof(S11792C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11792C1)");
    check_field_offset(lv, s11792c1f0, 0, "S11792C1.s11792c1f0");
    check_field_offset(lv, s11792c1f1, 8, "S11792C1.s11792c1f1");
    check_field_offset(lv, s11792c1f2, 12, "S11792C1.s11792c1f2");
  }
}
static Arrange_To_Call_Me vS11792C1(Test_S11792C1, "S11792C1", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13524C1  {
  int s13524c1f0[5];
  char s13524c1f1;
  void *s13524c1f2;
  __tsi64 s13524c1f3;
};
//SIG(1 S13524C1) C1{ Fi[5] Fc Fp FL}



static void Test_S13524C1()
{
  {
    init_simple_test("S13524C1");
    S13524C1 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S13524C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13524C1)");
    check_field_offset(lv, s13524c1f0, 0, "S13524C1.s13524c1f0");
    check_field_offset(lv, s13524c1f1, 20, "S13524C1.s13524c1f1");
    check_field_offset(lv, s13524c1f2, 24, "S13524C1.s13524c1f2");
    check_field_offset(lv, s13524c1f3, ABISELECT(32,28), "S13524C1.s13524c1f3");
  }
}
static Arrange_To_Call_Me vS13524C1(Test_S13524C1, "S13524C1", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15239C1  {
  char s15239c1f0[32];
  int s15239c1f1[2];
  void  mf15239c1(); // _ZN8S15239C19mf15239c1Ev
};
//SIG(1 S15239C1) C1{ m Fc[32] Fi[2]}


void  S15239C1 ::mf15239c1(){}

static void Test_S15239C1()
{
  {
    init_simple_test("S15239C1");
    S15239C1 lv;
    check2(sizeof(lv), 40, "sizeof(S15239C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15239C1)");
    check_field_offset(lv, s15239c1f0, 0, "S15239C1.s15239c1f0");
    check_field_offset(lv, s15239c1f1, 32, "S15239C1.s15239c1f1");
  }
}
static Arrange_To_Call_Me vS15239C1(Test_S15239C1, "S15239C1", 40);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13648C1  {
  long s13648c1f0;
  char s13648c1f1[2];
  long s13648c1f2[3];
};
//SIG(1 S13648C1) C1{ Fl Fc[2] Fl[3]}



static void Test_S13648C1()
{
  {
    init_simple_test("S13648C1");
    S13648C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S13648C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13648C1)");
    check_field_offset(lv, s13648c1f0, 0, "S13648C1.s13648c1f0");
    check_field_offset(lv, s13648c1f1, ABISELECT(8,4), "S13648C1.s13648c1f1");
    check_field_offset(lv, s13648c1f2, ABISELECT(16,8), "S13648C1.s13648c1f2");
  }
}
static Arrange_To_Call_Me vS13648C1(Test_S13648C1, "S13648C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18117C1  {
  void *s18117c1f0[2];
  int s18117c1f1[5];
  void  mf18117c1(); // _ZN8S18117C19mf18117c1Ev
};
//SIG(1 S18117C1) C1{ m Fp[2] Fi[5]}


void  S18117C1 ::mf18117c1(){}

static void Test_S18117C1()
{
  {
    init_simple_test("S18117C1");
    S18117C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S18117C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18117C1)");
    check_field_offset(lv, s18117c1f0, 0, "S18117C1.s18117c1f0");
    check_field_offset(lv, s18117c1f1, ABISELECT(16,8), "S18117C1.s18117c1f1");
  }
}
static Arrange_To_Call_Me vS18117C1(Test_S18117C1, "S18117C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17688C1  {
  void *s17688c1f0;
  int s17688c1f1;
  char s17688c1f2;
  int s17688c1f3;
  void  mf17688c1(); // _ZN8S17688C19mf17688c1Ev
};
//SIG(1 S17688C1) C1{ m Fp Fi Fc Fi}


void  S17688C1 ::mf17688c1(){}

static void Test_S17688C1()
{
  {
    init_simple_test("S17688C1");
    S17688C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S17688C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17688C1)");
    check_field_offset(lv, s17688c1f0, 0, "S17688C1.s17688c1f0");
    check_field_offset(lv, s17688c1f1, ABISELECT(8,4), "S17688C1.s17688c1f1");
    check_field_offset(lv, s17688c1f2, ABISELECT(12,8), "S17688C1.s17688c1f2");
    check_field_offset(lv, s17688c1f3, ABISELECT(16,12), "S17688C1.s17688c1f3");
  }
}
static Arrange_To_Call_Me vS17688C1(Test_S17688C1, "S17688C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10800C1  {
  char s10800c1f0[291];
  int s10800c1f1[5];
};
//SIG(1 S10800C1) C1{ Fc[291] Fi[5]}



static void Test_S10800C1()
{
  {
    init_simple_test("S10800C1");
    S10800C1 lv;
    check2(sizeof(lv), 312, "sizeof(S10800C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10800C1)");
    check_field_offset(lv, s10800c1f0, 0, "S10800C1.s10800c1f0");
    check_field_offset(lv, s10800c1f1, 292, "S10800C1.s10800c1f1");
  }
}
static Arrange_To_Call_Me vS10800C1(Test_S10800C1, "S10800C1", 312);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5540C1  : S1566C34_nt {
  char s5540c1f0;
  int s5540c1f1;
};
//SIG(1 S5540C1) C1{ BC2{ Fi} Fc Fi}



static void Test_S5540C1()
{
  extern Class_Descriptor cd_S5540C1;
  void *lvp;
  {
    int buf[4];
    init_test(&cd_S5540C1, buf);
    S5540C1 &lv = *(new (buf) S5540C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 12, "sizeof(S5540C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5540C1)");
    check_base_class_offset(lv, (S1566C34_nt*), 0, "S5540C1");
    check_field_offset(lv, s5540c1f0, 4, "S5540C1.s5540c1f0");
    check_field_offset(lv, s5540c1f1, 8, "S5540C1.s5540c1f1");
    test_class_info(&lv, &cd_S5540C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5540C1(Test_S5540C1, "S5540C1", 12);

#else // __cplusplus

extern Class_Descriptor cd_S1566C34_nt;
extern VTBL_ENTRY _ZTI11S1566C34_nt[];
static Base_Class bases_S5540C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1566C34_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_S5540C1 = {  "S5540C1", // class name
  bases_S5540C1, 1,
  0, // no vftv
  0, //no vtt
  12, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6211C1  : S3600C19 {
  int s6211c1f0[5];
};
//SIG(1 S6211C1) C1{ BC2{ m} Fi[5]}



static void Test_S6211C1()
{
  extern Class_Descriptor cd_S6211C1;
  void *lvp;
  {
    int buf[6];
    init_test(&cd_S6211C1, buf);
    S6211C1 &lv = *(new (buf) S6211C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 20, "sizeof(S6211C1)");
    check2(__alignof__(lv), 4, "__alignof__(S6211C1)");
    check_base_class_offset(lv, (S3600C19*), 0, "S6211C1");
    check_field_offset(lv, s6211c1f0, 0, "S6211C1.s6211c1f0");
    test_class_info(&lv, &cd_S6211C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6211C1(Test_S6211C1, "S6211C1", 20);

#else // __cplusplus

extern Class_Descriptor cd_S3600C19;
extern VTBL_ENTRY _ZTI8S3600C19[];
static Base_Class bases_S6211C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6211C1 = {  "S6211C1", // class name
  bases_S6211C1, 1,
  0, // no vftv
  0, //no vtt
  20, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12724C1  {
  int s12724c1f0;
  void *s12724c1f1;
  long s12724c1f2[3];
};
//SIG(1 S12724C1) C1{ Fi Fp Fl[3]}



static void Test_S12724C1()
{
  {
    init_simple_test("S12724C1");
    S12724C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S12724C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12724C1)");
    check_field_offset(lv, s12724c1f0, 0, "S12724C1.s12724c1f0");
    check_field_offset(lv, s12724c1f1, ABISELECT(8,4), "S12724C1.s12724c1f1");
    check_field_offset(lv, s12724c1f2, ABISELECT(16,8), "S12724C1.s12724c1f2");
  }
}
static Arrange_To_Call_Me vS12724C1(Test_S12724C1, "S12724C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16522C1  {
  long double s16522c1f0;
  ::S19426C9_nt s16522c1f1;
  void  mf16522c1(); // _ZN8S16522C19mf16522c1Ev
};
//SIG(1 S16522C1) C1{ m FD FU2{ m}}


void  S16522C1 ::mf16522c1(){}

static void Test_S16522C1()
{
  {
    init_simple_test("S16522C1");
    S16522C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S16522C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16522C1)");
    check_field_offset(lv, s16522c1f0, 0, "S16522C1.s16522c1f0");
    check_field_offset(lv, s16522c1f1, ABISELECT(16,12), "S16522C1.s16522c1f1");
  }
}
static Arrange_To_Call_Me vS16522C1(Test_S16522C1, "S16522C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15141C1  {
  char s15141c1f0;
  short s15141c1f1;
  int s15141c1f2;
  void  mf15141c1(); // _ZN8S15141C19mf15141c1Ev
};
//SIG(1 S15141C1) C1{ m Fc Fs Fi}


void  S15141C1 ::mf15141c1(){}

static void Test_S15141C1()
{
  {
    init_simple_test("S15141C1");
    S15141C1 lv;
    check2(sizeof(lv), 8, "sizeof(S15141C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15141C1)");
    check_field_offset(lv, s15141c1f0, 0, "S15141C1.s15141c1f0");
    check_field_offset(lv, s15141c1f1, 2, "S15141C1.s15141c1f1");
    check_field_offset(lv, s15141c1f2, 4, "S15141C1.s15141c1f2");
  }
}
static Arrange_To_Call_Me vS15141C1(Test_S15141C1, "S15141C1", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17424C1  {
  long s17424c1f0[5];
  void *s17424c1f1;
  void  mf17424c1(); // _ZN8S17424C19mf17424c1Ev
};
//SIG(1 S17424C1) C1{ m Fl[5] Fp}


void  S17424C1 ::mf17424c1(){}

static void Test_S17424C1()
{
  {
    init_simple_test("S17424C1");
    S17424C1 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S17424C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17424C1)");
    check_field_offset(lv, s17424c1f0, 0, "S17424C1.s17424c1f0");
    check_field_offset(lv, s17424c1f1, ABISELECT(40,20), "S17424C1.s17424c1f1");
  }
}
static Arrange_To_Call_Me vS17424C1(Test_S17424C1, "S17424C1", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12832C1  {
  int s12832c1f0;
  short s12832c1f1[3];
};
//SIG(1 S12832C1) C1{ Fi Fs[3]}



static void Test_S12832C1()
{
  {
    init_simple_test("S12832C1");
    S12832C1 lv;
    check2(sizeof(lv), 12, "sizeof(S12832C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12832C1)");
    check_field_offset(lv, s12832c1f0, 0, "S12832C1.s12832c1f0");
    check_field_offset(lv, s12832c1f1, 4, "S12832C1.s12832c1f1");
  }
}
static Arrange_To_Call_Me vS12832C1(Test_S12832C1, "S12832C1", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15261C1  {
  char s15261c1f0[60];
  void  mf15261c1(); // _ZN8S15261C19mf15261c1Ev
};
//SIG(1 S15261C1) C1{ m Fc[60]}


void  S15261C1 ::mf15261c1(){}

static void Test_S15261C1()
{
  {
    init_simple_test("S15261C1");
    S15261C1 lv;
    check2(sizeof(lv), 60, "sizeof(S15261C1)");
    check2(__alignof__(lv), 1, "__alignof__(S15261C1)");
    check_field_offset(lv, s15261c1f0, 0, "S15261C1.s15261c1f0");
  }
}
static Arrange_To_Call_Me vS15261C1(Test_S15261C1, "S15261C1", 60);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16871C1  {
  int s16871c1f0;
  long s16871c1f1;
  void  mf16871c1(); // _ZN8S16871C19mf16871c1Ev
};
//SIG(1 S16871C1) C1{ m Fi Fl}


void  S16871C1 ::mf16871c1(){}

static void Test_S16871C1()
{
  {
    init_simple_test("S16871C1");
    S16871C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S16871C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16871C1)");
    check_field_offset(lv, s16871c1f0, 0, "S16871C1.s16871c1f0");
    check_field_offset(lv, s16871c1f1, ABISELECT(8,4), "S16871C1.s16871c1f1");
  }
}
static Arrange_To_Call_Me vS16871C1(Test_S16871C1, "S16871C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10796C1  {
  char s10796c1f0[28];
};
//SIG(1 S10796C1) C1{ Fc[28]}



static void Test_S10796C1()
{
  {
    init_simple_test("S10796C1");
    S10796C1 lv;
    check2(sizeof(lv), 28, "sizeof(S10796C1)");
    check2(__alignof__(lv), 1, "__alignof__(S10796C1)");
    check_field_offset(lv, s10796c1f0, 0, "S10796C1.s10796c1f0");
  }
}
static Arrange_To_Call_Me vS10796C1(Test_S10796C1, "S10796C1", 28);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

